From 532ae591db5b5f020abf60609ded0d2d32b76d86 Mon Sep 17 00:00:00 2001
From: latham <latham@ispconfig3>
Date: Fri, 8 Apr 2011 19:50:11 +0000
Subject: [PATCH] Remove DOS line returns lathama

---
 docs/INSTALL_FEDORA_9.txt                     |  430 +-
 docs/INSTALL_OPENSUSE_11.txt                  |  402 +-
 docs/INSTALL_OPENSUSE_11_1.txt                |  420 +-
 .../setup_in_openvz/diff_openssl.cnf          |   50 +-
 .../setup_in_openvz/install_server.sh         |  122 +-
 .../recreate_ssh_and_hostname.sh              |   36 +-
 install/autoupdate.php                        |  628 +--
 install/dist/conf/debian40.conf.php           |  390 +-
 install/dist/conf/debian60.conf.php           |  390 +-
 install/install.php                           |  980 ++--
 install/lib/installer_base.lib.php            | 3564 ++++++------
 install/sql/README.txt                        |   78 +-
 install/sql/incremental/upd_0007.sql          |   36 +-
 install/update.php                            |  716 +--
 interface/index.htm                           |   16 +-
 interface/lib/classes/auth.inc.php            |  256 +-
 interface/lib/classes/form.inc.php            |  948 ++--
 interface/lib/classes/functions.inc.php       |  220 +-
 interface/lib/classes/plugin_base.inc.php     |  126 +-
 .../lib/classes/plugin_dbhistory.inc.php      |  136 +-
 interface/lib/classes/remoting.inc.php        | 4992 ++++++++---------
 interface/lib/classes/session.inc.php         |  256 +-
 interface/lib/classes/tpl_cache.inc.php       |  370 +-
 interface/lib/classes/tpl_error.inc.php       |  182 +-
 interface/lib/classes/validate_dns.inc.php    |  572 +-
 interface/web/admin/form/firewall.tform.php   |  222 +-
 .../web/admin/form/remote_user.tform.php      |  318 +-
 .../web/admin/form/system_config.tform.php    |  540 +-
 interface/web/admin/form/users.tform.php      |  910 +--
 .../web/admin/lib/lang/en_server_config.lng   |  162 +-
 interface/web/admin/lib/lang/en_users.lng     |   56 +-
 .../web/admin/templates/firewall_edit.htm     |   76 +-
 interface/web/admin/templates/groups_edit.htm |   52 +-
 .../web/admin/templates/language_add.htm      |   64 +-
 .../web/admin/templates/language_edit.htm     |   64 +-
 .../web/admin/templates/language_list.htm     |   94 +-
 .../templates/remote_action_ispcupdate.htm    |   50 +-
 .../templates/remote_action_osupdate.htm      |   50 +-
 .../templates/server_config_cron_edit.htm     |   60 +-
 .../templates/server_config_fastcgi_edit.htm  |   92 +-
 .../templates/server_config_getmail_edit.htm  |   44 +-
 .../templates/server_config_jailkit_edit.htm  |   68 +-
 .../templates/server_config_vlogger_edit.htm  |   44 +-
 .../admin/templates/server_edit_config.htm    |   44 +-
 .../web/admin/templates/server_ip_edit.htm    |   68 +-
 .../templates/software_package_install.htm    |   58 +-
 .../admin/templates/software_package_list.htm |   92 +-
 .../admin/templates/software_repo_edit.htm    |   80 +-
 .../admin/templates/software_update_list.htm  |   98 +-
 .../web/admin/templates/users_groups_edit.htm |   60 +-
 .../web/admin/templates/users_user_edit.htm   |  134 +-
 interface/web/capp.php                        |  110 +-
 interface/web/client/form/client.tform.php    | 1720 +++---
 .../web/client/form/client_template.tform.php | 1048 ++--
 interface/web/client/form/reseller.tform.php  | 1622 +++---
 interface/web/client/lib/admin.conf.php       |    2 +-
 .../client/templates/client_edit_address.htm  |  228 +-
 .../client/templates/client_edit_limits.htm   |  404 +-
 .../templates/client_template_edit_limits.htm |  272 +-
 .../client_template_edit_template.htm         |   56 +-
 .../client/templates/reseller_edit_limits.htm |  374 +-
 interface/web/dashboard/dashlets/limits.php   |  354 +-
 interface/web/dashboard/dashlets/modules.php  |  108 +-
 .../web/dashboard/lib/custom_menu.inc.php     |  152 +-
 .../web/dashboard/templates/custom_menu.htm   |   14 +-
 interface/web/designer/lib/admin.conf.php     |    6 +-
 .../web/designer/lib/lang/cz_module_edit.lng  |   20 +-
 .../web/designer/lib/lang/fr_module_edit.lng  |    4 +-
 .../web/designer/lib/lang/id_module_edit.lng  |   20 +-
 .../web/designer/lib/lang/nl_module_edit.lng  |   20 +-
 .../web/designer/lib/lang/pl_module_edit.lng  |   20 +-
 .../web/designer/templates/form_edit.htm      |  156 +-
 .../web/designer/templates/form_show.htm      |  120 +-
 .../web/designer/templates/paging.tpl.htm     |   16 +-
 interface/web/dns/dns_a_list.php              |   46 +-
 interface/web/dns/dns_rr_del.php              |  132 +-
 interface/web/dns/dns_slave_del.php           |  136 +-
 interface/web/dns/dns_soa_del.php             |  136 +-
 interface/web/dns/dns_template_del.php        |  114 +-
 interface/web/dns/dns_template_list.php       |   46 +-
 interface/web/dns/form/dns_template.tform.php |  200 +-
 interface/web/dns/lib/admin.conf.php          |    2 +-
 interface/web/dns/list/dns_template.list.php  |  158 +-
 .../web/dns/templates/dns_records_edit.htm    |   24 +-
 .../web/dns/templates/dns_template_edit.htm   |   76 +-
 interface/web/domain/lib/admin.conf.php       |   56 +-
 .../web/domain/lib/lang/en_domain_list.lng    |    8 +-
 .../help/templates/support_message_edit.htm   |   66 +-
 .../help/templates/support_message_view.htm   |   48 +-
 interface/web/index.php                       |   80 +-
 .../web/js/yui/datatable/assets/datatable.css |  152 +-
 interface/web/js/yui/logger/assets/logger.css |   40 +-
 .../web/login/templates/password_reset.htm    |   66 +-
 .../web/mail/form/mail_mailinglist.tform.php  |  242 +-
 interface/web/mail/lib/admin.conf.php         |    2 +-
 .../web/mail/lib/lang/en_mail_alias_list.lng  |   14 +-
 .../mail/lib/lang/en_mail_blacklist_list.lng  |   18 +-
 .../lib/lang/en_mail_domain_admin_list.lng    |   14 +-
 .../lib/lang/en_mail_domain_catchall_list.lng |   16 +-
 .../mail/lib/lang/en_mail_forward_list.lng    |   14 +-
 .../web/mail/lib/lang/en_mail_mailinglist.lng |   28 +-
 .../lib/lang/en_mail_mailinglist_list.lng     |    8 +-
 .../mail/lib/lang/en_mail_spamfilter_list.lng |   14 +-
 .../mail/lib/lang/en_mail_transport_list.lng  |   16 +-
 .../mail/lib/lang/en_mail_whitelist_list.lng  |   18 +-
 .../lib/lang/en_spamfilter_policy_list.lng    |   16 +-
 .../lib/lang/en_spamfilter_users_list.lng     |   18 +-
 .../lib/lang/en_spamfilter_whitelist_list.lng |   16 +-
 interface/web/mail/lib/lang/fr_mail_user.lng  |    4 +-
 .../web/mail/lib/lang/id_mail_alias_list.lng  |   14 +-
 interface/web/mail/lib/module.conf.php        |  398 +-
 .../web/mail/list/mail_mailinglist.list.php   |  132 +-
 interface/web/mail/mail_domain_del.php        |  194 +-
 interface/web/mail/mail_domain_edit.php       |  738 +--
 interface/web/mail/mail_mailinglist_del.php   |  114 +-
 interface/web/mail/mail_mailinglist_edit.php  |  512 +-
 interface/web/mail/mail_mailinglist_list.php  |   86 +-
 interface/web/mail/mailinglist.php            |  134 +-
 .../web/mail/templates/mail_alias_edit.htm    |   78 +-
 .../mail/templates/mail_blacklist_edit.htm    |   82 +-
 .../templates/mail_content_filter_edit.htm    |  100 +-
 .../mail/templates/mail_domain_admin_list.htm |   24 +-
 .../templates/mail_domain_catchall_edit.htm   |   76 +-
 .../web/mail/templates/mail_get_edit.htm      |  108 +-
 .../mail/templates/mail_mailinglist_edit.htm  |  160 +-
 .../mail/templates/mail_mailinglist_list.htm  |  106 +-
 .../templates/mail_relay_recipient_list.htm   |   18 +-
 .../mail/templates/mail_transport_edit.htm    |  112 +-
 .../templates/mail_user_custom_rules_edit.htm |   44 +-
 .../mail/templates/mail_user_stats_list.htm   |  104 +-
 .../mail/templates/mail_whitelist_edit.htm    |   82 +-
 .../templates/spamfilter_blacklist_edit.htm   |   98 +-
 .../spamfilter_config_getmail_edit.htm        |   44 +-
 .../templates/spamfilter_config_mail_edit.htm |  132 +-
 .../spamfilter_config_server_edit.htm         |   76 +-
 .../mail/templates/spamfilter_other_edit.htm  |  160 +-
 .../mail/templates/spamfilter_policy_edit.htm |  128 +-
 .../templates/spamfilter_quarantine_edit.htm  |   88 +-
 .../templates/spamfilter_taglevel_edit.htm    |  104 +-
 .../mail/templates/spamfilter_users_edit.htm  |  100 +-
 .../templates/spamfilter_whitelist_edit.htm   |   98 +-
 interface/web/monitor/lib/admin.conf.php      |    2 +-
 .../web/monitor/templates/datalog_list.htm    |   98 +-
 interface/web/monitor/templates/show_data.htm |   24 +-
 interface/web/monitor/templates/show_log.htm  |   50 +-
 .../web/monitor/templates/show_sys_state.htm  |   50 +-
 .../web/monitor/templates/syslog_list.htm     |  112 +-
 interface/web/nav.php                         |  228 +-
 interface/web/sites/cron_del.php              |  126 +-
 interface/web/sites/cron_list.php             |   44 +-
 interface/web/sites/lib/admin.conf.php        |    2 +-
 .../sites/lib/lang/en_database_admin_list.lng |   18 +-
 .../lib/lang/en_user_quota_stats_list.lng     |   14 +-
 .../web/sites/lib/lang/en_web_domain.lng      |  148 +-
 .../lib/lang/en_web_domain_admin_list.lng     |   16 +-
 interface/web/sites/templates/cron_edit.htm   |  136 +-
 .../sites/templates/database_admin_list.htm   |   36 +-
 .../web/sites/templates/ftp_user_advanced.htm |  100 +-
 .../templates/ftp_user_advanced_client.htm    |   44 +-
 .../web/sites/templates/ftp_user_edit.htm     |   96 +-
 .../sites/templates/shell_user_advanced.htm   |   68 +-
 .../web/sites/templates/shell_user_edit.htm   |  132 +-
 .../sites/templates/user_quota_stats_list.htm |   12 +-
 .../sites/templates/web_aliasdomain_edit.htm  |  112 +-
 .../sites/templates/web_domain_admin_list.htm |   30 +-
 .../sites/templates/web_domain_redirect.htm   |   56 +-
 .../sites/templates/web_subdomain_edit.htm    |   84 +-
 .../web/sites/templates/webdav_user_edit.htm  |  116 +-
 interface/web/temp/en.lng                     |  302 +-
 interface/web/themes/default/css/central.css  |   64 +-
 .../themes/default/css/patches/central.css    |   74 +-
 .../themes/default/css/print/print_100.css    |   62 +-
 .../css/screen/basemod_2col_left_seo.css      |   96 +-
 .../web/themes/default/css/screen/content.css |  376 +-
 .../default/css/screen/uni-form-generic.css   |  270 +-
 interface/web/themes/default/licences.txt     |   16 +-
 .../themes/default/templates/module.tpl.htm   |   72 +-
 .../default/templates/module_tree.tpl.htm     |   74 +-
 .../themes/default/templates/sidenav.tpl.htm  |   48 +-
 .../default/templates/tabbed_form.tpl.htm     |   56 +-
 .../themes/default/templates/topnav.tpl.htm   |   18 +-
 .../web/themes/default/yaml/!important.txt    |    8 +-
 .../web/themes/default/yaml/core/base.css     |  458 +-
 .../web/themes/default/yaml/core/iehacks.css  |  620 +-
 .../themes/default/yaml/core/print_base.css   |  240 +-
 .../themes/default/yaml/core/slim_base.css    |   98 +-
 .../themes/default/yaml/core/slim_iehacks.css |   70 +-
 .../default/yaml/core/slim_print_base.css     |   40 +-
 .../web/themes/default/yaml/debug/debug.css   |  314 +-
 .../default/yaml/navigation/nav_vlist.css     |  216 +-
 .../yaml/patches/patch_layout_draft.css       |   58 +-
 .../default/yaml/patches/patch_nav_vlist.css  |  122 +-
 .../default/yaml/print/print_003_draft.css    |   62 +-
 .../default/yaml/print/print_020_draft.css    |   60 +-
 .../default/yaml/print/print_023_draft.css    |   80 +-
 .../default/yaml/print/print_100_draft.css    |   62 +-
 .../default/yaml/print/print_103_draft.css    |   74 +-
 .../default/yaml/print/print_120_draft.css    |   78 +-
 .../default/yaml/print/print_123_draft.css    |   78 +-
 .../default/yaml/screen/basemod_draft.css     |  138 +-
 .../default/yaml/screen/content_default.css   |  340 +-
 .../default_64_navimg/css/additional.css      |  118 +-
 .../default_no_navimg/css/additional.css      |  118 +-
 .../web/tools/form/user_settings.tform.php    |  328 +-
 .../web/tools/templates/user_settings.htm     |   88 +-
 server/lib/classes/tpl_cache.inc.php          |  370 +-
 server/lib/classes/tpl_error.inc.php          |  182 +-
 server/mods-available/mail_module.inc.php     |  322 +-
 .../remoteaction_core_module.inc.php          |  406 +-
 .../plugins-available/mailman_plugin.inc.php  |  310 +-
 210 files changed, 21095 insertions(+), 21095 deletions(-)

diff --git a/docs/INSTALL_FEDORA_9.txt b/docs/INSTALL_FEDORA_9.txt
index 13bce90bd8..7f1531fabd 100644
--- a/docs/INSTALL_FEDORA_9.txt
+++ b/docs/INSTALL_FEDORA_9.txt
@@ -1,215 +1,215 @@
-
-Installation
------------
-
-It is recommended to use a clean (fresh) Fedora install. Then follow the steps below to setup your server with ISPConfig 3:
-
-Installation of some basic requirements:
-
-rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
-yum update
-yum groupinstall 'Development Tools'
-yum groupinstall 'Development Libraries'
-
-You should disable selinux now, as some programs will not start when selinux is enabled:
-
-vi /etc/selinux/config
-
-and set:
-
-SELINUX=disabled
-
-then reboot the server.
-
-
-1) Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin with the following command line (on one line!):
-
-yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel getmail
-
-useradd -m -s /bin/bash compileuser
-passwd compileuser
-
-visudo
-
-## Allow root to run any commands anywhere
-root    ALL=(ALL)       ALL
-compileuser   ALL=(ALL)       ALL
-
-
-su compileuser
-
-mkdir $HOME/rpm
-mkdir $HOME/rpm/SOURCES
-mkdir $HOME/rpm/SPECS
-mkdir $HOME/rpm/BUILD
-mkdir $HOME/rpm/SRPMS
-mkdir $HOME/rpm/RPMS
-mkdir $HOME/rpm/RPMS/i386
-
-echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
-
-
-wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.61.0.tar.bz2
-wget http://prdownloads.sourceforge.net/courier/courier-imap-4.4.1.tar.bz2
-wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2
-
-sudo rpmbuild -ta courier-authlib-0.61.0.tar.bz2
-
-sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-authlib-0.61.0-1.fc9.i386.rpm
-sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-authlib-mysql-0.61.0-1.fc9.i386.rpm
-sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-authlib-devel-0.61.0-1.fc9.i386.rpm
-
-rpmbuild -ta courier-imap-4.4.1.tar.bz2
-
-sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-imap-4.4.1-1.9.i386.rpm
-
-sudo rpmbuild -ta maildrop-2.0.4.tar.bz2
-
-sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/maildrop-2.0.4-1.9.i386.rpm
-
-exit
-
-yum install postfix
-
-chkconfig --levels 235 mysqld on
-/etc/init.d/mysqld start
-
-chkconfig --levels 235 httpd on
-/etc/init.d/httpd start
-
-chkconfig --levels 235 courier-authlib on
-/etc/init.d/courier-authlib start
-
-chkconfig --levels 235 sendmail off
-chkconfig --levels 235 postfix on
-chkconfig --levels 235 saslauthd on
-/etc/init.d/sendmail stop
-/etc/init.d/postfix start
-/etc/init.d/saslauthd start
-
-chkconfig --levels 235 courier-imap on
-/etc/init.d/courier-authlib restart
-/etc/init.d/courier-imap restart
-
-
-Set the mysql database password:
-
-mysqladmin -u root password yourrootsqlpassword
-mysqladmin -h ispconfig.local -u root password yourrootsqlpassword
-
-
-2) Install Amavisd-new, Spamassassin and Clamav (1 line!):
-
-yum install amavisd-new spamassassin clamav clamav-data clamav-server clamav-update unzip bzip2 unrar
-
-chkconfig --levels 235 amavisd on
-chkconfig --levels 235 clamd.amavisd on
-/usr/bin/freshclam
-/etc/init.d/amavisd start
-/etc/init.d/clamd.amavisd start
-
-3) Install apache, PHP5 and phpmyadmin (1 line!):
-
-yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mhash php-mssql php-shout php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel phpmyadmin
-
-
-4) Install pure-ftpd and quota
-
-yum install pure-ftpd quota
-
-chkconfig --levels 235 pure-ftpd on
-
-5) Install mydns
-
-rpm -i http://mydns.bboy.net/download/mydns-mysql-1.1.0-1.i386.rpm
-
-chkconfig --levels 235 mydns on
-
-6) Install vlogger and webalizer
-
-yum install webalizer perl-DateTime-Format-HTTP perl-DateTime-Format-Builder
-
-cd /tmp
-wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
-tar xvfz vlogger-1.3.tar.gz
-mv vlogger-1.3/vlogger /usr/sbin/
-rm -rf vlogger*
-
-7) Configure the firewall
-
-Now you should switch off the firewall by running:
-
-system-config-firewall-tui
-
-ISPConfig comes with a iptables bsed firewall script that can be meneged from within the ispconfig interface.
-
-
-8) Install ISPConfig 3
-
-There are two possile scenarios, but not both:
-8.1) Install the latest released version 
-8.2) Install directly from SVN
-
-8.1) Installation of beta 3 from tar.gz
-
-  cd /tmp
-  wget http://www.ispconfig.org/downloads/ISPConfig-3.0.0.9-rc2.tar.gz
-  tar xvfz ISPConfig-3.0.0.9-rc2.tar.gz
-  cd ispconfig3_install/install/
-
-8.2) Installation from SVN
-
-  yum install subversion
-  cd /tmp
-  svn export svn://svn.ispconfig.org/ispconfig3/trunk/
-  cd trunk/install
-
-
-8.1+8.2) Now proceed with the ISPConfig installation.
-
-Now start the installation process by executing:
-
-php -q install.php
-
-The installer will configure all services like postfix, sasl, courier, etc. for you. A manual setup as required for ISPConfig 2 (perfect setup guides) is not necessary. To login to the ISPConfig controlpanel, open the following URL in your browser (replace the IP to match your settings!):
-
-http://192.168.0.100:8080/
-
-the default login is:
-
-user: admin
-password: admin
-
-In case you get a permission denied error from apache, please restart the apache webserver process.
-
-Optional:
-
-Install a webbased Email Client
-
-yum install squirrelmail
-
-
-----------------------------------------------------------------------------------------------------------
-
-Hints:
-
-debian 4.0 under openvz:
-
-VPSID=101
-for CAP in CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE
-do
-  vzctl set $VPSID --capability ${CAP}:on --save
-done
-
-----------------------------------------------------------------------------------------------------------
-
-Installing Jailkit:
-
-cd /tmp
-wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
-tar xvfz jailkit-2.5.tar.gz
-cd jailkit-2.5
-./configure
-make
-make install
-rm -rf jailkit-2.5*
+
+Installation
+-----------
+
+It is recommended to use a clean (fresh) Fedora install. Then follow the steps below to setup your server with ISPConfig 3:
+
+Installation of some basic requirements:
+
+rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
+yum update
+yum groupinstall 'Development Tools'
+yum groupinstall 'Development Libraries'
+
+You should disable selinux now, as some programs will not start when selinux is enabled:
+
+vi /etc/selinux/config
+
+and set:
+
+SELINUX=disabled
+
+then reboot the server.
+
+
+1) Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin with the following command line (on one line!):
+
+yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel getmail
+
+useradd -m -s /bin/bash compileuser
+passwd compileuser
+
+visudo
+
+## Allow root to run any commands anywhere
+root    ALL=(ALL)       ALL
+compileuser   ALL=(ALL)       ALL
+
+
+su compileuser
+
+mkdir $HOME/rpm
+mkdir $HOME/rpm/SOURCES
+mkdir $HOME/rpm/SPECS
+mkdir $HOME/rpm/BUILD
+mkdir $HOME/rpm/SRPMS
+mkdir $HOME/rpm/RPMS
+mkdir $HOME/rpm/RPMS/i386
+
+echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
+
+
+wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.61.0.tar.bz2
+wget http://prdownloads.sourceforge.net/courier/courier-imap-4.4.1.tar.bz2
+wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2
+
+sudo rpmbuild -ta courier-authlib-0.61.0.tar.bz2
+
+sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-authlib-0.61.0-1.fc9.i386.rpm
+sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-authlib-mysql-0.61.0-1.fc9.i386.rpm
+sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-authlib-devel-0.61.0-1.fc9.i386.rpm
+
+rpmbuild -ta courier-imap-4.4.1.tar.bz2
+
+sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/courier-imap-4.4.1-1.9.i386.rpm
+
+sudo rpmbuild -ta maildrop-2.0.4.tar.bz2
+
+sudo rpm -ivh /home/compileuser/rpm/RPMS/i386/maildrop-2.0.4-1.9.i386.rpm
+
+exit
+
+yum install postfix
+
+chkconfig --levels 235 mysqld on
+/etc/init.d/mysqld start
+
+chkconfig --levels 235 httpd on
+/etc/init.d/httpd start
+
+chkconfig --levels 235 courier-authlib on
+/etc/init.d/courier-authlib start
+
+chkconfig --levels 235 sendmail off
+chkconfig --levels 235 postfix on
+chkconfig --levels 235 saslauthd on
+/etc/init.d/sendmail stop
+/etc/init.d/postfix start
+/etc/init.d/saslauthd start
+
+chkconfig --levels 235 courier-imap on
+/etc/init.d/courier-authlib restart
+/etc/init.d/courier-imap restart
+
+
+Set the mysql database password:
+
+mysqladmin -u root password yourrootsqlpassword
+mysqladmin -h ispconfig.local -u root password yourrootsqlpassword
+
+
+2) Install Amavisd-new, Spamassassin and Clamav (1 line!):
+
+yum install amavisd-new spamassassin clamav clamav-data clamav-server clamav-update unzip bzip2 unrar
+
+chkconfig --levels 235 amavisd on
+chkconfig --levels 235 clamd.amavisd on
+/usr/bin/freshclam
+/etc/init.d/amavisd start
+/etc/init.d/clamd.amavisd start
+
+3) Install apache, PHP5 and phpmyadmin (1 line!):
+
+yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mhash php-mssql php-shout php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel phpmyadmin
+
+
+4) Install pure-ftpd and quota
+
+yum install pure-ftpd quota
+
+chkconfig --levels 235 pure-ftpd on
+
+5) Install mydns
+
+rpm -i http://mydns.bboy.net/download/mydns-mysql-1.1.0-1.i386.rpm
+
+chkconfig --levels 235 mydns on
+
+6) Install vlogger and webalizer
+
+yum install webalizer perl-DateTime-Format-HTTP perl-DateTime-Format-Builder
+
+cd /tmp
+wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
+tar xvfz vlogger-1.3.tar.gz
+mv vlogger-1.3/vlogger /usr/sbin/
+rm -rf vlogger*
+
+7) Configure the firewall
+
+Now you should switch off the firewall by running:
+
+system-config-firewall-tui
+
+ISPConfig comes with a iptables bsed firewall script that can be meneged from within the ispconfig interface.
+
+
+8) Install ISPConfig 3
+
+There are two possile scenarios, but not both:
+8.1) Install the latest released version 
+8.2) Install directly from SVN
+
+8.1) Installation of beta 3 from tar.gz
+
+  cd /tmp
+  wget http://www.ispconfig.org/downloads/ISPConfig-3.0.0.9-rc2.tar.gz
+  tar xvfz ISPConfig-3.0.0.9-rc2.tar.gz
+  cd ispconfig3_install/install/
+
+8.2) Installation from SVN
+
+  yum install subversion
+  cd /tmp
+  svn export svn://svn.ispconfig.org/ispconfig3/trunk/
+  cd trunk/install
+
+
+8.1+8.2) Now proceed with the ISPConfig installation.
+
+Now start the installation process by executing:
+
+php -q install.php
+
+The installer will configure all services like postfix, sasl, courier, etc. for you. A manual setup as required for ISPConfig 2 (perfect setup guides) is not necessary. To login to the ISPConfig controlpanel, open the following URL in your browser (replace the IP to match your settings!):
+
+http://192.168.0.100:8080/
+
+the default login is:
+
+user: admin
+password: admin
+
+In case you get a permission denied error from apache, please restart the apache webserver process.
+
+Optional:
+
+Install a webbased Email Client
+
+yum install squirrelmail
+
+
+----------------------------------------------------------------------------------------------------------
+
+Hints:
+
+debian 4.0 under openvz:
+
+VPSID=101
+for CAP in CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE
+do
+  vzctl set $VPSID --capability ${CAP}:on --save
+done
+
+----------------------------------------------------------------------------------------------------------
+
+Installing Jailkit:
+
+cd /tmp
+wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
+tar xvfz jailkit-2.5.tar.gz
+cd jailkit-2.5
+./configure
+make
+make install
+rm -rf jailkit-2.5*
diff --git a/docs/INSTALL_OPENSUSE_11.txt b/docs/INSTALL_OPENSUSE_11.txt
index a9176cba00..de8c0a079a 100644
--- a/docs/INSTALL_OPENSUSE_11.txt
+++ b/docs/INSTALL_OPENSUSE_11.txt
@@ -1,201 +1,201 @@
-
-Installation
------------
-
-It is recommended to use a clean (fresh) OpenSUSE installatiom where you selected to install just the minimal packages. A Gnome or KDE desktop is not needed and will just slow down the server. Then follow the steps below to setup your server with ISPConfig 3:
-
-Install some basic packes and the compilers that we need later
-
-yast2 -i findutils readline libgcc glibc-devel findutils-locate gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim telnet cron iptables iputils man man-pages
-
-1) Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin with the following command line (on one line!):
-
-yast2 -i postfix postfix-mysql mysql mysql-client phpMyAdmin courier-imap courier-authlib courier-authlib-mysql python cron cyrus-sasl cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi cyrus-sasl-otp cyrus-sasl-plain cyrus-sasl-saslauthd libmysqlclient-devel
-
-chkconfig --add mysql
-/etc/init.d/mysql start
-
-chkconfig --add postfix
-/etc/init.d/postfix start
-
-chkconfig --add saslauthd
-/etc/init.d/saslauthd start
-
-chkconfig --add saslauthd
-/etc/init.d/saslauthd start
-
-chkconfig --add fam
-chkconfig --add courier-authdaemon
-chkconfig --add courier-pop
-chkconfig --add courier-imap
-/etc/init.d/courier-pop start
-/etc/init.d/courier-imap start
-chkconfig --add courier-pop-ssl
-chkconfig --add courier-imap-ssl
-/etc/init.d/courier-pop-ssl start
-/etc/init.d/courier-imap-ssl start
-
-cd /tmp
-wget http://download.opensuse.org/repositories/server:/mail/openSUSE_11.0/i586/getmail-4.7.6-1.4.i586.rpm
-rpm -i getmail-4.7.6-1.4.i586.rpm
-
-// Warnings like "warning: getmail-4.7.6-1.4.i586.rpm: Header V3 DSA signature: NOKEY, key ID 367fe7fc" can be ignored.
-
-// Install maildrop
-rpm --force -i http://download.opensuse.org/repositories/home%3A/cboltz/openSUSE_10.3/i586/maildrop-2.0.3-16.1.i586.rpm
-
-// Install pam_mysql
-
-yast2 -i pam-devel
-cd /tmp
-wget http://heanet.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.7RC1.tar.gz
-tar xvfz pam_mysql-0.7RC1.tar.gz
-cd pam_mysql-0.7RC1
-./configure
-make
-make install
-rm -rf pam_mysql-0.7RC1
-rm pam_mysql-0.7RC1.tar.gz
-
-// Set the mysql database password:
-
-mysqladmin -u root password yourrootsqlpassword
-mysqladmin -h ispconfig.local -u root password yourrootsqlpassword
-
-
-2) Install Amavisd-new, Spamassassin and Clamav (1 line!):
-
-yast2 -i amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql
-
-chkconfig --add amavis
-chkconfig --add clamd
-/etc/init.d/amavis start
-/etc/init.d/clamd start
-
-3) Install PHP5 modules (1 line!):
-
-yast2 -i php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl
-
-Then run the following to enable the Apache modules:
-
-a2enmod suexec
-a2enmod rewrite
-a2enmod ssl
-a2enmod actions
-
-chkconfig --add apache2
-/etc/init.d/apache2 start
-
-4) Install pure-ftpd and quota
-
-yast2 -i pure-ftpd quota
-
-// The current pure-ftpd package from SuSE is unstable and segfaults when a file is uploaded, 
-// we will replace it with a manually compiled package now:
-
-cd /tmp
-wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
-tar xvfz pure-ftpd-1.0.21.tar.gz
-cd pure-ftpd-1.0.21/
-./configure --sysconfdir=/etc/pure-ftpd --with-everything --with-mysql
-make
-make install
-mv /usr/sbin/pure-ftpd /usr/sbin/pure-ftpd.suse
-ln -s /usr/local/sbin/pure-ftpd /usr/sbin/pure-ftpd
-rm -rf pure-ftpd-1.0.21
-rm -f pure-ftpd-1.0.21.tar.gz
-
-chkconfig --add pure-ftpd
-/etc/init.d/pure-ftpd start
-
-
-5) Install mydns
-
-cd /tmp
-wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/server:/dns/SUSE_Factory/i586/mydns-mysql-1.1.0-3.72.i586.rpm
-wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/server:/dns/SUSE_Factory/i586/mydns-1.1.0-3.72.i586.rpm
-rpm -i mydns*.rpm
-rm -rf /tmp/mydns*
-
-chkconfig --add mydns
-
-6) Install vlogger and webalizer
-
-cd /tmp
-wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
-tar xvfz vlogger-1.3.tar.gz
-mv vlogger-1.3/vlogger /usr/sbin/
-rm -rf vlogger*
-
-
-yast2 -i webalizer perl-DateManip
-
-
-7) Install ISPConfig 3
-
-There are two possile scenarios, but not both:
-7.1) Install the latest released version 
-7.2) Install directly from SVN
-
-7.1) Installation of beta 3 from tar.gz
-
-  cd /tmp
-  wget http://www.ispconfig.org/downloads/ISPConfig-3.0.0.9-rc2.tar.gz
-  tar xvfz ISPConfig-3.0.0.9-rc2.tar.gz
-  cd ispconfig3_install/install/
-
-7.2) Installation from SVN
-
-  yast2 -i subversion
-  cd /tmp
-  svn export svn://svn.ispconfig.org/ispconfig3/trunk/
-  cd trunk/install
-
-
-7.1+7.2) Now proceed with the ISPConfig installation.
-
-Now start the installation process by executing:
-
-php -q install.php
-
-The installer will configure all services like postfix, sasl, courier, etc. for you. A manual setup as required for ISPConfig 2 (perfect setup guides) is not necessary. To login to the ISPConfig controlpanel, open the following URL in your browser (replace the IP to match your settings!):
-
-http://192.168.0.100:8080/
-
-the default login is:
-
-user: admin
-password: admin
-
-In case you get a permission denied error from apache, please restart the apache webserver process.
-
-Optional:
-
-Install a webbased Email Client
-
-yast2 -i squirrelmail
-
-----------------------------------------------------------------------------------------------------------
-
-Hints:
-
-debian 4.0 under openvz:
-
-VPSID=101
-for CAP in CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE
-do
-  vzctl set $VPSID --capability ${CAP}:on --save
-done
-
-----------------------------------------------------------------------------------------------------------
-
-Installing Jailkit:
-
-cd /tmp
-wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
-tar xvfz jailkit-2.5.tar.gz
-cd jailkit-2.5
-./configure
-make
-make install
-rm -rf jailkit-2.5*
+
+Installation
+-----------
+
+It is recommended to use a clean (fresh) OpenSUSE installatiom where you selected to install just the minimal packages. A Gnome or KDE desktop is not needed and will just slow down the server. Then follow the steps below to setup your server with ISPConfig 3:
+
+Install some basic packes and the compilers that we need later
+
+yast2 -i findutils readline libgcc glibc-devel findutils-locate gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim telnet cron iptables iputils man man-pages
+
+1) Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin with the following command line (on one line!):
+
+yast2 -i postfix postfix-mysql mysql mysql-client phpMyAdmin courier-imap courier-authlib courier-authlib-mysql python cron cyrus-sasl cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi cyrus-sasl-otp cyrus-sasl-plain cyrus-sasl-saslauthd libmysqlclient-devel
+
+chkconfig --add mysql
+/etc/init.d/mysql start
+
+chkconfig --add postfix
+/etc/init.d/postfix start
+
+chkconfig --add saslauthd
+/etc/init.d/saslauthd start
+
+chkconfig --add saslauthd
+/etc/init.d/saslauthd start
+
+chkconfig --add fam
+chkconfig --add courier-authdaemon
+chkconfig --add courier-pop
+chkconfig --add courier-imap
+/etc/init.d/courier-pop start
+/etc/init.d/courier-imap start
+chkconfig --add courier-pop-ssl
+chkconfig --add courier-imap-ssl
+/etc/init.d/courier-pop-ssl start
+/etc/init.d/courier-imap-ssl start
+
+cd /tmp
+wget http://download.opensuse.org/repositories/server:/mail/openSUSE_11.0/i586/getmail-4.7.6-1.4.i586.rpm
+rpm -i getmail-4.7.6-1.4.i586.rpm
+
+// Warnings like "warning: getmail-4.7.6-1.4.i586.rpm: Header V3 DSA signature: NOKEY, key ID 367fe7fc" can be ignored.
+
+// Install maildrop
+rpm --force -i http://download.opensuse.org/repositories/home%3A/cboltz/openSUSE_10.3/i586/maildrop-2.0.3-16.1.i586.rpm
+
+// Install pam_mysql
+
+yast2 -i pam-devel
+cd /tmp
+wget http://heanet.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.7RC1.tar.gz
+tar xvfz pam_mysql-0.7RC1.tar.gz
+cd pam_mysql-0.7RC1
+./configure
+make
+make install
+rm -rf pam_mysql-0.7RC1
+rm pam_mysql-0.7RC1.tar.gz
+
+// Set the mysql database password:
+
+mysqladmin -u root password yourrootsqlpassword
+mysqladmin -h ispconfig.local -u root password yourrootsqlpassword
+
+
+2) Install Amavisd-new, Spamassassin and Clamav (1 line!):
+
+yast2 -i amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql
+
+chkconfig --add amavis
+chkconfig --add clamd
+/etc/init.d/amavis start
+/etc/init.d/clamd start
+
+3) Install PHP5 modules (1 line!):
+
+yast2 -i php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl
+
+Then run the following to enable the Apache modules:
+
+a2enmod suexec
+a2enmod rewrite
+a2enmod ssl
+a2enmod actions
+
+chkconfig --add apache2
+/etc/init.d/apache2 start
+
+4) Install pure-ftpd and quota
+
+yast2 -i pure-ftpd quota
+
+// The current pure-ftpd package from SuSE is unstable and segfaults when a file is uploaded, 
+// we will replace it with a manually compiled package now:
+
+cd /tmp
+wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
+tar xvfz pure-ftpd-1.0.21.tar.gz
+cd pure-ftpd-1.0.21/
+./configure --sysconfdir=/etc/pure-ftpd --with-everything --with-mysql
+make
+make install
+mv /usr/sbin/pure-ftpd /usr/sbin/pure-ftpd.suse
+ln -s /usr/local/sbin/pure-ftpd /usr/sbin/pure-ftpd
+rm -rf pure-ftpd-1.0.21
+rm -f pure-ftpd-1.0.21.tar.gz
+
+chkconfig --add pure-ftpd
+/etc/init.d/pure-ftpd start
+
+
+5) Install mydns
+
+cd /tmp
+wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/server:/dns/SUSE_Factory/i586/mydns-mysql-1.1.0-3.72.i586.rpm
+wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/server:/dns/SUSE_Factory/i586/mydns-1.1.0-3.72.i586.rpm
+rpm -i mydns*.rpm
+rm -rf /tmp/mydns*
+
+chkconfig --add mydns
+
+6) Install vlogger and webalizer
+
+cd /tmp
+wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
+tar xvfz vlogger-1.3.tar.gz
+mv vlogger-1.3/vlogger /usr/sbin/
+rm -rf vlogger*
+
+
+yast2 -i webalizer perl-DateManip
+
+
+7) Install ISPConfig 3
+
+There are two possile scenarios, but not both:
+7.1) Install the latest released version 
+7.2) Install directly from SVN
+
+7.1) Installation of beta 3 from tar.gz
+
+  cd /tmp
+  wget http://www.ispconfig.org/downloads/ISPConfig-3.0.0.9-rc2.tar.gz
+  tar xvfz ISPConfig-3.0.0.9-rc2.tar.gz
+  cd ispconfig3_install/install/
+
+7.2) Installation from SVN
+
+  yast2 -i subversion
+  cd /tmp
+  svn export svn://svn.ispconfig.org/ispconfig3/trunk/
+  cd trunk/install
+
+
+7.1+7.2) Now proceed with the ISPConfig installation.
+
+Now start the installation process by executing:
+
+php -q install.php
+
+The installer will configure all services like postfix, sasl, courier, etc. for you. A manual setup as required for ISPConfig 2 (perfect setup guides) is not necessary. To login to the ISPConfig controlpanel, open the following URL in your browser (replace the IP to match your settings!):
+
+http://192.168.0.100:8080/
+
+the default login is:
+
+user: admin
+password: admin
+
+In case you get a permission denied error from apache, please restart the apache webserver process.
+
+Optional:
+
+Install a webbased Email Client
+
+yast2 -i squirrelmail
+
+----------------------------------------------------------------------------------------------------------
+
+Hints:
+
+debian 4.0 under openvz:
+
+VPSID=101
+for CAP in CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE
+do
+  vzctl set $VPSID --capability ${CAP}:on --save
+done
+
+----------------------------------------------------------------------------------------------------------
+
+Installing Jailkit:
+
+cd /tmp
+wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
+tar xvfz jailkit-2.5.tar.gz
+cd jailkit-2.5
+./configure
+make
+make install
+rm -rf jailkit-2.5*
diff --git a/docs/INSTALL_OPENSUSE_11_1.txt b/docs/INSTALL_OPENSUSE_11_1.txt
index 6688c24eb4..f6ea738ed6 100644
--- a/docs/INSTALL_OPENSUSE_11_1.txt
+++ b/docs/INSTALL_OPENSUSE_11_1.txt
@@ -1,210 +1,210 @@
-
-Installation
------------
-
-It is recommended to use a clean (fresh) OpenSUSE installatiom where you selected to install just the minimal packages. A Gnome or KDE desktop is not needed and will just slow down the server. Then follow the steps below to setup your server with ISPConfig 3:
-
-The following guide is for the 32Bit version of openSUSE, for 64Bit installations the package names may differ especially the names of downloaded rpm files.
-
-Install some basic packes and the compilers that we need later
-
-yast2 -i findutils readline libgcc glibc-devel findutils-locate gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim telnet cron iptables iputils man man-pages nano pico
-
-1) Install Postfix, Courier, Saslauthd, MySQL with the following command line (on one line!):
-
-yast2 -i postfix postfix-mysql mysql mysql-client courier-imap courier-authlib courier-authlib-mysql python cron cyrus-sasl cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi cyrus-sasl-otp cyrus-sasl-plain cyrus-sasl-saslauthd libmysqlclient-devel
-
-chkconfig --add mysql
-/etc/init.d/mysql start
-
-chkconfig --add postfix
-/etc/init.d/postfix start
-
-chkconfig --add saslauthd
-/etc/init.d/saslauthd start
-
-chkconfig --add saslauthd
-/etc/init.d/saslauthd start
-
-chkconfig --add fam
-chkconfig --add courier-authdaemon
-chkconfig --add courier-pop
-chkconfig --add courier-imap
-/etc/init.d/courier-pop start
-/etc/init.d/courier-imap start
-chkconfig --add courier-pop-ssl
-chkconfig --add courier-imap-ssl
-/etc/init.d/courier-pop-ssl start
-/etc/init.d/courier-imap-ssl start
-
-
-cd /tmp
-wget http://download.opensuse.org/repositories/server:/mail/openSUSE_11.0/i586/getmail-4.7.6-1.4.i586.rpm
-rpm -i getmail-4.7.6-1.4.i586.rpm
-
-// Install maildrop
-wget http://download.opensuse.org/repositories/home:/atzewilms/openSUSE_11.1_Update/i586/maildrop-2.0.4-10.5.i586.rpm
-rpm --force -i maildrop-2.0.4-10.5.i586.rpm
-
-// Install pam_mysql
-yast2 -i pam-devel
-cd /tmp
-wget http://heanet.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.7RC1.tar.gz
-tar xvfz pam_mysql-0.7RC1.tar.gz
-cd pam_mysql-0.7RC1
-./configure
-make
-make install
-rm -rf /tmp/pam_mysql-0.7RC1
-rm /tmp/pam_mysql-0.7RC1.tar.gz
-
-
-// Set the mysql database password:
-
-mysql_secure_installation
-
-
-2) Install Amavisd-new, Spamassassin and Clamav (1 line!):
-
-yast2 -i amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql
-
-chkconfig --add amavis
-chkconfig --add clamd
-/etc/init.d/amavis start
-/etc/init.d/clamd start
-
-2.1) Install apache2
-
-yast2 -i apache2 apache2-mod_fcgid
-
-rpm -i http://download.opensuse.org/repositories/server:/php/server_database_apache_openSUSE_11.0/i586/suphp-0.6.2-10.41.i586.rpm
-
-3) Install PHP5 modules (1 line!):
-
-yast2 -i php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl apache2-mod_php5
-
-Then run the following to enable the Apache modules:
-
-a2enmod suexec
-a2enmod rewrite
-a2enmod ssl
-a2enmod actions
-a2enmod suphp
-a2enmod fcgid
-
-// Fix a suexec permission problem
-
-chown root:www /usr/sbin/suexec2
-chmod 4755 /usr/sbin/suexec2
-
-// and start apache
-
-chkconfig --add apache2
-/etc/init.d/apache2 start
-
-cd /tmp
-
-yast2 -i pwgen
-rpm -i http://download.opensuse.org/repositories/server:/php:/applications/openSUSE_11.1/noarch/phpMyAdmin-3.1.2-1.1.noarch.rpm
-ln -s /srv/www/htdocs/phpMyAdmin /usr/local/ispconfig/interface/web/phpmyadmin
-
-// Warnings like "warning: phpMyAdmin-3.1.2-1.1.src.rpm: Header V3 DSA signature: NOKEY, key ID 367fe7fc" can be ignored.
-
-4) Install pure-ftpd and quota
-
-yast2 -i pure-ftpd quota
-
-chkconfig --add pure-ftpd
-/etc/init.d/pure-ftpd start
-
-
-5) Install mydns
-
-cd /tmp
-wget http://download.opensuse.org/repositories/home:/bajizs_cnt/openSUSE_11.1/i586/mydns-ng-1.2.8-1.1.i586.rpm
-wget http://download.opensuse.org/repositories/home:/bajizs_cnt/openSUSE_11.1/i586/mydns-ng-mysql-1.2.8-1.1.i586.rpm
-rpm -i mydns*.rpm
-
-chkconfig --add mydns
-
-6) Install vlogger and webalizer
-
-cd /tmp
-wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
-tar xvfz vlogger-1.3.tar.gz
-mv vlogger-1.3/vlogger /usr/sbin/
-rm -rf vlogger*
-yast2 -i webalizer perl-DateManip 
-
-6.1 Install fail2ban
-
-rpm -i http://download.opensuse.org/repositories/home:/leonardocf/openSUSE_11.0/i586/fail2ban-0.8.2-5.2.i586.rpm
-
-
-
-
-6.2) Cleanup
-
-rm -f /tmp/*.rpm
-
-6.2 Install jailkit
-
-cd /tmp
-wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
-tar xvfz jailkit-2.5.tar.gz
-cd jailkit-2.5
-./configure
-make
-make install
-cd ..
-rm -rf jailkit-2.5*
-
-
-7) Install ISPConfig 3
-
-There are two possile scenarios, but not both:
-7.1) Install the latest released version 
-7.2) Install directly from SVN
-
-7.1) Installation of beta 3 from tar.gz
-
-  cd /tmp
-  wget http://www.ispconfig.org/downloads/ISPConfig-3.0.0.9-rc2.tar.gz
-  tar xvfz ISPConfig-3.0.0.9-rc2.tar.gz
-  cd ispconfig3_install/install/
-
-7.2) Installation from SVN
-
-  yast2 -i subversion
-  cd /tmp
-  svn export svn://svn.ispconfig.org/ispconfig3/trunk/
-  cd trunk/install
-
-
-7.1+7.2) Now proceed with the ISPConfig installation.
-
-Now start the installation process by executing:
-
-php -q install.php
-
-// Cleanup
-rm -rf /tmp/trunk
-
-The installer will configure all services like postfix, sasl, courier, etc. for you. A manual setup as required for ISPConfig 2 (perfect setup guides) is not necessary. To login to the ISPConfig controlpanel, open the following URL in your browser (replace the IP to match your settings!):
-
-http://192.168.0.100:8080/
-
-the default login is:
-
-user: admin
-password: admin
-
-In case you get a permission denied error from apache, please restart the apache webserver process.
-
-Optional:
-
-Install a webbased Email Client
-
-yast2 -i squirrelmail
-
-
+
+Installation
+-----------
+
+It is recommended to use a clean (fresh) OpenSUSE installatiom where you selected to install just the minimal packages. A Gnome or KDE desktop is not needed and will just slow down the server. Then follow the steps below to setup your server with ISPConfig 3:
+
+The following guide is for the 32Bit version of openSUSE, for 64Bit installations the package names may differ especially the names of downloaded rpm files.
+
+Install some basic packes and the compilers that we need later
+
+yast2 -i findutils readline libgcc glibc-devel findutils-locate gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim telnet cron iptables iputils man man-pages nano pico
+
+1) Install Postfix, Courier, Saslauthd, MySQL with the following command line (on one line!):
+
+yast2 -i postfix postfix-mysql mysql mysql-client courier-imap courier-authlib courier-authlib-mysql python cron cyrus-sasl cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi cyrus-sasl-otp cyrus-sasl-plain cyrus-sasl-saslauthd libmysqlclient-devel
+
+chkconfig --add mysql
+/etc/init.d/mysql start
+
+chkconfig --add postfix
+/etc/init.d/postfix start
+
+chkconfig --add saslauthd
+/etc/init.d/saslauthd start
+
+chkconfig --add saslauthd
+/etc/init.d/saslauthd start
+
+chkconfig --add fam
+chkconfig --add courier-authdaemon
+chkconfig --add courier-pop
+chkconfig --add courier-imap
+/etc/init.d/courier-pop start
+/etc/init.d/courier-imap start
+chkconfig --add courier-pop-ssl
+chkconfig --add courier-imap-ssl
+/etc/init.d/courier-pop-ssl start
+/etc/init.d/courier-imap-ssl start
+
+
+cd /tmp
+wget http://download.opensuse.org/repositories/server:/mail/openSUSE_11.0/i586/getmail-4.7.6-1.4.i586.rpm
+rpm -i getmail-4.7.6-1.4.i586.rpm
+
+// Install maildrop
+wget http://download.opensuse.org/repositories/home:/atzewilms/openSUSE_11.1_Update/i586/maildrop-2.0.4-10.5.i586.rpm
+rpm --force -i maildrop-2.0.4-10.5.i586.rpm
+
+// Install pam_mysql
+yast2 -i pam-devel
+cd /tmp
+wget http://heanet.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.7RC1.tar.gz
+tar xvfz pam_mysql-0.7RC1.tar.gz
+cd pam_mysql-0.7RC1
+./configure
+make
+make install
+rm -rf /tmp/pam_mysql-0.7RC1
+rm /tmp/pam_mysql-0.7RC1.tar.gz
+
+
+// Set the mysql database password:
+
+mysql_secure_installation
+
+
+2) Install Amavisd-new, Spamassassin and Clamav (1 line!):
+
+yast2 -i amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql
+
+chkconfig --add amavis
+chkconfig --add clamd
+/etc/init.d/amavis start
+/etc/init.d/clamd start
+
+2.1) Install apache2
+
+yast2 -i apache2 apache2-mod_fcgid
+
+rpm -i http://download.opensuse.org/repositories/server:/php/server_database_apache_openSUSE_11.0/i586/suphp-0.6.2-10.41.i586.rpm
+
+3) Install PHP5 modules (1 line!):
+
+yast2 -i php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl apache2-mod_php5
+
+Then run the following to enable the Apache modules:
+
+a2enmod suexec
+a2enmod rewrite
+a2enmod ssl
+a2enmod actions
+a2enmod suphp
+a2enmod fcgid
+
+// Fix a suexec permission problem
+
+chown root:www /usr/sbin/suexec2
+chmod 4755 /usr/sbin/suexec2
+
+// and start apache
+
+chkconfig --add apache2
+/etc/init.d/apache2 start
+
+cd /tmp
+
+yast2 -i pwgen
+rpm -i http://download.opensuse.org/repositories/server:/php:/applications/openSUSE_11.1/noarch/phpMyAdmin-3.1.2-1.1.noarch.rpm
+ln -s /srv/www/htdocs/phpMyAdmin /usr/local/ispconfig/interface/web/phpmyadmin
+
+// Warnings like "warning: phpMyAdmin-3.1.2-1.1.src.rpm: Header V3 DSA signature: NOKEY, key ID 367fe7fc" can be ignored.
+
+4) Install pure-ftpd and quota
+
+yast2 -i pure-ftpd quota
+
+chkconfig --add pure-ftpd
+/etc/init.d/pure-ftpd start
+
+
+5) Install mydns
+
+cd /tmp
+wget http://download.opensuse.org/repositories/home:/bajizs_cnt/openSUSE_11.1/i586/mydns-ng-1.2.8-1.1.i586.rpm
+wget http://download.opensuse.org/repositories/home:/bajizs_cnt/openSUSE_11.1/i586/mydns-ng-mysql-1.2.8-1.1.i586.rpm
+rpm -i mydns*.rpm
+
+chkconfig --add mydns
+
+6) Install vlogger and webalizer
+
+cd /tmp
+wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
+tar xvfz vlogger-1.3.tar.gz
+mv vlogger-1.3/vlogger /usr/sbin/
+rm -rf vlogger*
+yast2 -i webalizer perl-DateManip 
+
+6.1 Install fail2ban
+
+rpm -i http://download.opensuse.org/repositories/home:/leonardocf/openSUSE_11.0/i586/fail2ban-0.8.2-5.2.i586.rpm
+
+
+
+
+6.2) Cleanup
+
+rm -f /tmp/*.rpm
+
+6.2 Install jailkit
+
+cd /tmp
+wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
+tar xvfz jailkit-2.5.tar.gz
+cd jailkit-2.5
+./configure
+make
+make install
+cd ..
+rm -rf jailkit-2.5*
+
+
+7) Install ISPConfig 3
+
+There are two possile scenarios, but not both:
+7.1) Install the latest released version 
+7.2) Install directly from SVN
+
+7.1) Installation of beta 3 from tar.gz
+
+  cd /tmp
+  wget http://www.ispconfig.org/downloads/ISPConfig-3.0.0.9-rc2.tar.gz
+  tar xvfz ISPConfig-3.0.0.9-rc2.tar.gz
+  cd ispconfig3_install/install/
+
+7.2) Installation from SVN
+
+  yast2 -i subversion
+  cd /tmp
+  svn export svn://svn.ispconfig.org/ispconfig3/trunk/
+  cd trunk/install
+
+
+7.1+7.2) Now proceed with the ISPConfig installation.
+
+Now start the installation process by executing:
+
+php -q install.php
+
+// Cleanup
+rm -rf /tmp/trunk
+
+The installer will configure all services like postfix, sasl, courier, etc. for you. A manual setup as required for ISPConfig 2 (perfect setup guides) is not necessary. To login to the ISPConfig controlpanel, open the following URL in your browser (replace the IP to match your settings!):
+
+http://192.168.0.100:8080/
+
+the default login is:
+
+user: admin
+password: admin
+
+In case you get a permission denied error from apache, please restart the apache webserver process.
+
+Optional:
+
+Install a webbased Email Client
+
+yast2 -i squirrelmail
+
+
diff --git a/helper_scripts/setup_in_openvz/diff_openssl.cnf b/helper_scripts/setup_in_openvz/diff_openssl.cnf
index b1973a4ad9..4a3c7e6aa1 100644
--- a/helper_scripts/setup_in_openvz/diff_openssl.cnf
+++ b/helper_scripts/setup_in_openvz/diff_openssl.cnf
@@ -1,25 +1,25 @@
-# diff openssl.cnf /usr/lib/ssl/openssl.cnf
-68c68
-< default_days	= 3653			# how long to certify for
----
-> default_days	= 365			# how long to certify for
-125c125
-< countryName_default		= YOURCOUNTRY
----
-> countryName_default		= AU
-130c130
-< stateOrProvinceName_default	= YOURPROVINCE
----
-> stateOrProvinceName_default	= Some-State
-135c135
-< 0.organizationName_default	= YOURDOMAIN
----
-> 0.organizationName_default	= Internet Widgits Pty Ltd
-142c142
-< organizationalUnitName_default	= ISP
----
-> #organizationalUnitName_default	=
-145d144
-< commonName_default		= YOURHOSTNAME
-149d147
-< emailAddress_default		= postmaster@YOURDOMAIN
+# diff openssl.cnf /usr/lib/ssl/openssl.cnf
+68c68
+< default_days	= 3653			# how long to certify for
+---
+> default_days	= 365			# how long to certify for
+125c125
+< countryName_default		= YOURCOUNTRY
+---
+> countryName_default		= AU
+130c130
+< stateOrProvinceName_default	= YOURPROVINCE
+---
+> stateOrProvinceName_default	= Some-State
+135c135
+< 0.organizationName_default	= YOURDOMAIN
+---
+> 0.organizationName_default	= Internet Widgits Pty Ltd
+142c142
+< organizationalUnitName_default	= ISP
+---
+> #organizationalUnitName_default	=
+145d144
+< commonName_default		= YOURHOSTNAME
+149d147
+< emailAddress_default		= postmaster@YOURDOMAIN
diff --git a/helper_scripts/setup_in_openvz/install_server.sh b/helper_scripts/setup_in_openvz/install_server.sh
index 454aec6077..1cc0584170 100644
--- a/helper_scripts/setup_in_openvz/install_server.sh
+++ b/helper_scripts/setup_in_openvz/install_server.sh
@@ -1,61 +1,61 @@
-#!/bin/bash
-# Script to configuring an ispconfig3 server in a Debian VPS
-# by calocen [at] gmail [dot] com
-
-# getting some enviromment values
-myhostname=`hostname -f`
-mydomain=`hostname -d`
-myip=`hostname -i`
-[ ! -x /usr/bin/geoiplookup ] && apt-get --assume-yes install geoip-bin
-mycountry=`geoiplookup $myip | cut -f4 -d" " | cut -f1 -d","`
-myprovince=`geoiplookup $myip | cut -f5 -d" "`
-
-# reconfiguring webalizer, postfix
-# could be cool to modify here webalizer values
-dpkg-reconfigure -u webalizer
-postconf -e "myhostname =  $myhostname"
-postconf -e "mydestination =  $myhostname, localhost"
-echo $myhostname > /etc/mailname
-dpkg-reconfigure -u postfix
-
-# request new password
-oldpwd=`grep password /root/.my.cnf | tr "\t" " " | tr -s " " | cut -f3 -d" "`
-read -p "mysql password: [$oldpwd] " mysqlpwd
-[ -z $mysqlpwd ] && mysqlpwd=$oldpwd
-echo $mysqlpwd
-#read -p "Are you sure? (y/n) " sure
-## who said fear ##
-set -x
-mysqladmin -u root -p$oldpwd password $mysqlpwd
-mysqladmin -u root -p$mysqlpwd -h localhost password $mysqlpwd
-cat << EOF > /root/.my.cnf
-[client]
-password	= $mysqlpwd
-EOF
-chmod 600 /root/.my.cnf
-
-# changing mydns password
-mysql -e "SET PASSWORD FOR 'mydns'@'%' = PASSWORD( '$mysqlpwd' )"
-mysql -e "SET PASSWORD FOR 'mydns'@'localhost' = PASSWORD( '$mysqlpwd' )"
-cp -ax /etc/mydns.conf /etc/mydns.conf~
-sed s/$oldpwd/$mysqlpwd/g < /etc/mydns.conf~ > /etc/mydns.conf
-
-# enabling mydns
-mydns --create-tables > /tmp/mydns.sql
-mysql -e "CREATE DATABASE IF NOT EXISTS mydns ; USE mydns ; SOURCE /tmp/mydns.sql;"
-rm /tmp/mydns.*
-invoke-rc.d mydns restart
-
-# preparing server installation
-mv /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf~
-sed s/"YOURHOSTNAME"/"$myhostname"/g < /usr/local/bin/openssl.cnf |
-sed s/"YOURDOMAIN"/"$mydomain"/g | \
-sed s/"YOURCOUNTRY"/"$mycountry"/g | \
-sed s/"YOURPROVINCE"/"$myprovince"/g > /etc/ssl/openssl.cnf
-
-tar xfz /root/downloads/ISPConfig-3.0.0.7-beta.tar.gz -C /usr/local/src
-# here would be some stuff to update from SVN
-cd /usr/local/src/ispconfig3_install/install/
-php -q install.php
-
-
+#!/bin/bash
+# Script to configuring an ispconfig3 server in a Debian VPS
+# by calocen [at] gmail [dot] com
+
+# getting some enviromment values
+myhostname=`hostname -f`
+mydomain=`hostname -d`
+myip=`hostname -i`
+[ ! -x /usr/bin/geoiplookup ] && apt-get --assume-yes install geoip-bin
+mycountry=`geoiplookup $myip | cut -f4 -d" " | cut -f1 -d","`
+myprovince=`geoiplookup $myip | cut -f5 -d" "`
+
+# reconfiguring webalizer, postfix
+# could be cool to modify here webalizer values
+dpkg-reconfigure -u webalizer
+postconf -e "myhostname =  $myhostname"
+postconf -e "mydestination =  $myhostname, localhost"
+echo $myhostname > /etc/mailname
+dpkg-reconfigure -u postfix
+
+# request new password
+oldpwd=`grep password /root/.my.cnf | tr "\t" " " | tr -s " " | cut -f3 -d" "`
+read -p "mysql password: [$oldpwd] " mysqlpwd
+[ -z $mysqlpwd ] && mysqlpwd=$oldpwd
+echo $mysqlpwd
+#read -p "Are you sure? (y/n) " sure
+## who said fear ##
+set -x
+mysqladmin -u root -p$oldpwd password $mysqlpwd
+mysqladmin -u root -p$mysqlpwd -h localhost password $mysqlpwd
+cat << EOF > /root/.my.cnf
+[client]
+password	= $mysqlpwd
+EOF
+chmod 600 /root/.my.cnf
+
+# changing mydns password
+mysql -e "SET PASSWORD FOR 'mydns'@'%' = PASSWORD( '$mysqlpwd' )"
+mysql -e "SET PASSWORD FOR 'mydns'@'localhost' = PASSWORD( '$mysqlpwd' )"
+cp -ax /etc/mydns.conf /etc/mydns.conf~
+sed s/$oldpwd/$mysqlpwd/g < /etc/mydns.conf~ > /etc/mydns.conf
+
+# enabling mydns
+mydns --create-tables > /tmp/mydns.sql
+mysql -e "CREATE DATABASE IF NOT EXISTS mydns ; USE mydns ; SOURCE /tmp/mydns.sql;"
+rm /tmp/mydns.*
+invoke-rc.d mydns restart
+
+# preparing server installation
+mv /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf~
+sed s/"YOURHOSTNAME"/"$myhostname"/g < /usr/local/bin/openssl.cnf |
+sed s/"YOURDOMAIN"/"$mydomain"/g | \
+sed s/"YOURCOUNTRY"/"$mycountry"/g | \
+sed s/"YOURPROVINCE"/"$myprovince"/g > /etc/ssl/openssl.cnf
+
+tar xfz /root/downloads/ISPConfig-3.0.0.7-beta.tar.gz -C /usr/local/src
+# here would be some stuff to update from SVN
+cd /usr/local/src/ispconfig3_install/install/
+php -q install.php
+
+
diff --git a/helper_scripts/setup_in_openvz/recreate_ssh_and_hostname.sh b/helper_scripts/setup_in_openvz/recreate_ssh_and_hostname.sh
index 5ba95c80a4..72c2ab61a2 100644
--- a/helper_scripts/setup_in_openvz/recreate_ssh_and_hostname.sh
+++ b/helper_scripts/setup_in_openvz/recreate_ssh_and_hostname.sh
@@ -1,18 +1,18 @@
-#!/bin/bash
-set -x
-echo "" > /etc/resolv.conf
-echo "" > /etc/hostname
-echo "" > /etc/mailname
-rm -f /etc/ssh/ssh_host_*
-cat << EOF > /etc/rc2.d/S15ssh_gen_host_keys
-#!/bin/bash
-ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
-ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
-dpkg-reconfigure -u webalizer
-postconf -e "myhostname =  $(hostname -f)"
-postconf -e "mydestination =  $(hostname -f), localhost"
-echo $(hostname -f) > /etc/mailname
-dpkg-reconfigure -u postfix
-rm -f \$0
-EOF
-chmod a+x /etc/rc2.d/S15ssh_gen_host_keys
+#!/bin/bash
+set -x
+echo "" > /etc/resolv.conf
+echo "" > /etc/hostname
+echo "" > /etc/mailname
+rm -f /etc/ssh/ssh_host_*
+cat << EOF > /etc/rc2.d/S15ssh_gen_host_keys
+#!/bin/bash
+ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
+ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
+dpkg-reconfigure -u webalizer
+postconf -e "myhostname =  $(hostname -f)"
+postconf -e "mydestination =  $(hostname -f), localhost"
+echo $(hostname -f) > /etc/mailname
+dpkg-reconfigure -u postfix
+rm -f \$0
+EOF
+chmod a+x /etc/rc2.d/S15ssh_gen_host_keys
diff --git a/install/autoupdate.php b/install/autoupdate.php
index d4bbfcd11e..647fc34202 100644
--- a/install/autoupdate.php
+++ b/install/autoupdate.php
@@ -1,314 +1,314 @@
-<?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.
-*/
-
-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");
-}
-
-/*
- *  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();
-}
-
-/*
- *  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
-	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'] == true) {
-	//** Configure Apache
-	swriteln('Configuring Apache');
-	$inst->configure_apache();
-
-	//** Configure vlogger
-	swriteln('Configuring vlogger');
-	$inst->configure_vlogger();
-
-	//** 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']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' reload');
-if($conf['services']['mail']) {
-	if($conf['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
-	if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
-	if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
-	if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
-	if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
-	if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
-	if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
-	if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
-	if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
-	if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
-	if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
-}
-if($conf['services']['web']) {
-	if($conf['apache']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
-	if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
-}
-if($conf['services']['dns']) {
-	if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
-	if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
-	if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
-}
-
-echo "Update finished.\n";
-
-?>
+<?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.
+*/
+
+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");
+}
+
+/*
+ *  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();
+}
+
+/*
+ *  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
+	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'] == true) {
+	//** Configure Apache
+	swriteln('Configuring Apache');
+	$inst->configure_apache();
+
+	//** Configure vlogger
+	swriteln('Configuring vlogger');
+	$inst->configure_vlogger();
+
+	//** 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']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' reload');
+if($conf['services']['mail']) {
+	if($conf['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
+	if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
+	if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
+	if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
+	if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
+	if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
+	if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
+	if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
+	if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
+	if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
+	if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
+}
+if($conf['services']['web']) {
+	if($conf['apache']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
+	if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
+}
+if($conf['services']['dns']) {
+	if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
+	if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
+	if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
+}
+
+echo "Update finished.\n";
+
+?>
diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php
index 35c4deae27..a3db4dd81c 100644
--- a/install/dist/conf/debian40.conf.php
+++ b/install/dist/conf/debian40.conf.php
@@ -1,195 +1,195 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-//***  Debian 4.0 default settings
-
-//* Main
-$conf['language'] = 'en';
-$conf['distname'] = 'debian40';
-$conf['hostname'] = 'server1.domain.tld'; // Full hostname
-$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
-$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
-$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
-$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
-$conf['server_id'] = 1;
-$conf['init_scripts'] = '/etc/init.d';
-$conf['runlevel'] = '/etc';
-$conf['shells'] = '/etc/shells';
-$conf['pam'] = '/etc/pam.d';
-
-//* Services provided by this server, this selection will be overridden by the expert mode
-$conf['services']['mail'] = true;
-$conf['services']['web'] = true;
-$conf['services']['dns'] = true;
-$conf['services']['file'] = true;
-$conf['services']['db'] = true;
-$conf['services']['vserver'] = true;
-
-//* MySQL
-$conf['mysql']['installed'] = false; // will be detected automatically during installation
-$conf['mysql']['init_script'] = 'mysql';
-$conf['mysql']['host'] = 'localhost';
-$conf['mysql']['ip'] = '127.0.0.1';
-$conf['mysql']['port'] = '3306';
-$conf['mysql']['database'] = 'dbispconfig';
-$conf['mysql']['admin_user'] = 'root';
-$conf['mysql']['admin_password'] = '';
-$conf['mysql']['charset'] = 'utf8';
-$conf['mysql']['ispconfig_user'] = 'ispconfig';
-$conf['mysql']['ispconfig_password'] = md5 (uniqid (rand()));
-$conf['mysql']['master_slave_setup'] = 'n';
-$conf['mysql']['master_host'] = '';
-$conf['mysql']['master_database'] = 'dbispconfig';
-$conf['mysql']['master_admin_user'] = 'root';
-$conf['mysql']['master_admin_password'] = '';
-$conf['mysql']['master_ispconfig_user'] = '';
-$conf['mysql']['master_ispconfig_password'] = md5 (uniqid (rand()));
-
-//* Apache
-$conf['apache']['installed'] = false; // will be detected automatically during installation
-$conf['apache']['user'] = 'www-data';
-$conf['apache']['group'] = 'www-data';
-$conf['apache']['init_script'] = 'apache2';
-$conf['apache']['version'] = '2.2';
-$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
-$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
-$conf['apache']['vhost_port'] = '8080';
-$conf['apache']['php_ini_path_apache'] = '/etc/php5/apache2/php.ini';
-$conf['apache']['php_ini_path_cgi'] = '/etc/php5/cgi/php.ini';
-
-//* Website base settings
-$conf['web']['website_basedir'] = '/var/www';
-$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
-$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
-
-//* Apps base settings
-$conf['web']['apps_vhost_ip'] = '_default_';
-$conf['web']['apps_vhost_port'] = '8081';
-$conf['web']['apps_vhost_servername'] = '';
-$conf['web']['apps_vhost_user'] = 'ispapps';
-$conf['web']['apps_vhost_group'] = 'ispapps';
-
-//* Fastcgi
-$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php5/cgi/';
-$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
-
-//* Postfix
-$conf['postfix']['installed'] = false; // will be detected automatically during installation
-$conf['postfix']['config_dir'] = '/etc/postfix';
-$conf['postfix']['init_script'] = 'postfix';
-$conf['postfix']['user'] = 'postfix';
-$conf['postfix']['group'] = 'postfix';
-$conf['postfix']['vmail_userid'] = '5000';
-$conf['postfix']['vmail_username'] = 'vmail';
-$conf['postfix']['vmail_groupid'] = '5000';
-$conf['postfix']['vmail_groupname'] = 'vmail';
-$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
-
-//* Mailman
-$conf['mailman']['installed'] = false; // will be detected automatically during installation
-$conf['mailman']['config_dir'] = '/etc/mailman';
-$conf['mailman']['init_script'] = 'mailman';
-
-//* Getmail
-$conf['getmail']['installed'] = false; // will be detected automatically during installation
-$conf['getmail']['config_dir'] = '/etc/getmail';
-$conf['getmail']['program'] = '/usr/bin/getmail';
-
-//* Courier
-$conf['courier']['installed'] = false; // will be detected automatically during installation
-$conf['courier']['config_dir'] = '/etc/courier';
-$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
-$conf['courier']['courier-imap'] = 'courier-imap';
-$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
-$conf['courier']['courier-pop'] = 'courier-pop';
-$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
-
-//* Dovecot
-$conf['dovecot']['installed'] = false; // will be detected automatically during installation
-$conf['dovecot']['config_dir'] = '/etc/dovecot';
-$conf['dovecot']['init_script'] = 'dovecot';
-
-//* SASL
-$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
-$conf['saslauthd']['config'] = '/etc/default/saslauthd';
-$conf['saslauthd']['init_script'] = 'saslauthd';
-
-//* Amavisd
-$conf['amavis']['installed'] = false; // will be detected automatically during installation
-$conf['amavis']['config_dir'] = '/etc/amavis';
-$conf['amavis']['init_script'] = 'amavis';
-
-//* ClamAV
-$conf['clamav']['installed'] = false; // will be detected automatically during installation
-$conf['clamav']['init_script'] = 'clamav-daemon';
-
-//* Pureftpd
-$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
-$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
-$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
-
-//* MyDNS
-$conf['mydns']['installed'] = false; // will be detected automatically during installation
-$conf['mydns']['config_dir'] = '/etc';
-$conf['mydns']['init_script'] = 'mydns';
-
-//* PowerDNS
-$conf['powerdns']['installed'] = false; // will be detected automatically during installation
-$conf['powerdns']['database'] = 'powerdns';
-$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
-$conf['powerdns']['init_script'] = 'pdns';
-
-//* BIND DNS Server
-$conf['bind']['installed'] = false; // will be detected automatically during installation
-$conf['bind']['bind_user'] = 'root';
-$conf['bind']['bind_group'] = 'bind';
-$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
-$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
-$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
-$conf['bind']['init_script'] = 'bind9';
-
-//* Jailkit
-$conf['jailkit']['installed'] = false; // will be detected automatically during installation
-$conf['jailkit']['config_dir'] = '/etc/jailkit';
-$conf['jailkit']['jk_init'] = 'jk_init.ini';
-$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
-$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico';
-$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
-
-//* vlogger
-$conf['vlogger']['config_dir'] = '/etc';
-
-//* cron
-$conf['cron']['init_script'] = 'cron';
-$conf['cron']['crontab_dir'] = '/etc/cron.d';
-$conf['cron']['wget'] = '/usr/bin/wget';
-
-
-?>
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+//***  Debian 4.0 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'debian40';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mysql';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5 (uniqid (rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5 (uniqid (rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'www-data';
+$conf['apache']['group'] = 'www-data';
+$conf['apache']['init_script'] = 'apache2';
+$conf['apache']['version'] = '2.2';
+$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php5/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php5/cgi/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php5/cgi/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/courier';
+$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
+$conf['courier']['courier-pop'] = 'courier-pop';
+$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/default/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavis';
+$conf['amavis']['init_script'] = 'amavis';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamav-daemon';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'root';
+$conf['bind']['bind_group'] = 'bind';
+$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
+$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
+$conf['bind']['init_script'] = 'bind9';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'cron';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+
+?>
diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php
index 6962adb22c..f4e8ba6ac3 100644
--- a/install/dist/conf/debian60.conf.php
+++ b/install/dist/conf/debian60.conf.php
@@ -1,195 +1,195 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-//***  Debian 4.0 default settings
-
-//* Main
-$conf['language'] = 'en';
-$conf['distname'] = 'debian60';
-$conf['hostname'] = 'server1.domain.tld'; // Full hostname
-$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
-$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
-$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
-$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
-$conf['server_id'] = 1;
-$conf['init_scripts'] = '/etc/init.d';
-$conf['runlevel'] = '/etc';
-$conf['shells'] = '/etc/shells';
-$conf['pam'] = '/etc/pam.d';
-
-//* Services provided by this server, this selection will be overridden by the expert mode
-$conf['services']['mail'] = true;
-$conf['services']['web'] = true;
-$conf['services']['dns'] = true;
-$conf['services']['file'] = true;
-$conf['services']['db'] = true;
-$conf['services']['vserver'] = true;
-
-//* MySQL
-$conf['mysql']['installed'] = false; // will be detected automatically during installation
-$conf['mysql']['init_script'] = 'mysql';
-$conf['mysql']['host'] = 'localhost';
-$conf['mysql']['ip'] = '127.0.0.1';
-$conf['mysql']['port'] = '3306';
-$conf['mysql']['database'] = 'dbispconfig';
-$conf['mysql']['admin_user'] = 'root';
-$conf['mysql']['admin_password'] = '';
-$conf['mysql']['charset'] = 'utf8';
-$conf['mysql']['ispconfig_user'] = 'ispconfig';
-$conf['mysql']['ispconfig_password'] = md5 (uniqid (rand()));
-$conf['mysql']['master_slave_setup'] = 'n';
-$conf['mysql']['master_host'] = '';
-$conf['mysql']['master_database'] = 'dbispconfig';
-$conf['mysql']['master_admin_user'] = 'root';
-$conf['mysql']['master_admin_password'] = '';
-$conf['mysql']['master_ispconfig_user'] = '';
-$conf['mysql']['master_ispconfig_password'] = md5 (uniqid (rand()));
-
-//* Apache
-$conf['apache']['installed'] = false; // will be detected automatically during installation
-$conf['apache']['user'] = 'www-data';
-$conf['apache']['group'] = 'www-data';
-$conf['apache']['init_script'] = 'apache2';
-$conf['apache']['version'] = '2.2';
-$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
-$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
-$conf['apache']['vhost_port'] = '8080';
-$conf['apache']['php_ini_path_apache'] = '/etc/php5/apache2/php.ini';
-$conf['apache']['php_ini_path_cgi'] = '/etc/php5/cgi/php.ini';
-
-//* Website base settings
-$conf['web']['website_basedir'] = '/var/www';
-$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
-$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
-
-//* Apps base settings
-$conf['web']['apps_vhost_ip'] = '_default_';
-$conf['web']['apps_vhost_port'] = '8081';
-$conf['web']['apps_vhost_servername'] = '';
-$conf['web']['apps_vhost_user'] = 'ispapps';
-$conf['web']['apps_vhost_group'] = 'ispapps';
-
-//* Fastcgi
-$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php5/cgi/';
-$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
-
-//* Postfix
-$conf['postfix']['installed'] = false; // will be detected automatically during installation
-$conf['postfix']['config_dir'] = '/etc/postfix';
-$conf['postfix']['init_script'] = 'postfix';
-$conf['postfix']['user'] = 'postfix';
-$conf['postfix']['group'] = 'postfix';
-$conf['postfix']['vmail_userid'] = '5000';
-$conf['postfix']['vmail_username'] = 'vmail';
-$conf['postfix']['vmail_groupid'] = '5000';
-$conf['postfix']['vmail_groupname'] = 'vmail';
-$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
-
-//* Mailman
-$conf['mailman']['installed'] = false; // will be detected automatically during installation
-$conf['mailman']['config_dir'] = '/etc/mailman';
-$conf['mailman']['init_script'] = 'mailman';
-
-//* Getmail
-$conf['getmail']['installed'] = false; // will be detected automatically during installation
-$conf['getmail']['config_dir'] = '/etc/getmail';
-$conf['getmail']['program'] = '/usr/bin/getmail';
-
-//* Courier
-$conf['courier']['installed'] = false; // will be detected automatically during installation
-$conf['courier']['config_dir'] = '/etc/courier';
-$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
-$conf['courier']['courier-imap'] = 'courier-imap';
-$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
-$conf['courier']['courier-pop'] = 'courier-pop';
-$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
-
-//* Dovecot
-$conf['dovecot']['installed'] = false; // will be detected automatically during installation
-$conf['dovecot']['config_dir'] = '/etc/dovecot';
-$conf['dovecot']['init_script'] = 'dovecot';
-
-//* SASL
-$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
-$conf['saslauthd']['config'] = '/etc/default/saslauthd';
-$conf['saslauthd']['init_script'] = 'saslauthd';
-
-//* Amavisd
-$conf['amavis']['installed'] = false; // will be detected automatically during installation
-$conf['amavis']['config_dir'] = '/etc/amavis';
-$conf['amavis']['init_script'] = 'amavis';
-
-//* ClamAV
-$conf['clamav']['installed'] = false; // will be detected automatically during installation
-$conf['clamav']['init_script'] = 'clamav-daemon';
-
-//* Pureftpd
-$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
-$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
-$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
-
-//* MyDNS
-$conf['mydns']['installed'] = false; // will be detected automatically during installation
-$conf['mydns']['config_dir'] = '/etc';
-$conf['mydns']['init_script'] = 'mydns';
-
-//* PowerDNS
-$conf['powerdns']['installed'] = false; // will be detected automatically during installation
-$conf['powerdns']['database'] = 'powerdns';
-$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
-$conf['powerdns']['init_script'] = 'pdns';
-
-//* BIND DNS Server
-$conf['bind']['installed'] = false; // will be detected automatically during installation
-$conf['bind']['bind_user'] = 'root';
-$conf['bind']['bind_group'] = 'bind';
-$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
-$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
-$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
-$conf['bind']['init_script'] = 'bind9';
-
-//* Jailkit
-$conf['jailkit']['installed'] = false; // will be detected automatically during installation
-$conf['jailkit']['config_dir'] = '/etc/jailkit';
-$conf['jailkit']['jk_init'] = 'jk_init.ini';
-$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
-$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico';
-$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
-
-//* vlogger
-$conf['vlogger']['config_dir'] = '/etc';
-
-//* cron
-$conf['cron']['init_script'] = 'cron';
-$conf['cron']['crontab_dir'] = '/etc/cron.d';
-$conf['cron']['wget'] = '/usr/bin/wget';
-
-
-?>
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+//***  Debian 4.0 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'debian60';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mysql';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5 (uniqid (rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5 (uniqid (rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'www-data';
+$conf['apache']['group'] = 'www-data';
+$conf['apache']['init_script'] = 'apache2';
+$conf['apache']['version'] = '2.2';
+$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php5/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php5/cgi/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php5/cgi/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/courier';
+$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
+$conf['courier']['courier-pop'] = 'courier-pop';
+$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/default/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavis';
+$conf['amavis']['init_script'] = 'amavis';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamav-daemon';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'root';
+$conf['bind']['bind_group'] = 'bind';
+$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
+$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
+$conf['bind']['init_script'] = 'bind9';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'cron';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+
+?>
diff --git a/install/install.php b/install/install.php
index a17e0393ea..d79450f72a 100644
--- a/install/install.php
+++ b/install/install.php
@@ -1,490 +1,490 @@
-<?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 installer.
-*/
-
-error_reporting(E_ALL|E_STRICT);
-
-//** The banner on the command line
-echo "\n\n".str_repeat('-',80)."\n";
-echo " _____ ___________   _____              __ _         ____
-|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
-  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
-  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
- _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
- \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
-                                              __/ |
-                                             |___/ ";
-echo "\n".str_repeat('-',80)."\n";
-echo "\n\n>> Initial configuration  \n\n";
-
-//** Include the library with the basic installer functions
-require_once('lib/install.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) {
-	chdir( realpath(dirname(__FILE__)) );
-}
-
-//** Install logfile
-define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
-define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
-
-//** Check for existing installation
-/*if(is_dir("/usr/local/ispconfig")) {
-    die('We will stop here. There is already a ISPConfig installation, use the update script to update this installation.');
-}*/
-
-//** Get distribution identifier
-$dist = get_distname();
-
-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');
-
-//****************************************************************************************************
-//** Installer Interface 
-//****************************************************************************************************
-$inst = new installer();
-swriteln($inst->lng('    Following will be a few questions for primary configuration so be careful.'));
-swriteln($inst->lng('    Default values are in [brackets] and can be accepted with <ENTER>.'));
-swriteln($inst->lng('    Tap in "quit" (without the quotes) to stop the installer.'."\n\n"));
-
-//** Check log file is writable (probably not root or sudo)
-if(!is_writable(dirname(ISPC_LOG_FILE))){
-    die("ERROR: Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n");
-}
-
-if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
-	die('This software cannot be installed on a server wich runs ISPConfig 2.x.');
-}
-
-if(is_dir('/usr/local/ispconfig')) {
-	die('ISPConfig 3 installation found. Please use update.php instead if install.php to update the installation.');
-}
-
-//** Detect the installed applications
-$inst->find_installed_apps();
-
-//** Select the language
-$conf['language'] = $inst->simple_query('Select language', array('en','de'), 'en');
-
-//** Select installation mode
-$install_mode = $inst->simple_query('Installation mode', array('standard','expert'), 'standard');
-
-
-//** 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]);
-unset($tmp_out);
-
-// Check if the mysql functions are loaded in PHP
-if(!function_exists('mysql_connect')) die('No PHP MySQL functions available. Please ensure that the PHP MySQL module is loaded.');
-
-//** 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']);
-	
-	//* Initialize the MySQL server connection
-	if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
-		$conf['mysql']['host'] = $tmp_mysql_server_host;
-		$conf['mysql']['admin_user'] = $tmp_mysql_server_admin_user;
-		$conf['mysql']['admin_password'] = $tmp_mysql_server_admin_password;
-		$conf['mysql']['database'] = $tmp_mysql_server_database;
-		$conf['mysql']['charset'] = $tmp_mysql_server_charset;
-		$finished = true;
-	} else {
-		swriteln($inst->lng('Unable to connect to the specified MySQL server').' '.mysql_error());
-	}
-} while ($finished == false);
-unset($finished);
-
-// Resolve the IP address of the MySQL hostname.
-$tmp = explode(':',$conf['mysql']['host']);
-if(!$conf['mysql']['ip'] = gethostbyname($tmp[0])) die('Unable to resolve hostname'.$tmp[0]);
-unset($tmp);
-
-
-//** Initializing database connection
-include_once('lib/mysql.lib.php');
-$inst->db = new db();
-
-//** Begin with standard or expert installation
-if($install_mode == 'standard') {
-	
-	//* Create the MySQL database
-	$inst->configure_database();
-	
-	//* Insert the Server record into the database
-	$inst->add_database_server_record();
-
-	//* Configure Postfix
-	$inst->configure_postfix();
-	
-	//* Configure Mailman
-	$inst->configure_mailman('install');
-	
-	//* 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();
-	
-
-	//* Configure Pureftpd
-	swriteln('Configuring Pureftpd');
-	$inst->configure_pureftpd();
-
-	//* 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();
-	}
-	
-	//* Configure Apache
-	swriteln('Configuring Apache');
-	$inst->configure_apache();
-	
-    //** Configure Vlogger
-    swriteln('Configuring Vlogger');
-    $inst->configure_vlogger();
-	
-	//** Configure apps vhost
-	swriteln('Configuring Apps vhost');
-	$inst->configure_apps_vhost();
-    
-	//* Configure Firewall
-	swriteln('Configuring Firewall');
-	$inst->configure_firewall();
-
-	//* Configure ISPConfig
-	swriteln('Installing ISPConfig');
-	
-	//** Customize the port ISPConfig runs on
-	$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
-
-	$inst->install_ispconfig();
-	
-	//* Configure DBServer
-	swriteln('Configuring DBServer');
-	$inst->configure_dbserver();
-
-	//* Configure ISPConfig
-	swriteln('Installing ISPConfig crontab');
-	$inst->install_crontab();
-	
-	swriteln('Restarting services ...');
-	if($conf['mysql']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
-	if($conf['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
-	if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
-	if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
-	if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
-	if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
-	if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
-	if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
-	if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
-	if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
-	if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
-	if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
-	if($conf['apache']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
-	if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
-	if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
-	if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
-	if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
-	
-}else{
-	
-	//* In expert mode, we select the services in the following steps, only db is always available
-	$conf['services']['mail'] = false;
-	$conf['services']['web'] = false;
-	$conf['services']['dns'] = false;
-	$conf['services']['db'] = true;
-	
-	
-	//** 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') {
-		$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']);
-	
-			//* Initialize the MySQL server connection
-			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
-				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
-				$conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
-				$conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
-				$conf['mysql']['master_database'] = $tmp_mysql_server_database;
-				$finished = true;
-			} else {
-				swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
-			}
-		} while ($finished == false);
-		unset($finished);
-		
-		// initialize the connection to the master database
-		$inst->dbmaster = new db();
-		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
-		$inst->dbmaster->dbHost = $conf['mysql']["master_host"];
-		$inst->dbmaster->dbName = $conf['mysql']["master_database"];
-		$inst->dbmaster->dbUser = $conf['mysql']["master_admin_user"];
-		$inst->dbmaster->dbPass = $conf['mysql']["master_admin_password"];
-		
-	} else {
-		// the master DB is the same then the slave DB
-		$inst->dbmaster = $inst->db;
-	}
-	
-	//* Create the mysql database
-	$inst->configure_database();
-		
-	//* Insert the Server record into the database
-	swriteln('Adding ISPConfig server record to database.');
-	swriteln('');
-	$inst->add_database_server_record();
-
-	
-	if(strtolower($inst->simple_query('Configure Mail', array('y','n') ,'y') ) == 'y') {
-		
-		$conf['services']['mail'] = true;
-		
-		//* Configure Postfix
-		swriteln('Configuring Postfix');
-		$inst->configure_postfix();
-		
-		//* Configure Mailman
-		swriteln('Configuring Mailman');
-		$inst->configure_mailman();
-
-		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['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
-		if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
-		if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
-		if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
-		if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
-		if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
-		if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
-		if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
-		if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
-		if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
-		if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
-	}
-	
-	//** Configure Jailkit
-	if(strtolower($inst->simple_query('Configure Jailkit', array('y','n'),'y') ) == 'y') {	
-		swriteln('Configuring Jailkit');
-		$inst->configure_jailkit();
-	}
-	
-	//** Configure Pureftpd
-	if(strtolower($inst->simple_query('Configure FTP Server', array('y','n'),'y') ) == 'y') {	
-		swriteln('Configuring Pureftpd');
-		$inst->configure_pureftpd();
-		if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'])) system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
-	}
-	
-	//** Configure DNS
-	if(strtolower($inst->simple_query('Configure DNS Server',array('y','n'),'y')) == 'y') {
-		$conf['services']['dns'] = true;
-		//* Configure DNS
-		if($conf['powerdns']['installed'] == true) {
-			swriteln('Configuring PowerDNS');
-			$inst->configure_powerdns();
-			if($conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
-		} elseif($conf['bind']['installed'] == true) {
-			swriteln('Configuring BIND');
-			$inst->configure_bind();
-			if($conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
-		} else {
-			swriteln('Configuring MyDNS');
-			$inst->configure_mydns();
-			if($conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
-		}
-		
-	}
-	
-	//** Configure Apache
-	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') {	
-		$conf['services']['web'] = true;
-		swriteln('Configuring Apache');
-		$inst->configure_apache();
-        
-        //** Configure Vlogger
-        swriteln('Configuring Vlogger');
-        $inst->configure_vlogger();
-		
-		//** Configure apps vhost
-		swriteln('Configuring Apps vhost');
-		$inst->configure_apps_vhost();
-	}
-	
-	//** Configure Firewall
-	if(strtolower($inst->simple_query('Configure Firewall Server',array('y','n'),'y')) == 'y') {	
-		swriteln('Configuring Firewall');
-		$inst->configure_firewall();
-	}
-	//** Configure ISPConfig :-)
-	if(strtolower($inst->simple_query('Install ISPConfig Web Interface',array('y','n'),'y')) == 'y') {
-		swriteln('Installing ISPConfig');
-		
-		//** We want to check if the server is a module or cgi based php enabled server
-		//** TODO: Don't always ask for this somehow ?
-		/*
-		$fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');
-
-		if($fast_cgi == 'yes') {
-	 		$alias = $inst->free_query('Script Alias', '/php/');
-	 		$path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
-	 		$conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
-		} else {
-	 		$conf['apache']['vhost_cgi_alias'] = "";
-		}
-		*/
-
-		//** Customise the port ISPConfig runs on
-		$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
-		
-		if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface',array('y','n'),'y')) == 'y') {
-			$inst->make_ispconfig_ssl_cert();
-		}
-		
-		$inst->install_ispconfig_interface = true;
-			
-	} else {
-		$inst->install_ispconfig_interface = false;
-	}
-	
-	$inst->install_ispconfig();
-	
-	//* Configure DBServer
-	swriteln('Configuring DBServer');
-	$inst->configure_dbserver();
-		
-	//* Configure ISPConfig
-	swriteln('Installing ISPConfig crontab');
-	$inst->install_crontab();
-	if($conf['apache']['init_script'] != '' && @is_file($conf['init_scripts'].'/'.$conf['apache']['init_script'])) system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
-	
-	
-	
-} //* << $install_mode / 'Standard' or Genius
-
-
-echo "Installation completed.\n";
-
-
-?>
+<?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 installer.
+*/
+
+error_reporting(E_ALL|E_STRICT);
+
+//** The banner on the command line
+echo "\n\n".str_repeat('-',80)."\n";
+echo " _____ ___________   _____              __ _         ____
+|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
+  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
+  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
+ _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
+ \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
+                                              __/ |
+                                             |___/ ";
+echo "\n".str_repeat('-',80)."\n";
+echo "\n\n>> Initial configuration  \n\n";
+
+//** Include the library with the basic installer functions
+require_once('lib/install.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) {
+	chdir( realpath(dirname(__FILE__)) );
+}
+
+//** Install logfile
+define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
+define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
+
+//** Check for existing installation
+/*if(is_dir("/usr/local/ispconfig")) {
+    die('We will stop here. There is already a ISPConfig installation, use the update script to update this installation.');
+}*/
+
+//** Get distribution identifier
+$dist = get_distname();
+
+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');
+
+//****************************************************************************************************
+//** Installer Interface 
+//****************************************************************************************************
+$inst = new installer();
+swriteln($inst->lng('    Following will be a few questions for primary configuration so be careful.'));
+swriteln($inst->lng('    Default values are in [brackets] and can be accepted with <ENTER>.'));
+swriteln($inst->lng('    Tap in "quit" (without the quotes) to stop the installer.'."\n\n"));
+
+//** Check log file is writable (probably not root or sudo)
+if(!is_writable(dirname(ISPC_LOG_FILE))){
+    die("ERROR: Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n");
+}
+
+if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
+	die('This software cannot be installed on a server wich runs ISPConfig 2.x.');
+}
+
+if(is_dir('/usr/local/ispconfig')) {
+	die('ISPConfig 3 installation found. Please use update.php instead if install.php to update the installation.');
+}
+
+//** Detect the installed applications
+$inst->find_installed_apps();
+
+//** Select the language
+$conf['language'] = $inst->simple_query('Select language', array('en','de'), 'en');
+
+//** Select installation mode
+$install_mode = $inst->simple_query('Installation mode', array('standard','expert'), 'standard');
+
+
+//** 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]);
+unset($tmp_out);
+
+// Check if the mysql functions are loaded in PHP
+if(!function_exists('mysql_connect')) die('No PHP MySQL functions available. Please ensure that the PHP MySQL module is loaded.');
+
+//** 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']);
+	
+	//* Initialize the MySQL server connection
+	if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
+		$conf['mysql']['host'] = $tmp_mysql_server_host;
+		$conf['mysql']['admin_user'] = $tmp_mysql_server_admin_user;
+		$conf['mysql']['admin_password'] = $tmp_mysql_server_admin_password;
+		$conf['mysql']['database'] = $tmp_mysql_server_database;
+		$conf['mysql']['charset'] = $tmp_mysql_server_charset;
+		$finished = true;
+	} else {
+		swriteln($inst->lng('Unable to connect to the specified MySQL server').' '.mysql_error());
+	}
+} while ($finished == false);
+unset($finished);
+
+// Resolve the IP address of the MySQL hostname.
+$tmp = explode(':',$conf['mysql']['host']);
+if(!$conf['mysql']['ip'] = gethostbyname($tmp[0])) die('Unable to resolve hostname'.$tmp[0]);
+unset($tmp);
+
+
+//** Initializing database connection
+include_once('lib/mysql.lib.php');
+$inst->db = new db();
+
+//** Begin with standard or expert installation
+if($install_mode == 'standard') {
+	
+	//* Create the MySQL database
+	$inst->configure_database();
+	
+	//* Insert the Server record into the database
+	$inst->add_database_server_record();
+
+	//* Configure Postfix
+	$inst->configure_postfix();
+	
+	//* Configure Mailman
+	$inst->configure_mailman('install');
+	
+	//* 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();
+	
+
+	//* Configure Pureftpd
+	swriteln('Configuring Pureftpd');
+	$inst->configure_pureftpd();
+
+	//* 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();
+	}
+	
+	//* Configure Apache
+	swriteln('Configuring Apache');
+	$inst->configure_apache();
+	
+    //** Configure Vlogger
+    swriteln('Configuring Vlogger');
+    $inst->configure_vlogger();
+	
+	//** Configure apps vhost
+	swriteln('Configuring Apps vhost');
+	$inst->configure_apps_vhost();
+    
+	//* Configure Firewall
+	swriteln('Configuring Firewall');
+	$inst->configure_firewall();
+
+	//* Configure ISPConfig
+	swriteln('Installing ISPConfig');
+	
+	//** Customize the port ISPConfig runs on
+	$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
+
+	$inst->install_ispconfig();
+	
+	//* Configure DBServer
+	swriteln('Configuring DBServer');
+	$inst->configure_dbserver();
+
+	//* Configure ISPConfig
+	swriteln('Installing ISPConfig crontab');
+	$inst->install_crontab();
+	
+	swriteln('Restarting services ...');
+	if($conf['mysql']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
+	if($conf['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
+	if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
+	if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
+	if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
+	if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
+	if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
+	if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
+	if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
+	if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
+	if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
+	if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
+	if($conf['apache']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
+	if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
+	if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
+	if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
+	if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
+	
+}else{
+	
+	//* In expert mode, we select the services in the following steps, only db is always available
+	$conf['services']['mail'] = false;
+	$conf['services']['web'] = false;
+	$conf['services']['dns'] = false;
+	$conf['services']['db'] = true;
+	
+	
+	//** 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') {
+		$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']);
+	
+			//* Initialize the MySQL server connection
+			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
+				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
+				$conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
+				$conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
+				$conf['mysql']['master_database'] = $tmp_mysql_server_database;
+				$finished = true;
+			} else {
+				swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
+			}
+		} while ($finished == false);
+		unset($finished);
+		
+		// initialize the connection to the master database
+		$inst->dbmaster = new db();
+		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
+		$inst->dbmaster->dbHost = $conf['mysql']["master_host"];
+		$inst->dbmaster->dbName = $conf['mysql']["master_database"];
+		$inst->dbmaster->dbUser = $conf['mysql']["master_admin_user"];
+		$inst->dbmaster->dbPass = $conf['mysql']["master_admin_password"];
+		
+	} else {
+		// the master DB is the same then the slave DB
+		$inst->dbmaster = $inst->db;
+	}
+	
+	//* Create the mysql database
+	$inst->configure_database();
+		
+	//* Insert the Server record into the database
+	swriteln('Adding ISPConfig server record to database.');
+	swriteln('');
+	$inst->add_database_server_record();
+
+	
+	if(strtolower($inst->simple_query('Configure Mail', array('y','n') ,'y') ) == 'y') {
+		
+		$conf['services']['mail'] = true;
+		
+		//* Configure Postfix
+		swriteln('Configuring Postfix');
+		$inst->configure_postfix();
+		
+		//* Configure Mailman
+		swriteln('Configuring Mailman');
+		$inst->configure_mailman();
+
+		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['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
+		if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
+		if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
+		if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
+		if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
+		if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
+		if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
+		if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
+		if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
+		if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
+		if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
+	}
+	
+	//** Configure Jailkit
+	if(strtolower($inst->simple_query('Configure Jailkit', array('y','n'),'y') ) == 'y') {	
+		swriteln('Configuring Jailkit');
+		$inst->configure_jailkit();
+	}
+	
+	//** Configure Pureftpd
+	if(strtolower($inst->simple_query('Configure FTP Server', array('y','n'),'y') ) == 'y') {	
+		swriteln('Configuring Pureftpd');
+		$inst->configure_pureftpd();
+		if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'])) system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
+	}
+	
+	//** Configure DNS
+	if(strtolower($inst->simple_query('Configure DNS Server',array('y','n'),'y')) == 'y') {
+		$conf['services']['dns'] = true;
+		//* Configure DNS
+		if($conf['powerdns']['installed'] == true) {
+			swriteln('Configuring PowerDNS');
+			$inst->configure_powerdns();
+			if($conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
+		} elseif($conf['bind']['installed'] == true) {
+			swriteln('Configuring BIND');
+			$inst->configure_bind();
+			if($conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
+		} else {
+			swriteln('Configuring MyDNS');
+			$inst->configure_mydns();
+			if($conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
+		}
+		
+	}
+	
+	//** Configure Apache
+	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') {	
+		$conf['services']['web'] = true;
+		swriteln('Configuring Apache');
+		$inst->configure_apache();
+        
+        //** Configure Vlogger
+        swriteln('Configuring Vlogger');
+        $inst->configure_vlogger();
+		
+		//** Configure apps vhost
+		swriteln('Configuring Apps vhost');
+		$inst->configure_apps_vhost();
+	}
+	
+	//** Configure Firewall
+	if(strtolower($inst->simple_query('Configure Firewall Server',array('y','n'),'y')) == 'y') {	
+		swriteln('Configuring Firewall');
+		$inst->configure_firewall();
+	}
+	//** Configure ISPConfig :-)
+	if(strtolower($inst->simple_query('Install ISPConfig Web Interface',array('y','n'),'y')) == 'y') {
+		swriteln('Installing ISPConfig');
+		
+		//** We want to check if the server is a module or cgi based php enabled server
+		//** TODO: Don't always ask for this somehow ?
+		/*
+		$fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');
+
+		if($fast_cgi == 'yes') {
+	 		$alias = $inst->free_query('Script Alias', '/php/');
+	 		$path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
+	 		$conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
+		} else {
+	 		$conf['apache']['vhost_cgi_alias'] = "";
+		}
+		*/
+
+		//** Customise the port ISPConfig runs on
+		$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', '8080');
+		
+		if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface',array('y','n'),'y')) == 'y') {
+			$inst->make_ispconfig_ssl_cert();
+		}
+		
+		$inst->install_ispconfig_interface = true;
+			
+	} else {
+		$inst->install_ispconfig_interface = false;
+	}
+	
+	$inst->install_ispconfig();
+	
+	//* Configure DBServer
+	swriteln('Configuring DBServer');
+	$inst->configure_dbserver();
+		
+	//* Configure ISPConfig
+	swriteln('Installing ISPConfig crontab');
+	$inst->install_crontab();
+	if($conf['apache']['init_script'] != '' && @is_file($conf['init_scripts'].'/'.$conf['apache']['init_script'])) system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
+	
+	
+	
+} //* << $install_mode / 'Standard' or Genius
+
+
+echo "Installation completed.\n";
+
+
+?>
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index b941f45de7..2e74e2e7b9 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -1,1788 +1,1788 @@
-<?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.
-*/
-
-class installer_base {
-
-	var $wb = array();
-	var $language = 'en';
-	var $db;
-	public $conf;
-	public $install_ispconfig_interface = true;
-	public $is_update = false; // true if it is an update, falsi if it is a new install
-
-
-	public function __construct() {
-		global $conf; //TODO: maybe $conf  should be passed to constructor
-		//$this->conf = $conf;
-	}
-
-	//: TODO  Implement the translation function and language files for the installer.
-	public function lng($text) {
-		return $text;
-	}
-
-	public function error($msg) {
-		die('ERROR: '.$msg."\n");
-	}
-
-	public function warning($msg) {
-		echo('WARNING: '.$msg."\n");
-	}
-	
-	public function simple_query($query, $answers, $default) {
-		$finished = false;
-		do {
-			$answers_str = implode(',', $answers);
-			swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
-			$input = sread();
-
-			//* Stop the installation
-			if($input == 'quit') {
-				swriteln($this->lng("Installation terminated by user.\n"));
-				die();
-			}
-
-			//* Select the default
-			if($input == '') {
-				$answer = $default;
-				$finished = true;
-			}
-
-			//* Set answer id valid
-			if(in_array($input, $answers)) {
-				$answer = $input;
-				$finished = true;
-			}
-
-		} while ($finished == false);
-		swriteln();
-		return $answer;
-	}
-
-	public function free_query($query,$default) {
-		swrite($this->lng($query).' ['.$default.']: ');
-		$input = sread();
-
-		//* Stop the installation
-		if($input == 'quit') {
-			swriteln($this->lng("Installation terminated by user.\n"));
-			die();
-		}
-
-		$answer =  ($input == '') ? $default : $input;
-		swriteln();
-		return $answer;
-	}
-
-	/*
-	// TODO: this function is not used atmo I think - pedro
-	function request_language(){
-		
-		swriteln(lng('Enter your language'));
-		swriteln(lng('de, en'));
-		
-	}
-	*/
-
-	//** Detect installed applications
-	public function find_installed_apps() {
-		global $conf;
-
-		if(is_installed('mysql') || is_installed('mysqld')) $conf['mysql']['installed'] = true;
-		if(is_installed('postfix')) $conf['postfix']['installed'] = true;
-		if(is_installed('mailman')) $conf['mailman']['installed'] = true;
-		if(is_installed('apache') || is_installed('apache2') || is_installed('httpd')) $conf['apache']['installed'] = true;
-		if(is_installed('getmail')) $conf['getmail']['installed'] = true;
+<?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.
+*/
+
+class installer_base {
+
+	var $wb = array();
+	var $language = 'en';
+	var $db;
+	public $conf;
+	public $install_ispconfig_interface = true;
+	public $is_update = false; // true if it is an update, falsi if it is a new install
+
+
+	public function __construct() {
+		global $conf; //TODO: maybe $conf  should be passed to constructor
+		//$this->conf = $conf;
+	}
+
+	//: TODO  Implement the translation function and language files for the installer.
+	public function lng($text) {
+		return $text;
+	}
+
+	public function error($msg) {
+		die('ERROR: '.$msg."\n");
+	}
+
+	public function warning($msg) {
+		echo('WARNING: '.$msg."\n");
+	}
+	
+	public function simple_query($query, $answers, $default) {
+		$finished = false;
+		do {
+			$answers_str = implode(',', $answers);
+			swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
+			$input = sread();
+
+			//* Stop the installation
+			if($input == 'quit') {
+				swriteln($this->lng("Installation terminated by user.\n"));
+				die();
+			}
+
+			//* Select the default
+			if($input == '') {
+				$answer = $default;
+				$finished = true;
+			}
+
+			//* Set answer id valid
+			if(in_array($input, $answers)) {
+				$answer = $input;
+				$finished = true;
+			}
+
+		} while ($finished == false);
+		swriteln();
+		return $answer;
+	}
+
+	public function free_query($query,$default) {
+		swrite($this->lng($query).' ['.$default.']: ');
+		$input = sread();
+
+		//* Stop the installation
+		if($input == 'quit') {
+			swriteln($this->lng("Installation terminated by user.\n"));
+			die();
+		}
+
+		$answer =  ($input == '') ? $default : $input;
+		swriteln();
+		return $answer;
+	}
+
+	/*
+	// TODO: this function is not used atmo I think - pedro
+	function request_language(){
+		
+		swriteln(lng('Enter your language'));
+		swriteln(lng('de, en'));
+		
+	}
+	*/
+
+	//** Detect installed applications
+	public function find_installed_apps() {
+		global $conf;
+
+		if(is_installed('mysql') || is_installed('mysqld')) $conf['mysql']['installed'] = true;
+		if(is_installed('postfix')) $conf['postfix']['installed'] = true;
+		if(is_installed('mailman')) $conf['mailman']['installed'] = true;
+		if(is_installed('apache') || is_installed('apache2') || is_installed('httpd')) $conf['apache']['installed'] = true;
+		if(is_installed('getmail')) $conf['getmail']['installed'] = true;
 		if(is_installed('courierlogger')) $conf['courier']['installed'] = true;
-		if(is_installed('dovecot')) $conf['dovecot']['installed'] = true;
-		if(is_installed('saslsauthd')) $conf['saslauthd']['installed'] = true;
-		if(is_installed('amavisd-new')) $conf['amavis']['installed'] = true;
-		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
-		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
-		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
-		if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true;
-		if(is_installed('pdns_server') || is_installed('pdns_control')) $conf['powerdns']['installed'] = true;
-		if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true;
-
-	}
-
-	/** Create the database for ISPConfig */
-	public function configure_database() {
-		global $conf;
-
-		//** Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['mysql']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
-			$this->error('Unable to create MySQL database: '.$conf['mysql']['database'].'.');
-		}
-
-		//* Set the database name in the DB library
-		$this->db->dbName = $conf['mysql']['database'];
-
-		//* Load the database dump into the database, if database contains no tables
-		$db_tables = $this->db->getTables();
-		if(count($db_tables) > 0) {
-			$this->error('Stopped: Database already contains some tables.');
-		} else {
-			if($conf['mysql']['admin_password'] == '') {
-				caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
-						__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
-			} else {
-				caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
-						__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
-			}
-			$db_tables = $this->db->getTables();
-			if(count($db_tables) == 0) {
-				$this->error('Unable to load SQL-Dump into database table.');
-			}
-
-			//* Load system.ini into the sys_ini table
-			$system_ini = $this->db->quote(rf('tpl/system.ini.master'));
-			$this->db->query("UPDATE sys_ini SET config = '$system_ini' WHERE sysini_id = 1");
-
-		}
-	}
-
-	//** Create the server record in the database
-	public function add_database_server_record() {
-
-		global $conf;
-
-		if($conf['mysql']['host'] == 'localhost') {
-			$from_host = 'localhost';
-		} else {
-			$from_host = $conf['hostname'];
-		}
-
-		// Delete ISPConfig user in the local database, in case that it exists
-		$this->db->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['ispconfig_user']."' AND Host = '".$from_host."';");
-		$this->db->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['database']."' AND Host = '".$from_host."';");
-		$this->db->query('FLUSH PRIVILEGES;');
-
-		//* Create the ISPConfig database user in the local database
-		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['database'].".* "
-				."TO '".$conf['mysql']['ispconfig_user']."'@'".$from_host."' "
-				."IDENTIFIED BY '".$conf['mysql']['ispconfig_password']."';";
-		if(!$this->db->query($query)) {
-			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
-		}
-
-		//* Reload database privelages
-		$this->db->query('FLUSH PRIVILEGES;');
-
-		//* Set the database name in the DB library
-		$this->db->dbName = $conf['mysql']['database'];
-
-		$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
-
-		//* Update further distribution specific parameters for server config here
-		//* HINT: Every line added here has to be added in update.lib.php too!!
-		$tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir'];
-		$tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir'];
-		$tpl_ini_array['jailkit']['jailkit_chroot_app_programs'] = $conf['jailkit']['jailkit_chroot_app_programs'];
-		$tpl_ini_array['fastcgi']['fastcgi_phpini_path'] = $conf['fastcgi']['fastcgi_phpini_path'];
-		$tpl_ini_array['fastcgi']['fastcgi_starter_path'] = $conf['fastcgi']['fastcgi_starter_path'];
-		$tpl_ini_array['server']['hostname'] = $conf['hostname'];
-		$tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']);
-		$tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir'];
-		$tpl_ini_array['web']['website_path'] = $conf['web']['website_path'];
-		$tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks'];
-		$tpl_ini_array['cron']['crontab_dir'] = $conf['cron']['crontab_dir'];
-		$tpl_ini_array['web']['security_level'] = 20;
-		$tpl_ini_array['web']['user'] = $conf['apache']['user'];
-		$tpl_ini_array['web']['group'] = $conf['apache']['group'];
-		$tpl_ini_array['web']['php_ini_path_apache'] = $conf['apache']['php_ini_path_apache'];
-		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
-		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
-		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
-		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
-		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
-		$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
-		$tpl_ini_array['dns']['named_conf_path'] = $conf['bind']['named_conf_path'];
-		$tpl_ini_array['dns']['named_conf_local_path'] = $conf['bind']['named_conf_local_path'];
-		
-		if (array_key_exists('awstats', $conf)) {
-			foreach ($conf['awstats'] as $aw_sett => $aw_value) {
-				$tpl_ini_array['web']['awstats_'.$aw_sett] = $aw_value;
-			}
-		}
-
-		$server_ini_content = array_to_ini($tpl_ini_array);
-		$server_ini_content = mysql_real_escape_string($server_ini_content);
-
-		$mail_server_enabled = ($conf['services']['mail'])?1:0;
-		$web_server_enabled = ($conf['services']['web'])?1:0;
-		$dns_server_enabled = ($conf['services']['dns'])?1:0;
-		$file_server_enabled = ($conf['services']['file'])?1:0;
-		$db_server_enabled = ($conf['services']['db'])?1:0;
-		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
-		
-		//** Get the database version number based on the patchfiles
-		$found = true;
-		$current_db_version = 1;
-		while($found == true) {
-			$next_db_version = intval($current_db_version + 1);
-			$patch_filename = realpath(dirname(__FILE__).'/../').'/sql/incremental/upd_'.str_pad($next_db_version, 4, '0', STR_PAD_LEFT).'.sql';
-			if(is_file($patch_filename)) {
-				$current_db_version = $next_db_version;
-			} else {
-				$found = false;
-			}
-		}
-		$current_db_version = intval($current_db_version);
-
-
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-
-			//* Insert the server record in master DB
-			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1, $current_db_version);";
-			$this->dbmaster->query($sql);
-			$conf['server_id'] = $this->dbmaster->insertID();
-			$conf['server_id'] = $conf['server_id'];
-
-			//* Insert the same record in the local DB
-			$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1, $current_db_version);";
-			$this->db->query($sql);
-
-			//* username for the ispconfig user
-			$conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
-
-			$this->grant_master_database_rights();
-
-		} else {
-			//* Insert the server, if its not a mster / slave setup
-			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1, $current_db_version);";
-			$this->db->query($sql);
-			$conf['server_id'] = $this->db->insertID();
-			$conf['server_id'] = $conf['server_id'];
-		}
-
-
-	}
-
-	public function grant_master_database_rights() {
-		global $conf;
-
-		/*
-		 * The following code is a little bit tricky:
-		 * * If we HAVE a master-slave - Setup then the client has to grant the rights for himself
-		 *   at the master.
-		 * * If we DO NOT have a master-slave - Setup then we have two possibilities
-		 *   1) it is a single server
-		 *   2) it is the MASTER of n clients
-		*/
-		$hosts = array();
-		
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-			/*
-			 * it is a master-slave - Setup so the slave has to grant its rights in the master
-			 * database
-			 */
-
-			//* insert the ispconfig user in the remote server
-			$from_host = $conf['hostname'];
-			$from_ip = gethostbyname($conf['hostname']);
-			
-			$hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user'];
-			$hosts[$from_host]['db'] = $conf['mysql']['master_database'];
-			$hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
-
-			$hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user'];
-			$hosts[$from_ip]['db'] = $conf['mysql']['master_database'];
-			$hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
-		} else{
-			/*
-			 * it is NOT a master-slave - Setup so we have to find out all clients and their
-			 * host
-			 */
-			$query = "SELECT Host, User FROM mysql.user WHERE User like 'ispcsrv%' ORDER BY User, Host";
-			$data = $this->dbmaster->queryAllRecords($query);
-			if($data === false) {
-				$this->error('Unable to get the user rights: '.$value['db'].' Error: '.$this->dbmaster->errorMessage);
-			}
-			foreach ($data as $item){
-				$hosts[$item['Host']]['user'] = $item['User'];
-				$hosts[$item['Host']]['db'] = $conf['mysql']['master_database'];
-				$hosts[$item['Host']]['pwd'] = ''; // the user already exists, so we need no pwd!
-			}
-		}
-		
-		if(count($hosts) > 0) {
-		foreach($hosts as $host => $value) {
-			/*
-			 * If a pwd exists, this means, we have to add the new user (and his pwd).
-			 * if not, the user already exists and we do not need the pwd
-			 */
-			if ($value['pwd'] != ''){
-				$query = "CREATE USER '".$value['user']."'@'".$host."' IDENTIFIED BY '" . $value['pwd'] . "'";
-				$this->dbmaster->query($query); // ignore the error
-			}
-
-			/*
-			 *  Try to delete all rights of the user in case that it exists.
-			 *  In Case that it will not exist, do nothing (ignore the error!)
-			 */
-			$query = "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '".$value['user']."'@'".$host."' ";
-			$this->dbmaster->query($query); // ignore the error
-
-			//* Create the ISPConfig database user in the remote database
-			$query = "GRANT SELECT ON ".$value['db'].".`server` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, INSERT ON ".$value['db'].".`sys_log` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, UPDATE(`status`) ON ".$value['db'].".`sys_datalog` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, UPDATE(`status`) ON ".$value['db'].".`software_update_inst` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, UPDATE(`updated`) ON ".$value['db'].".`server` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`) ON ".$value['db'].".`web_domain` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT ON ".$value['db'].".`sys_group` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, UPDATE (`action_state`, `response`) ON ".$value['db'].".`sys_remoteaction` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, INSERT , DELETE ON ".$value['db'].".`monitor_data` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, INSERT, UPDATE ON ".$value['db'].".`mail_traffic` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-
-			$query = "GRANT SELECT, INSERT, UPDATE ON ".$value['db'].".`web_traffic` TO '".$value['user']."'@'".$host."' ";
-			if(!$this->dbmaster->query($query)) {
-				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
-			}
-		}
-
-		/*
-		 * It is all done. Relod the rights...
-		 */
-		$this->dbmaster->query('FLUSH PRIVILEGES;');
-		}
-
-	}
-
-	//** writes postfix configuration files
-	public function process_postfix_config($configfile) {
-		global $conf;
-
-		$config_dir = $conf['postfix']['config_dir'].'/';
-		$full_file_name = $config_dir.$configfile;
-		//* Backup exiting file
-		if(is_file($full_file_name)) {
-			copy($full_file_name, $config_dir.$configfile.'~');
-		}
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$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_ip}', $conf['mysql']['ip'], $content);
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		wf($full_file_name, $content);
-	}
-
-	public function configure_jailkit() {
-		global $conf;
-
-		$cf = $conf['jailkit'];
-		$config_dir = $cf['config_dir'];
-		$jk_init = $cf['jk_init'];
-		$jk_chrootsh = $cf['jk_chrootsh'];
-
-		if (is_dir($config_dir)) {
-			if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$jk_init.'~');
-			if(is_file($config_dir.'/'.$jk_chrootsh.'.master')) copy($config_dir.'/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh.'~');
-
-			copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
-			copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
-		}
-
-	}
-	
-	public function configure_mailman($status = 'insert') {
-		global $conf;
-
-		$config_dir = $conf['mailman']['config_dir'].'/';
-		$full_file_name = $config_dir.'mm_cfg.py';
-		//* Backup exiting file
-		if(is_file($full_file_name)) {
-			copy($full_file_name, $config_dir.'mm_cfg.py~');
-		}
-		
-		// load files
-		$content = rf('tpl/mm_cfg.py.master');
-		$old_file = rf($full_file_name);
-		
-		$old_options = array();
-		$lines = explode("\n", $old_file); 
-		foreach ($lines as $line)
-		{
-			if (strlen($line) && substr($line, 0, 1) != '#')
-			{
-				list($key, $value) = explode("=", $line);
-				if (!empty($value))
-				{
-					$key = rtrim($key);
-					$old_options[$key] = trim($value);
-				}
-			}
-		}
-		
-		$virtual_domains = '';
-		if($status == 'update')
-		{
-			// create virtual_domains list
-			$domainAll = $this->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
-			
-			foreach($domainAll as $domain)
-			{
-				if ($domainAll[0]['domain'] == $domain['domain'])
-					$virtual_domains .= "'".$domain['domain']."'";
-				else
-					$virtual_domains .= ", '".$domain['domain']."'";
-			}
-		}
-		else
-			$virtual_domains = "' '";
-			
-		$content = str_replace('{hostname}', $conf['hostname'], $content);
-		$content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
-		$content = str_replace('{virtual_domains}', $virtual_domains, $content);
-
-		wf($full_file_name, $content);
-	}
-
-	public function configure_postfix($options = '') {
-		global $conf;
-		$cf = $conf['postfix'];
-		$config_dir = $cf['config_dir'];
-
-		if(!is_dir($config_dir)) {
-			$this->error("The postfix configuration directory '$config_dir' does not exist.");
-		}
-
-		//* mysql-virtual_domains.cf
-		$this->process_postfix_config('mysql-virtual_domains.cf');
-
-		//* mysql-virtual_forwardings.cf
-		$this->process_postfix_config('mysql-virtual_forwardings.cf');
-
-		//* mysql-virtual_mailboxes.cf
-		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
-
-		//* mysql-virtual_email2email.cf
-		$this->process_postfix_config('mysql-virtual_email2email.cf');
-
-		//* mysql-virtual_transports.cf
-		$this->process_postfix_config('mysql-virtual_transports.cf');
-
-		//* mysql-virtual_recipient.cf
-		$this->process_postfix_config('mysql-virtual_recipient.cf');
-
-		//* mysql-virtual_sender.cf
-		$this->process_postfix_config('mysql-virtual_sender.cf');
-
-		//* mysql-virtual_client.cf
-		$this->process_postfix_config('mysql-virtual_client.cf');
-
-		//* mysql-virtual_relaydomains.cf
-		$this->process_postfix_config('mysql-virtual_relaydomains.cf');
-
-		//* mysql-virtual_relayrecipientmaps.cf
-		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
-
-		//* Changing mode and group of the new created config files.
-		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-				__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-				__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
-		//* Creating virtual mail user and group
-		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
-		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
-		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$postconf_commands = array (
-				'myhostname = '.$conf['hostname'],
-				'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
-				'mynetworks = 127.0.0.0/8 [::1]/128',
-				'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_mailbox_domains = proxy:mysql:'.$config_dir.'/mysql-virtual_domains.cf',
-				'virtual_mailbox_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_mailboxes.cf',
-				'virtual_mailbox_base = '.$cf['vmail_mailbox_base'],
-				'virtual_uid_maps = static:'.$cf['vmail_userid'],
-				'virtual_gid_maps = static:'.$cf['vmail_groupid'],
-				'smtpd_sasl_auth_enable = yes',
-				'broken_sasl_auth_clients = yes',
-				'smtpd_sasl_authenticated_header = yes',
-				'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:'.$config_dir.'/mysql-virtual_recipient.cf, reject_unauth_destination',
-				'smtpd_use_tls = yes',
-				'smtpd_tls_security_level = may',
-				'smtpd_tls_cert_file = '.$config_dir.'/smtpd.cert',
-				'smtpd_tls_key_file = '.$config_dir.'/smtpd.key',
-				'transport_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_transports.cf',
-				'relay_domains = mysql:'.$config_dir.'/mysql-virtual_relaydomains.cf',
-				'relay_recipient_maps = mysql:'.$config_dir.'/mysql-virtual_relayrecipientmaps.cf',
-				'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps',
-				'smtpd_sender_restrictions = check_sender_access mysql:'.$config_dir.'/mysql-virtual_sender.cf',
-				'smtpd_client_restrictions = check_client_access mysql:'.$config_dir.'/mysql-virtual_client.cf',
-				'maildrop_destination_concurrency_limit = 1',
-				'maildrop_destination_recipient_limit   = 1',
-				'virtual_transport = maildrop',
-				'header_checks = regexp:'.$config_dir.'/header_checks',
-				'mime_header_checks = regexp:'.$config_dir.'/mime_header_checks',
-				'nested_header_checks = regexp:'.$config_dir.'/nested_header_checks',
-				'body_checks = regexp:'.$config_dir.'/body_checks',
-				'owner_request_special = no'
-		);
-
-		//* Create the header and body check files
-		touch($config_dir.'/header_checks');
-		touch($config_dir.'/mime_header_checks');
-		touch($config_dir.'/nested_header_checks');
-		touch($config_dir.'/body_checks');
-		
-		//* Create the mailman files
-		exec('mkdir -p /var/lib/mailman/data');
-		touch('/var/lib/mailman/data/aliases');
-		exec('postmap /var/lib/mailman/data/aliases');
-		touch('/var/lib/mailman/data/virtual-mailman');
-		exec('postmap /var/lib/mailman/data/virtual-mailman');
-
-		//* Make a backup copy of the main.cf file
-		copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
-
-		//* Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-		}
-
-		if(!stristr($options,'dont-create-certs')) {
-			//* Create the SSL certificate
-			$command = 'cd '.$config_dir.'; '
+		if(is_installed('dovecot')) $conf['dovecot']['installed'] = true;
+		if(is_installed('saslsauthd')) $conf['saslauthd']['installed'] = true;
+		if(is_installed('amavisd-new')) $conf['amavis']['installed'] = true;
+		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
+		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
+		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
+		if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true;
+		if(is_installed('pdns_server') || is_installed('pdns_control')) $conf['powerdns']['installed'] = true;
+		if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true;
+
+	}
+
+	/** Create the database for ISPConfig */
+	public function configure_database() {
+		global $conf;
+
+		//** Create the database
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['mysql']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
+			$this->error('Unable to create MySQL database: '.$conf['mysql']['database'].'.');
+		}
+
+		//* Set the database name in the DB library
+		$this->db->dbName = $conf['mysql']['database'];
+
+		//* Load the database dump into the database, if database contains no tables
+		$db_tables = $this->db->getTables();
+		if(count($db_tables) > 0) {
+			$this->error('Stopped: Database already contains some tables.');
+		} else {
+			if($conf['mysql']['admin_password'] == '') {
+				caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
+						__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
+			} else {
+				caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['mysql']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/ispconfig3.sql' &> /dev/null",
+						__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
+			}
+			$db_tables = $this->db->getTables();
+			if(count($db_tables) == 0) {
+				$this->error('Unable to load SQL-Dump into database table.');
+			}
+
+			//* Load system.ini into the sys_ini table
+			$system_ini = $this->db->quote(rf('tpl/system.ini.master'));
+			$this->db->query("UPDATE sys_ini SET config = '$system_ini' WHERE sysini_id = 1");
+
+		}
+	}
+
+	//** Create the server record in the database
+	public function add_database_server_record() {
+
+		global $conf;
+
+		if($conf['mysql']['host'] == 'localhost') {
+			$from_host = 'localhost';
+		} else {
+			$from_host = $conf['hostname'];
+		}
+
+		// Delete ISPConfig user in the local database, in case that it exists
+		$this->db->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['ispconfig_user']."' AND Host = '".$from_host."';");
+		$this->db->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['database']."' AND Host = '".$from_host."';");
+		$this->db->query('FLUSH PRIVILEGES;');
+
+		//* Create the ISPConfig database user in the local database
+		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['database'].".* "
+				."TO '".$conf['mysql']['ispconfig_user']."'@'".$from_host."' "
+				."IDENTIFIED BY '".$conf['mysql']['ispconfig_password']."';";
+		if(!$this->db->query($query)) {
+			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
+		}
+
+		//* Reload database privelages
+		$this->db->query('FLUSH PRIVILEGES;');
+
+		//* Set the database name in the DB library
+		$this->db->dbName = $conf['mysql']['database'];
+
+		$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
+
+		//* Update further distribution specific parameters for server config here
+		//* HINT: Every line added here has to be added in update.lib.php too!!
+		$tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir'];
+		$tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir'];
+		$tpl_ini_array['jailkit']['jailkit_chroot_app_programs'] = $conf['jailkit']['jailkit_chroot_app_programs'];
+		$tpl_ini_array['fastcgi']['fastcgi_phpini_path'] = $conf['fastcgi']['fastcgi_phpini_path'];
+		$tpl_ini_array['fastcgi']['fastcgi_starter_path'] = $conf['fastcgi']['fastcgi_starter_path'];
+		$tpl_ini_array['server']['hostname'] = $conf['hostname'];
+		$tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']);
+		$tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir'];
+		$tpl_ini_array['web']['website_path'] = $conf['web']['website_path'];
+		$tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks'];
+		$tpl_ini_array['cron']['crontab_dir'] = $conf['cron']['crontab_dir'];
+		$tpl_ini_array['web']['security_level'] = 20;
+		$tpl_ini_array['web']['user'] = $conf['apache']['user'];
+		$tpl_ini_array['web']['group'] = $conf['apache']['group'];
+		$tpl_ini_array['web']['php_ini_path_apache'] = $conf['apache']['php_ini_path_apache'];
+		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
+		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
+		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
+		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
+		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
+		$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
+		$tpl_ini_array['dns']['named_conf_path'] = $conf['bind']['named_conf_path'];
+		$tpl_ini_array['dns']['named_conf_local_path'] = $conf['bind']['named_conf_local_path'];
+		
+		if (array_key_exists('awstats', $conf)) {
+			foreach ($conf['awstats'] as $aw_sett => $aw_value) {
+				$tpl_ini_array['web']['awstats_'.$aw_sett] = $aw_value;
+			}
+		}
+
+		$server_ini_content = array_to_ini($tpl_ini_array);
+		$server_ini_content = mysql_real_escape_string($server_ini_content);
+
+		$mail_server_enabled = ($conf['services']['mail'])?1:0;
+		$web_server_enabled = ($conf['services']['web'])?1:0;
+		$dns_server_enabled = ($conf['services']['dns'])?1:0;
+		$file_server_enabled = ($conf['services']['file'])?1:0;
+		$db_server_enabled = ($conf['services']['db'])?1:0;
+		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
+		
+		//** Get the database version number based on the patchfiles
+		$found = true;
+		$current_db_version = 1;
+		while($found == true) {
+			$next_db_version = intval($current_db_version + 1);
+			$patch_filename = realpath(dirname(__FILE__).'/../').'/sql/incremental/upd_'.str_pad($next_db_version, 4, '0', STR_PAD_LEFT).'.sql';
+			if(is_file($patch_filename)) {
+				$current_db_version = $next_db_version;
+			} else {
+				$found = false;
+			}
+		}
+		$current_db_version = intval($current_db_version);
+
+
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+
+			//* Insert the server record in master DB
+			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1, $current_db_version);";
+			$this->dbmaster->query($sql);
+			$conf['server_id'] = $this->dbmaster->insertID();
+			$conf['server_id'] = $conf['server_id'];
+
+			//* Insert the same record in the local DB
+			$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1, $current_db_version);";
+			$this->db->query($sql);
+
+			//* username for the ispconfig user
+			$conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
+
+			$this->grant_master_database_rights();
+
+		} else {
+			//* Insert the server, if its not a mster / slave setup
+			$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`, `dbversion`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1, $current_db_version);";
+			$this->db->query($sql);
+			$conf['server_id'] = $this->db->insertID();
+			$conf['server_id'] = $conf['server_id'];
+		}
+
+
+	}
+
+	public function grant_master_database_rights() {
+		global $conf;
+
+		/*
+		 * The following code is a little bit tricky:
+		 * * If we HAVE a master-slave - Setup then the client has to grant the rights for himself
+		 *   at the master.
+		 * * If we DO NOT have a master-slave - Setup then we have two possibilities
+		 *   1) it is a single server
+		 *   2) it is the MASTER of n clients
+		*/
+		$hosts = array();
+		
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			/*
+			 * it is a master-slave - Setup so the slave has to grant its rights in the master
+			 * database
+			 */
+
+			//* insert the ispconfig user in the remote server
+			$from_host = $conf['hostname'];
+			$from_ip = gethostbyname($conf['hostname']);
+			
+			$hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user'];
+			$hosts[$from_host]['db'] = $conf['mysql']['master_database'];
+			$hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+
+			$hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user'];
+			$hosts[$from_ip]['db'] = $conf['mysql']['master_database'];
+			$hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password'];
+		} else{
+			/*
+			 * it is NOT a master-slave - Setup so we have to find out all clients and their
+			 * host
+			 */
+			$query = "SELECT Host, User FROM mysql.user WHERE User like 'ispcsrv%' ORDER BY User, Host";
+			$data = $this->dbmaster->queryAllRecords($query);
+			if($data === false) {
+				$this->error('Unable to get the user rights: '.$value['db'].' Error: '.$this->dbmaster->errorMessage);
+			}
+			foreach ($data as $item){
+				$hosts[$item['Host']]['user'] = $item['User'];
+				$hosts[$item['Host']]['db'] = $conf['mysql']['master_database'];
+				$hosts[$item['Host']]['pwd'] = ''; // the user already exists, so we need no pwd!
+			}
+		}
+		
+		if(count($hosts) > 0) {
+		foreach($hosts as $host => $value) {
+			/*
+			 * If a pwd exists, this means, we have to add the new user (and his pwd).
+			 * if not, the user already exists and we do not need the pwd
+			 */
+			if ($value['pwd'] != ''){
+				$query = "CREATE USER '".$value['user']."'@'".$host."' IDENTIFIED BY '" . $value['pwd'] . "'";
+				$this->dbmaster->query($query); // ignore the error
+			}
+
+			/*
+			 *  Try to delete all rights of the user in case that it exists.
+			 *  In Case that it will not exist, do nothing (ignore the error!)
+			 */
+			$query = "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '".$value['user']."'@'".$host."' ";
+			$this->dbmaster->query($query); // ignore the error
+
+			//* Create the ISPConfig database user in the remote database
+			$query = "GRANT SELECT ON ".$value['db'].".`server` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, INSERT ON ".$value['db'].".`sys_log` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, UPDATE(`status`) ON ".$value['db'].".`sys_datalog` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, UPDATE(`status`) ON ".$value['db'].".`software_update_inst` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, UPDATE(`updated`) ON ".$value['db'].".`server` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`) ON ".$value['db'].".`web_domain` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT ON ".$value['db'].".`sys_group` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, UPDATE (`action_state`, `response`) ON ".$value['db'].".`sys_remoteaction` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, INSERT , DELETE ON ".$value['db'].".`monitor_data` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, INSERT, UPDATE ON ".$value['db'].".`mail_traffic` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+
+			$query = "GRANT SELECT, INSERT, UPDATE ON ".$value['db'].".`web_traffic` TO '".$value['user']."'@'".$host."' ";
+			if(!$this->dbmaster->query($query)) {
+				$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
+			}
+		}
+
+		/*
+		 * It is all done. Relod the rights...
+		 */
+		$this->dbmaster->query('FLUSH PRIVILEGES;');
+		}
+
+	}
+
+	//** writes postfix configuration files
+	public function process_postfix_config($configfile) {
+		global $conf;
+
+		$config_dir = $conf['postfix']['config_dir'].'/';
+		$full_file_name = $config_dir.$configfile;
+		//* Backup exiting file
+		if(is_file($full_file_name)) {
+			copy($full_file_name, $config_dir.$configfile.'~');
+		}
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$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_ip}', $conf['mysql']['ip'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		wf($full_file_name, $content);
+	}
+
+	public function configure_jailkit() {
+		global $conf;
+
+		$cf = $conf['jailkit'];
+		$config_dir = $cf['config_dir'];
+		$jk_init = $cf['jk_init'];
+		$jk_chrootsh = $cf['jk_chrootsh'];
+
+		if (is_dir($config_dir)) {
+			if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$jk_init.'~');
+			if(is_file($config_dir.'/'.$jk_chrootsh.'.master')) copy($config_dir.'/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh.'~');
+
+			copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
+			copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
+		}
+
+	}
+	
+	public function configure_mailman($status = 'insert') {
+		global $conf;
+
+		$config_dir = $conf['mailman']['config_dir'].'/';
+		$full_file_name = $config_dir.'mm_cfg.py';
+		//* Backup exiting file
+		if(is_file($full_file_name)) {
+			copy($full_file_name, $config_dir.'mm_cfg.py~');
+		}
+		
+		// load files
+		$content = rf('tpl/mm_cfg.py.master');
+		$old_file = rf($full_file_name);
+		
+		$old_options = array();
+		$lines = explode("\n", $old_file); 
+		foreach ($lines as $line)
+		{
+			if (strlen($line) && substr($line, 0, 1) != '#')
+			{
+				list($key, $value) = explode("=", $line);
+				if (!empty($value))
+				{
+					$key = rtrim($key);
+					$old_options[$key] = trim($value);
+				}
+			}
+		}
+		
+		$virtual_domains = '';
+		if($status == 'update')
+		{
+			// create virtual_domains list
+			$domainAll = $this->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
+			
+			foreach($domainAll as $domain)
+			{
+				if ($domainAll[0]['domain'] == $domain['domain'])
+					$virtual_domains .= "'".$domain['domain']."'";
+				else
+					$virtual_domains .= ", '".$domain['domain']."'";
+			}
+		}
+		else
+			$virtual_domains = "' '";
+			
+		$content = str_replace('{hostname}', $conf['hostname'], $content);
+		$content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
+		$content = str_replace('{virtual_domains}', $virtual_domains, $content);
+
+		wf($full_file_name, $content);
+	}
+
+	public function configure_postfix($options = '') {
+		global $conf;
+		$cf = $conf['postfix'];
+		$config_dir = $cf['config_dir'];
+
+		if(!is_dir($config_dir)) {
+			$this->error("The postfix configuration directory '$config_dir' does not exist.");
+		}
+
+		//* mysql-virtual_domains.cf
+		$this->process_postfix_config('mysql-virtual_domains.cf');
+
+		//* mysql-virtual_forwardings.cf
+		$this->process_postfix_config('mysql-virtual_forwardings.cf');
+
+		//* mysql-virtual_mailboxes.cf
+		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
+
+		//* mysql-virtual_email2email.cf
+		$this->process_postfix_config('mysql-virtual_email2email.cf');
+
+		//* mysql-virtual_transports.cf
+		$this->process_postfix_config('mysql-virtual_transports.cf');
+
+		//* mysql-virtual_recipient.cf
+		$this->process_postfix_config('mysql-virtual_recipient.cf');
+
+		//* mysql-virtual_sender.cf
+		$this->process_postfix_config('mysql-virtual_sender.cf');
+
+		//* mysql-virtual_client.cf
+		$this->process_postfix_config('mysql-virtual_client.cf');
+
+		//* mysql-virtual_relaydomains.cf
+		$this->process_postfix_config('mysql-virtual_relaydomains.cf');
+
+		//* mysql-virtual_relayrecipientmaps.cf
+		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
+
+		//* Changing mode and group of the new created config files.
+		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
+				__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
+		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
+				__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
+
+		//* Creating virtual mail user and group
+		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
+		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
+		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$postconf_commands = array (
+				'myhostname = '.$conf['hostname'],
+				'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
+				'mynetworks = 127.0.0.0/8 [::1]/128',
+				'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_mailbox_domains = proxy:mysql:'.$config_dir.'/mysql-virtual_domains.cf',
+				'virtual_mailbox_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_mailboxes.cf',
+				'virtual_mailbox_base = '.$cf['vmail_mailbox_base'],
+				'virtual_uid_maps = static:'.$cf['vmail_userid'],
+				'virtual_gid_maps = static:'.$cf['vmail_groupid'],
+				'smtpd_sasl_auth_enable = yes',
+				'broken_sasl_auth_clients = yes',
+				'smtpd_sasl_authenticated_header = yes',
+				'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:'.$config_dir.'/mysql-virtual_recipient.cf, reject_unauth_destination',
+				'smtpd_use_tls = yes',
+				'smtpd_tls_security_level = may',
+				'smtpd_tls_cert_file = '.$config_dir.'/smtpd.cert',
+				'smtpd_tls_key_file = '.$config_dir.'/smtpd.key',
+				'transport_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_transports.cf',
+				'relay_domains = mysql:'.$config_dir.'/mysql-virtual_relaydomains.cf',
+				'relay_recipient_maps = mysql:'.$config_dir.'/mysql-virtual_relayrecipientmaps.cf',
+				'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps',
+				'smtpd_sender_restrictions = check_sender_access mysql:'.$config_dir.'/mysql-virtual_sender.cf',
+				'smtpd_client_restrictions = check_client_access mysql:'.$config_dir.'/mysql-virtual_client.cf',
+				'maildrop_destination_concurrency_limit = 1',
+				'maildrop_destination_recipient_limit   = 1',
+				'virtual_transport = maildrop',
+				'header_checks = regexp:'.$config_dir.'/header_checks',
+				'mime_header_checks = regexp:'.$config_dir.'/mime_header_checks',
+				'nested_header_checks = regexp:'.$config_dir.'/nested_header_checks',
+				'body_checks = regexp:'.$config_dir.'/body_checks',
+				'owner_request_special = no'
+		);
+
+		//* Create the header and body check files
+		touch($config_dir.'/header_checks');
+		touch($config_dir.'/mime_header_checks');
+		touch($config_dir.'/nested_header_checks');
+		touch($config_dir.'/body_checks');
+		
+		//* Create the mailman files
+		exec('mkdir -p /var/lib/mailman/data');
+		touch('/var/lib/mailman/data/aliases');
+		exec('postmap /var/lib/mailman/data/aliases');
+		touch('/var/lib/mailman/data/virtual-mailman');
+		exec('postmap /var/lib/mailman/data/virtual-mailman');
+
+		//* Make a backup copy of the main.cf file
+		copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
+
+		//* Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
+			$command = "postconf -e '$cmd'";
+			caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+		}
+
+		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 3650 -x509';
-			exec($command);
-
-			$command = 'chmod o= '.$config_dir.'/smtpd.key';
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-		}
-
-		//** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
-		$command = 'chmod 755  /var/run/courier/authdaemon/';
-		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-
-		//* Changing maildrop lines in posfix master.cf
-		if(is_file($config_dir.'/master.cf')) {
-			copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-		}
-		if(is_file($config_dir.'/master.cf~')) {
-			chmod($config_dir.'/master.cf~', 0400);
-		}
-		$configfile = $config_dir.'/master.cf';
-		$content = rf($configfile);
-		$content = str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
-				'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
-				$content);
-		wf($configfile, $content);
-
-		//* Writing the Maildrop mailfilter file
-		$configfile = 'mailfilter';
-		if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)) {
-			copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
-		}
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
-		wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
-
-		//* Create the directory for the custom mailfilters
-		if(!is_dir($cf['vmail_mailbox_base'].'/mailfilters')) {
-			$command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* Chmod and chown the .mailfilter file
-		$command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
-		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
-		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-	}
-
-	public function configure_saslauthd() {
-		global $conf;
-
-
-		$configfile = 'sasl_smtpd.conf';
-		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf')) copy($conf['postfix']['config_dir'].'/sasl/smtpd.conf',$conf['postfix']['config_dir'].'/sasl/smtpd.conf~');
-		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf~')) chmod($conf['postfix']['config_dir'].'/sasl/smtpd.conf~', 0400);
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-		$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_ip}',$conf['mysql']['ip'],$content);
-		wf($conf['postfix']['config_dir'].'/sasl/smtpd.conf',$content);
-
-		// TODO: Chmod and chown on the config file
-
-
-		// Recursively create the spool directory
-		if(!@is_dir('/var/spool/postfix/var/run/saslauthd')) mkdir('/var/spool/postfix/var/run/saslauthd', 0755, true);
-
-		// Edit the file /etc/default/saslauthd
-		$configfile = $conf['saslauthd']['config'];
-		if(is_file($configfile)) copy($configfile,$configfile.'~');
-		if(is_file($configfile.'~')) chmod($configfile.'~', 0400);
-		$content = rf($configfile);
-		$content = str_replace('START=no','START=yes',$content);
-		// Debian
-		$content = str_replace('OPTIONS="-c"','OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"',$content);
-		// Ubuntu
-		$content = str_replace('OPTIONS="-c -m /var/run/saslauthd"','OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"',$content);
-		wf($configfile,$content);
-
-		// Edit the file /etc/init.d/saslauthd
-		$configfile = $conf['init_scripts'].'/'.$conf['saslauthd']['init_script'];
-		$content = rf($configfile);
-		$content = str_replace('PIDFILE=$RUN_DIR/saslauthd.pid','PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"',$content);
-		wf($configfile,$content);
-
-		// add the postfix user to the sasl group (at least necessary for Ubuntu 8.04 and most likely Debian Lenny as well.
-		exec('adduser postfix sasl');
-
-
-	}
-
-	public function configure_pam() {
-		global $conf;
-		$pam = $conf['pam'];
-		//* configure pam for SMTP authentication agains the ispconfig database
-		$configfile = 'pamd_smtp';
-		if(is_file($pam.'/smtp'))    copy($pam.'/smtp', $pam.'/smtp~');
-		if(is_file($pam.'/smtp~'))   chmod($pam.'/smtp~', 0400);
-
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$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_ip}', $conf['mysql']['ip'], $content);
-		wf($pam.'/smtp', $content);
-		// On some OSes smtp is world readable which allows for reading database information.  Removing world readable rights should have no effect.
-		if(is_file($pam.'/smtp'))    exec("chmod o= $pam/smtp");
-		chmod($pam.'/smtp', 0660);
-		chown($pam.'/smtp', 'daemon');
-		chgrp($pam.'/smtp', 'daemon');
-
-	}
-
-	public function configure_courier() {
-		global $conf;
-		$config_dir = $conf['courier']['config_dir'];
-		//* authmysqlrc
-		$configfile = 'authmysqlrc';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		chmod($config_dir.'/'.$configfile.'~', 0400);
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-		$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);
-		wf($config_dir.'/'.$configfile, $content);
-
-		chmod($config_dir.'/'.$configfile, 0660);
-		chown($config_dir.'/'.$configfile, 'daemon');
-		chgrp($config_dir.'/'.$configfile, 'daemon');
-
-		//* authdaemonrc
-		$configfile = $config_dir.'/authdaemonrc';
-		if(is_file($configfile)) {
-			copy($configfile, $configfile.'~');
-		}
-		if(is_file($configfile.'~')) {
-			chmod($configfile.'~', 0400);
-		}
-		$content = rf($configfile);
-		$content = str_replace('authmodulelist="authpam"', 'authmodulelist="authmysql"', $content);
-		wf($configfile, $content);
-	}
-
-	public function configure_dovecot() {
-		global $conf;
-
-		$config_dir = $conf['dovecot']['config_dir'];
-
-		//* Configure master.cf and add a line for deliver
-		if(is_file($conf['postfix']['config_dir'].'/master.cf')) {
-			copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~2');
-		}
-		if(is_file($conf['postfix']['config_dir'].'/master.cf~')) {
-			chmod($conf['postfix']['config_dir'].'/master.cf~2', 0400);
-		}
-		$content = rf($conf['postfix']['config_dir'].'/master.cf');
-		// Only add the content if we had not addded it before
-		if(!stristr($content,'dovecot/deliver')) {
-			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
-			af($conf['postfix']['config_dir'].'/master.cf',$deliver_content);
-		}
-		unset($content);
-		unset($deliver_content);
-
-
-		//* Reconfigure postfix to use dovecot authentication
-		// Adding the amavisd commands to the postfix configuration
-		$postconf_commands = array (
-				'dovecot_destination_recipient_limit = 1',
-				'virtual_transport = dovecot',
-				'smtpd_sasl_type = dovecot',
-				'smtpd_sasl_path = private/auth'
-		);
-
-		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf',$conf['postfix']['config_dir'].'/main.cf~3');
-
-		// Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* copy dovecot.conf
-		$configfile = 'dovecot.conf';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		copy('tpl/debian_dovecot.conf.master',$config_dir.'/'.$configfile);
-
-		//* dovecot-sql.conf
-		$configfile = 'dovecot-sql.conf';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		chmod($config_dir.'/'.$configfile.'~', 0400);
-		$content = rf('tpl/debian_dovecot-sql.conf.master');
-		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-		$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);
-		wf($config_dir.'/'.$configfile, $content);
-
-		chmod($config_dir.'/'.$configfile, 0600);
-		chown($config_dir.'/'.$configfile, 'root');
-		chgrp($config_dir.'/'.$configfile, 'root');
-
-	}
-
-	public function configure_amavis() {
-		global $conf;
-
-		// amavisd user config file
-		$configfile = 'amavisd_user_config';
-		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user',$conf['amavis']['config_dir'].'/50-user~');
-		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user~', 0400);
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-		$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_port}',$conf['mysql']['port'],$content);
-		$content = str_replace('{mysql_server_ip}',$conf['mysql']['ip'],$content);
-		wf($conf['amavis']['config_dir'].'/conf.d/50-user',$content);
-
-		// TODO: chmod and chown on the config file
-
-
-		// Adding the amavisd commands to the postfix configuration
-		$postconf_commands = array (
-				'content_filter = amavis:[127.0.0.1]:10024',
-				'receive_override_options = no_address_mappings'
-		);
-
-		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf',$conf['postfix']['config_dir'].'/main.cf~2');
-
-		// Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		// Append the configuration for amavisd to the master.cf file
-		if(is_file($conf['postfix']['config_dir'].'/master.cf')) copy($conf['postfix']['config_dir'].'/master.cf',$conf['postfix']['config_dir'].'/master.cf~');
-		$content = rf($conf['postfix']['config_dir'].'/master.cf');
-		// Only add the content if we had not addded it before
-		if(!stristr($content,'127.0.0.1:10025')) {
-			unset($content);
-			$content = rf('tpl/master_cf_amavis.master');
-			af($conf['postfix']['config_dir'].'/master.cf',$content);
-		}
-		unset($content);
-
-		// Add the clamav user to the amavis group
-		exec('adduser clamav amavis');
-
-
-	}
-
-	public function configure_spamassassin() {
-		global $conf;
-
-		//* Enable spamasasssin on debian and ubuntu
-		$configfile = '/etc/default/spamassassin';
-		if(is_file($configfile)) {
-			copy($configfile, $configfile.'~');
-		}
-		$content = rf($configfile);
-		$content = str_replace('ENABLED=0', 'ENABLED=1', $content);
-		wf($configfile, $content);
-	}
-
-	public function configure_getmail() {
-		global $conf;
-
-		$config_dir = $conf['getmail']['config_dir'];
-
-		if(!@is_dir($config_dir)) mkdir(escapeshellcmd($config_dir), 0700, true);
-
-		$command = 'useradd -d '.$config_dir.' getmail';
-		if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = "chown -R getmail $config_dir";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = "chmod -R 700 $config_dir";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-	}
-
-
-	public function configure_pureftpd() {
-		global $conf;
-
-		$config_dir = $conf['pureftpd']['config_dir'];
-
-		//* configure pure-ftpd for MySQL authentication against the ispconfig database
-		$configfile = 'db/mysql.conf';
-		if(is_file($config_dir.'/'.$configfile)) {
-			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
-		}
-		if(is_file($config_dir.'/'.$configfile.'~')) {
-			chmod($config_dir.'/'.$configfile.'~', 0400);
-		}
-		$content = rf('tpl/pureftpd_mysql.conf.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$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_ip}', $conf['mysql']['ip'], $content);
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		wf($config_dir.'/'.$configfile, $content);
-		chmod($config_dir.'/'.$configfile, 0600);
-		chown($config_dir.'/'.$configfile, 'root');
-		chgrp($config_dir.'/'.$configfile, 'root');
-		// **enable chrooting
-		//exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone');
-		exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone');
-		exec('echo "yes" > '.$config_dir.'/conf/BrokenClientsCompatibility');
-		exec('echo "yes" > '.$config_dir.'/conf/DisplayDotFiles');
-
-		if(is_file('/etc/default/pure-ftpd-common')) {
-			replaceLine('/etc/default/pure-ftpd-common','STANDALONE_OR_INETD=inetd','STANDALONE_OR_INETD=standalone',1,0);
-			replaceLine('/etc/default/pure-ftpd-common','VIRTUALCHROOT=false','VIRTUALCHROOT=true',1,0);
-		}
-
-		if(is_file('/etc/inetd.conf')) {
-			replaceLine('/etc/inetd.conf','/usr/sbin/pure-ftpd-wrapper','#ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper',0,0);
-			if(is_file($conf['init_scripts'].'/'.'openbsd-inetd')) exec($conf['init_scripts'].'/'.'openbsd-inetd restart');
-		}
-
-		if(!is_file('/etc/pure-ftpd/conf/DontResolve')) exec('echo "yes" > /etc/pure-ftpd/conf/DontResolve');
-	}
-
-	public function configure_mydns() {
-		global $conf;
-
-		// configure pam for SMTP authentication agains the ispconfig database
-		$configfile = 'mydns.conf';
-		if(is_file($conf['mydns']['config_dir'].'/'.$configfile)) copy($conf['mydns']['config_dir'].'/'.$configfile,$conf['mydns']['config_dir'].'/'.$configfile.'~');
-		if(is_file($conf['mydns']['config_dir'].'/'.$configfile.'~')) chmod($conf['mydns']['config_dir'].'/'.$configfile.'~', 0400);
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-		$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($conf['mydns']['config_dir'].'/'.$configfile,$content);
-		chmod($conf['mydns']['config_dir'].'/'.$configfile, 0600);
-		chown($conf['mydns']['config_dir'].'/'.$configfile, 'root');
-		chgrp($conf['mydns']['config_dir'].'/'.$configfile, 'root');
-
-	}
-
-	public function configure_powerdns() {
-		global $conf;
-
-		//* Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['powerdns']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
-			$this->error('Unable to create MySQL database: '.$conf['powerdns']['database'].'.');
-		}
-
-		//* Create the ISPConfig database user in the local database
-		$query = "GRANT ALL ON `".$conf['powerdns']['database']."` . * TO '".$conf['mysql']['ispconfig_user']."'@'localhost';";
-		if(!$this->db->query($query)) {
-			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
-		}
-
-		//* Reload database privelages
-		$this->db->query('FLUSH PRIVILEGES;');
-
-		//* load the powerdns databse dump
-		if($conf['mysql']['admin_password'] == '') {
-			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
-					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
-		} else {
-			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
-					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
-		}
-
-		//* Create the powerdns config file
-		$configfile = 'pdns.local';
-		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile)) copy($conf['powerdns']['config_dir'].'/'.$configfile,$conf['powerdns']['config_dir'].'/'.$configfile.'~');
-		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile.'~')) chmod($conf['powerdns']['config_dir'].'/'.$configfile.'~', 0400);
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
-		$content = str_replace('{powerdns_database}',$conf['powerdns']['database'],$content);
-		$content = str_replace('{mysql_server_host}',$conf['mysql']['host'],$content);
-		wf($conf['powerdns']['config_dir'].'/'.$configfile,$content);
-		chmod($conf['powerdns']['config_dir'].'/'.$configfile, 0600);
-		chown($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
-		chgrp($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
-
-
-	}
-
-	public function configure_bind() {
-		global $conf;
-
-	    //* Check if the zonefile directory has a slash at the end
-	    $content=$conf['bind']['bind_zonefiles_dir'];
-	    if(substr($content,-1,1) != '/') {
-    	    $content .= '/';
-		}
-
-		//* Create the slave subdirectory
-	    $content .= 'slave';
-	    if(!@is_dir($content)) mkdir($content, 0770, true);
-
-	    //* Chown the slave subdirectory to $conf['bind']['bind_user']
-	    chown($content, $conf['bind']['bind_user']);
-	    chgrp($content, $conf['bind']['bind_group']);
-
-	}
-
-
-
-	public function configure_apache() {
-		global $conf;
-
-		//* Create the logging directory for the vhost logfiles
-		if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
-
-		if(is_file('/etc/suphp/suphp.conf')) {
-			replaceLine('/etc/suphp/suphp.conf','php=php:/usr/bin','x-httpd-suphp="php:/usr/bin/php-cgi"',0);
-			//replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
-			replaceLine('/etc/suphp/suphp.conf','umask=0077','umask=0022',0);
-		}
-
-		if(is_file('/etc/apache2/sites-enabled/000-default')) {
-			replaceLine('/etc/apache2/sites-available/000-default','NameVirtualHost *','NameVirtualHost *:80',1,0);
-			replaceLine('/etc/apache2/sites-available/000-default','<VirtualHost *>','<VirtualHost *:80>',1,0);
-		}
-
-		if(is_file('/etc/apache2/ports.conf')) {
-			// add a line "Listen 443" to ports conf if line does not exist
-			replaceLine('/etc/apache2/ports.conf','Listen 443','Listen 443',1);
-		}
-
-
-		//* Copy the ISPConfig configuration include
-		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
-		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
-
-		// copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf');
-
-		$content = rf('tpl/apache_ispconfig.conf.master');
-		$records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
-		if(is_array($records) && count($records) > 0) {
-			foreach($records as $rec) {
-				$content .= 'NameVirtualHost '.$rec['ip_address'].":80\n";
-				$content .= 'NameVirtualHost '.$rec['ip_address'].":443\n";
-			}
-		}
-		$content .= "\n";
-		wf($vhost_conf_dir.'/ispconfig.conf',$content);
-
-		if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.conf')) {
-			symlink($vhost_conf_dir.'/ispconfig.conf',$vhost_conf_enabled_dir.'/000-ispconfig.conf');
-		}
-
-		//* make sure that webalizer finds its config file when it is directly in /etc
-		if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
-			mkdir('/etc/webalizer');
-			symlink('/etc/webalizer.conf','/etc/webalizer/webalizer.conf');
-		}
-
-		if(is_file('/etc/webalizer/webalizer.conf')) {
-			// Change webalizer mode to incremental
-			replaceLine('/etc/webalizer/webalizer.conf','#IncrementalName','IncrementalName webalizer.current',0,0);
-			replaceLine('/etc/webalizer/webalizer.conf','#Incremental','Incremental     yes',0,0);
-			replaceLine('/etc/webalizer/webalizer.conf','#HistoryName','HistoryName     webalizer.hist',0,0);
-		}
-		
-		// Check the awsatst script
-		if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
-		if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl','/usr/share/awstats/tools/awstats_buildstaticpages.pl');
+			exec($command);
+
+			$command = 'chmod o= '.$config_dir.'/smtpd.key';
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+		}
+
+		//** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
+		$command = 'chmod 755  /var/run/courier/authdaemon/';
+		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+
+		//* Changing maildrop lines in posfix master.cf
+		if(is_file($config_dir.'/master.cf')) {
+			copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+		}
+		if(is_file($config_dir.'/master.cf~')) {
+			chmod($config_dir.'/master.cf~', 0400);
+		}
+		$configfile = $config_dir.'/master.cf';
+		$content = rf($configfile);
+		$content = str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
+				'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
+				$content);
+		wf($configfile, $content);
+
+		//* Writing the Maildrop mailfilter file
+		$configfile = 'mailfilter';
+		if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)) {
+			copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
+		}
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
+		wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
+
+		//* Create the directory for the custom mailfilters
+		if(!is_dir($cf['vmail_mailbox_base'].'/mailfilters')) {
+			$command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		//* Chmod and chown the .mailfilter file
+		$command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
+		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
+		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+	}
+
+	public function configure_saslauthd() {
+		global $conf;
+
+
+		$configfile = 'sasl_smtpd.conf';
+		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf')) copy($conf['postfix']['config_dir'].'/sasl/smtpd.conf',$conf['postfix']['config_dir'].'/sasl/smtpd.conf~');
+		if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf~')) chmod($conf['postfix']['config_dir'].'/sasl/smtpd.conf~', 0400);
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+		$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_ip}',$conf['mysql']['ip'],$content);
+		wf($conf['postfix']['config_dir'].'/sasl/smtpd.conf',$content);
+
+		// TODO: Chmod and chown on the config file
+
+
+		// Recursively create the spool directory
+		if(!@is_dir('/var/spool/postfix/var/run/saslauthd')) mkdir('/var/spool/postfix/var/run/saslauthd', 0755, true);
+
+		// Edit the file /etc/default/saslauthd
+		$configfile = $conf['saslauthd']['config'];
+		if(is_file($configfile)) copy($configfile,$configfile.'~');
+		if(is_file($configfile.'~')) chmod($configfile.'~', 0400);
+		$content = rf($configfile);
+		$content = str_replace('START=no','START=yes',$content);
+		// Debian
+		$content = str_replace('OPTIONS="-c"','OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"',$content);
+		// Ubuntu
+		$content = str_replace('OPTIONS="-c -m /var/run/saslauthd"','OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"',$content);
+		wf($configfile,$content);
+
+		// Edit the file /etc/init.d/saslauthd
+		$configfile = $conf['init_scripts'].'/'.$conf['saslauthd']['init_script'];
+		$content = rf($configfile);
+		$content = str_replace('PIDFILE=$RUN_DIR/saslauthd.pid','PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"',$content);
+		wf($configfile,$content);
+
+		// add the postfix user to the sasl group (at least necessary for Ubuntu 8.04 and most likely Debian Lenny as well.
+		exec('adduser postfix sasl');
+
+
+	}
+
+	public function configure_pam() {
+		global $conf;
+		$pam = $conf['pam'];
+		//* configure pam for SMTP authentication agains the ispconfig database
+		$configfile = 'pamd_smtp';
+		if(is_file($pam.'/smtp'))    copy($pam.'/smtp', $pam.'/smtp~');
+		if(is_file($pam.'/smtp~'))   chmod($pam.'/smtp~', 0400);
+
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$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_ip}', $conf['mysql']['ip'], $content);
+		wf($pam.'/smtp', $content);
+		// On some OSes smtp is world readable which allows for reading database information.  Removing world readable rights should have no effect.
+		if(is_file($pam.'/smtp'))    exec("chmod o= $pam/smtp");
+		chmod($pam.'/smtp', 0660);
+		chown($pam.'/smtp', 'daemon');
+		chgrp($pam.'/smtp', 'daemon');
+
+	}
+
+	public function configure_courier() {
+		global $conf;
+		$config_dir = $conf['courier']['config_dir'];
+		//* authmysqlrc
+		$configfile = 'authmysqlrc';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		chmod($config_dir.'/'.$configfile.'~', 0400);
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+		$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);
+		wf($config_dir.'/'.$configfile, $content);
+
+		chmod($config_dir.'/'.$configfile, 0660);
+		chown($config_dir.'/'.$configfile, 'daemon');
+		chgrp($config_dir.'/'.$configfile, 'daemon');
+
+		//* authdaemonrc
+		$configfile = $config_dir.'/authdaemonrc';
+		if(is_file($configfile)) {
+			copy($configfile, $configfile.'~');
+		}
+		if(is_file($configfile.'~')) {
+			chmod($configfile.'~', 0400);
+		}
+		$content = rf($configfile);
+		$content = str_replace('authmodulelist="authpam"', 'authmodulelist="authmysql"', $content);
+		wf($configfile, $content);
+	}
+
+	public function configure_dovecot() {
+		global $conf;
+
+		$config_dir = $conf['dovecot']['config_dir'];
+
+		//* Configure master.cf and add a line for deliver
+		if(is_file($conf['postfix']['config_dir'].'/master.cf')) {
+			copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~2');
+		}
+		if(is_file($conf['postfix']['config_dir'].'/master.cf~')) {
+			chmod($conf['postfix']['config_dir'].'/master.cf~2', 0400);
+		}
+		$content = rf($conf['postfix']['config_dir'].'/master.cf');
+		// Only add the content if we had not addded it before
+		if(!stristr($content,'dovecot/deliver')) {
+			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
+			af($conf['postfix']['config_dir'].'/master.cf',$deliver_content);
+		}
+		unset($content);
+		unset($deliver_content);
+
+
+		//* Reconfigure postfix to use dovecot authentication
+		// Adding the amavisd commands to the postfix configuration
+		$postconf_commands = array (
+				'dovecot_destination_recipient_limit = 1',
+				'virtual_transport = dovecot',
+				'smtpd_sasl_type = dovecot',
+				'smtpd_sasl_path = private/auth'
+		);
+
+		// Make a backup copy of the main.cf file
+		copy($conf['postfix']['config_dir'].'/main.cf',$conf['postfix']['config_dir'].'/main.cf~3');
+
+		// Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
+			$command = "postconf -e '$cmd'";
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		//* copy dovecot.conf
+		$configfile = 'dovecot.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		copy('tpl/debian_dovecot.conf.master',$config_dir.'/'.$configfile);
+
+		//* dovecot-sql.conf
+		$configfile = 'dovecot-sql.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		chmod($config_dir.'/'.$configfile.'~', 0400);
+		$content = rf('tpl/debian_dovecot-sql.conf.master');
+		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+		$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);
+		wf($config_dir.'/'.$configfile, $content);
+
+		chmod($config_dir.'/'.$configfile, 0600);
+		chown($config_dir.'/'.$configfile, 'root');
+		chgrp($config_dir.'/'.$configfile, 'root');
+
+	}
+
+	public function configure_amavis() {
+		global $conf;
+
+		// amavisd user config file
+		$configfile = 'amavisd_user_config';
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user',$conf['amavis']['config_dir'].'/50-user~');
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user~', 0400);
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+		$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_port}',$conf['mysql']['port'],$content);
+		$content = str_replace('{mysql_server_ip}',$conf['mysql']['ip'],$content);
+		wf($conf['amavis']['config_dir'].'/conf.d/50-user',$content);
+
+		// TODO: chmod and chown on the config file
+
+
+		// Adding the amavisd commands to the postfix configuration
+		$postconf_commands = array (
+				'content_filter = amavis:[127.0.0.1]:10024',
+				'receive_override_options = no_address_mappings'
+		);
+
+		// Make a backup copy of the main.cf file
+		copy($conf['postfix']['config_dir'].'/main.cf',$conf['postfix']['config_dir'].'/main.cf~2');
+
+		// Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
+			$command = "postconf -e '$cmd'";
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		// Append the configuration for amavisd to the master.cf file
+		if(is_file($conf['postfix']['config_dir'].'/master.cf')) copy($conf['postfix']['config_dir'].'/master.cf',$conf['postfix']['config_dir'].'/master.cf~');
+		$content = rf($conf['postfix']['config_dir'].'/master.cf');
+		// Only add the content if we had not addded it before
+		if(!stristr($content,'127.0.0.1:10025')) {
+			unset($content);
+			$content = rf('tpl/master_cf_amavis.master');
+			af($conf['postfix']['config_dir'].'/master.cf',$content);
+		}
+		unset($content);
+
+		// Add the clamav user to the amavis group
+		exec('adduser clamav amavis');
+
+
+	}
+
+	public function configure_spamassassin() {
+		global $conf;
+
+		//* Enable spamasasssin on debian and ubuntu
+		$configfile = '/etc/default/spamassassin';
+		if(is_file($configfile)) {
+			copy($configfile, $configfile.'~');
+		}
+		$content = rf($configfile);
+		$content = str_replace('ENABLED=0', 'ENABLED=1', $content);
+		wf($configfile, $content);
+	}
+
+	public function configure_getmail() {
+		global $conf;
+
+		$config_dir = $conf['getmail']['config_dir'];
+
+		if(!@is_dir($config_dir)) mkdir(escapeshellcmd($config_dir), 0700, true);
+
+		$command = 'useradd -d '.$config_dir.' getmail';
+		if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = "chown -R getmail $config_dir";
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = "chmod -R 700 $config_dir";
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+	}
+
+
+	public function configure_pureftpd() {
+		global $conf;
+
+		$config_dir = $conf['pureftpd']['config_dir'];
+
+		//* configure pure-ftpd for MySQL authentication against the ispconfig database
+		$configfile = 'db/mysql.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		if(is_file($config_dir.'/'.$configfile.'~')) {
+			chmod($config_dir.'/'.$configfile.'~', 0400);
+		}
+		$content = rf('tpl/pureftpd_mysql.conf.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$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_ip}', $conf['mysql']['ip'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		wf($config_dir.'/'.$configfile, $content);
+		chmod($config_dir.'/'.$configfile, 0600);
+		chown($config_dir.'/'.$configfile, 'root');
+		chgrp($config_dir.'/'.$configfile, 'root');
+		// **enable chrooting
+		//exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone');
+		exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone');
+		exec('echo "yes" > '.$config_dir.'/conf/BrokenClientsCompatibility');
+		exec('echo "yes" > '.$config_dir.'/conf/DisplayDotFiles');
+
+		if(is_file('/etc/default/pure-ftpd-common')) {
+			replaceLine('/etc/default/pure-ftpd-common','STANDALONE_OR_INETD=inetd','STANDALONE_OR_INETD=standalone',1,0);
+			replaceLine('/etc/default/pure-ftpd-common','VIRTUALCHROOT=false','VIRTUALCHROOT=true',1,0);
+		}
+
+		if(is_file('/etc/inetd.conf')) {
+			replaceLine('/etc/inetd.conf','/usr/sbin/pure-ftpd-wrapper','#ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper',0,0);
+			if(is_file($conf['init_scripts'].'/'.'openbsd-inetd')) exec($conf['init_scripts'].'/'.'openbsd-inetd restart');
+		}
+
+		if(!is_file('/etc/pure-ftpd/conf/DontResolve')) exec('echo "yes" > /etc/pure-ftpd/conf/DontResolve');
+	}
+
+	public function configure_mydns() {
+		global $conf;
+
+		// configure pam for SMTP authentication agains the ispconfig database
+		$configfile = 'mydns.conf';
+		if(is_file($conf['mydns']['config_dir'].'/'.$configfile)) copy($conf['mydns']['config_dir'].'/'.$configfile,$conf['mydns']['config_dir'].'/'.$configfile.'~');
+		if(is_file($conf['mydns']['config_dir'].'/'.$configfile.'~')) chmod($conf['mydns']['config_dir'].'/'.$configfile.'~', 0400);
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+		$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($conf['mydns']['config_dir'].'/'.$configfile,$content);
+		chmod($conf['mydns']['config_dir'].'/'.$configfile, 0600);
+		chown($conf['mydns']['config_dir'].'/'.$configfile, 'root');
+		chgrp($conf['mydns']['config_dir'].'/'.$configfile, 'root');
+
+	}
+
+	public function configure_powerdns() {
+		global $conf;
+
+		//* Create the database
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['powerdns']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
+			$this->error('Unable to create MySQL database: '.$conf['powerdns']['database'].'.');
+		}
+
+		//* Create the ISPConfig database user in the local database
+		$query = "GRANT ALL ON `".$conf['powerdns']['database']."` . * TO '".$conf['mysql']['ispconfig_user']."'@'localhost';";
+		if(!$this->db->query($query)) {
+			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
+		}
+
+		//* Reload database privelages
+		$this->db->query('FLUSH PRIVILEGES;');
+
+		//* load the powerdns databse dump
+		if($conf['mysql']['admin_password'] == '') {
+			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
+					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
+		} else {
+			caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null",
+					__FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql');
+		}
+
+		//* Create the powerdns config file
+		$configfile = 'pdns.local';
+		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile)) copy($conf['powerdns']['config_dir'].'/'.$configfile,$conf['powerdns']['config_dir'].'/'.$configfile.'~');
+		if(is_file($conf['powerdns']['config_dir'].'/'.$configfile.'~')) chmod($conf['powerdns']['config_dir'].'/'.$configfile.'~', 0400);
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{powerdns_database}',$conf['powerdns']['database'],$content);
+		$content = str_replace('{mysql_server_host}',$conf['mysql']['host'],$content);
+		wf($conf['powerdns']['config_dir'].'/'.$configfile,$content);
+		chmod($conf['powerdns']['config_dir'].'/'.$configfile, 0600);
+		chown($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
+		chgrp($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
+
+
+	}
+
+	public function configure_bind() {
+		global $conf;
+
+	    //* Check if the zonefile directory has a slash at the end
+	    $content=$conf['bind']['bind_zonefiles_dir'];
+	    if(substr($content,-1,1) != '/') {
+    	    $content .= '/';
+		}
+
+		//* Create the slave subdirectory
+	    $content .= 'slave';
+	    if(!@is_dir($content)) mkdir($content, 0770, true);
+
+	    //* Chown the slave subdirectory to $conf['bind']['bind_user']
+	    chown($content, $conf['bind']['bind_user']);
+	    chgrp($content, $conf['bind']['bind_group']);
+
+	}
+
+
+
+	public function configure_apache() {
+		global $conf;
+
+		//* Create the logging directory for the vhost logfiles
+		if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
+
+		if(is_file('/etc/suphp/suphp.conf')) {
+			replaceLine('/etc/suphp/suphp.conf','php=php:/usr/bin','x-httpd-suphp="php:/usr/bin/php-cgi"',0);
+			//replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
+			replaceLine('/etc/suphp/suphp.conf','umask=0077','umask=0022',0);
+		}
+
+		if(is_file('/etc/apache2/sites-enabled/000-default')) {
+			replaceLine('/etc/apache2/sites-available/000-default','NameVirtualHost *','NameVirtualHost *:80',1,0);
+			replaceLine('/etc/apache2/sites-available/000-default','<VirtualHost *>','<VirtualHost *:80>',1,0);
+		}
+
+		if(is_file('/etc/apache2/ports.conf')) {
+			// add a line "Listen 443" to ports conf if line does not exist
+			replaceLine('/etc/apache2/ports.conf','Listen 443','Listen 443',1);
+		}
+
+
+		//* Copy the ISPConfig configuration include
+		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
+
+		// copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf');
+
+		$content = rf('tpl/apache_ispconfig.conf.master');
+		$records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
+		if(is_array($records) && count($records) > 0) {
+			foreach($records as $rec) {
+				$content .= 'NameVirtualHost '.$rec['ip_address'].":80\n";
+				$content .= 'NameVirtualHost '.$rec['ip_address'].":443\n";
+			}
+		}
+		$content .= "\n";
+		wf($vhost_conf_dir.'/ispconfig.conf',$content);
+
+		if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.conf')) {
+			symlink($vhost_conf_dir.'/ispconfig.conf',$vhost_conf_enabled_dir.'/000-ispconfig.conf');
+		}
+
+		//* make sure that webalizer finds its config file when it is directly in /etc
+		if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
+			mkdir('/etc/webalizer');
+			symlink('/etc/webalizer.conf','/etc/webalizer/webalizer.conf');
+		}
+
+		if(is_file('/etc/webalizer/webalizer.conf')) {
+			// Change webalizer mode to incremental
+			replaceLine('/etc/webalizer/webalizer.conf','#IncrementalName','IncrementalName webalizer.current',0,0);
+			replaceLine('/etc/webalizer/webalizer.conf','#Incremental','Incremental     yes',0,0);
+			replaceLine('/etc/webalizer/webalizer.conf','#HistoryName','HistoryName     webalizer.hist',0,0);
+		}
+		
+		// Check the awsatst script
+		if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
+		if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl','/usr/share/awstats/tools/awstats_buildstaticpages.pl');
 		if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local','LogFormat=4','LogFormat=1',0,1);
 		
-		//* add a sshusers group
-		$command = 'groupadd sshusers';
-		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-	}
-
-	public function configure_firewall() {
-		global $conf;
-
-		$dist_init_scripts = $conf['init_scripts'];
-
-		if(is_dir('/etc/Bastille.backup')) caselog('rm -rf /etc/Bastille.backup', __FILE__, __LINE__);
-		if(is_dir('/etc/Bastille')) caselog('mv -f /etc/Bastille /etc/Bastille.backup', __FILE__, __LINE__);
-		@mkdir('/etc/Bastille', 0700);
-		if(is_dir('/etc/Bastille.backup/firewall.d')) caselog('cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/', __FILE__, __LINE__);
-		caselog('cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
-		caselog('chmod 644 /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
-		$content = rf('/etc/Bastille/bastille-firewall.cfg');
-		$content = str_replace('{DNS_SERVERS}', '', $content);
-
-		$tcp_public_services = '';
-		$udp_public_services = '';
-
-		$row = $this->db->queryOneRecord('SELECT * FROM '.$conf["mysql"]["database"].'.firewall WHERE server_id = '.intval($conf['server_id']));
-
-		if(trim($row['tcp_port']) != '' || trim($row['udp_port']) != '') {
-			$tcp_public_services = trim(str_replace(',',' ',$row['tcp_port']));
-			$udp_public_services = trim(str_replace(',',' ',$row['udp_port']));
-		} else {
-			$tcp_public_services = '21 22 25 53 80 110 143 443 3306 8080 10000';
-			$udp_public_services = '53';
-		}
-
-		if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
-			$tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
-			if($row['tcp_port'] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ',".intval($conf['apache']['vhost_port'])."' WHERE server_id = ".intval($conf['server_id']));
-		}
-
-		$content = str_replace('{TCP_PUBLIC_SERVICES}', $tcp_public_services, $content);
-		$content = str_replace('{UDP_PUBLIC_SERVICES}', $udp_public_services, $content);
-
-		wf('/etc/Bastille/bastille-firewall.cfg', $content);
-
-		if(is_file($dist_init_scripts.'/bastille-firewall')) caselog('mv -f '.$dist_init_scripts.'/bastille-firewall '.$dist_init_scripts.'/bastille-firewall.backup', __FILE__, __LINE__);
-		caselog('cp -f apps/bastille-firewall '.$dist_init_scripts, __FILE__, __LINE__);
-		caselog('chmod 700 '.$dist_init_scripts.'/bastille-firewall', __FILE__, __LINE__);
-
-		if(is_file('/sbin/bastille-ipchains')) caselog('mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup', __FILE__, __LINE__);
-		caselog('cp -f apps/bastille-ipchains /sbin', __FILE__, __LINE__);
-		caselog('chmod 700 /sbin/bastille-ipchains', __FILE__, __LINE__);
-
-		if(is_file('/sbin/bastille-netfilter')) caselog('mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup', __FILE__, __LINE__);
-		caselog('cp -f apps/bastille-netfilter /sbin', __FILE__, __LINE__);
-		caselog('chmod 700 /sbin/bastille-netfilter', __FILE__, __LINE__);
-
-		if(!@is_dir('/var/lock/subsys')) caselog('mkdir /var/lock/subsys', __FILE__, __LINE__);
-
-		exec('which ipchains &> /dev/null', $ipchains_location, $ret_val);
-		if(!is_file('/sbin/ipchains') && !is_link('/sbin/ipchains') && $ret_val == 0) phpcaselog(@symlink(shell_exec('which ipchains'), '/sbin/ipchains'), 'create symlink', __FILE__, __LINE__);
-		unset($ipchains_location);
-		exec('which iptables &> /dev/null', $iptables_location, $ret_val);
-		if(!is_file('/sbin/iptables') && !is_link('/sbin/iptables') && $ret_val == 0) phpcaselog(@symlink(trim(shell_exec('which iptables')), '/sbin/iptables'), 'create symlink', __FILE__, __LINE__);
-		unset($iptables_location);
-
-	}
-
-	public function configure_vlogger() {
-		global $conf;
-
-		//** Configure vlogger to use traffic logging to mysql (master) db
-		$configfile = 'vlogger-dbi.conf';
-		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile)) copy($conf['vlogger']['config_dir'].'/'.$configfile,$conf['vlogger']['config_dir'].'/'.$configfile.'~');
-		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile.'~')) chmod($conf['vlogger']['config_dir'].'/'.$configfile.'~', 0400);
-		$content = rf('tpl/'.$configfile.'.master');
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['master_ispconfig_user'],$content);
-			$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['master_ispconfig_password'], $content);
-			$content = str_replace('{mysql_server_database}',$conf['mysql']['master_database'],$content);
-			$content = str_replace('{mysql_server_ip}',$conf['mysql']['master_host'],$content);
-		} else {
-			$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
-			$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_ip}',$conf['mysql']['host'],$content);
-		}
-		wf($conf['vlogger']['config_dir'].'/'.$configfile,$content);
-		chmod($conf['vlogger']['config_dir'].'/'.$configfile, 0600);
-		chown($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
-		chgrp($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
-
-	}
-
-	public function configure_apps_vhost() {
-		global $conf;
-
-		//* Create the ispconfig apps vhost user and group
-
-		$apps_vhost_user = escapeshellcmd($conf['web']['apps_vhost_user']);
-		$apps_vhost_group = escapeshellcmd($conf['web']['apps_vhost_group']);
-		$install_dir = escapeshellcmd($conf['web']['website_basedir'].'/apps');
-
-		$command = 'groupadd '.$apps_vhost_user;
-		if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'useradd -g '.$apps_vhost_group.' -d '.$install_dir.' '.$apps_vhost_group;
-		if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-
-		$command = 'adduser '.$conf['apache']['user'].' '.$apps_vhost_group;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		if(!@is_dir($install_dir)) mkdir($install_dir, 0755, true);
-		chown($install_dir, $apps_vhost_user);
-		chgrp($install_dir, $apps_vhost_group);
-
-		//* Copy the apps vhost file
-		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
-		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
-		$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'':'ServerName '.$conf['web']['apps_vhost_servername'];
-
-		// Dont just copy over the virtualhost template but add some custom settings
-		$content = rf('tpl/apache_apps.vhost.master');
-
-		$content = str_replace('{apps_vhost_ip}', $conf['web']['apps_vhost_ip'], $content);
-		$content = str_replace('{apps_vhost_port}', $conf['web']['apps_vhost_port'], $content);
-		$content = str_replace('{apps_vhost_dir}', $conf['web']['website_basedir'].'/apps', $content);
-		$content = str_replace('{website_basedir}', $conf['web']['website_basedir'], $content);
-		$content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content);
-
-
-		// comment out the listen directive if port is 80 or 443
-		if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
-			$content = str_replace('{vhost_port_listen}', '#', $content);
-		} else {
-			$content = str_replace('{vhost_port_listen}', '', $content);
-		}
-
-		wf($vhost_conf_dir.'/apps.vhost', $content);
-
-		//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
-		//* and create the symlink
-		if($this->install_ispconfig_interface == true) {
-			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
-			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
-				symlink($vhost_conf_dir.'/apps.vhost',$vhost_conf_enabled_dir.'/000-apps.vhost');
-			}
-		}
-		if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) {
-			mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
-			copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
-			exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
-			exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps');
-
-		}
-
-	}
-	
-	public function make_ispconfig_ssl_cert() {
-		global $conf;
-
-		$install_dir = $conf['ispconfig_install_dir'];
-		
-		$ssl_crt_file = $install_dir.'/interface/ssl/ispserver.crt';
-		$ssl_csr_file = $install_dir.'/interface/ssl/ispserver.csr';
-		$ssl_key_file = $install_dir.'/interface/ssl/ispserver.key';
-		
-		if(!@is_dir($install_dir.'/interface/ssl')) mkdir($install_dir.'/interface/ssl', 0755, true);
-		
-		$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");
-		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');
-		rename($ssl_key_file.'.insecure',$ssl_key_file);
-		
-	}
-
-	public function install_ispconfig() {
-		global $conf;
-
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		//* Create the ISPConfig installation directory
-		if(!@is_dir($install_dir)) {
-			$command = "mkdir $install_dir";
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* Create a ISPConfig user and group
-		$command = 'groupadd ispconfig';
-		if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		$command = 'useradd -g ispconfig -d '.$install_dir.' ispconfig';
-		if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* copy the ISPConfig interface part
-		$command = 'cp -rf ../interface '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* copy the ISPConfig server part
-		$command = 'cp -rf ../server '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Create a symlink, so ISPConfig is accessible via web
-		// Replaced by a separate vhost definition for port 8080
-		// $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
-		// caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Create the config file for ISPConfig interface
-		$configfile = 'config.inc.php';
-		if(is_file($install_dir.'/interface/lib/'.$configfile)) {
-			copy($install_dir.'/interface/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
-		}
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$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('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
-		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
-		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
-		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
-
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
-		$content = str_replace('{language}', $conf['language'], $content);
-
-		wf($install_dir.'/interface/lib/'.$configfile, $content);
-
-		//* Create the config file for ISPConfig server
-		$configfile = 'config.inc.php';
-		if(is_file($install_dir.'/server/lib/'.$configfile)) {
-			copy($install_dir.'/server/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
-		}
-		$content = rf('tpl/'.$configfile.'.master');
-		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
-		$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('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
-		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
-		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
-		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
-
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
+		//* add a sshusers group
+		$command = 'groupadd sshusers';
+		if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+	}
+
+	public function configure_firewall() {
+		global $conf;
+
+		$dist_init_scripts = $conf['init_scripts'];
+
+		if(is_dir('/etc/Bastille.backup')) caselog('rm -rf /etc/Bastille.backup', __FILE__, __LINE__);
+		if(is_dir('/etc/Bastille')) caselog('mv -f /etc/Bastille /etc/Bastille.backup', __FILE__, __LINE__);
+		@mkdir('/etc/Bastille', 0700);
+		if(is_dir('/etc/Bastille.backup/firewall.d')) caselog('cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/', __FILE__, __LINE__);
+		caselog('cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
+		caselog('chmod 644 /etc/Bastille/bastille-firewall.cfg', __FILE__, __LINE__);
+		$content = rf('/etc/Bastille/bastille-firewall.cfg');
+		$content = str_replace('{DNS_SERVERS}', '', $content);
+
+		$tcp_public_services = '';
+		$udp_public_services = '';
+
+		$row = $this->db->queryOneRecord('SELECT * FROM '.$conf["mysql"]["database"].'.firewall WHERE server_id = '.intval($conf['server_id']));
+
+		if(trim($row['tcp_port']) != '' || trim($row['udp_port']) != '') {
+			$tcp_public_services = trim(str_replace(',',' ',$row['tcp_port']));
+			$udp_public_services = trim(str_replace(',',' ',$row['udp_port']));
+		} else {
+			$tcp_public_services = '21 22 25 53 80 110 143 443 3306 8080 10000';
+			$udp_public_services = '53';
+		}
+
+		if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
+			$tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
+			if($row['tcp_port'] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ',".intval($conf['apache']['vhost_port'])."' WHERE server_id = ".intval($conf['server_id']));
+		}
+
+		$content = str_replace('{TCP_PUBLIC_SERVICES}', $tcp_public_services, $content);
+		$content = str_replace('{UDP_PUBLIC_SERVICES}', $udp_public_services, $content);
+
+		wf('/etc/Bastille/bastille-firewall.cfg', $content);
+
+		if(is_file($dist_init_scripts.'/bastille-firewall')) caselog('mv -f '.$dist_init_scripts.'/bastille-firewall '.$dist_init_scripts.'/bastille-firewall.backup', __FILE__, __LINE__);
+		caselog('cp -f apps/bastille-firewall '.$dist_init_scripts, __FILE__, __LINE__);
+		caselog('chmod 700 '.$dist_init_scripts.'/bastille-firewall', __FILE__, __LINE__);
+
+		if(is_file('/sbin/bastille-ipchains')) caselog('mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup', __FILE__, __LINE__);
+		caselog('cp -f apps/bastille-ipchains /sbin', __FILE__, __LINE__);
+		caselog('chmod 700 /sbin/bastille-ipchains', __FILE__, __LINE__);
+
+		if(is_file('/sbin/bastille-netfilter')) caselog('mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup', __FILE__, __LINE__);
+		caselog('cp -f apps/bastille-netfilter /sbin', __FILE__, __LINE__);
+		caselog('chmod 700 /sbin/bastille-netfilter', __FILE__, __LINE__);
+
+		if(!@is_dir('/var/lock/subsys')) caselog('mkdir /var/lock/subsys', __FILE__, __LINE__);
+
+		exec('which ipchains &> /dev/null', $ipchains_location, $ret_val);
+		if(!is_file('/sbin/ipchains') && !is_link('/sbin/ipchains') && $ret_val == 0) phpcaselog(@symlink(shell_exec('which ipchains'), '/sbin/ipchains'), 'create symlink', __FILE__, __LINE__);
+		unset($ipchains_location);
+		exec('which iptables &> /dev/null', $iptables_location, $ret_val);
+		if(!is_file('/sbin/iptables') && !is_link('/sbin/iptables') && $ret_val == 0) phpcaselog(@symlink(trim(shell_exec('which iptables')), '/sbin/iptables'), 'create symlink', __FILE__, __LINE__);
+		unset($iptables_location);
+
+	}
+
+	public function configure_vlogger() {
+		global $conf;
+
+		//** Configure vlogger to use traffic logging to mysql (master) db
+		$configfile = 'vlogger-dbi.conf';
+		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile)) copy($conf['vlogger']['config_dir'].'/'.$configfile,$conf['vlogger']['config_dir'].'/'.$configfile.'~');
+		if(is_file($conf['vlogger']['config_dir'].'/'.$configfile.'~')) chmod($conf['vlogger']['config_dir'].'/'.$configfile.'~', 0400);
+		$content = rf('tpl/'.$configfile.'.master');
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['master_ispconfig_user'],$content);
+			$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['master_ispconfig_password'], $content);
+			$content = str_replace('{mysql_server_database}',$conf['mysql']['master_database'],$content);
+			$content = str_replace('{mysql_server_ip}',$conf['mysql']['master_host'],$content);
+		} else {
+			$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
+			$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_ip}',$conf['mysql']['host'],$content);
+		}
+		wf($conf['vlogger']['config_dir'].'/'.$configfile,$content);
+		chmod($conf['vlogger']['config_dir'].'/'.$configfile, 0600);
+		chown($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
+		chgrp($conf['vlogger']['config_dir'].'/'.$configfile, 'root');
+
+	}
+
+	public function configure_apps_vhost() {
+		global $conf;
+
+		//* Create the ispconfig apps vhost user and group
+
+		$apps_vhost_user = escapeshellcmd($conf['web']['apps_vhost_user']);
+		$apps_vhost_group = escapeshellcmd($conf['web']['apps_vhost_group']);
+		$install_dir = escapeshellcmd($conf['web']['website_basedir'].'/apps');
+
+		$command = 'groupadd '.$apps_vhost_user;
+		if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'useradd -g '.$apps_vhost_group.' -d '.$install_dir.' '.$apps_vhost_group;
+		if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+
+		$command = 'adduser '.$conf['apache']['user'].' '.$apps_vhost_group;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		if(!@is_dir($install_dir)) mkdir($install_dir, 0755, true);
+		chown($install_dir, $apps_vhost_user);
+		chgrp($install_dir, $apps_vhost_group);
+
+		//* Copy the apps vhost file
+		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
+		$apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'':'ServerName '.$conf['web']['apps_vhost_servername'];
+
+		// Dont just copy over the virtualhost template but add some custom settings
+		$content = rf('tpl/apache_apps.vhost.master');
+
+		$content = str_replace('{apps_vhost_ip}', $conf['web']['apps_vhost_ip'], $content);
+		$content = str_replace('{apps_vhost_port}', $conf['web']['apps_vhost_port'], $content);
+		$content = str_replace('{apps_vhost_dir}', $conf['web']['website_basedir'].'/apps', $content);
+		$content = str_replace('{website_basedir}', $conf['web']['website_basedir'], $content);
+		$content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content);
+
+
+		// comment out the listen directive if port is 80 or 443
+		if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
+			$content = str_replace('{vhost_port_listen}', '#', $content);
+		} else {
+			$content = str_replace('{vhost_port_listen}', '', $content);
+		}
+
+		wf($vhost_conf_dir.'/apps.vhost', $content);
+
+		//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
+		//* and create the symlink
+		if($this->install_ispconfig_interface == true) {
+			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
+			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
+				symlink($vhost_conf_dir.'/apps.vhost',$vhost_conf_enabled_dir.'/000-apps.vhost');
+			}
+		}
+		if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) {
+			mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
+			copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
+			exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
+			exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps');
+
+		}
+
+	}
+	
+	public function make_ispconfig_ssl_cert() {
+		global $conf;
+
+		$install_dir = $conf['ispconfig_install_dir'];
+		
+		$ssl_crt_file = $install_dir.'/interface/ssl/ispserver.crt';
+		$ssl_csr_file = $install_dir.'/interface/ssl/ispserver.csr';
+		$ssl_key_file = $install_dir.'/interface/ssl/ispserver.key';
+		
+		if(!@is_dir($install_dir.'/interface/ssl')) mkdir($install_dir.'/interface/ssl', 0755, true);
+		
+		$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");
+		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');
+		rename($ssl_key_file.'.insecure',$ssl_key_file);
+		
+	}
+
+	public function install_ispconfig() {
+		global $conf;
+
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		//* Create the ISPConfig installation directory
+		if(!@is_dir($install_dir)) {
+			$command = "mkdir $install_dir";
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		//* Create a ISPConfig user and group
+		$command = 'groupadd ispconfig';
+		if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		$command = 'useradd -g ispconfig -d '.$install_dir.' ispconfig';
+		if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* copy the ISPConfig interface part
+		$command = 'cp -rf ../interface '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* copy the ISPConfig server part
+		$command = 'cp -rf ../server '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Create a symlink, so ISPConfig is accessible via web
+		// Replaced by a separate vhost definition for port 8080
+		// $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
+		// caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Create the config file for ISPConfig interface
+		$configfile = 'config.inc.php';
+		if(is_file($install_dir.'/interface/lib/'.$configfile)) {
+			copy($install_dir.'/interface/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
+		}
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$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('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
+		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
+		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
+		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
+
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
+		$content = str_replace('{language}', $conf['language'], $content);
+
+		wf($install_dir.'/interface/lib/'.$configfile, $content);
+
+		//* Create the config file for ISPConfig server
+		$configfile = 'config.inc.php';
+		if(is_file($install_dir.'/server/lib/'.$configfile)) {
+			copy($install_dir.'/server/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
+		}
+		$content = rf('tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$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('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
+		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
+		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
+		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
+
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
 		$content = str_replace('{language}', $conf['language'], $content);
 
-		wf($install_dir.'/server/lib/'.$configfile, $content);
-
-		//* Create the config file for remote-actions (but only, if it does not exist, because
-		//  the value is a autoinc-value and so changed by the remoteaction_core_module
-		if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
-			$content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
-			wf($install_dir.'/server/lib/remote_action.inc.php', $content);
-		}
-
-		//* Enable the server modules and plugins.
-		// TODO: Implement a selector which modules and plugins shall be enabled.
-		$dir = $install_dir.'/server/mods-available/';
-		if (is_dir($dir)) {
-			if ($dh = opendir($dir)) {
-				while (($file = readdir($dh)) !== false) {
-					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
-						include_once($install_dir.'/server/mods-available/'.$file);
-						$module_name = substr($file,0,-8);
-						$tmp = new $module_name;
-						if($tmp->onInstall()) {
-							if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) {
-								@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
-								// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-enabled/'.$file);
-							}
-							if (strpos($file, '_core_module') !== false) {
-								if(!@is_link($install_dir.'/server/mods-core/'.$file)) {
-									@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
-									// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-core/'.$file);
-								}
-							}
-						}
-						unset($tmp);
-					}
-				}
-				closedir($dh);
-			}
-		}
-
-		$dir = $install_dir.'/server/plugins-available/';
-		if (is_dir($dir)) {
-			if ($dh = opendir($dir)) {
-				while (($file = readdir($dh)) !== false) {
-					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
-						include_once($install_dir.'/server/plugins-available/'.$file);
-						$plugin_name = substr($file,0,-8);
-						$tmp = new $plugin_name;
-						if(method_exists($tmp,'onInstall') && $tmp->onInstall()) {
-							if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) {
-								@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
-								//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-enabled/'.$file);
-							}
-							if (strpos($file, '_core_plugin') !== false) {
-								if(!@is_link($install_dir.'/server/plugins-core/'.$file)) {
-									@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
-									//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-core/'.$file);
-								}
-							}
-						}
-						unset($tmp);
-					}
-				}
-				closedir($dh);
-			}
-		}
-
-		// Update the server config
-		$mail_server_enabled = ($conf['services']['mail'])?1:0;
-		$web_server_enabled = ($conf['services']['web'])?1:0;
-		$dns_server_enabled = ($conf['services']['dns'])?1:0;
-		$file_server_enabled = ($conf['services']['file'])?1:0;
-		$db_server_enabled = ($conf['services']['db'])?1:0;
-		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
-
-
-
-
-
-
-		$sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled' WHERE server_id = ".intval($conf['server_id']);
-
-		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql);
-			$this->db->query($sql);
-		} else {
-			$this->db->query($sql);
-		}
-
-
-		//* Chmod the files
-		$command = 'chmod -R 750 '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* chown the files to the ispconfig user and group
-		$command = 'chown -R ispconfig:ispconfig '.$install_dir;
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Make the global language file directory group writable
-		exec("chmod -R 770 $install_dir/interface/lib/lang");
-
-		//* Make the temp directory for language file exports writable
-		if(is_dir($install_dir.'/interface/web/temp')) exec("chmod -R 770 $install_dir/interface/web/temp");
-
-		//* Make all interface language file directories group writable
-		$handle = @opendir($install_dir.'/interface/web');
-		while ($file = @readdir ($handle)) {
-			if ($file != '.' && $file != '..') {
-				if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
-					$handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
-					chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang',0770);
-					while ($lang_file = @readdir ($handle2)) {
-						if ($lang_file != '.' && $lang_file != '..') {
-							chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file,0770);
-						}
-					}
-				}
-			}
-		}
-
-		//* make sure that the server config file (not the interface one) is only readable by the root user
-		chmod($install_dir.'/server/lib/'.$configfile, 0600);
-		chown($install_dir.'/server/lib/'.$configfile, 'root');
-		chgrp($install_dir.'/server/lib/'.$configfile, 'root');
-
-		chmod($install_dir.'/server/lib/remote_action.inc.php', 0600);
-		chown($install_dir.'/server/lib/remote_action.inc.php', 'root');
-		chgrp($install_dir.'/server/lib/remote_action.inc.php', 'root');
-
-		if(@is_file($install_dir.'/server/lib/mysql_clientdb.conf')) {
-			chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
-			chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-			chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-		}
-
-		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
-		// and must be fixed as this will allow the apache user to read the ispconfig files.
-		// Later this must run as own apache server or via suexec!
-		$command = 'adduser www-data ispconfig';
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Make the shell scripts executable
-		$command = "chmod +x $install_dir/server/scripts/*.sh";
-		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-
-		//* Copy the ISPConfig vhost for the controlpanel
-		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
-		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
-
-
-		// Dont just copy over the virtualhost template but add some custom settings
-		$content = rf('tpl/apache_ispconfig.vhost.master');
-		$content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content);
-
-		// comment out the listen directive if port is 80 or 443
-		if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
-			$content = str_replace('{vhost_port_listen}', '#', $content);
-		} else {
-			$content = str_replace('{vhost_port_listen}', '', $content);
-		}
-		
-		if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-			$content = str_replace('{ssl_comment}', '', $content);
-		} else {
-			$content = str_replace('{ssl_comment}', '#', $content);
-		}
-
-		wf($vhost_conf_dir.'/ispconfig.vhost', $content);
-
-		//copy('tpl/apache_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
-		//* and create the symlink
-		if($this->install_ispconfig_interface == true && $this->is_update == false) {
-			if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
-			if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
-				symlink($vhost_conf_dir.'/ispconfig.vhost',$vhost_conf_enabled_dir.'/000-ispconfig.vhost');
-			}
-		}
-		if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
-			mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
-			copy('tpl/apache_ispconfig_fcgi_starter.master','/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
-			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
-			symlink($install_dir.'/interface/web','/var/www/ispconfig');
-			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
-
-		}
-
-		//* Install the update script
-		if(is_file('/usr/local/bin/ispconfig_update_from_svn.sh')) unlink('/usr/local/bin/ispconfig_update_from_svn.sh');
-		chown($install_dir.'/server/scripts/update_from_svn.sh', 'root');
-		chmod($install_dir.'/server/scripts/update_from_svn.sh', 0700);
-		chown($install_dir.'/server/scripts/update_from_tgz.sh', 'root');
-		chmod($install_dir.'/server/scripts/update_from_tgz.sh', 0700);
-		chown($install_dir.'/server/scripts/ispconfig_update.sh', 'root');
-		chmod($install_dir.'/server/scripts/ispconfig_update.sh', 0700);
-		if(!is_link('/usr/local/bin/ispconfig_update_from_svn.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh','/usr/local/bin/ispconfig_update_from_svn.sh');
-		if(!is_link('/usr/local/bin/ispconfig_update.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh','/usr/local/bin/ispconfig_update.sh');
-
-		//* Make the logs readable for the ispconfig user
-		if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
-		if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
-		if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
-		if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
-		if(@is_file('/var/log/clamav/clamav.log')) exec('chmod +r /var/log/clamav/clamav.log');
-		if(@is_file('/var/log/clamav/freshclam.log')) exec('chmod +r /var/log/clamav/freshclam.log');
-
-		//* Create the ispconfig log file and directory
-		if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) {
-			if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755);
-			touch($conf['ispconfig_log_dir'].'/ispconfig.log');
-		}
-
-		rename($install_dir.'/server/scripts/run-getmail.sh','/usr/local/bin/run-getmail.sh');
-		if(is_user('getmail')) chown('/usr/local/bin/run-getmail.sh', 'getmail');
-		chmod('/usr/local/bin/run-getmail.sh', 0744);
-
-		//* Add Log-Rotation
-		if (is_dir('/etc/logrotate.d')) {
-			@unlink('/etc/logrotate.d/logispc3'); // ignore, if the file is not there
-			/* We rotate these logs in cron_daily.php
-			$fh = fopen('/etc/logrotate.d/logispc3', 'w');
-			fwrite($fh,
-					"$conf['ispconfig_log_dir']/ispconfig.log { \n" .
-					"	weekly \n" .
-					"	missingok \n" .
-					"	rotate 4 \n" .
-					"	compress \n" .
-					"	delaycompress \n" .
-					"} \n" .
-					"$conf['ispconfig_log_dir']/cron.log { \n" .
-					"	weekly \n" .
-					"	missingok \n" .
-					"	rotate 4 \n" .
-					"	compress \n" .
-					"	delaycompress \n" .
-					"}");
-			fclose($fh);
-			*/
-		}
-	}
-
-	public function configure_dbserver() {
-		global $conf;
-
-		//* If this server shall act as database server for client DB's, we configure this here
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		// Create a file with the database login details which
-		// are used to create the client databases.
-
-		if(!is_dir($install_dir.'/server/lib')) {
-			$command = "mkdir $install_dir/server/lib";
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		$content = rf('tpl/mysql_clientdb.conf.master');
-		$content = str_replace('{username}',$conf['mysql']['admin_user'],$content);
-		$content = str_replace('{password}',$conf['mysql']['admin_password'], $content);
-		wf($install_dir.'/server/lib/mysql_clientdb.conf',$content);
-		chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
-		chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-		chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
-
-	}
-
-	public function install_crontab() {
-		global $conf;
-
-		$install_dir = $conf['ispconfig_install_dir'];
-
-		//* Root Crontab
-		exec('crontab -u root -l > crontab.txt');
-		$existing_root_cron_jobs = file('crontab.txt');
-
-		// remove existing ispconfig cronjobs, in case the syntax has changed
-		foreach($existing_root_cron_jobs as $key => $val) {
-			if(stristr($val,$install_dir)) unset($existing_root_cron_jobs[$key]);
-		}
-
-		$root_cron_jobs = array(
-				"* * * * * ".$install_dir."/server/server.sh > /dev/null 2>> ".$conf['ispconfig_log_dir']."/cron.log",
-				"30 00 * * * ".$install_dir."/server/cron_daily.sh > /dev/null 2>> ".$conf['ispconfig_log_dir']."/cron.log"
-		);
-		foreach($root_cron_jobs as $cron_job) {
-			if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
-				$existing_root_cron_jobs[] = $cron_job."\n";
-			}
-		}
-		file_put_contents('crontab.txt', $existing_root_cron_jobs);
-		exec('crontab -u root crontab.txt &> /dev/null');
-		unlink('crontab.txt');
-
-		//* Getmail crontab
-		if(is_user('getmail')) {
-			$cf = $conf['getmail'];
-			exec('crontab -u getmail -l > crontab.txt');
-			$existing_cron_jobs = file('crontab.txt');
-
-			$cron_jobs = array(
-					'*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> '.$conf['ispconfig_log_dir'].'/cron.log'
-			);
-
-			// remove existing ispconfig cronjobs, in case the syntax has changed
-			foreach($existing_cron_jobs as $key => $val) {
-				if(stristr($val,'getmail')) unset($existing_cron_jobs[$key]);
-			}
-
-			foreach($cron_jobs as $cron_job) {
-				if(!in_array($cron_job."\n", $existing_cron_jobs)) {
-					$existing_cron_jobs[] = $cron_job."\n";
-				}
-			}
-			file_put_contents('crontab.txt', $existing_cron_jobs);
-			exec('crontab -u getmail crontab.txt &> /dev/null');
-			unlink('crontab.txt');
-		}
-
-		touch($conf['ispconfig_log_dir'].'/cron.log');
-		chmod($conf['ispconfig_log_dir'].'/cron.log', 0666);
-
-	}
-
-	/**
-	 * Helper function - get the path to a template file based on
-	 * the local part of the filename. Checks first for the existence
-	 * of a distribution specific file and if not found looks in the
-	 * base template folder. Optionally the behaviour can be changed
-	 * by setting the 2nd parameter which will fetch the contents
-	 * of the template file and return it instead of the path. The 3rd
-	 * parameter further extends this behaviour by filtering the contents
-	 * by inserting the ispconfig database credentials using the {} placeholders.
-	 *
-	 * @param string $tLocal local part of filename
-	 * @param bool $tRf
-	 * @param bool $tDBCred
-	 * @return string Relative path to the chosen template file
-	 */
-	protected function get_template_file($tLocal, $tRf=false, $tDBCred=false) {
-		global $conf, $dist;
-
-		$final_path = '';
-		$dist_template = 'dist/tpl/'.strtolower($dist['name'])."/$tLocal.master";
-		if (file_exists($dist_template)) {
-			$final_path = $dist_template;
-		} else {
-			$final_path = "tpl/$tLocal.master";
-		}
-
-		if (!$tRf) {
-			return $final_path;
-		} else {
-			return (!$tDBCred) ? rf($final_path) : $this->insert_db_credentials(rf($final_path));
-		}
-	}
-
-	/**
-	 * Helper function - writes the contents to a config file
-	 * and performs a backup if the file exist. Additionally
-	 * if the file exists the new file will be given the
-	 * same rights and ownership as the original. Optionally the
-	 * rights and/or ownership can be overriden by appending umask,
-	 * user and group to the parameters. Providing only uid and gid
-	 * values will result in only a chown.
-	 *
-	 * @param $tConf
-	 * @param $tContents
-	 * @return bool
-	 */
-	protected function write_config_file($tConf, $tContents) {
-		// Backup config file before writing new contents and stat file
-		if ( is_file($tConf) ) {
-			$stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
-			if ($res == 0) { // stat successfull
-				list($access, $user, $group) = split(" ", $stat);
-			}
-
-			if ( copy($tConf, $tConf.'~') ) {
-				chmod($tConf.'~', 0400);
-			}
-		}
-
-		wf($tConf, $tContents); // write file
-
-		if (func_num_args() >= 4) // override rights and/or ownership
-		{
-			$args = func_get_args();
-			$output = array_slice($args, 2);
-
-			switch (sizeof($output)) {
-				case 3:
-					$umask = array_shift($output);
-					if (is_numeric($umask) && preg_match('/^0?[0-7]{3}$/', $umask)) {
-						$access = $umask;
-					}
-				case 2:
-					if (is_user($output[0]) && is_group($output[1])) {
-						list($user,$group) = $output;
-					}
-					break;
-			}
-		}
-
-		if (!empty($user) && !empty($group)) {
-			chown($tConf, $user);
-			chgrp($tConf, $group);
-		}
-
-		if (!empty($access)) {
-			exec("chmod $access $tConf");
-		}
-	}
-
-	/**
-	 * Helper function - filter the contents of a config
-	 * file by inserting the common ispconfig database
-	 * credentials.
-	 *
-	 * @param $tContents
-	 * @return string
-	 */
-	protected function insert_db_credentials($tContents) {
-		global $conf;
-
-		$tContents = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $tContents);
-		$tContents = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $tContents);
-		$tContents = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $tContents);
-		$tContents = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $tContents);
-		$tContents = str_replace('{mysql_server_host}',$conf['mysql']['host'], $tContents);
-		$tContents = str_replace('{mysql_server_port}',$conf["mysql"]["port"], $tContents);
-
-		return $tContents;
-	}
-}
-
-?>
+		wf($install_dir.'/server/lib/'.$configfile, $content);
+
+		//* Create the config file for remote-actions (but only, if it does not exist, because
+		//  the value is a autoinc-value and so changed by the remoteaction_core_module
+		if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
+			$content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
+			wf($install_dir.'/server/lib/remote_action.inc.php', $content);
+		}
+
+		//* Enable the server modules and plugins.
+		// TODO: Implement a selector which modules and plugins shall be enabled.
+		$dir = $install_dir.'/server/mods-available/';
+		if (is_dir($dir)) {
+			if ($dh = opendir($dir)) {
+				while (($file = readdir($dh)) !== false) {
+					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
+						include_once($install_dir.'/server/mods-available/'.$file);
+						$module_name = substr($file,0,-8);
+						$tmp = new $module_name;
+						if($tmp->onInstall()) {
+							if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) {
+								@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
+								// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-enabled/'.$file);
+							}
+							if (strpos($file, '_core_module') !== false) {
+								if(!@is_link($install_dir.'/server/mods-core/'.$file)) {
+									@symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+									// @symlink($install_dir.'/server/mods-available/'.$file, '../mods-core/'.$file);
+								}
+							}
+						}
+						unset($tmp);
+					}
+				}
+				closedir($dh);
+			}
+		}
+
+		$dir = $install_dir.'/server/plugins-available/';
+		if (is_dir($dir)) {
+			if ($dh = opendir($dir)) {
+				while (($file = readdir($dh)) !== false) {
+					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
+						include_once($install_dir.'/server/plugins-available/'.$file);
+						$plugin_name = substr($file,0,-8);
+						$tmp = new $plugin_name;
+						if(method_exists($tmp,'onInstall') && $tmp->onInstall()) {
+							if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) {
+								@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+								//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-enabled/'.$file);
+							}
+							if (strpos($file, '_core_plugin') !== false) {
+								if(!@is_link($install_dir.'/server/plugins-core/'.$file)) {
+									@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+									//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-core/'.$file);
+								}
+							}
+						}
+						unset($tmp);
+					}
+				}
+				closedir($dh);
+			}
+		}
+
+		// Update the server config
+		$mail_server_enabled = ($conf['services']['mail'])?1:0;
+		$web_server_enabled = ($conf['services']['web'])?1:0;
+		$dns_server_enabled = ($conf['services']['dns'])?1:0;
+		$file_server_enabled = ($conf['services']['file'])?1:0;
+		$db_server_enabled = ($conf['services']['db'])?1:0;
+		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
+
+
+
+
+
+
+		$sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled' WHERE server_id = ".intval($conf['server_id']);
+
+		if($conf['mysql']['master_slave_setup'] == 'y') {
+			$this->dbmaster->query($sql);
+			$this->db->query($sql);
+		} else {
+			$this->db->query($sql);
+		}
+
+
+		//* Chmod the files
+		$command = 'chmod -R 750 '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* chown the files to the ispconfig user and group
+		$command = 'chown -R ispconfig:ispconfig '.$install_dir;
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Make the global language file directory group writable
+		exec("chmod -R 770 $install_dir/interface/lib/lang");
+
+		//* Make the temp directory for language file exports writable
+		if(is_dir($install_dir.'/interface/web/temp')) exec("chmod -R 770 $install_dir/interface/web/temp");
+
+		//* Make all interface language file directories group writable
+		$handle = @opendir($install_dir.'/interface/web');
+		while ($file = @readdir ($handle)) {
+			if ($file != '.' && $file != '..') {
+				if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
+					$handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
+					chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang',0770);
+					while ($lang_file = @readdir ($handle2)) {
+						if ($lang_file != '.' && $lang_file != '..') {
+							chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file,0770);
+						}
+					}
+				}
+			}
+		}
+
+		//* make sure that the server config file (not the interface one) is only readable by the root user
+		chmod($install_dir.'/server/lib/'.$configfile, 0600);
+		chown($install_dir.'/server/lib/'.$configfile, 'root');
+		chgrp($install_dir.'/server/lib/'.$configfile, 'root');
+
+		chmod($install_dir.'/server/lib/remote_action.inc.php', 0600);
+		chown($install_dir.'/server/lib/remote_action.inc.php', 'root');
+		chgrp($install_dir.'/server/lib/remote_action.inc.php', 'root');
+
+		if(@is_file($install_dir.'/server/lib/mysql_clientdb.conf')) {
+			chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
+			chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+			chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+		}
+
+		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
+		// and must be fixed as this will allow the apache user to read the ispconfig files.
+		// Later this must run as own apache server or via suexec!
+		$command = 'adduser www-data ispconfig';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Make the shell scripts executable
+		$command = "chmod +x $install_dir/server/scripts/*.sh";
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
+		//* Copy the ISPConfig vhost for the controlpanel
+		$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+		$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
+
+
+		// Dont just copy over the virtualhost template but add some custom settings
+		$content = rf('tpl/apache_ispconfig.vhost.master');
+		$content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content);
+
+		// comment out the listen directive if port is 80 or 443
+		if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
+			$content = str_replace('{vhost_port_listen}', '#', $content);
+		} else {
+			$content = str_replace('{vhost_port_listen}', '', $content);
+		}
+		
+		if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
+			$content = str_replace('{ssl_comment}', '', $content);
+		} else {
+			$content = str_replace('{ssl_comment}', '#', $content);
+		}
+
+		wf($vhost_conf_dir.'/ispconfig.vhost', $content);
+
+		//copy('tpl/apache_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
+		//* and create the symlink
+		if($this->install_ispconfig_interface == true && $this->is_update == false) {
+			if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
+			if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
+				symlink($vhost_conf_dir.'/ispconfig.vhost',$vhost_conf_enabled_dir.'/000-ispconfig.vhost');
+			}
+		}
+		if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
+			mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
+			copy('tpl/apache_ispconfig_fcgi_starter.master','/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
+			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
+			symlink($install_dir.'/interface/web','/var/www/ispconfig');
+			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
+
+		}
+
+		//* Install the update script
+		if(is_file('/usr/local/bin/ispconfig_update_from_svn.sh')) unlink('/usr/local/bin/ispconfig_update_from_svn.sh');
+		chown($install_dir.'/server/scripts/update_from_svn.sh', 'root');
+		chmod($install_dir.'/server/scripts/update_from_svn.sh', 0700);
+		chown($install_dir.'/server/scripts/update_from_tgz.sh', 'root');
+		chmod($install_dir.'/server/scripts/update_from_tgz.sh', 0700);
+		chown($install_dir.'/server/scripts/ispconfig_update.sh', 'root');
+		chmod($install_dir.'/server/scripts/ispconfig_update.sh', 0700);
+		if(!is_link('/usr/local/bin/ispconfig_update_from_svn.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh','/usr/local/bin/ispconfig_update_from_svn.sh');
+		if(!is_link('/usr/local/bin/ispconfig_update.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh','/usr/local/bin/ispconfig_update.sh');
+
+		//* Make the logs readable for the ispconfig user
+		if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
+		if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
+		if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
+		if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
+		if(@is_file('/var/log/clamav/clamav.log')) exec('chmod +r /var/log/clamav/clamav.log');
+		if(@is_file('/var/log/clamav/freshclam.log')) exec('chmod +r /var/log/clamav/freshclam.log');
+
+		//* Create the ispconfig log file and directory
+		if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) {
+			if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755);
+			touch($conf['ispconfig_log_dir'].'/ispconfig.log');
+		}
+
+		rename($install_dir.'/server/scripts/run-getmail.sh','/usr/local/bin/run-getmail.sh');
+		if(is_user('getmail')) chown('/usr/local/bin/run-getmail.sh', 'getmail');
+		chmod('/usr/local/bin/run-getmail.sh', 0744);
+
+		//* Add Log-Rotation
+		if (is_dir('/etc/logrotate.d')) {
+			@unlink('/etc/logrotate.d/logispc3'); // ignore, if the file is not there
+			/* We rotate these logs in cron_daily.php
+			$fh = fopen('/etc/logrotate.d/logispc3', 'w');
+			fwrite($fh,
+					"$conf['ispconfig_log_dir']/ispconfig.log { \n" .
+					"	weekly \n" .
+					"	missingok \n" .
+					"	rotate 4 \n" .
+					"	compress \n" .
+					"	delaycompress \n" .
+					"} \n" .
+					"$conf['ispconfig_log_dir']/cron.log { \n" .
+					"	weekly \n" .
+					"	missingok \n" .
+					"	rotate 4 \n" .
+					"	compress \n" .
+					"	delaycompress \n" .
+					"}");
+			fclose($fh);
+			*/
+		}
+	}
+
+	public function configure_dbserver() {
+		global $conf;
+
+		//* If this server shall act as database server for client DB's, we configure this here
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		// Create a file with the database login details which
+		// are used to create the client databases.
+
+		if(!is_dir($install_dir.'/server/lib')) {
+			$command = "mkdir $install_dir/server/lib";
+			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}
+
+		$content = rf('tpl/mysql_clientdb.conf.master');
+		$content = str_replace('{username}',$conf['mysql']['admin_user'],$content);
+		$content = str_replace('{password}',$conf['mysql']['admin_password'], $content);
+		wf($install_dir.'/server/lib/mysql_clientdb.conf',$content);
+		chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
+		chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+		chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
+
+	}
+
+	public function install_crontab() {
+		global $conf;
+
+		$install_dir = $conf['ispconfig_install_dir'];
+
+		//* Root Crontab
+		exec('crontab -u root -l > crontab.txt');
+		$existing_root_cron_jobs = file('crontab.txt');
+
+		// remove existing ispconfig cronjobs, in case the syntax has changed
+		foreach($existing_root_cron_jobs as $key => $val) {
+			if(stristr($val,$install_dir)) unset($existing_root_cron_jobs[$key]);
+		}
+
+		$root_cron_jobs = array(
+				"* * * * * ".$install_dir."/server/server.sh > /dev/null 2>> ".$conf['ispconfig_log_dir']."/cron.log",
+				"30 00 * * * ".$install_dir."/server/cron_daily.sh > /dev/null 2>> ".$conf['ispconfig_log_dir']."/cron.log"
+		);
+		foreach($root_cron_jobs as $cron_job) {
+			if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
+				$existing_root_cron_jobs[] = $cron_job."\n";
+			}
+		}
+		file_put_contents('crontab.txt', $existing_root_cron_jobs);
+		exec('crontab -u root crontab.txt &> /dev/null');
+		unlink('crontab.txt');
+
+		//* Getmail crontab
+		if(is_user('getmail')) {
+			$cf = $conf['getmail'];
+			exec('crontab -u getmail -l > crontab.txt');
+			$existing_cron_jobs = file('crontab.txt');
+
+			$cron_jobs = array(
+					'*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> '.$conf['ispconfig_log_dir'].'/cron.log'
+			);
+
+			// remove existing ispconfig cronjobs, in case the syntax has changed
+			foreach($existing_cron_jobs as $key => $val) {
+				if(stristr($val,'getmail')) unset($existing_cron_jobs[$key]);
+			}
+
+			foreach($cron_jobs as $cron_job) {
+				if(!in_array($cron_job."\n", $existing_cron_jobs)) {
+					$existing_cron_jobs[] = $cron_job."\n";
+				}
+			}
+			file_put_contents('crontab.txt', $existing_cron_jobs);
+			exec('crontab -u getmail crontab.txt &> /dev/null');
+			unlink('crontab.txt');
+		}
+
+		touch($conf['ispconfig_log_dir'].'/cron.log');
+		chmod($conf['ispconfig_log_dir'].'/cron.log', 0666);
+
+	}
+
+	/**
+	 * Helper function - get the path to a template file based on
+	 * the local part of the filename. Checks first for the existence
+	 * of a distribution specific file and if not found looks in the
+	 * base template folder. Optionally the behaviour can be changed
+	 * by setting the 2nd parameter which will fetch the contents
+	 * of the template file and return it instead of the path. The 3rd
+	 * parameter further extends this behaviour by filtering the contents
+	 * by inserting the ispconfig database credentials using the {} placeholders.
+	 *
+	 * @param string $tLocal local part of filename
+	 * @param bool $tRf
+	 * @param bool $tDBCred
+	 * @return string Relative path to the chosen template file
+	 */
+	protected function get_template_file($tLocal, $tRf=false, $tDBCred=false) {
+		global $conf, $dist;
+
+		$final_path = '';
+		$dist_template = 'dist/tpl/'.strtolower($dist['name'])."/$tLocal.master";
+		if (file_exists($dist_template)) {
+			$final_path = $dist_template;
+		} else {
+			$final_path = "tpl/$tLocal.master";
+		}
+
+		if (!$tRf) {
+			return $final_path;
+		} else {
+			return (!$tDBCred) ? rf($final_path) : $this->insert_db_credentials(rf($final_path));
+		}
+	}
+
+	/**
+	 * Helper function - writes the contents to a config file
+	 * and performs a backup if the file exist. Additionally
+	 * if the file exists the new file will be given the
+	 * same rights and ownership as the original. Optionally the
+	 * rights and/or ownership can be overriden by appending umask,
+	 * user and group to the parameters. Providing only uid and gid
+	 * values will result in only a chown.
+	 *
+	 * @param $tConf
+	 * @param $tContents
+	 * @return bool
+	 */
+	protected function write_config_file($tConf, $tContents) {
+		// Backup config file before writing new contents and stat file
+		if ( is_file($tConf) ) {
+			$stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
+			if ($res == 0) { // stat successfull
+				list($access, $user, $group) = split(" ", $stat);
+			}
+
+			if ( copy($tConf, $tConf.'~') ) {
+				chmod($tConf.'~', 0400);
+			}
+		}
+
+		wf($tConf, $tContents); // write file
+
+		if (func_num_args() >= 4) // override rights and/or ownership
+		{
+			$args = func_get_args();
+			$output = array_slice($args, 2);
+
+			switch (sizeof($output)) {
+				case 3:
+					$umask = array_shift($output);
+					if (is_numeric($umask) && preg_match('/^0?[0-7]{3}$/', $umask)) {
+						$access = $umask;
+					}
+				case 2:
+					if (is_user($output[0]) && is_group($output[1])) {
+						list($user,$group) = $output;
+					}
+					break;
+			}
+		}
+
+		if (!empty($user) && !empty($group)) {
+			chown($tConf, $user);
+			chgrp($tConf, $group);
+		}
+
+		if (!empty($access)) {
+			exec("chmod $access $tConf");
+		}
+	}
+
+	/**
+	 * Helper function - filter the contents of a config
+	 * file by inserting the common ispconfig database
+	 * credentials.
+	 *
+	 * @param $tContents
+	 * @return string
+	 */
+	protected function insert_db_credentials($tContents) {
+		global $conf;
+
+		$tContents = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $tContents);
+		$tContents = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $tContents);
+		$tContents = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $tContents);
+		$tContents = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $tContents);
+		$tContents = str_replace('{mysql_server_host}',$conf['mysql']['host'], $tContents);
+		$tContents = str_replace('{mysql_server_port}',$conf["mysql"]["port"], $tContents);
+
+		return $tContents;
+	}
+}
+
+?>
diff --git a/install/sql/README.txt b/install/sql/README.txt
index 7159cfc37e..fe15ce5403 100644
--- a/install/sql/README.txt
+++ b/install/sql/README.txt
@@ -1,39 +1,39 @@
-
----------------------------------------------------------------------------------
-- Developer README
----------------------------------------------------------------------------------
-
-When you add or modify a database field or table in the ISPConfig database,
-then follow these steps:
-
-1) Add the field or table in the ispconfig3.sql file. This file contains the
-   complete database dump which is used when ISPConfig gets installed.
-   
-2) Create a new file in the "incremental" subfolder wich contains the alter 
-   table, or if it is a complete new table then the add table, statement(s) in 
-   MySQL syntax which is/are required to modify the current ispconfig database 
-   during update. The naming scheme of the sql patch update files is 
-   upd_0001.sql, upd_0002.sql, upd_0003.sql etc. Ensure that the number that 
-   you choose for the new file is a +1 increment of the number of the last
-   existing file and that the number is formatted with 4 digits.
-   
-   A patch file may contain one or more alter table statements. Every patch file
-   gets executed once in the database, so do not modify older (already released) 
-   patch files, they will not get executed again if the update was already run 
-   once on a system.
-   
-   After a patch has been executed, the dbversion field in the server table gets
-   increeased to the version number of the last installed patch.
-   
-   If you like to run a patch file again for testing purposes on your dev machine,
-   then set the number in "dbversion" field of the server table to be lower then
-   the number of your patch.
-   
-Note: Incremental patches are supported for installed ISPConfig versions > 3.0.3.
-      If the installed version is < 3.0.3, then the full update method is used.
-	  In other words, ISPConfig 3.0.3 is the patch release (dbversion) 0 as the 
-	  incremental update feature has been introduced in 3.0.3.
-
-
-
-
+
+---------------------------------------------------------------------------------
+- Developer README
+---------------------------------------------------------------------------------
+
+When you add or modify a database field or table in the ISPConfig database,
+then follow these steps:
+
+1) Add the field or table in the ispconfig3.sql file. This file contains the
+   complete database dump which is used when ISPConfig gets installed.
+   
+2) Create a new file in the "incremental" subfolder wich contains the alter 
+   table, or if it is a complete new table then the add table, statement(s) in 
+   MySQL syntax which is/are required to modify the current ispconfig database 
+   during update. The naming scheme of the sql patch update files is 
+   upd_0001.sql, upd_0002.sql, upd_0003.sql etc. Ensure that the number that 
+   you choose for the new file is a +1 increment of the number of the last
+   existing file and that the number is formatted with 4 digits.
+   
+   A patch file may contain one or more alter table statements. Every patch file
+   gets executed once in the database, so do not modify older (already released) 
+   patch files, they will not get executed again if the update was already run 
+   once on a system.
+   
+   After a patch has been executed, the dbversion field in the server table gets
+   increeased to the version number of the last installed patch.
+   
+   If you like to run a patch file again for testing purposes on your dev machine,
+   then set the number in "dbversion" field of the server table to be lower then
+   the number of your patch.
+   
+Note: Incremental patches are supported for installed ISPConfig versions > 3.0.3.
+      If the installed version is < 3.0.3, then the full update method is used.
+	  In other words, ISPConfig 3.0.3 is the patch release (dbversion) 0 as the 
+	  incremental update feature has been introduced in 3.0.3.
+
+
+
+
diff --git a/install/sql/incremental/upd_0007.sql b/install/sql/incremental/upd_0007.sql
index a7697e84bd..cea3813229 100644
--- a/install/sql/incremental/upd_0007.sql
+++ b/install/sql/incremental/upd_0007.sql
@@ -1,19 +1,19 @@
-ALTER TABLE client ADD COLUMN limit_mailmailinglist int(11) NOT NULL default '-1';
-ALTER TABLE client_template ADD COLUMN limit_mailmailinglist int(11) NOT NULL default '-1';
-
-CREATE TABLE IF NOT EXISTS `mail_mailinglist` (
-  `mailinglist_id` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '0',
-  `sys_groupid` int(11) unsigned NOT NULL default '0',
-  `sys_perm_user` varchar(5) NOT NULL,
-  `sys_perm_group` varchar(5) character set ucs2 NOT NULL,
-  `sys_perm_other` varchar(5) NOT NULL,
-  `server_id` int(11) unsigned NOT NULL default '0',
-  `domain` varchar(255) NOT NULL,
-  `listname` varchar(255) NOT NULL,
-  `email` varchar(255) NOT NULL,
-  `password` varchar(255) NOT NULL,
-  PRIMARY KEY  (`mailinglist_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
-
+ALTER TABLE client ADD COLUMN limit_mailmailinglist int(11) NOT NULL default '-1';
+ALTER TABLE client_template ADD COLUMN limit_mailmailinglist int(11) NOT NULL default '-1';
+
+CREATE TABLE IF NOT EXISTS `mail_mailinglist` (
+  `mailinglist_id` int(11) unsigned NOT NULL auto_increment,
+  `sys_userid` int(11) unsigned NOT NULL default '0',
+  `sys_groupid` int(11) unsigned NOT NULL default '0',
+  `sys_perm_user` varchar(5) NOT NULL,
+  `sys_perm_group` varchar(5) character set ucs2 NOT NULL,
+  `sys_perm_other` varchar(5) NOT NULL,
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL,
+  `listname` varchar(255) NOT NULL,
+  `email` varchar(255) NOT NULL,
+  `password` varchar(255) NOT NULL,
+  PRIMARY KEY  (`mailinglist_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1;
+
 DROP TABLE `mail_mailman_domain`;
\ No newline at end of file
diff --git a/install/update.php b/install/update.php
index 17f6c3c3ca..fa1cb83132 100644
--- a/install/update.php
+++ b/install/update.php
@@ -1,358 +1,358 @@
-<?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.
-*/
-
-error_reporting(E_ALL|E_STRICT);
-
-//** The banner on the command line
-echo "\n\n".str_repeat('-',80)."\n";
-echo " _____ ___________   _____              __ _         ____
-|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
-  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
-  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
- _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
- \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
-                                              __/ |
-                                             |___/ ";
-echo "\n".str_repeat('-',80)."\n";
-echo "\n\n>> Update  \n\n";
-
-//** 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__).'/../'));
-
-//** Check for ISPConfig 2.x versions
-if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
-	die('This software cannot be installed on a server wich runs ISPConfig 2.x.');
-}
-
-//** 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
-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();
-
-echo "This application will update ISPConfig 3 on your server.\n";
-
-//** 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		= '';
-
-//** Ask user for mysql admin_password if empty
-if( empty($conf["mysql"]["admin_password"]) ) {
-
-	$conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
-}
-
-/*
- *  Prepare the dump of the database 
- */
-prepareDBDump();
-
-//* initialize the database
-$inst->db = new db();
-
-//* initialize the master DB, if we have a multiserver setup
-if($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']);
-	
-			//* Initialize the MySQL server connection
-			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
-				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
-				$conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
-				$conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
-				$conf['mysql']['master_database'] = $tmp_mysql_server_database;
-				$finished = true;
-			} else {
-				swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
-			}
-		} while ($finished == false);
-		unset($finished);
-		
-		// initialize the connection to the master database
-		$inst->dbmaster = new db();
-		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
-		$inst->dbmaster->dbHost = $conf['mysql']["master_host"];
-		$inst->dbmaster->dbName = $conf['mysql']["master_database"];
-		$inst->dbmaster->dbUser = $conf['mysql']["master_admin_user"];
-		$inst->dbmaster->dbPass = $conf['mysql']["master_admin_password"];
-} else {
-	$inst->dbmaster = $inst->db;
-}
-
-
-/*
- *  dump the new Database and reconfigure the server.ini
- */
-updateDbAndIni();
-
-/*
- * Reconfigure the permisson if needed
- * (if this is done at client side, only this client is updated.
- * If this is done at server side, all clients are updated.
- */
-//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');
-
-	if($reconfigure_master_database_rights_answer == 'yes') {
-		$inst->grant_master_database_rights();
-	}
-//}
-
-//** Shall the services be reconfigured during update
-$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes','no'),'yes');
-
-if($reconfigure_services_answer == 'yes') {
-	
-	if($conf['services']['mail']) {
-		//** Configure postfix
-		swriteln('Configuring Postfix');
-		$inst->configure_postfix('dont-create-certs');
-		
-		//** Configure mailman
-		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']) {
-		//** Configure Pureftpd
-		swriteln('Configuring Pureftpd');
-		$inst->configure_pureftpd();
-	}
-	
-	if($conf['services']['dns']) {
-		//* 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']) {
-		//** Configure Apache
-		swriteln('Configuring Apache');
-		$inst->configure_apache();
-        
-        //** Configure vlogger
-        swriteln('Configuring vlogger');
-        $inst->configure_vlogger();
-		
-		//** 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
-$ispconfig_port_number = get_ispconfig_port_number();
-$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number);
-
-// $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') {
-	$inst->make_ispconfig_ssl_cert();
-}
-
-$inst->install_ispconfig();
-
-//** Configure Crontab
-$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
-if($update_crontab_answer == 'yes') {
-	swriteln('Updating Crontab');
-	$inst->install_crontab();
-}
-
-//** Restart services:
-if($reconfigure_services_answer == 'yes') {
-	swriteln('Restarting services ...');
-	if($conf['mysql']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
-	if($conf['services']['mail']) {
-		if($conf['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
-		if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
-		if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
-		if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
-		if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
-		if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
-		if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
-		if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
-		if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
-		if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
-		if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
-	}
-	if($conf['services']['web']) {
-		if($conf['apache']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
-		if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
-	}
-	if($conf['services']['dns']) {
-		if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
-		if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
-		if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
-	}
-}
-
-echo "Update finished.\n";
-
-?>
+<?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.
+*/
+
+error_reporting(E_ALL|E_STRICT);
+
+//** The banner on the command line
+echo "\n\n".str_repeat('-',80)."\n";
+echo " _____ ___________   _____              __ _         ____
+|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
+  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
+  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
+ _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
+ \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
+                                              __/ |
+                                             |___/ ";
+echo "\n".str_repeat('-',80)."\n";
+echo "\n\n>> Update  \n\n";
+
+//** 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__).'/../'));
+
+//** Check for ISPConfig 2.x versions
+if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) {
+	die('This software cannot be installed on a server wich runs ISPConfig 2.x.');
+}
+
+//** 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
+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();
+
+echo "This application will update ISPConfig 3 on your server.\n";
+
+//** 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		= '';
+
+//** Ask user for mysql admin_password if empty
+if( empty($conf["mysql"]["admin_password"]) ) {
+
+	$conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
+}
+
+/*
+ *  Prepare the dump of the database 
+ */
+prepareDBDump();
+
+//* initialize the database
+$inst->db = new db();
+
+//* initialize the master DB, if we have a multiserver setup
+if($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']);
+	
+			//* Initialize the MySQL server connection
+			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
+				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
+				$conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
+				$conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
+				$conf['mysql']['master_database'] = $tmp_mysql_server_database;
+				$finished = true;
+			} else {
+				swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
+			}
+		} while ($finished == false);
+		unset($finished);
+		
+		// initialize the connection to the master database
+		$inst->dbmaster = new db();
+		if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
+		$inst->dbmaster->dbHost = $conf['mysql']["master_host"];
+		$inst->dbmaster->dbName = $conf['mysql']["master_database"];
+		$inst->dbmaster->dbUser = $conf['mysql']["master_admin_user"];
+		$inst->dbmaster->dbPass = $conf['mysql']["master_admin_password"];
+} else {
+	$inst->dbmaster = $inst->db;
+}
+
+
+/*
+ *  dump the new Database and reconfigure the server.ini
+ */
+updateDbAndIni();
+
+/*
+ * Reconfigure the permisson if needed
+ * (if this is done at client side, only this client is updated.
+ * If this is done at server side, all clients are updated.
+ */
+//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');
+
+	if($reconfigure_master_database_rights_answer == 'yes') {
+		$inst->grant_master_database_rights();
+	}
+//}
+
+//** Shall the services be reconfigured during update
+$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes','no'),'yes');
+
+if($reconfigure_services_answer == 'yes') {
+	
+	if($conf['services']['mail']) {
+		//** Configure postfix
+		swriteln('Configuring Postfix');
+		$inst->configure_postfix('dont-create-certs');
+		
+		//** Configure mailman
+		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']) {
+		//** Configure Pureftpd
+		swriteln('Configuring Pureftpd');
+		$inst->configure_pureftpd();
+	}
+	
+	if($conf['services']['dns']) {
+		//* 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']) {
+		//** Configure Apache
+		swriteln('Configuring Apache');
+		$inst->configure_apache();
+        
+        //** Configure vlogger
+        swriteln('Configuring vlogger');
+        $inst->configure_vlogger();
+		
+		//** 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
+$ispconfig_port_number = get_ispconfig_port_number();
+$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number);
+
+// $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') {
+	$inst->make_ispconfig_ssl_cert();
+}
+
+$inst->install_ispconfig();
+
+//** Configure Crontab
+$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes','no'),'yes');
+if($update_crontab_answer == 'yes') {
+	swriteln('Updating Crontab');
+	$inst->install_crontab();
+}
+
+//** Restart services:
+if($reconfigure_services_answer == 'yes') {
+	swriteln('Restarting services ...');
+	if($conf['mysql']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mysql']['init_script']))					system($conf['init_scripts'].'/'.$conf['mysql']['init_script'].' restart');
+	if($conf['services']['mail']) {
+		if($conf['postfix']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['postfix']['init_script']))				system($conf['init_scripts'].'/'.$conf['postfix']['init_script'].' restart');
+		if($conf['saslauthd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['saslauthd']['init_script']))			system($conf['init_scripts'].'/'.$conf['saslauthd']['init_script'].' restart');
+		if($conf['amavis']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['amavis']['init_script']))					system($conf['init_scripts'].'/'.$conf['amavis']['init_script'].' restart');
+		if($conf['clamav']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['clamav']['init_script']))					system($conf['init_scripts'].'/'.$conf['clamav']['init_script'].' restart');
+		if($conf['courier']['courier-authdaemon'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'])) system($conf['init_scripts'].'/'.$conf['courier']['courier-authdaemon'].' restart');
+		if($conf['courier']['courier-imap'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap'])) 			system($conf['init_scripts'].'/'.$conf['courier']['courier-imap'].' restart');
+		if($conf['courier']['courier-imap-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'])) 	system($conf['init_scripts'].'/'.$conf['courier']['courier-imap-ssl'].' restart');
+		if($conf['courier']['courier-pop'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop'])) 				system($conf['init_scripts'].'/'.$conf['courier']['courier-pop'].' restart');
+		if($conf['courier']['courier-pop-ssl'] != '' && is_executable($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'])) 		system($conf['init_scripts'].'/'.$conf['courier']['courier-pop-ssl'].' restart');
+		if($conf['dovecot']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['dovecot']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['dovecot']['init_script'].' restart');
+		if($conf['mailman']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mailman']['init_script'])) 		system($conf['init_scripts'].'/'.$conf['mailman']['init_script'].' restart');
+	}
+	if($conf['services']['web']) {
+		if($conf['apache']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['apache']['init_script'])) 				system($conf['init_scripts'].'/'.$conf['apache']['init_script'].' restart');
+		if($conf['pureftpd']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['pureftpd']['init_script']))				system($conf['init_scripts'].'/'.$conf['pureftpd']['init_script'].' restart');
+	}
+	if($conf['services']['dns']) {
+		if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['mydns']['init_script']))					system($conf['init_scripts'].'/'.$conf['mydns']['init_script'].' restart &> /dev/null');
+		if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['powerdns']['init_script']))					system($conf['init_scripts'].'/'.$conf['powerdns']['init_script'].' restart &> /dev/null');
+		if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['bind']['init_script']))					system($conf['init_scripts'].'/'.$conf['bind']['init_script'].' restart &> /dev/null');
+	}
+}
+
+echo "Update finished.\n";
+
+?>
diff --git a/interface/index.htm b/interface/index.htm
index 39606dbb37..9e38208a2d 100644
--- a/interface/index.htm
+++ b/interface/index.htm
@@ -1,8 +1,8 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <meta http-equiv="refresh" content="0;URL=web/index.php">
-</head>
-<body>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <meta http-equiv="refresh" content="0;URL=web/index.php">
+</head>
+<body>
+</body>
+</html>
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 20094cf760..450f25a3ca 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -1,129 +1,129 @@
-<?php
-
-/*
-Copyright (c) 2007, 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 auth {
-	var $client_limits = null;
-
-	public function get_user_id()
-	{
-		return $_SESSION['s']['user']['userid'];
-	}
-	
-	public function is_admin() {
-		if($_SESSION['s']['user']['typ'] == 'admin') {
-			return true;
-		} else {
-			return false;
-		}
-	}	
-	
-	public function has_clients($userid) {
-		global $app, $conf;
-		
-		$userid = 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) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-	
-	//** This function adds a given group id to a given user.
-	public function add_group_to_user($userid,$groupid) {
-		global $app;
-		
-		$userid = intval($userid);
-		$groupid = intval($groupid);
-		
-		if($userid > 0 && $groupid > 0) {
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
-			$groups = explode(',',$user['groups']);
-			if(!in_array($groupid,$groups)) $groups[] = $groupid;
-			$groups_string = implode(',',$groups);
-			$sql = "UPDATE sys_user SET groups = '$groups_string' WHERE userid = $userid";
-			$app->db->query($sql);
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	//** This function returns given client limit as integer, -1 means no limit
-	public function get_client_limit($userid, $limitname)
-	{
-		global $app;
-		
-		// simple query cache
-		if($this->client_limits===null) 
-			$this->client_limits = $app->db->queryOneRecord("SELECT client.* FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
-		
-		// isn't client -> no limit
-		if(!$this->client_limits)
-			return -1;
-		
-		if(isset($this->client_limits['limit_'.$limitname])) {
-			return $this->client_limits['limit_'.$limitname];
-		}		
-	}	
-	
-	//** This function removes a given group id from a given user.
-	public function remove_group_from_user($userid,$groupid) {
-		global $app;
-		
-		$userid = intval($userid);
-		$groupid = intval($groupid);
-		
-		if($userid > 0 && $groupid > 0) {
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
-			$groups = explode(',',$user['groups']);
-			$key = array_search($groupid,$groups);
-			unset($groups[$key]);
-			$groups_string = implode(',',$groups);
-			$sql = "UPDATE sys_user SET groups = '$groups_string' WHERE userid = $userid";
-			$app->db->query($sql);
-			return true;
-		} else {
-			return false;
-		}
-	}
-	
-	public function check_module_permissions($module) {
-		// Check if the current user has the permissions to access this module
-		if(!stristr($_SESSION["s"]["user"]["modules"],$module)) {
-			// echo "LOGIN_REDIRECT:/index.php";
-			header("Location: /index.php");
-			exit;
-		}
-	}
-		
-}
-
+<?php
+
+/*
+Copyright (c) 2007, 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 auth {
+	var $client_limits = null;
+
+	public function get_user_id()
+	{
+		return $_SESSION['s']['user']['userid'];
+	}
+	
+	public function is_admin() {
+		if($_SESSION['s']['user']['typ'] == 'admin') {
+			return true;
+		} else {
+			return false;
+		}
+	}	
+	
+	public function has_clients($userid) {
+		global $app, $conf;
+		
+		$userid = 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) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+	
+	//** This function adds a given group id to a given user.
+	public function add_group_to_user($userid,$groupid) {
+		global $app;
+		
+		$userid = intval($userid);
+		$groupid = intval($groupid);
+		
+		if($userid > 0 && $groupid > 0) {
+			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
+			$groups = explode(',',$user['groups']);
+			if(!in_array($groupid,$groups)) $groups[] = $groupid;
+			$groups_string = implode(',',$groups);
+			$sql = "UPDATE sys_user SET groups = '$groups_string' WHERE userid = $userid";
+			$app->db->query($sql);
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	//** This function returns given client limit as integer, -1 means no limit
+	public function get_client_limit($userid, $limitname)
+	{
+		global $app;
+		
+		// simple query cache
+		if($this->client_limits===null) 
+			$this->client_limits = $app->db->queryOneRecord("SELECT client.* FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
+		
+		// isn't client -> no limit
+		if(!$this->client_limits)
+			return -1;
+		
+		if(isset($this->client_limits['limit_'.$limitname])) {
+			return $this->client_limits['limit_'.$limitname];
+		}		
+	}	
+	
+	//** This function removes a given group id from a given user.
+	public function remove_group_from_user($userid,$groupid) {
+		global $app;
+		
+		$userid = intval($userid);
+		$groupid = intval($groupid);
+		
+		if($userid > 0 && $groupid > 0) {
+			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
+			$groups = explode(',',$user['groups']);
+			$key = array_search($groupid,$groups);
+			unset($groups[$key]);
+			$groups_string = implode(',',$groups);
+			$sql = "UPDATE sys_user SET groups = '$groups_string' WHERE userid = $userid";
+			$app->db->query($sql);
+			return true;
+		} else {
+			return false;
+		}
+	}
+	
+	public function check_module_permissions($module) {
+		// Check if the current user has the permissions to access this module
+		if(!stristr($_SESSION["s"]["user"]["modules"],$module)) {
+			// echo "LOGIN_REDIRECT:/index.php";
+			header("Location: /index.php");
+			exit;
+		}
+	}
+		
+}
+
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/form.inc.php b/interface/lib/classes/form.inc.php
index f0e8de6454..99f6cfb624 100644
--- a/interface/lib/classes/form.inc.php
+++ b/interface/lib/classes/form.inc.php
@@ -1,475 +1,475 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-/**
-* Formularbehandlung
-*
-* Funktionen zur Umwandlung von Formulardaten
-* sowie zum vorbereiten von HTML und SQL
-* Ausgaben
-*
-*	Tabellendefinition
-*	
-*	Datentypen:
-*	- INTEGER (Wandelt Ausdrücke in Int um)
-*	- DOUBLE
-*	- CURRENCY (Formatiert Zahlen nach Währungsnotation)
-*	- VARCHAR (kein weiterer Format Check)
-*	- DATE (Datumsformat, Timestamp Umwandlung)
-*	
-*	Formtype:
-*	- TEXT (normales Textfeld)
-*	- PASSWORD (Feldinhalt wird nicht angezeigt)
-*	- SELECT (Gibt Werte als option Feld aus)
-*	- MULTIPLE (Select-Feld mit nehreren Werten)
-*	
-*	VALUE:
-*	- Wert oder Array
-*	
-*	SEPARATOR
-*	- Trennzeichen für multiple Felder
-*
-*	Hinweis:
-*	Das ID-Feld ist nicht bei den Table Values einzufügen.
-*
-* @package form
-* @author Till Brehm
-* @version 1.1
-*/
-
-class form {
-	
-	/**
-	* Definition der Tabelle (array)
-	* @var tableDef
-	*/
-	var $tableDef;
-	
-	/**
-	* Private
-	* @var action
-	*/
-	var $action;
-	
-	/**
-	* Tabellenname (String)
-	* @var table_name
-	*/
-	var $table_name;
-	
-	/**
-	* Debug Variable
-	* @var debug
-	*/
-	var $debug = 0;
-	
-	/**
-	* name des primary Field der Tabelle (string)
-	* @var table_index
-	*/
-	var $table_index;
-	
-	/**
-	* enthält die Fehlermeldung bei Überprüfung
-	* der Variablen mit Regex
-	* @var errorMessage
-	*/
-	var $errorMessage;
-	
-	var $dateformat = "d.m.Y";
-    var $formDef;
-	
-	/**
-	* Laden der Tabellendefinition
-	*
-	* @param file: Pfad zur Tabellendefinition
-	* @return true
-	*/
-	function loadTableDef($file) {
-		global $app,$conf;
-		
-		include_once($file);
-		$this->tableDef = $table;
-		$this->table_name = $table_name;
-		$this->table_index = $table_index;
-		return true;
-	}
-    
-    function loadFormDef($file) {
-		global $app,$conf;
-		
-		include_once($file);
-		$this->formDef = $form;
-		return true;
-	}
-	
-	
-	/**
-	* Konvertiert die Daten des übergebenen assoziativen
-	* Arrays in "menschenlesbare" Form.
-	* Datentyp Konvertierung, z.B. für Ausgabe in Listen.
-	*
-	* @param record
-	* @return record
-	*/
-	function decode($record) {
-		if(is_array($record)) {
-			foreach($record as $key => $val) {
-				switch ($this->tableDef[$key]['datatype']) {
-				case 'VARCHAR':
-					$new_record[$key] = stripslashes($val);
-				break;
-				
-				case 'DATE':
-					if($val > 0) {
-						$new_record[$key] = date($this->dateformat,$val);
-					}
-				break;
-				
-				case 'INTEGER':
-					$new_record[$key] = intval($val);
-				break;
-				
-				case 'DOUBLE':
-					$new_record[$key] = $val;
-				break;
-				
-				case 'CURRENCY':
-					$new_record[$key] = number_format($val, 2, ',', '');
-				break;
-				
-				default:
-					$new_record[$key] = stripslashes($val);
-				}
-			}
-			
-		}
-	return $new_record;
-	}
-	
-	/**
-	* Record für Ausgabe in Formularen vorbereiten.
-	*
-	* @param record = Datensatz als Array
-	* @param action = NEW oder EDIT 
-	* @return record
-	*/
-	function getHTML($record,$action = 'NEW') {
-		
-		global $app;
-		
-		if(!is_array($this->tableDef)) $app->error("Keine Tabellendefinition vorhanden.");
-		
-		$new_record = array();
-		if($action == 'EDIT') {
-			$record = $this->decode($record);
-			if(is_array($record)) {
-				foreach($record as $key => $val) {
-					switch ($this->tableDef[$key]['formtype']) {
-					case 'SELECT':
-						if(is_array($this->tableDef[$key]['value'])) {
-							$out = '';
-							foreach($this->tableDef[$key]['value'] as $k => $v) {
-								$selected = ($k == $val)?' SELECTED':'';
-								$out .= "<option value='$k'$selected>$v</option>\r\n";
-							}
-						}
-						$new_record[$key] = $out;
-					break;
-					case 'MULTIPLE':
-						if(is_array($this->tableDef[$key]['value'])) {
-							
-							// aufsplitten ergebnisse
-							$vals = explode($this->tableDef[$key]['separator'],$val);
-							
-							// HTML schreiben
-							$out = '';
-							foreach($this->tableDef[$key]['value'] as $k => $v) {
-								
-								$selected = '';
-								foreach($vals as $tvl) {
-									if(trim($tvl) == trim($k)) $selected = ' SELECTED';
-								}
-								
-								$out .= "<option value='$k'$selected>$v</option>\r\n";
-							}
-						}
-						$new_record[$key] = $out;
-					break;
-					
-					case 'PASSWORD':
-						$new_record[$key] = '';
-					break;
-					
-					default:
-						$new_record[$key] = htmlspecialchars($val);
-					}
-				}
-			}
-		} else {
-			foreach($this->tableDef as $key => $val) {
-				switch ($this->tableDef[$key]['formtype']) {
-				case 'SELECT':
-					if(is_array($this->tableDef[$key]['value'])) {
-						$out = '';
-						foreach($this->tableDef[$key]['value'] as $k => $v) {
-							$selected = ($k == $val)?' SELECTED':'';
-							$out .= "<option value='$k'$selected>$v</option>\r\n";
-						}
-					}
-					$new_record[$key] = $out;
-				break;
-				case 'MULTIPLE':
-						if(is_array($this->tableDef[$key]['value'])) {
-							
-							// aufsplitten ergebnisse
-							$vals = explode($this->tableDef[$key]['separator'],$val);
-							
-							// HTML schreiben
-							$out = '';
-							foreach($this->tableDef[$key]['value'] as $k => $v) {
-								
-								$out .= "<option value='$k'>$v</option>\r\n";
-							}
-						}
-						$new_record[$key] = $out;
-					break;
-				
-				case 'PASSWORD':
-					$new_record[$key] = '';
-				break;
-				
-				default:
-					$new_record[$key] = htmlspecialchars($this->tableDef[$key]['value']);
-				}
-			}
-		
-		}
-		
-		if($this->debug == 1) $this->dbg($new_record);
-		
-		return $new_record;
-	}
-	
-	/**
-	* Record in "maschinen lesbares" Format überführen
-	* und Werte gegen reguläre Ausdrücke prüfen.
-	*
-	* @param record = Datensatz als Array
-	* @return record
-	*/
-	function encode($record) {
-		
-		$this->errorMessage = '';
-		
-		if(is_array($record)) {
-			foreach($record as $key => $val) {
-				switch ($this->tableDef[$key]['datatype']) {
-				case 'VARCHAR':
-					if(!is_array($val)) {
-						$new_record[$key] = mysql_real_escape_string($val);
-					} else {
-						$new_record[$key] = implode($this->tableDef[$key]['separator'],$val);
-					}
-				break;
-				case 'DATE':
-					if($val > 0) {
-						list($tag,$monat,$jahr) = explode('.',$val);
-						$new_record[$key] = mktime(0,0,0,$monat,$tag,$jahr);
-					}
-				break;
-				case 'INTEGER':
-					$new_record[$key] = intval($val);
-				break;
-				case 'DOUBLE':
-					$new_record[$key] = mysql_real_escape_string($val);
-				break;
-				case 'CURRENCY':
-					$new_record[$key] = str_replace(",",".",$val);
-				break;
-				}
-				
-				if($this->tableDef[$key]['regex'] != '') {
-					// Enable that "." matches also newlines
-					$this->tableDef[$key]['regex'] .= 's';
-					if(!preg_match($this->tableDef[$key]['regex'], $val)) {
-						$this->errorMessage .= $this->tableDef[$key]['errmsg']."<br>\r\n";
-					}
-				}
-			}
-			
-		}
-		return $new_record;
-	}
-	
-	/**
-	* SQL Statement für Record erzeugen.
-	*
-	* @param record = Datensatz als Array
-	* @param action = INSERT oder UPDATE
-	* @param primary_id
-	* @return record
-	*/
-	function getSQL($record, $action = 'INSERT', $primary_id = 0, $sql_ext_where = '') {
-		
-		global $app;
-		
-		$record = $this->encode($record);
-		$sql_insert_key = '';
-		$sql_insert_val = '';
-		$sql_update = '';
-		
-		if(!is_array($this->tableDef)) $app->error("Keine Tabellendefinition vorhanden.");
-		
-		// gehe durch alle Felder des Records
-		if(is_array($record)) {
-        foreach($record as $key => $val) {
-			// Wenn es kein leeres Passwortfeld ist
-			if (!($this->tableDef[$key]['formtype'] == 'PASSWORD' and $val == '')) {
-				// gehe durch alle Felder der TableDef
-				foreach($this->tableDef as $tk => $tv) {
-					// Wenn Feld in TableDef enthalten ist
-					if($tk == $key) {
-						// Erzeuge Insert oder Update Quelltext
-						if($action == "INSERT") {
-							
-							if($this->tableDef[$key]['formtype'] == 'PASSWORD') {
-								$sql_insert_key .= "`$key`, ";
-								$sql_insert_val .= "md5('$val'), ";
-							//} elseif($this->tableDef[$key]['formtype'] == 'MULTIPLE') {
-							//	$val = implode($this->tableDef[$key]['separator'],$val);
-							//	$sql_insert_key .= "`$key`, ";
-							//	$sql_insert_val .= "'$val', ";
-							} else {
-								$sql_insert_key .= "`$key`, ";
-								$sql_insert_val .= "'$val', ";
-							}
-							
-						} else {
-							
-							if($this->tableDef[$key]['formtype'] == 'PASSWORD') {
-								$sql_update .= "`$key` = md5('$val'), ";
-							//} elseif($this->tableDef[$key]['formtype'] == 'MULTIPLE') {
-							//	$val = implode($this->tableDef[$key]['separator'],$val);
-							//	$sql_update .= "`$key` = '$val', ";
-							} else {
-								$sql_update .= "`$key` = '$val', ";
-							}
-							
-						}
-					}
-				}
-			}
-		}
-        }
-		
-		// Füge Backticks nur bei unvollständigen Tabellennamen ein
-		if(stristr($this->table_name,'.')) {
-			$escape = '';
-		} else {
-			$escape = '`';
-		}
-		
-		
-		if($action == "INSERT") {
-			$sql_insert_key = substr($sql_insert_key,0,-2);
-			$sql_insert_val = substr($sql_insert_val,0,-2);
-			$sql = "INSERT INTO ".$escape.$this->table_name.$escape." ($sql_insert_key) VALUES ($sql_insert_val)";
-		} else {
-			if($primary_id != 0) {
-				$sql_update = substr($sql_update,0,-2);
-				$sql = "UPDATE ".$escape.$this->table_name.$escape." SET ".$sql_update." WHERE ".$this->table_index ." = ".$primary_id;
-				if($sql_ext_where != '') $sql .= " and ".$sql_ext_where;
-			} else {
-				$app->error("Primary ID fehlt!");
-			}
-		}
-		
-		return $sql;
-	}
-	
-	/**
-	* Debugging arrays.
-	*
-	* @param array_data
-	*/
-	function dbg($array_data) {
-		
-		echo "<pre>";
-		print_r($array_data);
-		echo "</pre>";
-		
-	}
-    
-    
-    function showForm() {
-    	global $app,$conf;
-        
-        if(!is_array($this->formDef)) die("Form Definition wurde nicht geladen.");
-        
-        if($this->errorMessage == '') {
-        	// wenn kein Fehler vorliegt
-			if($_REQUEST["next_tab"] != '') {
-            	// wenn nächster Tab bekannt
-            	$active_tab = $_REQUEST["next_tab"];
-            } else {
-            	// ansonsten ersten tab nehmen
-            	$active_tab = $this->formDef["tabs"][0]["name"];
-            }
-		} else {
-        	// bei Fehlern den gleichen Tab nochmal anzeigen
-            $active_tab = $_SESSION["s"]["form"]["tab"];
-		}
-        
-        // definiere Tabs
-        foreach( $this->formDef["tabs"] as $tab) {
-            
-            if($tab["name"] == $active_tab) {
-            	$app->tpl->setInclude('content_tpl',$tab["template"]);
-                $tab["active"] = 1;
-                $_SESSION["s"]["form"]["tab"] = $tab["name"];
-            } else {
-            	$tab["active"] = 0;
-            }
-			
-            $frmTab[] = $tab;
-        }
-        
-        // setze Loop
-        $app->tpl->setLoop("formTab", $frmTab);
-
-		// Formular action setzen
-		$app->tpl->setVar('form_action',$this->formDef["action"]);
-    }
-	
-	
-}
-
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+/**
+* Formularbehandlung
+*
+* Funktionen zur Umwandlung von Formulardaten
+* sowie zum vorbereiten von HTML und SQL
+* Ausgaben
+*
+*	Tabellendefinition
+*	
+*	Datentypen:
+*	- INTEGER (Wandelt Ausdrücke in Int um)
+*	- DOUBLE
+*	- CURRENCY (Formatiert Zahlen nach Währungsnotation)
+*	- VARCHAR (kein weiterer Format Check)
+*	- DATE (Datumsformat, Timestamp Umwandlung)
+*	
+*	Formtype:
+*	- TEXT (normales Textfeld)
+*	- PASSWORD (Feldinhalt wird nicht angezeigt)
+*	- SELECT (Gibt Werte als option Feld aus)
+*	- MULTIPLE (Select-Feld mit nehreren Werten)
+*	
+*	VALUE:
+*	- Wert oder Array
+*	
+*	SEPARATOR
+*	- Trennzeichen für multiple Felder
+*
+*	Hinweis:
+*	Das ID-Feld ist nicht bei den Table Values einzufügen.
+*
+* @package form
+* @author Till Brehm
+* @version 1.1
+*/
+
+class form {
+	
+	/**
+	* Definition der Tabelle (array)
+	* @var tableDef
+	*/
+	var $tableDef;
+	
+	/**
+	* Private
+	* @var action
+	*/
+	var $action;
+	
+	/**
+	* Tabellenname (String)
+	* @var table_name
+	*/
+	var $table_name;
+	
+	/**
+	* Debug Variable
+	* @var debug
+	*/
+	var $debug = 0;
+	
+	/**
+	* name des primary Field der Tabelle (string)
+	* @var table_index
+	*/
+	var $table_index;
+	
+	/**
+	* enthält die Fehlermeldung bei Überprüfung
+	* der Variablen mit Regex
+	* @var errorMessage
+	*/
+	var $errorMessage;
+	
+	var $dateformat = "d.m.Y";
+    var $formDef;
+	
+	/**
+	* Laden der Tabellendefinition
+	*
+	* @param file: Pfad zur Tabellendefinition
+	* @return true
+	*/
+	function loadTableDef($file) {
+		global $app,$conf;
+		
+		include_once($file);
+		$this->tableDef = $table;
+		$this->table_name = $table_name;
+		$this->table_index = $table_index;
+		return true;
+	}
+    
+    function loadFormDef($file) {
+		global $app,$conf;
+		
+		include_once($file);
+		$this->formDef = $form;
+		return true;
+	}
+	
+	
+	/**
+	* Konvertiert die Daten des übergebenen assoziativen
+	* Arrays in "menschenlesbare" Form.
+	* Datentyp Konvertierung, z.B. für Ausgabe in Listen.
+	*
+	* @param record
+	* @return record
+	*/
+	function decode($record) {
+		if(is_array($record)) {
+			foreach($record as $key => $val) {
+				switch ($this->tableDef[$key]['datatype']) {
+				case 'VARCHAR':
+					$new_record[$key] = stripslashes($val);
+				break;
+				
+				case 'DATE':
+					if($val > 0) {
+						$new_record[$key] = date($this->dateformat,$val);
+					}
+				break;
+				
+				case 'INTEGER':
+					$new_record[$key] = intval($val);
+				break;
+				
+				case 'DOUBLE':
+					$new_record[$key] = $val;
+				break;
+				
+				case 'CURRENCY':
+					$new_record[$key] = number_format($val, 2, ',', '');
+				break;
+				
+				default:
+					$new_record[$key] = stripslashes($val);
+				}
+			}
+			
+		}
+	return $new_record;
+	}
+	
+	/**
+	* Record für Ausgabe in Formularen vorbereiten.
+	*
+	* @param record = Datensatz als Array
+	* @param action = NEW oder EDIT 
+	* @return record
+	*/
+	function getHTML($record,$action = 'NEW') {
+		
+		global $app;
+		
+		if(!is_array($this->tableDef)) $app->error("Keine Tabellendefinition vorhanden.");
+		
+		$new_record = array();
+		if($action == 'EDIT') {
+			$record = $this->decode($record);
+			if(is_array($record)) {
+				foreach($record as $key => $val) {
+					switch ($this->tableDef[$key]['formtype']) {
+					case 'SELECT':
+						if(is_array($this->tableDef[$key]['value'])) {
+							$out = '';
+							foreach($this->tableDef[$key]['value'] as $k => $v) {
+								$selected = ($k == $val)?' SELECTED':'';
+								$out .= "<option value='$k'$selected>$v</option>\r\n";
+							}
+						}
+						$new_record[$key] = $out;
+					break;
+					case 'MULTIPLE':
+						if(is_array($this->tableDef[$key]['value'])) {
+							
+							// aufsplitten ergebnisse
+							$vals = explode($this->tableDef[$key]['separator'],$val);
+							
+							// HTML schreiben
+							$out = '';
+							foreach($this->tableDef[$key]['value'] as $k => $v) {
+								
+								$selected = '';
+								foreach($vals as $tvl) {
+									if(trim($tvl) == trim($k)) $selected = ' SELECTED';
+								}
+								
+								$out .= "<option value='$k'$selected>$v</option>\r\n";
+							}
+						}
+						$new_record[$key] = $out;
+					break;
+					
+					case 'PASSWORD':
+						$new_record[$key] = '';
+					break;
+					
+					default:
+						$new_record[$key] = htmlspecialchars($val);
+					}
+				}
+			}
+		} else {
+			foreach($this->tableDef as $key => $val) {
+				switch ($this->tableDef[$key]['formtype']) {
+				case 'SELECT':
+					if(is_array($this->tableDef[$key]['value'])) {
+						$out = '';
+						foreach($this->tableDef[$key]['value'] as $k => $v) {
+							$selected = ($k == $val)?' SELECTED':'';
+							$out .= "<option value='$k'$selected>$v</option>\r\n";
+						}
+					}
+					$new_record[$key] = $out;
+				break;
+				case 'MULTIPLE':
+						if(is_array($this->tableDef[$key]['value'])) {
+							
+							// aufsplitten ergebnisse
+							$vals = explode($this->tableDef[$key]['separator'],$val);
+							
+							// HTML schreiben
+							$out = '';
+							foreach($this->tableDef[$key]['value'] as $k => $v) {
+								
+								$out .= "<option value='$k'>$v</option>\r\n";
+							}
+						}
+						$new_record[$key] = $out;
+					break;
+				
+				case 'PASSWORD':
+					$new_record[$key] = '';
+				break;
+				
+				default:
+					$new_record[$key] = htmlspecialchars($this->tableDef[$key]['value']);
+				}
+			}
+		
+		}
+		
+		if($this->debug == 1) $this->dbg($new_record);
+		
+		return $new_record;
+	}
+	
+	/**
+	* Record in "maschinen lesbares" Format überführen
+	* und Werte gegen reguläre Ausdrücke prüfen.
+	*
+	* @param record = Datensatz als Array
+	* @return record
+	*/
+	function encode($record) {
+		
+		$this->errorMessage = '';
+		
+		if(is_array($record)) {
+			foreach($record as $key => $val) {
+				switch ($this->tableDef[$key]['datatype']) {
+				case 'VARCHAR':
+					if(!is_array($val)) {
+						$new_record[$key] = mysql_real_escape_string($val);
+					} else {
+						$new_record[$key] = implode($this->tableDef[$key]['separator'],$val);
+					}
+				break;
+				case 'DATE':
+					if($val > 0) {
+						list($tag,$monat,$jahr) = explode('.',$val);
+						$new_record[$key] = mktime(0,0,0,$monat,$tag,$jahr);
+					}
+				break;
+				case 'INTEGER':
+					$new_record[$key] = intval($val);
+				break;
+				case 'DOUBLE':
+					$new_record[$key] = mysql_real_escape_string($val);
+				break;
+				case 'CURRENCY':
+					$new_record[$key] = str_replace(",",".",$val);
+				break;
+				}
+				
+				if($this->tableDef[$key]['regex'] != '') {
+					// Enable that "." matches also newlines
+					$this->tableDef[$key]['regex'] .= 's';
+					if(!preg_match($this->tableDef[$key]['regex'], $val)) {
+						$this->errorMessage .= $this->tableDef[$key]['errmsg']."<br>\r\n";
+					}
+				}
+			}
+			
+		}
+		return $new_record;
+	}
+	
+	/**
+	* SQL Statement für Record erzeugen.
+	*
+	* @param record = Datensatz als Array
+	* @param action = INSERT oder UPDATE
+	* @param primary_id
+	* @return record
+	*/
+	function getSQL($record, $action = 'INSERT', $primary_id = 0, $sql_ext_where = '') {
+		
+		global $app;
+		
+		$record = $this->encode($record);
+		$sql_insert_key = '';
+		$sql_insert_val = '';
+		$sql_update = '';
+		
+		if(!is_array($this->tableDef)) $app->error("Keine Tabellendefinition vorhanden.");
+		
+		// gehe durch alle Felder des Records
+		if(is_array($record)) {
+        foreach($record as $key => $val) {
+			// Wenn es kein leeres Passwortfeld ist
+			if (!($this->tableDef[$key]['formtype'] == 'PASSWORD' and $val == '')) {
+				// gehe durch alle Felder der TableDef
+				foreach($this->tableDef as $tk => $tv) {
+					// Wenn Feld in TableDef enthalten ist
+					if($tk == $key) {
+						// Erzeuge Insert oder Update Quelltext
+						if($action == "INSERT") {
+							
+							if($this->tableDef[$key]['formtype'] == 'PASSWORD') {
+								$sql_insert_key .= "`$key`, ";
+								$sql_insert_val .= "md5('$val'), ";
+							//} elseif($this->tableDef[$key]['formtype'] == 'MULTIPLE') {
+							//	$val = implode($this->tableDef[$key]['separator'],$val);
+							//	$sql_insert_key .= "`$key`, ";
+							//	$sql_insert_val .= "'$val', ";
+							} else {
+								$sql_insert_key .= "`$key`, ";
+								$sql_insert_val .= "'$val', ";
+							}
+							
+						} else {
+							
+							if($this->tableDef[$key]['formtype'] == 'PASSWORD') {
+								$sql_update .= "`$key` = md5('$val'), ";
+							//} elseif($this->tableDef[$key]['formtype'] == 'MULTIPLE') {
+							//	$val = implode($this->tableDef[$key]['separator'],$val);
+							//	$sql_update .= "`$key` = '$val', ";
+							} else {
+								$sql_update .= "`$key` = '$val', ";
+							}
+							
+						}
+					}
+				}
+			}
+		}
+        }
+		
+		// Füge Backticks nur bei unvollständigen Tabellennamen ein
+		if(stristr($this->table_name,'.')) {
+			$escape = '';
+		} else {
+			$escape = '`';
+		}
+		
+		
+		if($action == "INSERT") {
+			$sql_insert_key = substr($sql_insert_key,0,-2);
+			$sql_insert_val = substr($sql_insert_val,0,-2);
+			$sql = "INSERT INTO ".$escape.$this->table_name.$escape." ($sql_insert_key) VALUES ($sql_insert_val)";
+		} else {
+			if($primary_id != 0) {
+				$sql_update = substr($sql_update,0,-2);
+				$sql = "UPDATE ".$escape.$this->table_name.$escape." SET ".$sql_update." WHERE ".$this->table_index ." = ".$primary_id;
+				if($sql_ext_where != '') $sql .= " and ".$sql_ext_where;
+			} else {
+				$app->error("Primary ID fehlt!");
+			}
+		}
+		
+		return $sql;
+	}
+	
+	/**
+	* Debugging arrays.
+	*
+	* @param array_data
+	*/
+	function dbg($array_data) {
+		
+		echo "<pre>";
+		print_r($array_data);
+		echo "</pre>";
+		
+	}
+    
+    
+    function showForm() {
+    	global $app,$conf;
+        
+        if(!is_array($this->formDef)) die("Form Definition wurde nicht geladen.");
+        
+        if($this->errorMessage == '') {
+        	// wenn kein Fehler vorliegt
+			if($_REQUEST["next_tab"] != '') {
+            	// wenn nächster Tab bekannt
+            	$active_tab = $_REQUEST["next_tab"];
+            } else {
+            	// ansonsten ersten tab nehmen
+            	$active_tab = $this->formDef["tabs"][0]["name"];
+            }
+		} else {
+        	// bei Fehlern den gleichen Tab nochmal anzeigen
+            $active_tab = $_SESSION["s"]["form"]["tab"];
+		}
+        
+        // definiere Tabs
+        foreach( $this->formDef["tabs"] as $tab) {
+            
+            if($tab["name"] == $active_tab) {
+            	$app->tpl->setInclude('content_tpl',$tab["template"]);
+                $tab["active"] = 1;
+                $_SESSION["s"]["form"]["tab"] = $tab["name"];
+            } else {
+            	$tab["active"] = 0;
+            }
+			
+            $frmTab[] = $tab;
+        }
+        
+        // setze Loop
+        $app->tpl->setLoop("formTab", $frmTab);
+
+		// Formular action setzen
+		$app->tpl->setVar('form_action',$this->formDef["action"]);
+    }
+	
+	
+}
+
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 7de83e9959..1839676eb3 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -1,111 +1,111 @@
-<?php
-
-/*
-Copyright (c) 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.
-*/
-
-//* The purpose of this library is to provide some general functions.
-//* This class is loaded automatically by the ispconfig framework.
-
-class functions {
-	
-
-	public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '') {
-		global $app,$conf;
-		
-		if($conf['demo_mode'] == true) $app->error("Mail sending disabled in demo mode.");
-		
-		if($filepath != '') {
-			if(!file_exists($filepath)) $app->error("Mail attachement does not exist ".$filepath);
-			
-			$content = file_get_contents($filepath);
-			$content = chunk_split(base64_encode($content));
-			$uid = strtoupper(md5(uniqid(time())));
-			
-			if($filename == '') {
-				$path_parts = pathinfo($filepath);
-				$filename = $path_parts["basename"];
-				unset($path_parts);
-			}
-
-			$header = "From: $from\nReply-To: $from\n";
-			$header .= "MIME-Version: 1.0\n";
-			$header .= "Content-Type: multipart/mixed; boundary=$uid\n";
-
-			$header .= "--$uid\n";
-			$header .= "Content-Type: text/plain\n";
-			$header .= "Content-Transfer-Encoding: 8bit\n\n";
-			$header .= "$text\n";
-
-			$header .= "--$uid\n";
-			$header .= "Content-Type: $filetype; name=\"$filename\"\n";
-
-			$header .= "Content-Transfer-Encoding: base64\n";
-			$header .= "Content-Disposition: attachment; filename=\"$filename\"\n\n";
-			$header .= "$content\n";
-
-			$header .= "--$uid--";
-
-			mail($to, $subject, "", $header);
-		} else {
-			$header = "From: $from\nReply-To: $from\n";
-			mail($to, $subject, $text, $header);
-		}
-
-		return true;
-	}
-	
-	public function array_merge($array1,$array2) {
-		$out = $array1;
-		foreach($array2 as $key => $val) {
-			$out[$key] = $val;
-		}
-		return $out;
-	}
-	
-	public function currency_format($number) {
-		global $app;
-		$number_format_decimals = (int)$app->lng('number_format_decimals');
-		$number_format_dec_point = $app->lng('number_format_dec_point');
-		$number_format_thousands_sep = $app->lng('number_format_thousands_sep');
-		if($number_format_thousands_sep == 'number_format_thousands_sep') $number_format_thousands_sep = '';
-		return number_format((double)$number, $number_format_decimals, $number_format_dec_point, $number_format_thousands_sep);
-	}
-	
-	public function get_ispconfig_url() {
-		$url = (stristr($_SERVER['SERVER_PROTOCOL'],'HTTPS'))?'https':'http';
-		$url .= '://'.$_SERVER['SERVER_NAME'];
-		if($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
-			$url .= ':'.$_SERVER['SERVER_PORT'];
-		}
-		return $url;
-	}
-	
-		
-}
-
+<?php
+
+/*
+Copyright (c) 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.
+*/
+
+//* The purpose of this library is to provide some general functions.
+//* This class is loaded automatically by the ispconfig framework.
+
+class functions {
+	
+
+	public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '') {
+		global $app,$conf;
+		
+		if($conf['demo_mode'] == true) $app->error("Mail sending disabled in demo mode.");
+		
+		if($filepath != '') {
+			if(!file_exists($filepath)) $app->error("Mail attachement does not exist ".$filepath);
+			
+			$content = file_get_contents($filepath);
+			$content = chunk_split(base64_encode($content));
+			$uid = strtoupper(md5(uniqid(time())));
+			
+			if($filename == '') {
+				$path_parts = pathinfo($filepath);
+				$filename = $path_parts["basename"];
+				unset($path_parts);
+			}
+
+			$header = "From: $from\nReply-To: $from\n";
+			$header .= "MIME-Version: 1.0\n";
+			$header .= "Content-Type: multipart/mixed; boundary=$uid\n";
+
+			$header .= "--$uid\n";
+			$header .= "Content-Type: text/plain\n";
+			$header .= "Content-Transfer-Encoding: 8bit\n\n";
+			$header .= "$text\n";
+
+			$header .= "--$uid\n";
+			$header .= "Content-Type: $filetype; name=\"$filename\"\n";
+
+			$header .= "Content-Transfer-Encoding: base64\n";
+			$header .= "Content-Disposition: attachment; filename=\"$filename\"\n\n";
+			$header .= "$content\n";
+
+			$header .= "--$uid--";
+
+			mail($to, $subject, "", $header);
+		} else {
+			$header = "From: $from\nReply-To: $from\n";
+			mail($to, $subject, $text, $header);
+		}
+
+		return true;
+	}
+	
+	public function array_merge($array1,$array2) {
+		$out = $array1;
+		foreach($array2 as $key => $val) {
+			$out[$key] = $val;
+		}
+		return $out;
+	}
+	
+	public function currency_format($number) {
+		global $app;
+		$number_format_decimals = (int)$app->lng('number_format_decimals');
+		$number_format_dec_point = $app->lng('number_format_dec_point');
+		$number_format_thousands_sep = $app->lng('number_format_thousands_sep');
+		if($number_format_thousands_sep == 'number_format_thousands_sep') $number_format_thousands_sep = '';
+		return number_format((double)$number, $number_format_decimals, $number_format_dec_point, $number_format_thousands_sep);
+	}
+	
+	public function get_ispconfig_url() {
+		$url = (stristr($_SERVER['SERVER_PROTOCOL'],'HTTPS'))?'https':'http';
+		$url .= '://'.$_SERVER['SERVER_NAME'];
+		if($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
+			$url .= ':'.$_SERVER['SERVER_PORT'];
+		}
+		return $url;
+	}
+	
+		
+}
+
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/plugin_base.inc.php b/interface/lib/classes/plugin_base.inc.php
index cde853fc87..5b69e03c40 100644
--- a/interface/lib/classes/plugin_base.inc.php
+++ b/interface/lib/classes/plugin_base.inc.php
@@ -1,64 +1,64 @@
-<?php
-
-/*
-Copyright (c) 2007, 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 plugin_base {
-	
-	var $plugin_name;
-	var $options;
-	var $form;
-	
-	function onLoad() {
-	
-	}
-	
-	function onShow() {
-	
-	}
-	
-	function onInsert() {
-	
-	}
-	
-	function onUpdate() {
-	
-	}
-	
-	function onDelete() {
-	
-	}
-	
-	function setOptions($plugin_name, $options) {
-		$this->options = $options;
-		$this->plugin_name = $plugin_name;
-	}
-
-}
-
+<?php
+
+/*
+Copyright (c) 2007, 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 plugin_base {
+	
+	var $plugin_name;
+	var $options;
+	var $form;
+	
+	function onLoad() {
+	
+	}
+	
+	function onShow() {
+	
+	}
+	
+	function onInsert() {
+	
+	}
+	
+	function onUpdate() {
+	
+	}
+	
+	function onDelete() {
+	
+	}
+	
+	function setOptions($plugin_name, $options) {
+		$this->options = $options;
+		$this->plugin_name = $plugin_name;
+	}
+
+}
+
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/plugin_dbhistory.inc.php b/interface/lib/classes/plugin_dbhistory.inc.php
index 876dcaf048..ebd9e745e6 100644
--- a/interface/lib/classes/plugin_dbhistory.inc.php
+++ b/interface/lib/classes/plugin_dbhistory.inc.php
@@ -1,69 +1,69 @@
-<?php
-
-/*
-Copyright (c) 2007, 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 plugin_dbhistory extends plugin_base {
-
-        var $module;
-        var $form;
-        var $tab;
-        var $record_id;
-        var $formdef;
-        var $options;
-
-        function onShow() {
-		
-			global $app, $conf;
-			
-			$content = '';
-			
-			$db_table = $app->tform->formDef["db_table"];
-			$db_table_idx = $app->tform->formDef["db_table_idx"];
-			$primary_id = $this->form->id;
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				$sql = "SELECT action, tstamp, user, data FROM sys_datalog WHERE dbtable = '".$db_table."' AND dbidx = '".$db_table_idx.":".$primary_id."'";
-			} else {
-				$sql = "SELECT action, tstamp, user, data FROM sys_datalog WHERE user = '".$_SESSION["s"]["user"]["username"]."' dbtable = '".$db_table."' AND dbidx = '".$db_table_idx.":".$primary_id."'";
-			}
-			
-			$records = $app->db->queryAllRecords($sql);
-			if(is_array($records)) {
-				$content .= '<table>';
-				foreach($records as $rec) {
-					$content .= "<tr><td>".date("d.m.Y",$rec["tstamp"])."</td><td>".$rec["user"]."</td></tr>";
-				}
-				$content .= '</table>';
-			}
-			
-			return $content;
-
-        }
-}
-
+<?php
+
+/*
+Copyright (c) 2007, 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 plugin_dbhistory extends plugin_base {
+
+        var $module;
+        var $form;
+        var $tab;
+        var $record_id;
+        var $formdef;
+        var $options;
+
+        function onShow() {
+		
+			global $app, $conf;
+			
+			$content = '';
+			
+			$db_table = $app->tform->formDef["db_table"];
+			$db_table_idx = $app->tform->formDef["db_table_idx"];
+			$primary_id = $this->form->id;
+			if($_SESSION["s"]["user"]["typ"] == 'admin') {
+				$sql = "SELECT action, tstamp, user, data FROM sys_datalog WHERE dbtable = '".$db_table."' AND dbidx = '".$db_table_idx.":".$primary_id."'";
+			} else {
+				$sql = "SELECT action, tstamp, user, data FROM sys_datalog WHERE user = '".$_SESSION["s"]["user"]["username"]."' dbtable = '".$db_table."' AND dbidx = '".$db_table_idx.":".$primary_id."'";
+			}
+			
+			$records = $app->db->queryAllRecords($sql);
+			if(is_array($records)) {
+				$content .= '<table>';
+				foreach($records as $rec) {
+					$content .= "<tr><td>".date("d.m.Y",$rec["tstamp"])."</td><td>".$rec["user"]."</td></tr>";
+				}
+				$content .= '</table>';
+			}
+			
+			return $content;
+
+        }
+}
+
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php
index 0a56dcf995..ce9aa4a2ef 100644
--- a/interface/lib/classes/remoting.inc.php
+++ b/interface/lib/classes/remoting.inc.php
@@ -1,150 +1,150 @@
-<?php
-
-/*
-Copyright (c) 2007 - 2009, 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.
-
---UPDATED 08.2009--
-Full SOAP support for ISPConfig 3.1.4 b
-Updated by Arkadiusz Roch & Artur Edelman
-Copyright (c) Tri-Plex technology
-
-*/
-
-class remoting {
-	
-	//* remote session timeout in seconds
-	private $session_timeout = 600;
-	
-	private $server;
-	public $oldDataRecord;
-	public $dataRecord;
-	public $id;
-	
-	/*
-	These variables shall stay global. 
-	Please do not make them private variables.
-    
-	private $app;
-    private $conf;
-    */
-
-    public function __construct()
-    {
-        global $server;
-        $this->server = $server;
-		/*
-        $this->app = $app;
-        $this->conf = $conf;
-		*/
-    }
-
-	//* remote login function
-	public function login($username, $password)
-    {
-		global $app, $conf, $server;
-		
-		if(empty($username)) {
-			$this->server->fault('login_username_empty', 'The login username is empty');
-			return false;
-		}
-		
-		if(empty($password)) {
-			$this->server->fault('login_password_empty', 'The login password is empty');
-			return false;
-		}
-		
-		//* Delete old remoting sessions
-		$sql = "DELETE FROM remote_session WHERE tstamp < ".time();
-		$app->db->query($sql);
-		
-		$username = $app->db->quote($username);
-		$password = $app->db->quote($password);
-		
-		$sql = "SELECT * FROM remote_user WHERE remote_username = '$username' and remote_password = md5('$password')";
-		$remote_user = $app->db->queryOneRecord($sql);
-		if($remote_user['remote_userid'] > 0) {
-			//* Create a remote user session
-			srand ((double)microtime()*1000000);
-			$remote_session = md5(rand());
-			$remote_userid = $remote_user['remote_userid'];
-			$remote_functions = $remote_user['remote_functions'];
-			$tstamp = time() + $this->session_timeout;
-			$sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp'
-                   .') VALUES ('
-                   ." '$remote_session',$remote_userid,'$remote_functions',$tstamp)";
-			$app->db->query($sql);
-			return $remote_session;
-		} else {
-			$this->server->fault('login_failed', 'The login failed. Username or password wrong.');
-			return false;
-		}
-		
-	}
-	
-	//* remote logout function
-	public function logout($session_id)
-    {		
-		global $app;
-		
-		if(empty($session_id)) {
-			$this->server->fault('session_id_empty', 'The SessionID is empty.');
-			return false;
-		}
-		
-		$session_id = $app->db->quote($session_id);
-		
-		$sql = "DELETE FROM remote_session WHERE remote_session = '$session_id'";
-		$app->db->query($sql);
-        return ($app->db->affectedRows() == 1);
-	}
-	
-
-    /**
-	    Gets the server configuration
-	    @param int session id
-	    @param int server id
-	    @param string  section of the config field in the server table. Could be 'web', 'dns', 'mail', 'dns', 'cron', etc
-	    @author Julio Montoya <gugli100@gmail.com> BeezNest 2010
-    */
-    public function server_get($session_id, $server_id, $section ='') {
-        global $app;        
-        if(!$this->checkPerm($session_id, 'server_get')) {
-            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-        }
-        if (!empty($session_id) && !empty($server_id)) {    
-            $app->uses('remoting_lib , getconf');        
-            $section_config =  $app->getconf->get_server_config($server_id,$section);        
-            return $section_config;
-        } else {
-            return false;
-        }
-    }
-	
+<?php
+
+/*
+Copyright (c) 2007 - 2009, 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.
+
+--UPDATED 08.2009--
+Full SOAP support for ISPConfig 3.1.4 b
+Updated by Arkadiusz Roch & Artur Edelman
+Copyright (c) Tri-Plex technology
+
+*/
+
+class remoting {
+	
+	//* remote session timeout in seconds
+	private $session_timeout = 600;
+	
+	private $server;
+	public $oldDataRecord;
+	public $dataRecord;
+	public $id;
+	
+	/*
+	These variables shall stay global. 
+	Please do not make them private variables.
+    
+	private $app;
+    private $conf;
+    */
+
+    public function __construct()
+    {
+        global $server;
+        $this->server = $server;
+		/*
+        $this->app = $app;
+        $this->conf = $conf;
+		*/
+    }
+
+	//* remote login function
+	public function login($username, $password)
+    {
+		global $app, $conf, $server;
+		
+		if(empty($username)) {
+			$this->server->fault('login_username_empty', 'The login username is empty');
+			return false;
+		}
+		
+		if(empty($password)) {
+			$this->server->fault('login_password_empty', 'The login password is empty');
+			return false;
+		}
+		
+		//* Delete old remoting sessions
+		$sql = "DELETE FROM remote_session WHERE tstamp < ".time();
+		$app->db->query($sql);
+		
+		$username = $app->db->quote($username);
+		$password = $app->db->quote($password);
+		
+		$sql = "SELECT * FROM remote_user WHERE remote_username = '$username' and remote_password = md5('$password')";
+		$remote_user = $app->db->queryOneRecord($sql);
+		if($remote_user['remote_userid'] > 0) {
+			//* Create a remote user session
+			srand ((double)microtime()*1000000);
+			$remote_session = md5(rand());
+			$remote_userid = $remote_user['remote_userid'];
+			$remote_functions = $remote_user['remote_functions'];
+			$tstamp = time() + $this->session_timeout;
+			$sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp'
+                   .') VALUES ('
+                   ." '$remote_session',$remote_userid,'$remote_functions',$tstamp)";
+			$app->db->query($sql);
+			return $remote_session;
+		} else {
+			$this->server->fault('login_failed', 'The login failed. Username or password wrong.');
+			return false;
+		}
+		
+	}
+	
+	//* remote logout function
+	public function logout($session_id)
+    {		
+		global $app;
+		
+		if(empty($session_id)) {
+			$this->server->fault('session_id_empty', 'The SessionID is empty.');
+			return false;
+		}
+		
+		$session_id = $app->db->quote($session_id);
+		
+		$sql = "DELETE FROM remote_session WHERE remote_session = '$session_id'";
+		$app->db->query($sql);
+        return ($app->db->affectedRows() == 1);
+	}
+	
+
+    /**
+	    Gets the server configuration
+	    @param int session id
+	    @param int server id
+	    @param string  section of the config field in the server table. Could be 'web', 'dns', 'mail', 'dns', 'cron', etc
+	    @author Julio Montoya <gugli100@gmail.com> BeezNest 2010
+    */
+    public function server_get($session_id, $server_id, $section ='') {
+        global $app;        
+        if(!$this->checkPerm($session_id, 'server_get')) {
+            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+        }
+        if (!empty($session_id) && !empty($server_id)) {    
+            $app->uses('remoting_lib , getconf');        
+            $section_config =  $app->getconf->get_server_config($server_id,$section);        
+            return $section_config;
+        } else {
+            return false;
+        }
+    }
+	
 	public function server_get_serverid_by_ip($session_id, $ipaddress)
     {
         global $app;
@@ -157,53 +157,53 @@ class remoting {
         return $all;
 	}
 	
-	//* Get mail domain details
-	public function mail_domain_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_domain_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_domain.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a mail domain
-	public function mail_domain_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'mail_domain_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$primary_id = $this->insertQuery('../mail/form/mail_domain.tform.php',$client_id,$params);
-		return $primary_id;
-	}
-	
-	//* Update a mail domain
-	public function mail_domain_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'mail_domain_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../mail/form/mail_domain.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
-	}
-	
-	//* Delete a mail domain
-	public function mail_domain_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'mail_domain_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_domain.tform.php', $primary_id);
-		return $affected_rows;
-	}
-	
+	//* Get mail domain details
+	public function mail_domain_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_domain_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_domain.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a mail domain
+	public function mail_domain_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'mail_domain_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$primary_id = $this->insertQuery('../mail/form/mail_domain.tform.php',$client_id,$params);
+		return $primary_id;
+	}
+	
+	//* Update a mail domain
+	public function mail_domain_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'mail_domain_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../mail/form/mail_domain.tform.php', $client_id, $primary_id, $params);
+		return $affected_rows;
+	}
+	
+	//* Delete a mail domain
+	public function mail_domain_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'mail_domain_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../mail/form/mail_domain.tform.php', $primary_id);
+		return $affected_rows;
+	}
+	
 	//* Get mail mailinglist details
 	public function mail_mailinglist_get($session_id, $primary_id)
     {
@@ -251,2342 +251,2342 @@ class remoting {
 		return $affected_rows;
 	}
 	
-	//* Get mail user details
-	public function mail_user_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_user_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_user.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	
-	//* dodanie uzytkownika email
-	public function mail_user_add($session_id, $client_id, $params){
-		if (!$this->checkPerm($session_id, 'mail_user_add')){
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->insertQuery('../mail/form/mail_user.tform.php', $client_id, $params);
-		return $affected_rows;
-	}
-
-	//* edycja uzytkownika email	
-	public function mail_user_update($session_id, $client_id, $primary_id, $params)
-	{
-		if (!$this->checkPerm($session_id, 'mail_user_update'))
-		{
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../mail/form/mail_user.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
-	}
-
-	
-	//*usuniecie uzytkownika emial
-	public function mail_user_delete($session_id, $primary_id)
-	{
-		if (!$this->checkPerm($session_id, 'mail_user_delete'))
-		{
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_user.tform.php', $primary_id);
-		return $affected_rows;
-	}
-	
-	//* Get mail user filter details
-	public function mail_user_filter_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_user_filter_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_user_filter.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	public function mail_user_filter_add($session_id, $client_id, $params)
-	{
-		global $app;
-		if (!$this->checkPerm($session_id, 'mail_user_filter_add')){
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->insertQuery('../mail/form/mail_user_filter.tform.php', $client_id, $params,'mail:mail_user_filter:on_after_insert');
-		// $app->plugin->raiseEvent('mail:mail_user_filter:on_after_insert',$this);
-		return $affected_rows;
-	}
-
-	public function mail_user_filter_update($session_id, $client_id, $primary_id, $params)
-	{
-		global $app;
-		if (!$this->checkPerm($session_id, 'mail_user_filter_update'))
-		{
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../mail/form/mail_user_filter.tform.php', $client_id, $primary_id, $params,'mail:mail_user_filter:on_after_update');
-		// $app->plugin->raiseEvent('mail:mail_user_filter:on_after_update',$this);
-		return $affected_rows;
-	}
-
-	public function mail_user_filter_delete($session_id, $primary_id)
-	{
-		global $app;
-		if (!$this->checkPerm($session_id, 'mail_user_filter_delete'))
-		{
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_user_filter.tform.php', $primary_id);
-		$app->plugin->raiseEvent('mail:mail_user_filter:on_after_delete',$this);
-		return $affected_rows;
-	}
-
-	//* Get alias details
-	public function mail_alias_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_alias_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_alias.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* aliasy email
-	public function mail_alias_add($session_id, $client_id, $params)
-	{
-		if (!$this->checkPerm($session_id, 'mail_alias_add'))
-		{
-			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->insertQuery('../mail/form/mail_alias.tform.php', $client_id, $params);
-		return $affected_rows;
-	}
-
-
-	public function mail_alias_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_alias_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_alias.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-	public function mail_alias_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_alias_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_alias.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get mail forwarding details
-	public function mail_forward_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_forward_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_forward.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
- 	//* przekierowania email
-	public function mail_forward_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_forward_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_forward.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_forward_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_forward_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_forward.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_forward_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_forward_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_forward.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get catchall details
-	public function mail_catchall_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_catchall_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_domain_catchall.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-
-	//* catchall e-mail
- 	public function mail_catchall_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_catchall_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_domain_catchall.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-	public function mail_catchall_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_catchall_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_domain_catchall.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-	public function mail_catchall_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_catchall_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_domain_catchall.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get transport details
-	public function mail_transport_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_transport_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_transport.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* przeniesienia e-mail
-	public function mail_transport_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_transport_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_transport.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_transport_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_transport_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_transport.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_transport_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_transport_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_transport.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get spamfilter whitelist details
-	public function mail_spamfilter_whitelist_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_whitelist.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-
- 	//* biała lista e-mail
-	public function mail_spamfilter_whitelist_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/spamfilter_whitelist.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_spamfilter_whitelist_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/spamfilter_whitelist.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_spamfilter_whitelist_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_whitelist.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get spamfilter blacklist details
-	public function mail_spamfilter_blacklist_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_blacklist.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
- 	//* czarna lista e-mail
-	public function mail_spamfilter_blacklist_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/spamfilter_blacklist.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_spamfilter_blacklist_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/spamfilter_blacklist.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_spamfilter_blacklist_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_blacklist.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get spamfilter user details
-	public function mail_spamfilter_user_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_spamfilter_user_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_users.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-
-	//* filtr spamu użytkowników e-mail
-	public function mail_spamfilter_user_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_user_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/spamfilter_users.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_spamfilter_user_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_user_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/spamfilter_users.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_spamfilter_user_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_spamfilter_user_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_users.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get policy details
-	public function mail_policy_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_policy_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_policy.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
- 	//* polityki filtrów spamu e-mail
-	public function mail_policy_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_policy_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/spamfilter_policy.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_policy_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_policy_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/spamfilter_policy.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_policy_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_policy_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_policy.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get fetchmail details
-	public function mail_fetchmail_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_fetchmail_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_get.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-
-	 //* fetchmail
-	public function mail_fetchmail_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_fetchmail_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_get.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_fetchmail_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_fetchmail_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_get.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_fetchmail_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_fetchmail_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_get.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get whitelist details
-	public function mail_whitelist_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_whitelist_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_whitelist.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* wpisy białej listy
-	public function mail_whitelist_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_whitelist_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_whitelist.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_whitelist_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_whitelist_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_whitelist.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_whitelist_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_whitelist_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_whitelist.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get Blacklist details
-	public function mail_blacklist_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_blacklist_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_blacklist.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* wpisy białej listy
-	public function mail_blacklist_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_blacklist_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_blacklist.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_blacklist_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_blacklist_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_blacklist.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_blacklist_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_blacklist_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_blacklist.tform.php', $primary_id);
-			return $affected_rows;
-	}
-	
-	//* Get filter details
-	public function mail_filter_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'mail_filter_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../mail/form/mail_content_filter.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-
-	//* wpisy filtrow e-mail
-	public function mail_filter_add($session_id, $client_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_filter_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->insertQuery('../mail/form/mail_content_filter.tform.php', $client_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_filter_update($session_id, $client_id, $primary_id, $params)
-	{
-			if (!$this->checkPerm($session_id, 'mail_filter_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../mail/form/mail_content_filter.tform.php', $client_id, $primary_id, $params);
-			return $affected_rows;
-	}
-
-
-	public function mail_filter_delete($session_id, $primary_id)
-	{
-			if (!$this->checkPerm($session_id, 'mail_filter_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../mail/form/mail_content_filter.tform.php', $primary_id);
-			return $affected_rows;
-	}
-
-
-
-
-/* 
- * 
- * 
- * 
- * 	 * Client functions
- * 
- * 
- */
-	//* Get client details
-	public function client_get($session_id, $client_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'client_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../client/form/client.tform.php');
-		return $app->remoting_lib->getDataRecord($client_id);
-	}
-	
-	public function client_get_id($session_id, $sys_userid)
-    {
-		global $app;
-		if(!$this->checkPerm($session_id, 'client_get_id')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		
-		$sys_userid = intval($sys_userid);
-		
-		$rec = $app->db->queryOneRecord("SELECT client_id FROM sys_user WHERE userid = ".$sys_userid);
-		if(isset($rec['client_id'])) {
-			return intval($rec['client_id']);
-		} else {
-			$this->server->fault('no_client_found', 'There is no sysuser account for this client ID.');
-			return false;
-		}
-		
-	}
-	
-	
-	public function client_add($session_id, $reseller_id, $params)
-	{
-		if (!$this->checkPerm($session_id, 'client_add'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-		$affected_rows = $this->klientadd('../client/form/client.tform.php',$reseller_id, $params);
-		return $affected_rows;  
-				  
-	}
-	
-	public function client_update($session_id, $client_id, $reseller_id, $params)
-	{
-			global $app;
-			
-			if (!$this->checkPerm($session_id, 'client_update'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->updateQuery('../client/form/client.tform.php', $reseller_id, $client_id, $params);
-			
-			$app->remoting_lib->ispconfig_sysuser_update($params,$client_id);
-			
-			return $affected_rows;
-	}
-
-
-	public function client_delete($session_id,$client_id)
-	{
-			global $app;
-			
-			if (!$this->checkPerm($session_id, 'client_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../client/form/client.tform.php',$client_id);
-			
-			$app->remoting_lib->ispconfig_sysuser_delete($client_id);
-			
-			return $affected_rows;
-	}
-	
-	// -----------------------------------------------------------------------------------------------
-	
-	public function client_delete_everything($session_id, $client_id)
+	//* Get mail user details
+	public function mail_user_get($session_id, $primary_id)
     {
-        global $app, $conf;
-		if(!$this->checkPerm($session_id, 'client_delete_everything')) {
-        	$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-		}
-        $client_id = intval($client_id);
-	$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
-
-	$tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
-		$tables_array = explode(',',$tables);
-		$client_group_id = intval($client_group['groupid']);
+		global $app;
 		
-		$table_list = array();
-		if($client_group_id > 1) {
-			foreach($tables_array as $table) {
-				if($table != '') {
-					$records = $app->db->queryAllRecords("SELECT * FROM $table WHERE sys_groupid = ".$client_group_id);
-					$number = count($records);
-					if($number > 0) $table_list[] = array('table' => $table."(".$number.")");
-				}
-			}
+		if(!$this->checkPerm($session_id, 'mail_user_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
 		}
-
-
-	if($client_id > 0) {			
-			// remove the group of the client from the resellers group
-			$parent_client_id = intval($this->dataRecord['parent_client_id']);
-			$parent_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE client_id = $parent_client_id");
-			$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
-			$app->auth->remove_group_from_user($parent_user['userid'],$client_group['groupid']);
-			
-			// delete the group of the client
-			$app->db->query("DELETE FROM sys_group WHERE client_id = $client_id");
-			
-			// delete the sys user(s) of the client
-			$app->db->query("DELETE FROM sys_user WHERE client_id = $client_id");
-			
-			// Delete all records (sub-clients, mail, web, etc....)  of this client.
-			$tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
-			$tables_array = explode(',',$tables);
-			$client_group_id = intval($client_group['groupid']);
-			if($client_group_id > 1) {
-				foreach($tables_array as $table) {
-					if($table != '') {
-						$records = $app->db->queryAllRecords("SELECT * FROM $table WHERE sys_groupid = ".$client_group_id);
-						// find the primary ID of the table
-						$table_info = $app->db->tableInfo($table);
-						$index_field = '';
-						foreach($table_info as $tmp) {
-							if($tmp['option'] == 'primary') $index_field = $tmp['name'];
-						}
-						// Delete the records
-						if($index_field != '') {
-							if(is_array($records)) {
-								foreach($records as $rec) {
-									$app->db->datalogDelete($table, $index_field, $rec[$index_field]);
-								}
-							}
-						}
-						
-					}
-				}
-			}
-			
-			
-			
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_user.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	
+	//* dodanie uzytkownika email
+	public function mail_user_add($session_id, $client_id, $params){
+		if (!$this->checkPerm($session_id, 'mail_user_add')){
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+			return false;
 		}
-        
-		if (!$this->checkPerm($session_id, 'client_delete'))
-			{
-					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
-					return false;
-			}
-			$affected_rows = $this->deleteQuery('../client/form/client.tform.php',$client_id);
-			
-			// $app->remoting_lib->ispconfig_sysuser_delete($client_id);
-
+		$affected_rows = $this->insertQuery('../mail/form/mail_user.tform.php', $client_id, $params);
+		return $affected_rows;
+	}
 
-        return false;
+	//* edycja uzytkownika email	
+	public function mail_user_update($session_id, $client_id, $primary_id, $params)
+	{
+		if (!$this->checkPerm($session_id, 'mail_user_update'))
+		{
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../mail/form/mail_user.tform.php', $client_id, $primary_id, $params);
+		return $affected_rows;
 	}
+
 	
-	// Website functions ---------------------------------------------------------------------------------------
-	
-	//* Get cron details
-	public function sites_cron_get($session_id, $cron_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_cron_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/cron.tform.php');
-		return $app->remoting_lib->getDataRecord($cron_id);
-	}
-	
-	//* Add a cron record
-	public function sites_cron_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_cron_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../sites/form/cron.tform.php',$client_id,$params);
-	}
-	
-	//* Update cron record
-	public function sites_cron_update($session_id, $client_id, $cron_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_cron_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/cron.tform.php',$client_id,$cron_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete cron record
-	public function sites_cron_delete($session_id, $cron_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_cron_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/cron.tform.php',$cron_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function sites_database_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_database_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/database.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function sites_database_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_database_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../sites/form/database.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function sites_database_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_database_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/database.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function sites_database_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_database_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/database.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function sites_ftp_user_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_ftp_user_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/ftp_user.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function sites_ftp_user_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_ftp_user_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../sites/form/ftp_user.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function sites_ftp_user_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_ftp_user_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/ftp_user.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function sites_ftp_user_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_ftp_user_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/ftp_user.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function sites_shell_user_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_shell_user_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/shell_user.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function sites_shell_user_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_shell_user_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../sites/form/shell_user.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function sites_shell_user_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_shell_user_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/shell_user.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function sites_shell_user_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_shell_user_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/shell_user.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function sites_web_domain_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_web_domain_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/web_domain.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function sites_web_domain_add($session_id, $client_id, $params, $readonly = false)
+	//*usuniecie uzytkownika emial
+	public function mail_user_delete($session_id, $primary_id)
 	{
-		global $app;
-		if(!$this->checkPerm($session_id, 'sites_web_domain_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$domain_id = $this->insertQuery('../sites/form/web_domain.tform.php',$client_id,$params, 'sites:web_domain:on_after_insert');
-		if ($readonly === true)
-			$app->db->query("UPDATE web_domain SET `sys_userid` = '1' WHERE domain_id = ".$domain_id);
-			return $domain_id;
+		if (!$this->checkPerm($session_id, 'mail_user_delete'))
+		{
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+			return false;
 		}
+		$affected_rows = $this->deleteQuery('../mail/form/mail_user.tform.php', $primary_id);
+		return $affected_rows;
+	}
 	
-	//* Update a record
-	public function sites_web_domain_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_domain_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/web_domain.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function sites_web_domain_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_domain_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/web_domain.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// -----------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function sites_web_aliasdomain_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/web_aliasdomain.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function sites_web_aliasdomain_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../sites/form/web_aliasdomain.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function sites_web_aliasdomain_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/web_aliasdomain.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function sites_web_aliasdomain_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/web_aliasdomain.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function sites_web_subdomain_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'sites_web_subdomain_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/web_subdomain.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function sites_web_subdomain_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_subdomain_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../sites/form/web_subdomain.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function sites_web_subdomain_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_subdomain_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../sites/form/web_subdomain.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function sites_web_subdomain_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'sites_web_subdomain_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../sites/form/web_subdomain.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// -----------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function domains_domain_get($session_id, $primary_id)
+	//* Get mail user filter details
+	public function mail_user_filter_get($session_id, $primary_id)
     {
 		global $app;
 		
-		if(!$this->checkPerm($session_id, 'domains_domain_get')) {
+		if(!$this->checkPerm($session_id, 'mail_user_filter_get')) {
 			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../domain/form/domain.tform.php');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_user_filter.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
+	
+	public function mail_user_filter_add($session_id, $client_id, $params)
+	{
+		global $app;
+		if (!$this->checkPerm($session_id, 'mail_user_filter_add')){
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->insertQuery('../mail/form/mail_user_filter.tform.php', $client_id, $params,'mail:mail_user_filter:on_after_insert');
+		// $app->plugin->raiseEvent('mail:mail_user_filter:on_after_insert',$this);
+		return $affected_rows;
+	}
 
-	//* Add a record
-	public function domains_domain_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'domains_domain_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+	public function mail_user_filter_update($session_id, $client_id, $primary_id, $params)
+	{
+		global $app;
+		if (!$this->checkPerm($session_id, 'mail_user_filter_update'))
+		{
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
 			return false;
 		}
-		return $this->insertQuery('../domain/form/domain.tform.php',$client_id,$params);
+		$affected_rows = $this->updateQuery('../mail/form/mail_user_filter.tform.php', $client_id, $primary_id, $params,'mail:mail_user_filter:on_after_update');
+		// $app->plugin->raiseEvent('mail:mail_user_filter:on_after_update',$this);
+		return $affected_rows;
 	}
 
-	//* Delete a record
-	public function domains_domain_delete($session_id, $primary_id)
+	public function mail_user_filter_delete($session_id, $primary_id)
+	{
+		global $app;
+		if (!$this->checkPerm($session_id, 'mail_user_filter_delete'))
+		{
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../mail/form/mail_user_filter.tform.php', $primary_id);
+		$app->plugin->raiseEvent('mail:mail_user_filter:on_after_delete',$this);
+		return $affected_rows;
+	}
+
+	//* Get alias details
+	public function mail_alias_get($session_id, $primary_id)
     {
-		if(!$this->checkPerm($session_id, 'domains_domain_delete')) {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_alias_get')) {
 			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->deleteQuery('../domain/form/domain.tform.php',$primary_id);
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_alias.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* aliasy email
+	public function mail_alias_add($session_id, $client_id, $params)
+	{
+		if (!$this->checkPerm($session_id, 'mail_alias_add'))
+		{
+			$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->insertQuery('../mail/form/mail_alias.tform.php', $client_id, $params);
 		return $affected_rows;
 	}
 
-// -----------------------------------------------------------------------------------------------
 
-	public function domains_get_all_by_user($session_id, $group_id)
+	public function mail_alias_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_alias_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_alias.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+	public function mail_alias_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_alias_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_alias.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get mail forwarding details
+	public function mail_forward_get($session_id, $primary_id)
     {
-        global $app;
-		if(!$this->checkPerm($session_id, 'domains_get_all_by_user')) {
-        	$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_forward_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
 		}
-        $group_id = intval($group_id);
-        $sql = "SELECT domain_id, domain FROM domain WHERE sys_groupid  = $group_id ";
-        $all = $app->db->queryAllRecords($sql);
-        return $all;
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_forward.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 	
-	
-	// DNS Function --------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_zone_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_zone_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_soa.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_zone_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_soa.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_zone_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_zone_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_soa.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_zone_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_zone_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_soa.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_aaaa_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_aaaa_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_aaaa.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_aaaa_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_aaaa_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_aaaa.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_aaaa_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_aaaa_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_aaaa.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_aaaa_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_aaaa_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_aaaa.tform.php',$primary_id);
-		return $affected_rows;
-	}
-
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_a_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_a_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_a.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_a_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_a_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_a.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_a_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_a_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_a.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_a_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_a_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_a.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_alias_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_alias_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_alias.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_alias_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_alias_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_alias.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_alias_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_alias_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_alias.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_alias_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_alias_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_alias.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_cname_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_cname_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_cname.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_cname_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_cname_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_cname.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_cname_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_cname_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_cname.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_cname_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_cname_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_cname.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_hinfo_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_hinfo_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_hinfo.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_hinfo_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_hinfo_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_hinfo.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_hinfo_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_hinfo_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_hinfo.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_hinfo_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_hinfo_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_hinfo.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_mx_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_mx_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_mx.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_mx_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_mx_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_mx.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_mx_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_mx_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_mx.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_mx_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_mx_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_mx.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_ns_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_ns_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_ns.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_ns_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_ns_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_ns.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_ns_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_ns_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_ns.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_ns_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_ns_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_ns.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_ptr_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_ptr_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_ptr.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_ptr_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_ptr_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_ptr.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_ptr_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_ptr_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_ptr.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_ptr_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_ptr_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_ptr.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_rp_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_rp_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_rp.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_rp_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_rp_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_rp.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_rp_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_rp_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_rp.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_rp_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_rp_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_rp.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_srv_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_srv_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_srv.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_srv_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_srv_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_srv.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_srv_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_srv_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_srv.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_srv_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_srv_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_srv.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	// ----------------------------------------------------------------------------------------------------------------
-	
-	//* Get record details
-	public function dns_txt_get($session_id, $primary_id)
-    {
-		global $app;
-		
-		if(!$this->checkPerm($session_id, 'dns_txt_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_txt.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
-	}
-	
-	//* Add a record
-	public function dns_txt_add($session_id, $client_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_txt_add')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		return $this->insertQuery('../dns/form/dns_txt.tform.php',$client_id,$params);
-	}
-	
-	//* Update a record
-	public function dns_txt_update($session_id, $client_id, $primary_id, $params)
-    {
-		if(!$this->checkPerm($session_id, 'dns_txt_update')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_txt.tform.php',$client_id,$primary_id,$params);
-		return $affected_rows;
-	}
-	
-	//* Delete a record
-	public function dns_txt_delete($session_id, $primary_id)
-    {
-		if(!$this->checkPerm($session_id, 'dns_txt_delete')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_txt.tform.php',$primary_id);
-		return $affected_rows;
-	}
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-        
-
-
-	//** private functions -----------------------------------------------------------------------------------
-	
-	
-
-
-	private function klientadd($formdef_file, $reseller_id, $params)
-    {
-		global $app, $tform, $remoting_lib;
-		$app->uses('remoting_lib');
-			
-		//* Load the form definition
-		$app->remoting_lib->loadFormDef($formdef_file);
-		
-		//* load the user profile of the client
-		$app->remoting_lib->loadUserProfile($reseller_id);
-		
-		//* load the client template
-		if(isset($params['template_master']) and $params['template_master'] > 0)
-		{
-			$template=$app->db->queryOneRecord("SELECT * FROM client_template WHERE template_id=".intval($params['template_master']));
-			$params=array_merge($params,$template);
-		}
-		
-		//* Get the SQL query
-		$sql = $app->remoting_lib->getSQL($params,'INSERT',0);
-		if($app->remoting_lib->errorMessage != '') {
-			$this->server->fault('data_processing_error', $app->remoting_lib->errorMessage);
-			return false;
-		}
-		
-		$app->db->query($sql);
-		
-		if($app->db->errorMessage != '') {
-			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
-			return false;
-		}
-		
-					
-		
-		$insert_id = $app->db->insertID();	
-		//$app->uses('tform');
-		//* Save changes to Datalog
-		if($app->remoting_lib->formDef["db_history"] == 'yes') {
-			$new_rec = $app->remoting_lib->getDataRecord($insert_id);
-			$app->remoting_lib->datalogSave('INSERT',$primary_id,array(),$new_rec);			
-			$app->remoting_lib->ispconfig_sysuser_add($params,$insert_id);
-
-            if($reseller_id) {
-                $client_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = ".$insert_id);
-                $reseller_user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE client_id = ".$reseller_id);
-                $app->auth->add_group_to_user($reseller_user['userid'], $client_group['groupid']);
-                $app->db->query("UPDATE client SET parent_client_id = ".$reseller_id." WHERE client_id = ".$insert_id);
-            }   
-
-		}
-		return $insert_id;
-	}
-
-	private function insertQuery($formdef_file, $client_id, $params,$event_identifier = '')
-    {
-		global $app, $tform, $remoting_lib;
-		
-		$app->uses('remoting_lib');
-		
-		//* load the user profile of the client
-		$app->remoting_lib->loadUserProfile($client_id);
-		
-		//* Load the form definition
-		$app->remoting_lib->loadFormDef($formdef_file);
-		
-		//* Get the SQL query
-		$sql = $app->remoting_lib->getSQL($params,'INSERT',0);
-		if($app->remoting_lib->errorMessage != '') {
-			$this->server->fault('data_processing_error', $app->remoting_lib->errorMessage);
-			return false;
-		}
-		
-		$app->db->query($sql);
-		
-		if($app->db->errorMessage != '') {
-			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
-			return false;
-		}
-		
-		$insert_id = $app->db->insertID();
-		
-		// set a few values for compatibility with tform actions, mostly used by plugins
-		$this->id = $insert_id;
-		$this->dataRecord = $params;
-		
-		if($event_identifier != '') $app->plugin->raiseEvent($event_identifier,$this);
-	
-		//$app->uses('tform');
-		//* Save changes to Datalog
-		if($app->remoting_lib->formDef["db_history"] == 'yes') {
-			$new_rec = $app->remoting_lib->getDataRecord($insert_id);
-			$app->remoting_lib->datalogSave('INSERT',$primary_id,array(),$new_rec);			
-		}		
-		return $insert_id;
-	}
-	
-	
-	private function updateQuery($formdef_file, $client_id, $primary_id, $params, $event_identifier = '')
-    {
-		global $app;
-		
-		$app->uses('remoting_lib');
-		
-		//* load the user profile of the client
-		$app->remoting_lib->loadUserProfile($client_id);
-		
-		//* Load the form definition
-		$app->remoting_lib->loadFormDef($formdef_file);
-		
-		//* Get the SQL query
-		$sql = $app->remoting_lib->getSQL($params,'UPDATE',$primary_id);
-		if($app->remoting_lib->errorMessage != '') {
-			$this->server->fault('data_processing_error', $app->remoting_lib->errorMessage);
-			return false;
-		}
-		
-		$old_rec = $app->remoting_lib->getDataRecord($primary_id);
-		
-		// set a few values for compatibility with tform actions, mostly used by plugins
-		$this->oldDataRecord = $old_rec;
-		$this->id = $primary_id;
-		$this->dataRecord = $params;
-		
-		$app->db->query($sql);
-		
-		if($app->db->errorMessage != '') {
-			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
-			return false;
-		}
-		
-		$affected_rows = $app->db->affectedRows();
-		
-		if($event_identifier != '') $app->plugin->raiseEvent($event_identifier,$this);
-		
-		//* Save changes to Datalog
-		if($app->remoting_lib->formDef["db_history"] == 'yes') {
-			$new_rec = $app->remoting_lib->getDataRecord($primary_id);
-			$app->remoting_lib->datalogSave('UPDATE',$primary_id,$old_rec,$new_rec);
-		}
-		
-		return $affected_rows;
-	}
-	
-	private function deleteQuery($formdef_file, $primary_id)
-    {
-		global $app;
-		
-		$app->uses('remoting_lib');
-		
-		//* load the user profile of the client
-		$app->remoting_lib->loadUserProfile(0);
-		
-		//* Load the form definition
-		$app->remoting_lib->loadFormDef($formdef_file);
-		
-		$old_rec = $app->remoting_lib->getDataRecord($primary_id);
-		
-		// set a few values for compatibility with tform actions, mostly used by plugins
-		$this->oldDataRecord = $old_rec;
-		$this->id = $primary_id;
-		$this->dataRecord = $params;
-		
-		//* Get the SQL query
-		$sql = $app->remoting_lib->getDeleteSQL($primary_id);
-		
-		$app->db->query($sql);
-		
-		if($app->db->errorMessage != '') {
-			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
-			return false;
-		}
-		
-		$affected_rows = $app->db->affectedRows();
-		
-		//* Save changes to Datalog
-		if($app->remoting_lib->formDef["db_history"] == 'yes') {
-			$app->remoting_lib->datalogSave('DELETE',$primary_id,$old_rec,array());
-		}
-		
-		
-		return $affected_rows;
-	}
-	
-	
-	private function checkPerm($session_id, $function_name)
-    {
-	$dobre=array();
-	$session = $this->getSession($session_id);
-        if(!$session){
-            return false;
-        }
-		
-		$dobre= str_replace(';',',',$session['remote_functions']);
-		return in_array($function_name, explode(',', $dobre) );
-	}
-	
-	
-	private function getSession($session_id)
-    {	
-		global $app;
-		
-		if(empty($session_id)) {
-			$this->server->fault('session_id_empty','The SessionID is empty.');
-			return false;
-		}
-		
-		$session_id = $app->db->quote($session_id);
-		
-		$now = time();
-		$sql = "SELECT * FROM remote_session WHERE remote_session = '$session_id' AND tstamp >= $now";
-		$session = $app->db->queryOneRecord($sql);
-		if($session['remote_userid'] > 0) {
-			return $session;
-		} else {
-			$this->server->fault('session_does_not_exist','The Session is expired or does not exist.');
-			return false;
-		}
-	}
-	
-	//---
-	
-	
-	/**
-	 * Gets sites by $sys_userid & $sys_groupid
-	 * @param	int		session id
-	 * @param	int		user id
-	 * @param	array	list of groups
-	 * @return	mixed	array with sites by user
-	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-	 */
-	public function client_get_sites_by_user($session_id, $sys_userid, $sys_groupid) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'client_get_sites_by_user')) {
-              $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-              return false;
-        }
-        $sys_userid  = intval($sys_userid);        
-        $sys_groupid = explode(',', $sys_groupid);
-        $new_group = array();
-        foreach($sys_groupid as $group_id) {
-			$new_group[] = intval( $group_id);
-        }
-        $group_list = implode(',', $new_group);
-		$sql ="SELECT domain, domain_id, document_root, active FROM web_domain WHERE ( (sys_userid = $sys_userid  AND sys_perm_user LIKE '%r%') OR (sys_groupid IN ($group_list) AND sys_perm_group LIKE '%r%') OR  sys_perm_other LIKE '%r%') AND type = 'vhost'";
-        $result = $app->db->queryAllRecords($sql);
-        if(isset($result)) {
-			return $result;
-        } else {
-			$this->server->fault('no_client_found', 'There is no site for this user');
-			return false;
-        }
-    }
-    
-    /**
-     * Change domains status
-	 * @param	int		session id
-	 * @param	int		site id
-	 * @param	string	active or inactive string 
-	 * @return	mixed	false if error
-	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-	 */
-	 
-    public function sites_web_domain_set_status($session_id, $primary_id, $status) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'sites_web_domain_set_status')) {
-            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-        }        
-        if(in_array($status, array('active', 'inactive'))) {        	    	
-        	if ($status == 'active') {
-        		$status = 'y';
-        	} else {
-        		$status = 'n';
-        	}
-	        $sql = "UPDATE web_domain SET active = '$status' WHERE domain_id = ".intval($primary_id);	        
-	        $app->db->query($sql);
-	        $result = $app->db->affectedRows();	
-	         return $result;
-        } else {
-			$this->server->fault('status_undefined', 'The status is not available');
-			return false;
-        }      
-	}
-	
-	/**
-	 * Get sys_user information by username
-	 * @param	int		session id
-	 * @param	string	user's name  
-	 * @return	mixed	false if error
-	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-	 */
-	public function client_get_by_username($session_id, $username) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'client_get_by_username')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-        }
-        $username = $app->db->quote($username);
-        $rec = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE username = '".$username."'");
-        if (isset($rec)) {
-			return $rec;
-        } else {
-			$this->server->fault('no_client_found', 'There is no user account for this user name.');
-			return false;
-        }
-    }
-
-    /**
-     * Changes client password
-     * 
-  	 * @param	int		session id
-  	 * @param	int		client	id
-  	 * @param	string	new password
-  	 * @return	bool	true if success 
-	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-     * 
-     */
-    public function client_change_password($session_id, $client_id, $new_password) {
-        global $app;
-
-        if(!$this->checkPerm($session_id, 'client_change_password')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-        }
-        $client_id = intval($client_id);
-        $client = $app->db->queryOneRecord("SELECT client_id FROM client WHERE client_id = ".$client_id);
-        if($client['client_id'] > 0) {
-            $new_password = $app->db->quote($new_password);
-            $sql = "UPDATE client SET password = md5('".($new_password)."') 	WHERE client_id = ".$client_id;
-            $app->db->query($sql);            
-            $sql = "UPDATE sys_user SET passwort = md5('".($new_password)."') 	WHERE client_id = ".$client_id;
-            $app->db->query($sql);            
-            return true;
-        } else {
-			$this->server->fault('no_client_found', 'There is no user account for this client_id');
-			return false;
-        }
-    }
-    
-	public function mail_domain_get_by_domain($session_id, $domain) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'mail_domain_get_by_domain')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-        }        
-        if (!empty($domain_id)) {
-        	$domain      	= $app->db->quote($domain);        	
-    	    $sql            = "SELECT * FROM mail_domain WHERE domain = $domain";
-        	$result         = $app->db->queryAllRecords($sql);
-        	return          $result;
-        }
-        return false;
-    }
-    
-    
-    
-	/**
-   	* Get a list of functions
-   	* @param 	int		session id
-   	* @return	mixed	array of the available functions
-    * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-    */
-    public function get_function_list($session_id) 
-    {
-        if(!$this->checkPerm($session_id, 'get_function_list')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-        }
-        return get_class_methods($this);
-    }
-    
-    /**
-     * Get all databases by user
-     * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-     */
-	public function sites_database_get_all_by_user($session_id, $client_id)
-    {
-        global $app;
-		if(!$this->checkPerm($session_id, 'sites_database_get_all_by_user')) {
-        	$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-		}
-        $client_id = intval($client_id);
-        $sql = "SELECT database_id, database_name, database_user, database_password FROM web_database WHERE sys_userid  = $client_id ";
-        $all = $app->db->queryAllRecords($sql);
-        return $all;
-	}
-	
-	/**
-	 * 	Get all client templates
-	 *	@param 	int		session id
-	 *	@author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-	 */
-	public function client_templates_get_all($session_id) {
-		global $app;
-		if(!$this->checkPerm($session_id, 'client_templates_get_all')) {
-			 $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-		}
-        $sql    = "SELECT * FROM client_template";
-		$result = $app->db->queryAllRecords($sql);
-        return $result;
-   }
-	
-	/**
-	 * Get all DNS zone by user 
-	 *@author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-	 */	 
-    public function dns_zone_get_by_user($session_id, $client_id, $server_id) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'dns_zone_get')) {
-			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-            return false;
-        }        
-        if (!empty($client_id) && !empty($server_id)) {
-        	$server_id      = intval($server_id);
-        	$client_id      = intval($client_id);
-    	    $sql            = "SELECT id, origin FROM dns_soa d INNER JOIN sys_user s on(d.sys_groupid = s.default_group) WHERE client_id = $client_id AND server_id = $server_id";
-        	$result         = $app->db->queryAllRecords($sql);
-        	return          $result;
-        }
-        return false;
-    }
-    
-    
-	/**
-	 * Changes DNS zone status 
-	 *	@param 	int		session id
-	 *	@param	int		dns soa id
-	 *	@param	string	status active or inactive string
-	 *	@author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
-	 */
-	 
-    public function dns_zone_set_status($session_id, $primary_id, $status) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'dns_zone_set_status')) {
-              $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-               return false;
-        }        
-        if(in_array($status, array('active', 'inactive'))) {	    	        	
-	    	if ($status == 'active') {
-	    		$status = 'Y';
-	    	} else {
-	    		$status = 'N';
-	    	}
-	        $sql = "UPDATE dns_soa SET active = '$status' WHERE id = ".intval($primary_id);
-	        $app->db->query($sql);
-	        $result = $app->db->affectedRows();
-	        return $result;
-        } else {
-			$this->server->fault('status_undefined', 'The status is not available');
-			return false;
-        }  
-    }
-    
-    public function mail_domain_set_status($session_id, $primary_id, $status) {
-        global $app;
-        if(!$this->checkPerm($session_id, 'mail_domain_set_status')) {
-              $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
-               return false;
-        }        
-        if(in_array($status, array('active', 'inactive'))) {	    	        	
-	    	if ($status == 'active') {
-	    		$status = 'y';
-	    	} else {
-	    		$status = 'n';
-	    	}
-	        $sql = "UPDATE mail_domain SET active = '$status' WHERE domain_id = ".intval($primary_id);
-	        $app->db->query($sql);
-	        $result = $app->db->affectedRows();
-	        return $result;
-        } else {
-			$this->server->fault('status_undefined', 'The status is not available');
-			return false;
-        }  
-    }
-}
+ 	//* przekierowania email
+	public function mail_forward_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_forward_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_forward.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_forward_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_forward_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_forward.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_forward_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_forward_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_forward.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get catchall details
+	public function mail_catchall_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_catchall_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_domain_catchall.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	//* catchall e-mail
+ 	public function mail_catchall_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_catchall_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_domain_catchall.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+	public function mail_catchall_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_catchall_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_domain_catchall.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+	public function mail_catchall_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_catchall_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_domain_catchall.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get transport details
+	public function mail_transport_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_transport_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_transport.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* przeniesienia e-mail
+	public function mail_transport_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_transport_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_transport.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_transport_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_transport_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_transport.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_transport_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_transport_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_transport.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get spamfilter whitelist details
+	public function mail_spamfilter_whitelist_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_whitelist.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+ 	//* biała lista e-mail
+	public function mail_spamfilter_whitelist_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/spamfilter_whitelist.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_spamfilter_whitelist_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/spamfilter_whitelist.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_spamfilter_whitelist_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_whitelist.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get spamfilter blacklist details
+	public function mail_spamfilter_blacklist_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_blacklist.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+ 	//* czarna lista e-mail
+	public function mail_spamfilter_blacklist_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/spamfilter_blacklist.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_spamfilter_blacklist_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/spamfilter_blacklist.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_spamfilter_blacklist_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_blacklist.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get spamfilter user details
+	public function mail_spamfilter_user_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_spamfilter_user_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_users.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	//* filtr spamu użytkowników e-mail
+	public function mail_spamfilter_user_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_user_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/spamfilter_users.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_spamfilter_user_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_user_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/spamfilter_users.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_spamfilter_user_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_spamfilter_user_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_users.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get policy details
+	public function mail_policy_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_policy_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/spamfilter_policy.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+ 	//* polityki filtrów spamu e-mail
+	public function mail_policy_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_policy_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/spamfilter_policy.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_policy_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_policy_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/spamfilter_policy.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_policy_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_policy_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/spamfilter_policy.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get fetchmail details
+	public function mail_fetchmail_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_fetchmail_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_get.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	 //* fetchmail
+	public function mail_fetchmail_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_fetchmail_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_get.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_fetchmail_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_fetchmail_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_get.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_fetchmail_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_fetchmail_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_get.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get whitelist details
+	public function mail_whitelist_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_whitelist_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_whitelist.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* wpisy białej listy
+	public function mail_whitelist_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_whitelist_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_whitelist.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_whitelist_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_whitelist_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_whitelist.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_whitelist_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_whitelist_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_whitelist.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get Blacklist details
+	public function mail_blacklist_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_blacklist_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_blacklist.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* wpisy białej listy
+	public function mail_blacklist_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_blacklist_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_blacklist.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_blacklist_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_blacklist_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_blacklist.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_blacklist_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_blacklist_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_blacklist.tform.php', $primary_id);
+			return $affected_rows;
+	}
+	
+	//* Get filter details
+	public function mail_filter_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'mail_filter_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../mail/form/mail_content_filter.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	//* wpisy filtrow e-mail
+	public function mail_filter_add($session_id, $client_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_filter_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->insertQuery('../mail/form/mail_content_filter.tform.php', $client_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_filter_update($session_id, $client_id, $primary_id, $params)
+	{
+			if (!$this->checkPerm($session_id, 'mail_filter_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../mail/form/mail_content_filter.tform.php', $client_id, $primary_id, $params);
+			return $affected_rows;
+	}
+
+
+	public function mail_filter_delete($session_id, $primary_id)
+	{
+			if (!$this->checkPerm($session_id, 'mail_filter_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../mail/form/mail_content_filter.tform.php', $primary_id);
+			return $affected_rows;
+	}
+
+
+
+
+/* 
+ * 
+ * 
+ * 
+ * 	 * Client functions
+ * 
+ * 
+ */
+	//* Get client details
+	public function client_get($session_id, $client_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'client_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../client/form/client.tform.php');
+		return $app->remoting_lib->getDataRecord($client_id);
+	}
+	
+	public function client_get_id($session_id, $sys_userid)
+    {
+		global $app;
+		if(!$this->checkPerm($session_id, 'client_get_id')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		
+		$sys_userid = intval($sys_userid);
+		
+		$rec = $app->db->queryOneRecord("SELECT client_id FROM sys_user WHERE userid = ".$sys_userid);
+		if(isset($rec['client_id'])) {
+			return intval($rec['client_id']);
+		} else {
+			$this->server->fault('no_client_found', 'There is no sysuser account for this client ID.');
+			return false;
+		}
+		
+	}
+	
+	
+	public function client_add($session_id, $reseller_id, $params)
+	{
+		if (!$this->checkPerm($session_id, 'client_add'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+		$affected_rows = $this->klientadd('../client/form/client.tform.php',$reseller_id, $params);
+		return $affected_rows;  
+				  
+	}
+	
+	public function client_update($session_id, $client_id, $reseller_id, $params)
+	{
+			global $app;
+			
+			if (!$this->checkPerm($session_id, 'client_update'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->updateQuery('../client/form/client.tform.php', $reseller_id, $client_id, $params);
+			
+			$app->remoting_lib->ispconfig_sysuser_update($params,$client_id);
+			
+			return $affected_rows;
+	}
+
+
+	public function client_delete($session_id,$client_id)
+	{
+			global $app;
+			
+			if (!$this->checkPerm($session_id, 'client_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../client/form/client.tform.php',$client_id);
+			
+			$app->remoting_lib->ispconfig_sysuser_delete($client_id);
+			
+			return $affected_rows;
+	}
+	
+	// -----------------------------------------------------------------------------------------------
+	
+	public function client_delete_everything($session_id, $client_id)
+    {
+        global $app, $conf;
+		if(!$this->checkPerm($session_id, 'client_delete_everything')) {
+        	$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+		}
+        $client_id = intval($client_id);
+	$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
+
+	$tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
+		$tables_array = explode(',',$tables);
+		$client_group_id = intval($client_group['groupid']);
+		
+		$table_list = array();
+		if($client_group_id > 1) {
+			foreach($tables_array as $table) {
+				if($table != '') {
+					$records = $app->db->queryAllRecords("SELECT * FROM $table WHERE sys_groupid = ".$client_group_id);
+					$number = count($records);
+					if($number > 0) $table_list[] = array('table' => $table."(".$number.")");
+				}
+			}
+		}
+
+
+	if($client_id > 0) {			
+			// remove the group of the client from the resellers group
+			$parent_client_id = intval($this->dataRecord['parent_client_id']);
+			$parent_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE client_id = $parent_client_id");
+			$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
+			$app->auth->remove_group_from_user($parent_user['userid'],$client_group['groupid']);
+			
+			// delete the group of the client
+			$app->db->query("DELETE FROM sys_group WHERE client_id = $client_id");
+			
+			// delete the sys user(s) of the client
+			$app->db->query("DELETE FROM sys_user WHERE client_id = $client_id");
+			
+			// Delete all records (sub-clients, mail, web, etc....)  of this client.
+			$tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
+			$tables_array = explode(',',$tables);
+			$client_group_id = intval($client_group['groupid']);
+			if($client_group_id > 1) {
+				foreach($tables_array as $table) {
+					if($table != '') {
+						$records = $app->db->queryAllRecords("SELECT * FROM $table WHERE sys_groupid = ".$client_group_id);
+						// find the primary ID of the table
+						$table_info = $app->db->tableInfo($table);
+						$index_field = '';
+						foreach($table_info as $tmp) {
+							if($tmp['option'] == 'primary') $index_field = $tmp['name'];
+						}
+						// Delete the records
+						if($index_field != '') {
+							if(is_array($records)) {
+								foreach($records as $rec) {
+									$app->db->datalogDelete($table, $index_field, $rec[$index_field]);
+								}
+							}
+						}
+						
+					}
+				}
+			}
+			
+			
+			
+		}
+        
+		if (!$this->checkPerm($session_id, 'client_delete'))
+			{
+					$this->server->fault('permission_denied','You do not have the permissions to access this function.');
+					return false;
+			}
+			$affected_rows = $this->deleteQuery('../client/form/client.tform.php',$client_id);
+			
+			// $app->remoting_lib->ispconfig_sysuser_delete($client_id);
+
+
+        return false;
+	}
+	
+	// Website functions ---------------------------------------------------------------------------------------
+	
+	//* Get cron details
+	public function sites_cron_get($session_id, $cron_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_cron_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/cron.tform.php');
+		return $app->remoting_lib->getDataRecord($cron_id);
+	}
+	
+	//* Add a cron record
+	public function sites_cron_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_cron_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/cron.tform.php',$client_id,$params);
+	}
+	
+	//* Update cron record
+	public function sites_cron_update($session_id, $client_id, $cron_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_cron_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/cron.tform.php',$client_id,$cron_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete cron record
+	public function sites_cron_delete($session_id, $cron_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_cron_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/cron.tform.php',$cron_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function sites_database_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_database_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/database.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function sites_database_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_database_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/database.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function sites_database_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_database_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/database.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function sites_database_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_database_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/database.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function sites_ftp_user_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_ftp_user_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/ftp_user.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function sites_ftp_user_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_ftp_user_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/ftp_user.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function sites_ftp_user_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_ftp_user_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/ftp_user.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function sites_ftp_user_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_ftp_user_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/ftp_user.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function sites_shell_user_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_shell_user_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/shell_user.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function sites_shell_user_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_shell_user_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/shell_user.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function sites_shell_user_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_shell_user_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/shell_user.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function sites_shell_user_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_shell_user_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/shell_user.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function sites_web_domain_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_web_domain_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/web_domain.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function sites_web_domain_add($session_id, $client_id, $params, $readonly = false)
+	{
+		global $app;
+		if(!$this->checkPerm($session_id, 'sites_web_domain_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$domain_id = $this->insertQuery('../sites/form/web_domain.tform.php',$client_id,$params, 'sites:web_domain:on_after_insert');
+		if ($readonly === true)
+			$app->db->query("UPDATE web_domain SET `sys_userid` = '1' WHERE domain_id = ".$domain_id);
+			return $domain_id;
+		}
+	
+	//* Update a record
+	public function sites_web_domain_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_domain_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/web_domain.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function sites_web_domain_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_domain_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/web_domain.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// -----------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function sites_web_aliasdomain_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/web_aliasdomain.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function sites_web_aliasdomain_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/web_aliasdomain.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function sites_web_aliasdomain_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/web_aliasdomain.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function sites_web_aliasdomain_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_aliasdomain_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/web_aliasdomain.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function sites_web_subdomain_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'sites_web_subdomain_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/web_subdomain.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function sites_web_subdomain_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_subdomain_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/web_subdomain.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function sites_web_subdomain_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_subdomain_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/web_subdomain.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function sites_web_subdomain_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'sites_web_subdomain_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../sites/form/web_subdomain.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// -----------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function domains_domain_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'domains_domain_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../domain/form/domain.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	//* Add a record
+	public function domains_domain_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'domains_domain_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../domain/form/domain.tform.php',$client_id,$params);
+	}
+
+	//* Delete a record
+	public function domains_domain_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'domains_domain_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../domain/form/domain.tform.php',$primary_id);
+		return $affected_rows;
+	}
+
+// -----------------------------------------------------------------------------------------------
+
+	public function domains_get_all_by_user($session_id, $group_id)
+    {
+        global $app;
+		if(!$this->checkPerm($session_id, 'domains_get_all_by_user')) {
+        	$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+		}
+        $group_id = intval($group_id);
+        $sql = "SELECT domain_id, domain FROM domain WHERE sys_groupid  = $group_id ";
+        $all = $app->db->queryAllRecords($sql);
+        return $all;
+	}
+	
+	
+	// DNS Function --------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_zone_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_zone_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_soa.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_zone_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_soa.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_zone_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_zone_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_soa.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_zone_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_zone_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_soa.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_aaaa_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_aaaa_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_aaaa.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_aaaa_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_aaaa_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_aaaa.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_aaaa_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_aaaa_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_aaaa.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_aaaa_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_aaaa_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_aaaa.tform.php',$primary_id);
+		return $affected_rows;
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_a_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_a_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_a.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_a_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_a_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_a.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_a_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_a_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_a.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_a_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_a_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_a.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_alias_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_alias_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_alias.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_alias_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_alias_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_alias.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_alias_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_alias_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_alias.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_alias_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_alias_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_alias.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_cname_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_cname_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_cname.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_cname_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_cname_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_cname.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_cname_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_cname_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_cname.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_cname_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_cname_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_cname.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_hinfo_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_hinfo_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_hinfo.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_hinfo_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_hinfo_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_hinfo.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_hinfo_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_hinfo_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_hinfo.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_hinfo_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_hinfo_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_hinfo.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_mx_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_mx_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_mx.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_mx_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_mx_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_mx.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_mx_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_mx_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_mx.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_mx_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_mx_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_mx.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_ns_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_ns_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_ns.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_ns_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_ns_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_ns.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_ns_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_ns_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_ns.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_ns_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_ns_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_ns.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_ptr_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_ptr_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_ptr.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_ptr_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_ptr_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_ptr.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_ptr_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_ptr_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_ptr.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_ptr_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_ptr_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_ptr.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_rp_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_rp_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_rp.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_rp_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_rp_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_rp.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_rp_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_rp_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_rp.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_rp_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_rp_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_rp.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_srv_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_srv_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_srv.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_srv_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_srv_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_srv.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_srv_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_srv_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_srv.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_srv_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_srv_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_srv.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_txt_get($session_id, $primary_id)
+    {
+		global $app;
+		
+		if(!$this->checkPerm($session_id, 'dns_txt_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_txt.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+	
+	//* Add a record
+	public function dns_txt_add($session_id, $client_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_txt_add')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../dns/form/dns_txt.tform.php',$client_id,$params);
+	}
+	
+	//* Update a record
+	public function dns_txt_update($session_id, $client_id, $primary_id, $params)
+    {
+		if(!$this->checkPerm($session_id, 'dns_txt_update')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../dns/form/dns_txt.tform.php',$client_id,$primary_id,$params);
+		return $affected_rows;
+	}
+	
+	//* Delete a record
+	public function dns_txt_delete($session_id, $primary_id)
+    {
+		if(!$this->checkPerm($session_id, 'dns_txt_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_txt.tform.php',$primary_id);
+		return $affected_rows;
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+        
+
+
+	//** private functions -----------------------------------------------------------------------------------
+	
+	
+
+
+	private function klientadd($formdef_file, $reseller_id, $params)
+    {
+		global $app, $tform, $remoting_lib;
+		$app->uses('remoting_lib');
+			
+		//* Load the form definition
+		$app->remoting_lib->loadFormDef($formdef_file);
+		
+		//* load the user profile of the client
+		$app->remoting_lib->loadUserProfile($reseller_id);
+		
+		//* load the client template
+		if(isset($params['template_master']) and $params['template_master'] > 0)
+		{
+			$template=$app->db->queryOneRecord("SELECT * FROM client_template WHERE template_id=".intval($params['template_master']));
+			$params=array_merge($params,$template);
+		}
+		
+		//* Get the SQL query
+		$sql = $app->remoting_lib->getSQL($params,'INSERT',0);
+		if($app->remoting_lib->errorMessage != '') {
+			$this->server->fault('data_processing_error', $app->remoting_lib->errorMessage);
+			return false;
+		}
+		
+		$app->db->query($sql);
+		
+		if($app->db->errorMessage != '') {
+			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
+			return false;
+		}
+		
+					
+		
+		$insert_id = $app->db->insertID();	
+		//$app->uses('tform');
+		//* Save changes to Datalog
+		if($app->remoting_lib->formDef["db_history"] == 'yes') {
+			$new_rec = $app->remoting_lib->getDataRecord($insert_id);
+			$app->remoting_lib->datalogSave('INSERT',$primary_id,array(),$new_rec);			
+			$app->remoting_lib->ispconfig_sysuser_add($params,$insert_id);
+
+            if($reseller_id) {
+                $client_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = ".$insert_id);
+                $reseller_user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE client_id = ".$reseller_id);
+                $app->auth->add_group_to_user($reseller_user['userid'], $client_group['groupid']);
+                $app->db->query("UPDATE client SET parent_client_id = ".$reseller_id." WHERE client_id = ".$insert_id);
+            }   
+
+		}
+		return $insert_id;
+	}
+
+	private function insertQuery($formdef_file, $client_id, $params,$event_identifier = '')
+    {
+		global $app, $tform, $remoting_lib;
+		
+		$app->uses('remoting_lib');
+		
+		//* load the user profile of the client
+		$app->remoting_lib->loadUserProfile($client_id);
+		
+		//* Load the form definition
+		$app->remoting_lib->loadFormDef($formdef_file);
+		
+		//* Get the SQL query
+		$sql = $app->remoting_lib->getSQL($params,'INSERT',0);
+		if($app->remoting_lib->errorMessage != '') {
+			$this->server->fault('data_processing_error', $app->remoting_lib->errorMessage);
+			return false;
+		}
+		
+		$app->db->query($sql);
+		
+		if($app->db->errorMessage != '') {
+			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
+			return false;
+		}
+		
+		$insert_id = $app->db->insertID();
+		
+		// set a few values for compatibility with tform actions, mostly used by plugins
+		$this->id = $insert_id;
+		$this->dataRecord = $params;
+		
+		if($event_identifier != '') $app->plugin->raiseEvent($event_identifier,$this);
+	
+		//$app->uses('tform');
+		//* Save changes to Datalog
+		if($app->remoting_lib->formDef["db_history"] == 'yes') {
+			$new_rec = $app->remoting_lib->getDataRecord($insert_id);
+			$app->remoting_lib->datalogSave('INSERT',$primary_id,array(),$new_rec);			
+		}		
+		return $insert_id;
+	}
+	
+	
+	private function updateQuery($formdef_file, $client_id, $primary_id, $params, $event_identifier = '')
+    {
+		global $app;
+		
+		$app->uses('remoting_lib');
+		
+		//* load the user profile of the client
+		$app->remoting_lib->loadUserProfile($client_id);
+		
+		//* Load the form definition
+		$app->remoting_lib->loadFormDef($formdef_file);
+		
+		//* Get the SQL query
+		$sql = $app->remoting_lib->getSQL($params,'UPDATE',$primary_id);
+		if($app->remoting_lib->errorMessage != '') {
+			$this->server->fault('data_processing_error', $app->remoting_lib->errorMessage);
+			return false;
+		}
+		
+		$old_rec = $app->remoting_lib->getDataRecord($primary_id);
+		
+		// set a few values for compatibility with tform actions, mostly used by plugins
+		$this->oldDataRecord = $old_rec;
+		$this->id = $primary_id;
+		$this->dataRecord = $params;
+		
+		$app->db->query($sql);
+		
+		if($app->db->errorMessage != '') {
+			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
+			return false;
+		}
+		
+		$affected_rows = $app->db->affectedRows();
+		
+		if($event_identifier != '') $app->plugin->raiseEvent($event_identifier,$this);
+		
+		//* Save changes to Datalog
+		if($app->remoting_lib->formDef["db_history"] == 'yes') {
+			$new_rec = $app->remoting_lib->getDataRecord($primary_id);
+			$app->remoting_lib->datalogSave('UPDATE',$primary_id,$old_rec,$new_rec);
+		}
+		
+		return $affected_rows;
+	}
+	
+	private function deleteQuery($formdef_file, $primary_id)
+    {
+		global $app;
+		
+		$app->uses('remoting_lib');
+		
+		//* load the user profile of the client
+		$app->remoting_lib->loadUserProfile(0);
+		
+		//* Load the form definition
+		$app->remoting_lib->loadFormDef($formdef_file);
+		
+		$old_rec = $app->remoting_lib->getDataRecord($primary_id);
+		
+		// set a few values for compatibility with tform actions, mostly used by plugins
+		$this->oldDataRecord = $old_rec;
+		$this->id = $primary_id;
+		$this->dataRecord = $params;
+		
+		//* Get the SQL query
+		$sql = $app->remoting_lib->getDeleteSQL($primary_id);
+		
+		$app->db->query($sql);
+		
+		if($app->db->errorMessage != '') {
+			$this->server->fault('database_error', $app->db->errorMessage . ' '.$sql);
+			return false;
+		}
+		
+		$affected_rows = $app->db->affectedRows();
+		
+		//* Save changes to Datalog
+		if($app->remoting_lib->formDef["db_history"] == 'yes') {
+			$app->remoting_lib->datalogSave('DELETE',$primary_id,$old_rec,array());
+		}
+		
+		
+		return $affected_rows;
+	}
+	
+	
+	private function checkPerm($session_id, $function_name)
+    {
+	$dobre=array();
+	$session = $this->getSession($session_id);
+        if(!$session){
+            return false;
+        }
+		
+		$dobre= str_replace(';',',',$session['remote_functions']);
+		return in_array($function_name, explode(',', $dobre) );
+	}
+	
+	
+	private function getSession($session_id)
+    {	
+		global $app;
+		
+		if(empty($session_id)) {
+			$this->server->fault('session_id_empty','The SessionID is empty.');
+			return false;
+		}
+		
+		$session_id = $app->db->quote($session_id);
+		
+		$now = time();
+		$sql = "SELECT * FROM remote_session WHERE remote_session = '$session_id' AND tstamp >= $now";
+		$session = $app->db->queryOneRecord($sql);
+		if($session['remote_userid'] > 0) {
+			return $session;
+		} else {
+			$this->server->fault('session_does_not_exist','The Session is expired or does not exist.');
+			return false;
+		}
+	}
+	
+	//---
+	
+	
+	/**
+	 * Gets sites by $sys_userid & $sys_groupid
+	 * @param	int		session id
+	 * @param	int		user id
+	 * @param	array	list of groups
+	 * @return	mixed	array with sites by user
+	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+	 */
+	public function client_get_sites_by_user($session_id, $sys_userid, $sys_groupid) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'client_get_sites_by_user')) {
+              $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+              return false;
+        }
+        $sys_userid  = intval($sys_userid);        
+        $sys_groupid = explode(',', $sys_groupid);
+        $new_group = array();
+        foreach($sys_groupid as $group_id) {
+			$new_group[] = intval( $group_id);
+        }
+        $group_list = implode(',', $new_group);
+		$sql ="SELECT domain, domain_id, document_root, active FROM web_domain WHERE ( (sys_userid = $sys_userid  AND sys_perm_user LIKE '%r%') OR (sys_groupid IN ($group_list) AND sys_perm_group LIKE '%r%') OR  sys_perm_other LIKE '%r%') AND type = 'vhost'";
+        $result = $app->db->queryAllRecords($sql);
+        if(isset($result)) {
+			return $result;
+        } else {
+			$this->server->fault('no_client_found', 'There is no site for this user');
+			return false;
+        }
+    }
+    
+    /**
+     * Change domains status
+	 * @param	int		session id
+	 * @param	int		site id
+	 * @param	string	active or inactive string 
+	 * @return	mixed	false if error
+	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+	 */
+	 
+    public function sites_web_domain_set_status($session_id, $primary_id, $status) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'sites_web_domain_set_status')) {
+            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+        }        
+        if(in_array($status, array('active', 'inactive'))) {        	    	
+        	if ($status == 'active') {
+        		$status = 'y';
+        	} else {
+        		$status = 'n';
+        	}
+	        $sql = "UPDATE web_domain SET active = '$status' WHERE domain_id = ".intval($primary_id);	        
+	        $app->db->query($sql);
+	        $result = $app->db->affectedRows();	
+	         return $result;
+        } else {
+			$this->server->fault('status_undefined', 'The status is not available');
+			return false;
+        }      
+	}
+	
+	/**
+	 * Get sys_user information by username
+	 * @param	int		session id
+	 * @param	string	user's name  
+	 * @return	mixed	false if error
+	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+	 */
+	public function client_get_by_username($session_id, $username) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'client_get_by_username')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+        }
+        $username = $app->db->quote($username);
+        $rec = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE username = '".$username."'");
+        if (isset($rec)) {
+			return $rec;
+        } else {
+			$this->server->fault('no_client_found', 'There is no user account for this user name.');
+			return false;
+        }
+    }
+
+    /**
+     * Changes client password
+     * 
+  	 * @param	int		session id
+  	 * @param	int		client	id
+  	 * @param	string	new password
+  	 * @return	bool	true if success 
+	 * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+     * 
+     */
+    public function client_change_password($session_id, $client_id, $new_password) {
+        global $app;
+
+        if(!$this->checkPerm($session_id, 'client_change_password')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+        }
+        $client_id = intval($client_id);
+        $client = $app->db->queryOneRecord("SELECT client_id FROM client WHERE client_id = ".$client_id);
+        if($client['client_id'] > 0) {
+            $new_password = $app->db->quote($new_password);
+            $sql = "UPDATE client SET password = md5('".($new_password)."') 	WHERE client_id = ".$client_id;
+            $app->db->query($sql);            
+            $sql = "UPDATE sys_user SET passwort = md5('".($new_password)."') 	WHERE client_id = ".$client_id;
+            $app->db->query($sql);            
+            return true;
+        } else {
+			$this->server->fault('no_client_found', 'There is no user account for this client_id');
+			return false;
+        }
+    }
+    
+	public function mail_domain_get_by_domain($session_id, $domain) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'mail_domain_get_by_domain')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+        }        
+        if (!empty($domain_id)) {
+        	$domain      	= $app->db->quote($domain);        	
+    	    $sql            = "SELECT * FROM mail_domain WHERE domain = $domain";
+        	$result         = $app->db->queryAllRecords($sql);
+        	return          $result;
+        }
+        return false;
+    }
+    
+    
+    
+	/**
+   	* Get a list of functions
+   	* @param 	int		session id
+   	* @return	mixed	array of the available functions
+    * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+    */
+    public function get_function_list($session_id) 
+    {
+        if(!$this->checkPerm($session_id, 'get_function_list')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+        }
+        return get_class_methods($this);
+    }
+    
+    /**
+     * Get all databases by user
+     * @author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+     */
+	public function sites_database_get_all_by_user($session_id, $client_id)
+    {
+        global $app;
+		if(!$this->checkPerm($session_id, 'sites_database_get_all_by_user')) {
+        	$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+		}
+        $client_id = intval($client_id);
+        $sql = "SELECT database_id, database_name, database_user, database_password FROM web_database WHERE sys_userid  = $client_id ";
+        $all = $app->db->queryAllRecords($sql);
+        return $all;
+	}
+	
+	/**
+	 * 	Get all client templates
+	 *	@param 	int		session id
+	 *	@author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+	 */
+	public function client_templates_get_all($session_id) {
+		global $app;
+		if(!$this->checkPerm($session_id, 'client_templates_get_all')) {
+			 $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+		}
+        $sql    = "SELECT * FROM client_template";
+		$result = $app->db->queryAllRecords($sql);
+        return $result;
+   }
+	
+	/**
+	 * Get all DNS zone by user 
+	 *@author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+	 */	 
+    public function dns_zone_get_by_user($session_id, $client_id, $server_id) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'dns_zone_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+            return false;
+        }        
+        if (!empty($client_id) && !empty($server_id)) {
+        	$server_id      = intval($server_id);
+        	$client_id      = intval($client_id);
+    	    $sql            = "SELECT id, origin FROM dns_soa d INNER JOIN sys_user s on(d.sys_groupid = s.default_group) WHERE client_id = $client_id AND server_id = $server_id";
+        	$result         = $app->db->queryAllRecords($sql);
+        	return          $result;
+        }
+        return false;
+    }
+    
+    
+	/**
+	 * Changes DNS zone status 
+	 *	@param 	int		session id
+	 *	@param	int		dns soa id
+	 *	@param	string	status active or inactive string
+	 *	@author	Julio Montoya <gugli100@gmail.com> BeezNest 2010
+	 */
+	 
+    public function dns_zone_set_status($session_id, $primary_id, $status) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'dns_zone_set_status')) {
+              $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+               return false;
+        }        
+        if(in_array($status, array('active', 'inactive'))) {	    	        	
+	    	if ($status == 'active') {
+	    		$status = 'Y';
+	    	} else {
+	    		$status = 'N';
+	    	}
+	        $sql = "UPDATE dns_soa SET active = '$status' WHERE id = ".intval($primary_id);
+	        $app->db->query($sql);
+	        $result = $app->db->affectedRows();
+	        return $result;
+        } else {
+			$this->server->fault('status_undefined', 'The status is not available');
+			return false;
+        }  
+    }
+    
+    public function mail_domain_set_status($session_id, $primary_id, $status) {
+        global $app;
+        if(!$this->checkPerm($session_id, 'mail_domain_set_status')) {
+              $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+               return false;
+        }        
+        if(in_array($status, array('active', 'inactive'))) {	    	        	
+	    	if ($status == 'active') {
+	    		$status = 'y';
+	    	} else {
+	    		$status = 'n';
+	    	}
+	        $sql = "UPDATE mail_domain SET active = '$status' WHERE domain_id = ".intval($primary_id);
+	        $app->db->query($sql);
+	        $result = $app->db->affectedRows();
+	        return $result;
+        } else {
+			$this->server->fault('status_undefined', 'The status is not available');
+			return false;
+        }  
+    }
+}
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php
index 34dfaa5ed6..9c9fdf0a62 100644
--- a/interface/lib/classes/session.inc.php
+++ b/interface/lib/classes/session.inc.php
@@ -1,129 +1,129 @@
-<?php
-
-/*
-Copyright (c) 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.
-*/
-
-class session {
-	
-	private $session_array = array();
-	private $db;
-	
-	function __construct() {
-		$this->db = new db;
-	}
-	
-	function open ($save_path, $session_name) {
-		return true;
-	}
-	
-	function close () {
-
-		if (!empty($this->session_array)) {
-            $result = $this->gc(ini_get('session.gc_maxlifetime'));
-            return $result;
-        }
-        return false;
-    }
-	
-	function read ($session_id) {
-		
-		$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."'");
-
-        if (is_array($rec)) {
-			$this->session_array = $rec;
-			return $this->session_array['session_data'];
-		} else {
-			return '';
-		}
-	}
-	
-	function write ($session_id, $session_data) {
-		
-		if (!empty($this->session_array) && $this->session_array['session_id'] != $session_id) {
-            $this->session_array = array();
-        }
-		
-		// 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'");
-			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) VALUES ('$session_id','$date_created','$last_updated','$session_data')";
-			$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' WHERE session_id = '$session_id'";
-			$this->db->query($sql);
-
-        }
-		
-        return true;
-    }
-	
-	function destroy ($session_id) {
-
-		$session_id   = $this->db->quote($session_id);
-		$sql = "DELETE FROM sys_session WHERE session_id = '$session_id'";
-		$this->db->query($sql);
-        
-        return true;
-    }
-	
-	function gc ($max_lifetime) {
-
-		$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'";
-		$this->db->query($sql);
-        
-        return true;
-        
-    }
-
-	function __destruct () {
-        @session_write_close();
-
-    }
-
-}
-
+<?php
+
+/*
+Copyright (c) 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.
+*/
+
+class session {
+	
+	private $session_array = array();
+	private $db;
+	
+	function __construct() {
+		$this->db = new db;
+	}
+	
+	function open ($save_path, $session_name) {
+		return true;
+	}
+	
+	function close () {
+
+		if (!empty($this->session_array)) {
+            $result = $this->gc(ini_get('session.gc_maxlifetime'));
+            return $result;
+        }
+        return false;
+    }
+	
+	function read ($session_id) {
+		
+		$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."'");
+
+        if (is_array($rec)) {
+			$this->session_array = $rec;
+			return $this->session_array['session_data'];
+		} else {
+			return '';
+		}
+	}
+	
+	function write ($session_id, $session_data) {
+		
+		if (!empty($this->session_array) && $this->session_array['session_id'] != $session_id) {
+            $this->session_array = array();
+        }
+		
+		// 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'");
+			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) VALUES ('$session_id','$date_created','$last_updated','$session_data')";
+			$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' WHERE session_id = '$session_id'";
+			$this->db->query($sql);
+
+        }
+		
+        return true;
+    }
+	
+	function destroy ($session_id) {
+
+		$session_id   = $this->db->quote($session_id);
+		$sql = "DELETE FROM sys_session WHERE session_id = '$session_id'";
+		$this->db->query($sql);
+        
+        return true;
+    }
+	
+	function gc ($max_lifetime) {
+
+		$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'";
+		$this->db->query($sql);
+        
+        return true;
+        
+    }
+
+	function __destruct () {
+        @session_write_close();
+
+    }
+
+}
+
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/tpl_cache.inc.php b/interface/lib/classes/tpl_cache.inc.php
index 18e7d385f9..a3999466a7 100644
--- a/interface/lib/classes/tpl_cache.inc.php
+++ b/interface/lib/classes/tpl_cache.inc.php
@@ -1,186 +1,186 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP version 4.0                                                      |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 2002 Active Fish Group                                 |
-// +----------------------------------------------------------------------+
-// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
-// +----------------------------------------------------------------------+
-//
-// $Id: cache.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
-
-/**
- * Class uses all of vlibTemplate's functionality but caches the template files.
- * It creates an identical tree structure to your filesystem but with cached files.
- *
- * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
- * @since 22/02/2002
- * @package vLIB
- * @access public
- */
-
-class tplc extends tpl {
-
-/*-----------------------------------------------------------------------------\
-|     DO NOT TOUCH ANYTHING IN THIS CLASS, IT MAY NOT WORK OTHERWISE           |
-\-----------------------------------------------------------------------------*/
-
-    var $_cache = 1;     // tells vlibTemplate that we're caching
-    var $_cachefile;     // full path to current cache file (even if it doesn't yet exist)
-    var $_cacheexists;   // has this file been cached before
-    var $_cachefilelocked; // is this file currently locked whilst writing
-    var $_cachefiledir;  // dir of current cache file
-    var $_clearcache = 0;
-
-
-    /**
-     * FUNCTION: clearCache
-     * will unset a file, and set $this->_cacheexists to 0.
-     *
-     * @access public
-     * @return boolean
-     */
-    function clearCache() {
-        $this->_clearcache = 1;
-        return true;
-    }
-
-    /**
-     * FUNCTION: recache
-     * alias for clearCache().
-     *
-     * @access public
-     * @return boolean
-     */
-    function recache() {
-        return $this->clearCache();
-    }
-
-    /**
-     * FUNCTION: setCacheLifeTime
-     * sets the lifetime of the cached file
-     *
-     * @param int $int number of seconds to set lifetime to
-     * @access public
-     * @return boolean
-     */
-    function setCacheLifeTime($int = null) {
-        if ($int == null || !is_int($int)) return false;
-        if ($int == 0) $int = 60;
-        if ($int == -1) $int = 157680000; // set to 5 yrs time
-        $this->OPTIONS['CACHE_LIFETIME'] = $int;
-        return true;
-    }
-
-    /**
-     * FUNCTION: setCacheExtension
-     * sets the extention of the cache file
-     *
-     * @param str $str name of new cache extention
-     * @access public
-     * @return boolean
-     */
-    function setCacheExtension($str = null) {
-        if ($str == null || !preg_match('/^[a-z0-9]+$/', strtolower($str))) return false;
-        $this->OPTIONS['CACHE_EXTENSION'] = strtolower($str);
-        return true;
-    }
-
-
-/*----------------------------------------\
-          Private Functions
------------------------------------------*/
-
-    /**
-     * FUNCTION: _checkCache
-     * checks if there's a cache, if there is then it will read the cache file as the template.
-     */
-    function _checkCache ($tmplfile) {
-        $this->_cachefile = $this->_getFilename($tmplfile);
-        if ($this->_clearcache) {
-            if (file_exists($this->_cachefile)) unlink($this->_cachefile);
-            return false;
-        }
-
-        if (file_exists($this->_cachefile)) {
-            $this->_cacheexists = 1;
-
-            // if it's expired
-            if ((filemtime($this->_cachefile) + $this->OPTIONS['CACHE_LIFETIME']) < date ('U')
-                  || filectime($this->_cachefile) < filemtime($tmplfile)) {
-                $this->_cacheexists = 0;
-                return false; // so that we know to recache
-            }
-            else {
-                return true;
-            }
-
-        } else {
-            $this->_cacheexists = 0;
-            return false;
-        }
-    }
-
-
-    /**
-     * FUNCTION: _getFilename
-     * gets the full pathname for the cached file
-     *
-     */
-    function _getFilename($tmplfile) {
-        return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
-    }
-
-    /**
-     * FUNCTION: _createCache
-     * creates the cached file
-     *
-     */
-    function _createCache($data) {
-        $cache_file = $this->_cachefile;
-        if(!$this->_prepareDirs($cache_file)) return false; // prepare all of the directories
-
-        $f = fopen ($cache_file, "w");
-        flock($f, 2); // set an EXclusive lock
-        if (!$f) vlibTemplateError::raiseError('VT_ERROR_NO_CACHE_WRITE',KILL,$cache_file);
-        fputs ($f, $data); // write the parsed string from vlibTemplate
-        flock($f, 3); // UNlock file
-        fclose ($f);
-        touch ($cache_file);
-        return true;
-    }
-
-    /**
-     * FUNCTION: _prepareDirs
-     * prepares the directory structure
-     *
-     */
-    function _prepareDirs($file) {
-        if (empty($file)) die('no filename'); //do error in future
-        $filepath = dirname($file);
-        if (is_dir($filepath)) return true;
-
-        $dirs = preg_split('/[\\/]/', $filepath);
-        $currpath;
-        foreach ($dirs as $dir) {
-            $currpath .= $dir .'/';
-            $type = @filetype($currpath);
-
-            ($type=='link') and $type = 'dir';
-            if ($type != 'dir' && $type != false && !empty($type)) {
-                vlibTemplateError::raiseError('VT_ERROR_WRONG_CACHE_TYPE',KILL,'directory: '.$currpath.', type: '.$type);
-            }
-            if ($type == 'dir') {
-                continue;
-            }
-            else {
-                $s = @mkdir($currpath, 0775);
-                if (!$s) vlibTemplateError::raiseError('VT_ERROR_CACHE_MKDIR_FAILURE',KILL,'directory: '.$currpath);
-            }
-        }
-        return true;
-    }
-
-} // -- end vlibTemplateCache class
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP version 4.0                                                      |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 2002 Active Fish Group                                 |
+// +----------------------------------------------------------------------+
+// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
+// +----------------------------------------------------------------------+
+//
+// $Id: cache.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
+
+/**
+ * Class uses all of vlibTemplate's functionality but caches the template files.
+ * It creates an identical tree structure to your filesystem but with cached files.
+ *
+ * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
+ * @since 22/02/2002
+ * @package vLIB
+ * @access public
+ */
+
+class tplc extends tpl {
+
+/*-----------------------------------------------------------------------------\
+|     DO NOT TOUCH ANYTHING IN THIS CLASS, IT MAY NOT WORK OTHERWISE           |
+\-----------------------------------------------------------------------------*/
+
+    var $_cache = 1;     // tells vlibTemplate that we're caching
+    var $_cachefile;     // full path to current cache file (even if it doesn't yet exist)
+    var $_cacheexists;   // has this file been cached before
+    var $_cachefilelocked; // is this file currently locked whilst writing
+    var $_cachefiledir;  // dir of current cache file
+    var $_clearcache = 0;
+
+
+    /**
+     * FUNCTION: clearCache
+     * will unset a file, and set $this->_cacheexists to 0.
+     *
+     * @access public
+     * @return boolean
+     */
+    function clearCache() {
+        $this->_clearcache = 1;
+        return true;
+    }
+
+    /**
+     * FUNCTION: recache
+     * alias for clearCache().
+     *
+     * @access public
+     * @return boolean
+     */
+    function recache() {
+        return $this->clearCache();
+    }
+
+    /**
+     * FUNCTION: setCacheLifeTime
+     * sets the lifetime of the cached file
+     *
+     * @param int $int number of seconds to set lifetime to
+     * @access public
+     * @return boolean
+     */
+    function setCacheLifeTime($int = null) {
+        if ($int == null || !is_int($int)) return false;
+        if ($int == 0) $int = 60;
+        if ($int == -1) $int = 157680000; // set to 5 yrs time
+        $this->OPTIONS['CACHE_LIFETIME'] = $int;
+        return true;
+    }
+
+    /**
+     * FUNCTION: setCacheExtension
+     * sets the extention of the cache file
+     *
+     * @param str $str name of new cache extention
+     * @access public
+     * @return boolean
+     */
+    function setCacheExtension($str = null) {
+        if ($str == null || !preg_match('/^[a-z0-9]+$/', strtolower($str))) return false;
+        $this->OPTIONS['CACHE_EXTENSION'] = strtolower($str);
+        return true;
+    }
+
+
+/*----------------------------------------\
+          Private Functions
+-----------------------------------------*/
+
+    /**
+     * FUNCTION: _checkCache
+     * checks if there's a cache, if there is then it will read the cache file as the template.
+     */
+    function _checkCache ($tmplfile) {
+        $this->_cachefile = $this->_getFilename($tmplfile);
+        if ($this->_clearcache) {
+            if (file_exists($this->_cachefile)) unlink($this->_cachefile);
+            return false;
+        }
+
+        if (file_exists($this->_cachefile)) {
+            $this->_cacheexists = 1;
+
+            // if it's expired
+            if ((filemtime($this->_cachefile) + $this->OPTIONS['CACHE_LIFETIME']) < date ('U')
+                  || filectime($this->_cachefile) < filemtime($tmplfile)) {
+                $this->_cacheexists = 0;
+                return false; // so that we know to recache
+            }
+            else {
+                return true;
+            }
+
+        } else {
+            $this->_cacheexists = 0;
+            return false;
+        }
+    }
+
+
+    /**
+     * FUNCTION: _getFilename
+     * gets the full pathname for the cached file
+     *
+     */
+    function _getFilename($tmplfile) {
+        return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
+    }
+
+    /**
+     * FUNCTION: _createCache
+     * creates the cached file
+     *
+     */
+    function _createCache($data) {
+        $cache_file = $this->_cachefile;
+        if(!$this->_prepareDirs($cache_file)) return false; // prepare all of the directories
+
+        $f = fopen ($cache_file, "w");
+        flock($f, 2); // set an EXclusive lock
+        if (!$f) vlibTemplateError::raiseError('VT_ERROR_NO_CACHE_WRITE',KILL,$cache_file);
+        fputs ($f, $data); // write the parsed string from vlibTemplate
+        flock($f, 3); // UNlock file
+        fclose ($f);
+        touch ($cache_file);
+        return true;
+    }
+
+    /**
+     * FUNCTION: _prepareDirs
+     * prepares the directory structure
+     *
+     */
+    function _prepareDirs($file) {
+        if (empty($file)) die('no filename'); //do error in future
+        $filepath = dirname($file);
+        if (is_dir($filepath)) return true;
+
+        $dirs = preg_split('/[\\/]/', $filepath);
+        $currpath;
+        foreach ($dirs as $dir) {
+            $currpath .= $dir .'/';
+            $type = @filetype($currpath);
+
+            ($type=='link') and $type = 'dir';
+            if ($type != 'dir' && $type != false && !empty($type)) {
+                vlibTemplateError::raiseError('VT_ERROR_WRONG_CACHE_TYPE',KILL,'directory: '.$currpath.', type: '.$type);
+            }
+            if ($type == 'dir') {
+                continue;
+            }
+            else {
+                $s = @mkdir($currpath, 0775);
+                if (!$s) vlibTemplateError::raiseError('VT_ERROR_CACHE_MKDIR_FAILURE',KILL,'directory: '.$currpath);
+            }
+        }
+        return true;
+    }
+
+} // -- end vlibTemplateCache class
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/tpl_error.inc.php b/interface/lib/classes/tpl_error.inc.php
index 29a9ae0fc4..5f6360978c 100644
--- a/interface/lib/classes/tpl_error.inc.php
+++ b/interface/lib/classes/tpl_error.inc.php
@@ -1,92 +1,92 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP version 4.0                                                      |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 2002 Active Fish Group                                 |
-// +----------------------------------------------------------------------+
-// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
-// +----------------------------------------------------------------------+
-//
-// $Id: error.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
-
-define('FATAL',   E_USER_ERROR);
-define('WARNING', E_USER_WARNING);
-define('NOTICE',  E_USER_NOTICE);
-define('KILL',    -1); // used for killing inside parsing.
-
-/**
- * Class is used by vlibTemplate.
- * It handles all of the error reporting for vlibTemplate.
- *
- * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
- * @since 06/03/2002
- * @package vLIB
- * @access private
- */
-
-class vlibTemplateError {
-
-/*-----------------------------------------------------------------------------\
-|     DO NOT TOUCH ANYTHING IN THIS CLASS IT MAY NOT WORK OTHERWISE            |
-\-----------------------------------------------------------------------------*/
-
-    function raiseError ($code, $level = null, $extra=null) {
-        if (!($level & error_reporting())&& $level != KILL) return; // binary AND checks for reporting level
-
-        $error_codes = array(
-                        'VT_ERROR_NOFILE'               => 'vlibTemplate Error: Template ('.$extra.') file not found.',
-                        'VT_ERROR_PARSE'                => 'vlibTemplate Error: Parse error!<br />To debug this file, use vlibTemplateDebug instead of vlibTemplate in the class instantiation(i.e. new vlibTemplateDebug).',
-                        'VT_NOTICE_INVALID_TAG'         => 'vlibTemplate Notice: Invalid tag ('.$extra.').',
-                        'VT_ERROR_INVALID_TAG'          => 'vlibTemplate Error: Invalid tag ('.$extra.'). To disable this you must turn of the STRICT option.',
-                        'VT_NOTICE_INVALID_ATT'         => 'vlibTemplate Notice: Invalid attribute ('.$extra.').',
-                        'VT_WARNING_INVALID_ARR'        => 'vlibTemplate Warning: Invalid loop structure passed to vlibTemplate::setLoop() (loop name: '.$extra.').',
-                        'VT_ERROR_INVALID_ERROR_CODE'   => 'vlibTemplate Error: Invalid error raised.',
-                        'VT_ERROR_WRONG_NO_PARAMS'      => 'vlibTemplate Warning: Wrond parameter count passed to '.$extra.'.',
-                        'VT_ERROR_UNKNOWN_VAR'          => 'vlibTemplate Error: template var not found.',
-                        'VT_ERROR_NO_CACHE_WRITE'       => 'vlibTemplate Error: unable to write to cache file ('.$extra.').',
-                        'VT_ERROR_WRONG_CACHE_TYPE'     => 'vlibTemplate Error: non-directory file found in cache root with same name as directory ('.$extra.').',
-                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => 'vlibTemplate Error: failed to create directory in cache root ('.$extra.').',
-                        'VT_WARNING_NOT_CACHE_OBJ'      => 'vlibTemplate Warning: called a vlibTemplateCache function ('.$extra.') without instantiating the vlibTemplateCache class.',
-                        'VT_WARNING_LOOP_NOT_SET'       => 'vlibTemplate Warning: called vlibTemplate::addRow() or vlibTemplate::addLoop() with an invalid loop name.',
-                        'VT_WARNING_INVALID_RESOURCE'   => 'vlibTemplate Warning: Invalid resource type passed to vlibTemplate::setDbLoop() for Db "'.$extra.'".',
-                        'VT_WARNING_INVALID_LOOP_DB'    => 'vlibTemplate Warning: Invalid Db type passed to vlibTemplate::setDbLoop(), "'.$extra.'" not currently available.',
-                        'VT_WARNING_INVALID_IF_OP'      => 'vlibTemplate Warning: The Operator "'.$extra.'" is not supported by vlibTemplate.'
-                            );
-
-        $error_levels = array(
-                        'VT_ERROR_NOFILE'               => FATAL,
-                        'VT_ERROR_PARSE'                => FATAL,
-                        'VT_NOTICE_INVALID_TAG'         => NOTICE,
-                        'VT_ERROR_INVALID_TAG'          => FATAL,
-                        'VT_NOTICE_INVALID_ATT'         => NOTICE,
-                        'VT_WARNING_INVALID_ARR'        => WARNING,
-                        'VT_ERROR_INVALID_ERROR_CODE'   => FATAL,
-                        'VT_ERROR_WRONG_NO_PARAMS'      => WARNING,
-                        'VT_ERROR_UNKNOWN_VAR'          => WARNING,
-                        'VT_ERROR_NO_CACHE_WRITE'       => KILL,
-                        'VT_ERROR_WRONG_CACHE_TYPE'     => KILL,
-                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => KILL,
-                        'VT_WARNING_NOT_CACHE_OBJ'      => WARNING,
-                        'VT_WARNING_LOOP_NOT_SET'       => WARNING,
-                        'VT_WARNING_INVALID_RESOURCE'   => WARNING,
-                        'VT_WARNING_INVALID_LOOP_DB'    => WARNING,
-                        'VT_WARNING_INVALID_IF_OP'      => WARNING
-                            );
-
-        ($level === null) and $level = $error_levels[$code];
-        if ($level == KILL) {
-            die ($error_codes[$code]);
-        }
-
-        if ($msg = $error_codes[$code]) {
-            trigger_error($msg, $level);
-        } else {
-            $level = $error_levels['VT_ERROR_INVALID_ERROR_CODE'];
-            $msg = $error_codes['VT_ERROR_INVALID_ERROR_CODE'];
-            trigger_error($msg, $level);
-        }
-        return;
-    }
-}
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP version 4.0                                                      |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 2002 Active Fish Group                                 |
+// +----------------------------------------------------------------------+
+// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
+// +----------------------------------------------------------------------+
+//
+// $Id: error.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
+
+define('FATAL',   E_USER_ERROR);
+define('WARNING', E_USER_WARNING);
+define('NOTICE',  E_USER_NOTICE);
+define('KILL',    -1); // used for killing inside parsing.
+
+/**
+ * Class is used by vlibTemplate.
+ * It handles all of the error reporting for vlibTemplate.
+ *
+ * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
+ * @since 06/03/2002
+ * @package vLIB
+ * @access private
+ */
+
+class vlibTemplateError {
+
+/*-----------------------------------------------------------------------------\
+|     DO NOT TOUCH ANYTHING IN THIS CLASS IT MAY NOT WORK OTHERWISE            |
+\-----------------------------------------------------------------------------*/
+
+    function raiseError ($code, $level = null, $extra=null) {
+        if (!($level & error_reporting())&& $level != KILL) return; // binary AND checks for reporting level
+
+        $error_codes = array(
+                        'VT_ERROR_NOFILE'               => 'vlibTemplate Error: Template ('.$extra.') file not found.',
+                        'VT_ERROR_PARSE'                => 'vlibTemplate Error: Parse error!<br />To debug this file, use vlibTemplateDebug instead of vlibTemplate in the class instantiation(i.e. new vlibTemplateDebug).',
+                        'VT_NOTICE_INVALID_TAG'         => 'vlibTemplate Notice: Invalid tag ('.$extra.').',
+                        'VT_ERROR_INVALID_TAG'          => 'vlibTemplate Error: Invalid tag ('.$extra.'). To disable this you must turn of the STRICT option.',
+                        'VT_NOTICE_INVALID_ATT'         => 'vlibTemplate Notice: Invalid attribute ('.$extra.').',
+                        'VT_WARNING_INVALID_ARR'        => 'vlibTemplate Warning: Invalid loop structure passed to vlibTemplate::setLoop() (loop name: '.$extra.').',
+                        'VT_ERROR_INVALID_ERROR_CODE'   => 'vlibTemplate Error: Invalid error raised.',
+                        'VT_ERROR_WRONG_NO_PARAMS'      => 'vlibTemplate Warning: Wrond parameter count passed to '.$extra.'.',
+                        'VT_ERROR_UNKNOWN_VAR'          => 'vlibTemplate Error: template var not found.',
+                        'VT_ERROR_NO_CACHE_WRITE'       => 'vlibTemplate Error: unable to write to cache file ('.$extra.').',
+                        'VT_ERROR_WRONG_CACHE_TYPE'     => 'vlibTemplate Error: non-directory file found in cache root with same name as directory ('.$extra.').',
+                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => 'vlibTemplate Error: failed to create directory in cache root ('.$extra.').',
+                        'VT_WARNING_NOT_CACHE_OBJ'      => 'vlibTemplate Warning: called a vlibTemplateCache function ('.$extra.') without instantiating the vlibTemplateCache class.',
+                        'VT_WARNING_LOOP_NOT_SET'       => 'vlibTemplate Warning: called vlibTemplate::addRow() or vlibTemplate::addLoop() with an invalid loop name.',
+                        'VT_WARNING_INVALID_RESOURCE'   => 'vlibTemplate Warning: Invalid resource type passed to vlibTemplate::setDbLoop() for Db "'.$extra.'".',
+                        'VT_WARNING_INVALID_LOOP_DB'    => 'vlibTemplate Warning: Invalid Db type passed to vlibTemplate::setDbLoop(), "'.$extra.'" not currently available.',
+                        'VT_WARNING_INVALID_IF_OP'      => 'vlibTemplate Warning: The Operator "'.$extra.'" is not supported by vlibTemplate.'
+                            );
+
+        $error_levels = array(
+                        'VT_ERROR_NOFILE'               => FATAL,
+                        'VT_ERROR_PARSE'                => FATAL,
+                        'VT_NOTICE_INVALID_TAG'         => NOTICE,
+                        'VT_ERROR_INVALID_TAG'          => FATAL,
+                        'VT_NOTICE_INVALID_ATT'         => NOTICE,
+                        'VT_WARNING_INVALID_ARR'        => WARNING,
+                        'VT_ERROR_INVALID_ERROR_CODE'   => FATAL,
+                        'VT_ERROR_WRONG_NO_PARAMS'      => WARNING,
+                        'VT_ERROR_UNKNOWN_VAR'          => WARNING,
+                        'VT_ERROR_NO_CACHE_WRITE'       => KILL,
+                        'VT_ERROR_WRONG_CACHE_TYPE'     => KILL,
+                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => KILL,
+                        'VT_WARNING_NOT_CACHE_OBJ'      => WARNING,
+                        'VT_WARNING_LOOP_NOT_SET'       => WARNING,
+                        'VT_WARNING_INVALID_RESOURCE'   => WARNING,
+                        'VT_WARNING_INVALID_LOOP_DB'    => WARNING,
+                        'VT_WARNING_INVALID_IF_OP'      => WARNING
+                            );
+
+        ($level === null) and $level = $error_levels[$code];
+        if ($level == KILL) {
+            die ($error_codes[$code]);
+        }
+
+        if ($msg = $error_codes[$code]) {
+            trigger_error($msg, $level);
+        } else {
+            $level = $error_levels['VT_ERROR_INVALID_ERROR_CODE'];
+            $msg = $error_codes['VT_ERROR_INVALID_ERROR_CODE'];
+            trigger_error($msg, $level);
+        }
+        return;
+    }
+}
 ?>
\ No newline at end of file
diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php
index 4606a0cefe..faab6a058f 100644
--- a/interface/lib/classes/validate_dns.inc.php
+++ b/interface/lib/classes/validate_dns.inc.php
@@ -1,287 +1,287 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-/*
-    DNS validation
-*/
-
-class validate_dns {
-
-function validate_field($field, $area, $zoneid, $wildcard_allowed = 1){
-  //$desc: Name, Data, RP mbox, RP txtref, SRV target, Zone origin, Name server, Admin email
-  global $app, $conf;
-
-  switch ($area) {
-  case "Name":
-    $desc = $app->tform->wordbook['name_txt'];
-    break;
-  case "Data":
-    $desc = $app->tform->wordbook['data_txt'];
-    break;
-  case "RP mbox":
-    $desc = $app->tform->wordbook['rp_mbox_txt'];
-    break;
-  case "RP txtref":
-    $desc = $app->tform->wordbook['rp_txtref_txt'];
-    break;
-  case "SRV target":
-    $desc = $app->tform->wordbook['srv_target_txt'];
-    break;
-  case "Zone origin":
-    $desc = $app->tform->wordbook['zone_origin_txt'];
-    break;
-  case "Name server":
-    $desc = $app->tform->wordbook['ns_txt'];
-    break;
-  case "Admin email":
-    $desc = $app->tform->wordbook['mbox_txt'];
-    break;
-  }
-
-  $error = '';
-
-  $valid_characters = "*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_";
-
-  if(strlen($field) > 255) $error .= $desc." ".$app->tform->wordbook['error_255_characters']."<br>\r\n";
-
-  $parts = explode(".", $field);
-  $i = 0;
-  $empty = 0;
-  foreach ($parts as $part){
-    $i++;
-
-    if(trim($part) == '') $empty += 1;
-
-    if(strlen($part) > 63) $error .= $desc." ".$app->tform->wordbook['error_63_characters']."<br>\r\n";
-
-    if(strspn($part, $valid_characters) != strlen($part)) $error .= $desc." ".$app->tform->wordbook['error_invalid_characters']."<br>\r\n";
-
-    if(substr($part, 0, 1) == '-') $error .= $desc." ".$app->tform->wordbook['error_hyphen_begin']."<br>\r\n";
-    if(substr($part, -1) == '-') $error .= $desc." ".$app->tform->wordbook['error_hyphen_end']."<br>\r\n";
-
-    if(strstr($part, "*")){
-      if($wildcard_allowed){
-        if($i != 1) $error .= $desc." ".$app->tform->wordbook['error_wildcard_non_initial_part']."<br>\r\n";
-
-        if($part != "*") $error .= $desc." ".$app->tform->wordbook['error_wildcard_mix']."<br>\r\n";
-      } else {
-        $error .= $desc." ".$app->tform->wordbook['error_no_wildcard_allowed']."<br>\r\n";
-      }
-    }
-  }
-
-  if(substr($field, -1) == '.'){
-    if($i > 2 && $empty > 1) $error .= $desc." ".$app->tform->wordbook['error_invalid_characters']."<br>\r\n";
-  } else {
-    if($empty > 0 && $field != '') $error .= $desc." ".$app->tform->wordbook['error_invalid_characters']."<br>\r\n";
-  }
-
-  if(substr($field, -1) == '.' && $area == 'Name'){
-    $soa = $app->db->queryOneRecord("SELECT * FROM soa WHERE id = ".$zoneid);
-    if(substr($field, (strlen($field) - strlen($soa['origin']))) != $soa['origin']) $error .= $desc." ".$app->tform->wordbook['error_out_of_zone']."<br>\r\n";
-  }
-
-  return $error;
-}
-
-function validate_rp_data(&$data, $zoneid){
-  global $app, $conf;
-  $error = '';
-  $fields = explode(" ", trim($data));
-  if(count($fields) != 2) return $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_invalid_rp']."<br>\r\n";
-  $mbox = $fields[0];
-  $txtref = $fields[1];
-
-  $error .= $this->validate_field($mbox, 'RP mbox', $zoneid, 0);
-  $error .= $this->validate_field($txtref, 'RP txtref', $zoneid, 0);
-
-  $data = $mbox." ".$txtref;
-  return $error;
-}
-
-function validate_srv_data(&$data, $zoneid){
-  global $app, $conf;
-  $error = '';
-
-  $fields = explode(" ", trim($data));
-  if(count($fields) != 3) return $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_invalid_srv']."<br>\r\n";
-
-  $weight = $fields[0];
-  $port = $fields[1];
-  $target = $fields[2];
-  if($weight < 0 || $weight > 65535) $error .= $app->tform->wordbook['weight_txt']." (\"<i>" . htmlentities($weight,ENT_QUOTES,$conf["html_content_encoding"])."</i>\") ".$app->tform->wordbook['error_srv_out_of_range']."<br>\r\n";
-  if($port < 0 || $port > 65535) $error .= $app->tform->wordbook['port_txt']." (\"<i>".htmlentities($port,ENT_QUOTES,$conf["html_content_encoding"])."</i>\") ".$app->tform->wordbook['error_srv_out_of_range']."<br>\r\n";
-
-  $error .= $this->validate_field($target, "SRV target", $zoneid, 0);
-
-  $data = (int)$weight." ".(int)$port." ".$target;
-  return $error;
-}
-
-function is_integer($value, $fieldname, $zero_allowed = 0){
-  global $app, $conf;
-
-  $error = '';
-
-  if(intval($value) != $value || !is_numeric($value)) $error .= $fieldname." ".$app->tform->wordbook['error_must_be_integer']."<br>\r\n";
-  if($value > 2147483647) $error .= $fieldname." ".$app->tform->wordbook['error_must_not_be_greater_than_2147483647']."<br>\r\n";
-  if(!$zero_allowed){
-    if($value <= 0) $error .= $fieldname." ".$app->tform->wordbook['error_must_be_positive']."<br>\r\n";
-  } else {
-    if($value < 0) $error .= $fieldname." ".$app->tform->wordbook['error_must_not_be_negative']."<br>\r\n";
-  }
-
-  return $error;
-}
-
-function validate_rr(&$rr){
-  global $app, $conf;
-
-  $error = '';
-
-  $tmp_rr = $rr;
-  foreach($tmp_rr as $key => $val){
-    $rr[$key] = trim($val);
-  }
-  unset($tmp_rr);
-
-  $error .= $this->validate_field($rr['name'], 'Name', $rr['zone'], 1);
-
-  switch ($rr['type']) {
-  case "A":
-    $ip_parts = explode(".", $rr['data']);
-    if(count($ip_parts) != 4){
-      $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_a']."<br>\r\n";
-    } else {
-      for($n = 0; $n < 4; $n++){
-        $q = $ip_parts[$n];
-        if(!is_numeric($q) || (int)$q < 0 || (int)$q > 255 || trim($q) !== $q) $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_a']."<br>\r\n";
-      }
-    }
-    $rr['data'] = (int)$ip_parts[0].".".(int)$ip_parts[1].".".(int)$ip_parts[2].".".(int)$ip_parts[3];
-    break;
-  case "AAAA":
-    $valid_chars = "ABCDEFabcdef1234567890:";
-
-    if(strspn($rr['data'], $valid_chars) != strlen($rr['data'])) $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_aaaa']."<br>\r\n";
-    break;
-  case "ALIAS":
-    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
-    break;
-  case "CNAME":
-    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
-    break;
-  case "HINFO":
-    if(!strchr($rr['data'], ' ')) $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_hinfo']."<br>\r\n";
-    break;
-  case "MX":
-    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
-    $error .= $this->is_integer($rr['aux'], $app->tform->wordbook['aux_txt'], 1);
-    break;
-  case "NS":
-    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
-    break;
-  case "PTR":
-    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
-    if(substr($rr['data'], -1) != '.') $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_ptr']."<br>\r\n";
-    break;
-  case "RP":
-    $error .= $this->validate_rp_data($rr['data'], $rr['zone']);
-    break;
-  case "SRV":
-    $error .= $this->validate_srv_data($rr['data'], $rr['zone']);
-    $error .= $this->is_integer($rr['aux'], $app->tform->wordbook['aux_txt'], 1);
-    break;
-  case "TXT":
-    break;
-  }
-
-  $error .= $this->is_integer($rr['ttl'], $app->tform->wordbook['ttl_txt']);
-
-
-  return $error;
-}
-
-function validate_soa(&$soa){
-  global $app, $conf;
-
-  $error = '';
-
-  $tmp_soa = $soa;
-  foreach($tmp_soa as $key => $val){
-    if($key != 'active') $soa[$key] = trim($val);
-  }
-  unset($tmp_soa);
-
-  if($soa['origin'] == '') $error .= $app->tform->wordbook['origin_txt']." ".$app->tform->wordbook['error_empty']."<br>\r\n";
-  if(substr($soa['origin'], -1) != '.') $error .= $app->tform->wordbook['origin_txt']." ".$app->tform->wordbook['error_dot']."<br>\r\n";
-  $error .= $this->validate_field($soa['origin'], "Zone origin", $soa['id'], 0);
-
-  $error .= $this->is_integer($soa['ttl'], $app->tform->wordbook['ttl_txt']);
-
-  if($soa['ns'] == '') $error .= $app->tform->wordbook['ns_txt']." ".$app->tform->wordbook['error_empty']."<br>\r\n";
-  $error .= $this->validate_field($soa['ns'], "Name server", $soa['id'], 0);
-
-  if($soa['mbox'] == '') $error .= $app->tform->wordbook['mbox_txt']." ".$app->tform->wordbook['error_empty']."<br>\r\n";
-  $error .= $this->validate_field($soa['mbox'], "Admin email", $soa['id'], 0);
-
-  $error .= $this->is_integer($soa['refresh'], $app->tform->wordbook['refresh_txt']);
-
-  $error .= $this->is_integer($soa['retry'], $app->tform->wordbook['retry_txt']);
-
-  $error .= $this->is_integer($soa['expire'], $app->tform->wordbook['expire_txt']);
-
-  $error .= $this->is_integer($soa['minimum'], $app->tform->wordbook['minimum_txt']);
-
-  return $error;
-}
-
-function increase_serial($serial){
-  global $app, $conf;
-
-  // increase serial
-  $serial_date = substr($serial, 0, 8);
-  $count = intval(substr($serial, 8, 2));
-  $current_date = date("Ymd");
-  if($serial_date >= $current_date){
-    $count += 1;
-    if ($count > 99) {
-        $serial_date += 1;
-        $count = 0;
-    }
-    $count = str_pad($count, 2, "0", STR_PAD_LEFT);
-    $new_serial = $serial_date.$count;
-  } else {
-    $new_serial = $current_date.'01';
-  }
-  return $new_serial;
-}
-
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+/*
+    DNS validation
+*/
+
+class validate_dns {
+
+function validate_field($field, $area, $zoneid, $wildcard_allowed = 1){
+  //$desc: Name, Data, RP mbox, RP txtref, SRV target, Zone origin, Name server, Admin email
+  global $app, $conf;
+
+  switch ($area) {
+  case "Name":
+    $desc = $app->tform->wordbook['name_txt'];
+    break;
+  case "Data":
+    $desc = $app->tform->wordbook['data_txt'];
+    break;
+  case "RP mbox":
+    $desc = $app->tform->wordbook['rp_mbox_txt'];
+    break;
+  case "RP txtref":
+    $desc = $app->tform->wordbook['rp_txtref_txt'];
+    break;
+  case "SRV target":
+    $desc = $app->tform->wordbook['srv_target_txt'];
+    break;
+  case "Zone origin":
+    $desc = $app->tform->wordbook['zone_origin_txt'];
+    break;
+  case "Name server":
+    $desc = $app->tform->wordbook['ns_txt'];
+    break;
+  case "Admin email":
+    $desc = $app->tform->wordbook['mbox_txt'];
+    break;
+  }
+
+  $error = '';
+
+  $valid_characters = "*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_";
+
+  if(strlen($field) > 255) $error .= $desc." ".$app->tform->wordbook['error_255_characters']."<br>\r\n";
+
+  $parts = explode(".", $field);
+  $i = 0;
+  $empty = 0;
+  foreach ($parts as $part){
+    $i++;
+
+    if(trim($part) == '') $empty += 1;
+
+    if(strlen($part) > 63) $error .= $desc." ".$app->tform->wordbook['error_63_characters']."<br>\r\n";
+
+    if(strspn($part, $valid_characters) != strlen($part)) $error .= $desc." ".$app->tform->wordbook['error_invalid_characters']."<br>\r\n";
+
+    if(substr($part, 0, 1) == '-') $error .= $desc." ".$app->tform->wordbook['error_hyphen_begin']."<br>\r\n";
+    if(substr($part, -1) == '-') $error .= $desc." ".$app->tform->wordbook['error_hyphen_end']."<br>\r\n";
+
+    if(strstr($part, "*")){
+      if($wildcard_allowed){
+        if($i != 1) $error .= $desc." ".$app->tform->wordbook['error_wildcard_non_initial_part']."<br>\r\n";
+
+        if($part != "*") $error .= $desc." ".$app->tform->wordbook['error_wildcard_mix']."<br>\r\n";
+      } else {
+        $error .= $desc." ".$app->tform->wordbook['error_no_wildcard_allowed']."<br>\r\n";
+      }
+    }
+  }
+
+  if(substr($field, -1) == '.'){
+    if($i > 2 && $empty > 1) $error .= $desc." ".$app->tform->wordbook['error_invalid_characters']."<br>\r\n";
+  } else {
+    if($empty > 0 && $field != '') $error .= $desc." ".$app->tform->wordbook['error_invalid_characters']."<br>\r\n";
+  }
+
+  if(substr($field, -1) == '.' && $area == 'Name'){
+    $soa = $app->db->queryOneRecord("SELECT * FROM soa WHERE id = ".$zoneid);
+    if(substr($field, (strlen($field) - strlen($soa['origin']))) != $soa['origin']) $error .= $desc." ".$app->tform->wordbook['error_out_of_zone']."<br>\r\n";
+  }
+
+  return $error;
+}
+
+function validate_rp_data(&$data, $zoneid){
+  global $app, $conf;
+  $error = '';
+  $fields = explode(" ", trim($data));
+  if(count($fields) != 2) return $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_invalid_rp']."<br>\r\n";
+  $mbox = $fields[0];
+  $txtref = $fields[1];
+
+  $error .= $this->validate_field($mbox, 'RP mbox', $zoneid, 0);
+  $error .= $this->validate_field($txtref, 'RP txtref', $zoneid, 0);
+
+  $data = $mbox." ".$txtref;
+  return $error;
+}
+
+function validate_srv_data(&$data, $zoneid){
+  global $app, $conf;
+  $error = '';
+
+  $fields = explode(" ", trim($data));
+  if(count($fields) != 3) return $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_invalid_srv']."<br>\r\n";
+
+  $weight = $fields[0];
+  $port = $fields[1];
+  $target = $fields[2];
+  if($weight < 0 || $weight > 65535) $error .= $app->tform->wordbook['weight_txt']." (\"<i>" . htmlentities($weight,ENT_QUOTES,$conf["html_content_encoding"])."</i>\") ".$app->tform->wordbook['error_srv_out_of_range']."<br>\r\n";
+  if($port < 0 || $port > 65535) $error .= $app->tform->wordbook['port_txt']." (\"<i>".htmlentities($port,ENT_QUOTES,$conf["html_content_encoding"])."</i>\") ".$app->tform->wordbook['error_srv_out_of_range']."<br>\r\n";
+
+  $error .= $this->validate_field($target, "SRV target", $zoneid, 0);
+
+  $data = (int)$weight." ".(int)$port." ".$target;
+  return $error;
+}
+
+function is_integer($value, $fieldname, $zero_allowed = 0){
+  global $app, $conf;
+
+  $error = '';
+
+  if(intval($value) != $value || !is_numeric($value)) $error .= $fieldname." ".$app->tform->wordbook['error_must_be_integer']."<br>\r\n";
+  if($value > 2147483647) $error .= $fieldname." ".$app->tform->wordbook['error_must_not_be_greater_than_2147483647']."<br>\r\n";
+  if(!$zero_allowed){
+    if($value <= 0) $error .= $fieldname." ".$app->tform->wordbook['error_must_be_positive']."<br>\r\n";
+  } else {
+    if($value < 0) $error .= $fieldname." ".$app->tform->wordbook['error_must_not_be_negative']."<br>\r\n";
+  }
+
+  return $error;
+}
+
+function validate_rr(&$rr){
+  global $app, $conf;
+
+  $error = '';
+
+  $tmp_rr = $rr;
+  foreach($tmp_rr as $key => $val){
+    $rr[$key] = trim($val);
+  }
+  unset($tmp_rr);
+
+  $error .= $this->validate_field($rr['name'], 'Name', $rr['zone'], 1);
+
+  switch ($rr['type']) {
+  case "A":
+    $ip_parts = explode(".", $rr['data']);
+    if(count($ip_parts) != 4){
+      $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_a']."<br>\r\n";
+    } else {
+      for($n = 0; $n < 4; $n++){
+        $q = $ip_parts[$n];
+        if(!is_numeric($q) || (int)$q < 0 || (int)$q > 255 || trim($q) !== $q) $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_a']."<br>\r\n";
+      }
+    }
+    $rr['data'] = (int)$ip_parts[0].".".(int)$ip_parts[1].".".(int)$ip_parts[2].".".(int)$ip_parts[3];
+    break;
+  case "AAAA":
+    $valid_chars = "ABCDEFabcdef1234567890:";
+
+    if(strspn($rr['data'], $valid_chars) != strlen($rr['data'])) $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_aaaa']."<br>\r\n";
+    break;
+  case "ALIAS":
+    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
+    break;
+  case "CNAME":
+    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
+    break;
+  case "HINFO":
+    if(!strchr($rr['data'], ' ')) $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_hinfo']."<br>\r\n";
+    break;
+  case "MX":
+    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
+    $error .= $this->is_integer($rr['aux'], $app->tform->wordbook['aux_txt'], 1);
+    break;
+  case "NS":
+    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
+    break;
+  case "PTR":
+    $error .= $this->validate_field($rr['data'], 'Data', $rr['zone'], 0);
+    if(substr($rr['data'], -1) != '.') $error .= $app->tform->wordbook['data_txt']." ".$app->tform->wordbook['error_ptr']."<br>\r\n";
+    break;
+  case "RP":
+    $error .= $this->validate_rp_data($rr['data'], $rr['zone']);
+    break;
+  case "SRV":
+    $error .= $this->validate_srv_data($rr['data'], $rr['zone']);
+    $error .= $this->is_integer($rr['aux'], $app->tform->wordbook['aux_txt'], 1);
+    break;
+  case "TXT":
+    break;
+  }
+
+  $error .= $this->is_integer($rr['ttl'], $app->tform->wordbook['ttl_txt']);
+
+
+  return $error;
+}
+
+function validate_soa(&$soa){
+  global $app, $conf;
+
+  $error = '';
+
+  $tmp_soa = $soa;
+  foreach($tmp_soa as $key => $val){
+    if($key != 'active') $soa[$key] = trim($val);
+  }
+  unset($tmp_soa);
+
+  if($soa['origin'] == '') $error .= $app->tform->wordbook['origin_txt']." ".$app->tform->wordbook['error_empty']."<br>\r\n";
+  if(substr($soa['origin'], -1) != '.') $error .= $app->tform->wordbook['origin_txt']." ".$app->tform->wordbook['error_dot']."<br>\r\n";
+  $error .= $this->validate_field($soa['origin'], "Zone origin", $soa['id'], 0);
+
+  $error .= $this->is_integer($soa['ttl'], $app->tform->wordbook['ttl_txt']);
+
+  if($soa['ns'] == '') $error .= $app->tform->wordbook['ns_txt']." ".$app->tform->wordbook['error_empty']."<br>\r\n";
+  $error .= $this->validate_field($soa['ns'], "Name server", $soa['id'], 0);
+
+  if($soa['mbox'] == '') $error .= $app->tform->wordbook['mbox_txt']." ".$app->tform->wordbook['error_empty']."<br>\r\n";
+  $error .= $this->validate_field($soa['mbox'], "Admin email", $soa['id'], 0);
+
+  $error .= $this->is_integer($soa['refresh'], $app->tform->wordbook['refresh_txt']);
+
+  $error .= $this->is_integer($soa['retry'], $app->tform->wordbook['retry_txt']);
+
+  $error .= $this->is_integer($soa['expire'], $app->tform->wordbook['expire_txt']);
+
+  $error .= $this->is_integer($soa['minimum'], $app->tform->wordbook['minimum_txt']);
+
+  return $error;
+}
+
+function increase_serial($serial){
+  global $app, $conf;
+
+  // increase serial
+  $serial_date = substr($serial, 0, 8);
+  $count = intval(substr($serial, 8, 2));
+  $current_date = date("Ymd");
+  if($serial_date >= $current_date){
+    $count += 1;
+    if ($count > 99) {
+        $serial_date += 1;
+        $count = 0;
+    }
+    $count = str_pad($count, 2, "0", STR_PAD_LEFT);
+    $new_serial = $serial_date.$count;
+  } else {
+    $new_serial = $current_date.'01';
+  }
+  return $new_serial;
+}
+
 }
\ No newline at end of file
diff --git a/interface/web/admin/form/firewall.tform.php b/interface/web/admin/form/firewall.tform.php
index 2ff9d0e409..4112a2a497 100644
--- a/interface/web/admin/form/firewall.tform.php
+++ b/interface/web/admin/form/firewall.tform.php
@@ -1,112 +1,112 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "Firewall";
-$form["description"] 	= "";
-$form["name"] 			= "firewall";
-$form["action"]			= "firewall_edit.php";
-$form["db_table"]		= "firewall";
-$form["db_table_idx"]	= "firewall_id";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "firewall";
-$form["list_default"]	= "firewall_list.php";
-$form["auth"]			= 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['firewall'] = array (
-	'title' 	=> "Firewall",
-	'width' 	=> 100,
-	'template' 	=> "templates/firewall_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'server_id' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'UNIQUE',
-														'errmsg'=> 'firewall_error_unique'),
-									),
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
-										'keyfield'=> 'server_id',
-										'valuefield'=> 'server_name'
-									 ),
-			'value'		=> ''
-		),
-		'tcp_port' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\s0-9\,\:]{0,255}$/',
-														'errmsg'=> 'tcp_ports_error_regex'),
-									),
-			'default'	=> '20,21,22,25,53,80,110,143,443,3306,8080,8081,10000',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'udp_port' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\s0-9\,\:]{0,255}$/',
-														'errmsg'=> 'tcp_ports_error_regex'),
-									),
-			'default'	=> '53,3306',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'active' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'y',
-			'value'		=> array(0 => 'n',1 => 'y')
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Firewall";
+$form["description"] 	= "";
+$form["name"] 			= "firewall";
+$form["action"]			= "firewall_edit.php";
+$form["db_table"]		= "firewall";
+$form["db_table_idx"]	= "firewall_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "firewall";
+$form["list_default"]	= "firewall_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['firewall'] = array (
+	'title' 	=> "Firewall",
+	'width' 	=> 100,
+	'template' 	=> "templates/firewall_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'server_id' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'UNIQUE',
+														'errmsg'=> 'firewall_error_unique'),
+									),
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'		=> ''
+		),
+		'tcp_port' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\s0-9\,\:]{0,255}$/',
+														'errmsg'=> 'tcp_ports_error_regex'),
+									),
+			'default'	=> '20,21,22,25,53,80,110,143,443,3306,8080,8081,10000',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'udp_port' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\s0-9\,\:]{0,255}$/',
+														'errmsg'=> 'tcp_ports_error_regex'),
+									),
+			'default'	=> '53,3306',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'active' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'y',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/form/remote_user.tform.php b/interface/web/admin/form/remote_user.tform.php
index 3cc3e6dc87..1a3824a60b 100644
--- a/interface/web/admin/form/remote_user.tform.php
+++ b/interface/web/admin/form/remote_user.tform.php
@@ -1,162 +1,162 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$function_list = array();
-$function_list['mail_domain_get,mail_domain_add,mail_domain_update,mail_domain_delete,mail_domain_set_status,mail_domain_get_by_domain'] = 'Mail domain functions';
-$function_list['mail_mailinglist_get,mail_mailinglist_add,mail_mailinglist_update,mail_mailinglist_delete'] = 'Mail mailinglist functions';
-$function_list['mail_user_get,mail_user_add,mail_user_update,mail_user_delete'] = 'Mail user functions';
-$function_list['mail_alias_get,mail_alias_add,mail_alias_update,mail_alias_delete'] = 'Mail alias functions';
-$function_list['mail_forward_get,mail_forward_add,mail_forward_update,mail_forward_delete'] = 'Mail forward functions';
-$function_list['mail_catchall_get,mail_catchall_add,mail_catchall_update,mail_catchall_delete'] = 'Mail catchall functions';
-$function_list['mail_transport_get,mail_transport_add,mail_transport_update,mail_transport_delete'] = 'Mail transport functions';
-$function_list['mail_whitelist_get,mail_whitelist_add,mail_whitelist_update,mail_whitelist_delete'] = 'Mail whitelist functions';
-$function_list['mail_blacklist_get,mail_blacklist_add,mail_blacklist_update,mail_blacklist_delete'] = 'Mail blacklist functions';
-$function_list['mail_spamfilter_user_get,mail_spamfilter_user_add,mail_spamfilter_user_update,mail_spamfilter_user_delete'] = 'Mail spamfilter user functions';
-$function_list['mail_policy_get,mail_policy_add,mail_policy_update,mail_policy_delete'] = 'Mail spamfilter policy functions';
-$function_list['mail_fetchmail_get,mail_fetchmail_add,mail_fetchmail_update,mail_fetchmail_delete'] = 'Mail fetchmail functions';
-$function_list['mail_spamfilter_whitelist_get,mail_spamfilter_whitelist_add,mail_spamfilter_whitelist_update,mail_spamfilter_whitelist_delete'] = 'Mail spamfilter whitelist functions';
-$function_list['mail_spamfilter_blacklist_get,mail_spamfilter_blacklist_add,mail_spamfilter_blacklist_update,mail_spamfilter_blacklist_delete'] = 'Mail spamfilter blacklist functions';
-$function_list['mail_user_filter_get,mail_user_filter_add,mail_user_filter_update,mail_user_filter_delete'] = 'Mail user filter functions';
-$function_list['mail_filter_get,mail_filter_add,mail_filter_update,mail_filter_delete'] = 'Mail filter functions';
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$function_list = array();
+$function_list['mail_domain_get,mail_domain_add,mail_domain_update,mail_domain_delete,mail_domain_set_status,mail_domain_get_by_domain'] = 'Mail domain functions';
+$function_list['mail_mailinglist_get,mail_mailinglist_add,mail_mailinglist_update,mail_mailinglist_delete'] = 'Mail mailinglist functions';
+$function_list['mail_user_get,mail_user_add,mail_user_update,mail_user_delete'] = 'Mail user functions';
+$function_list['mail_alias_get,mail_alias_add,mail_alias_update,mail_alias_delete'] = 'Mail alias functions';
+$function_list['mail_forward_get,mail_forward_add,mail_forward_update,mail_forward_delete'] = 'Mail forward functions';
+$function_list['mail_catchall_get,mail_catchall_add,mail_catchall_update,mail_catchall_delete'] = 'Mail catchall functions';
+$function_list['mail_transport_get,mail_transport_add,mail_transport_update,mail_transport_delete'] = 'Mail transport functions';
+$function_list['mail_whitelist_get,mail_whitelist_add,mail_whitelist_update,mail_whitelist_delete'] = 'Mail whitelist functions';
+$function_list['mail_blacklist_get,mail_blacklist_add,mail_blacklist_update,mail_blacklist_delete'] = 'Mail blacklist functions';
+$function_list['mail_spamfilter_user_get,mail_spamfilter_user_add,mail_spamfilter_user_update,mail_spamfilter_user_delete'] = 'Mail spamfilter user functions';
+$function_list['mail_policy_get,mail_policy_add,mail_policy_update,mail_policy_delete'] = 'Mail spamfilter policy functions';
+$function_list['mail_fetchmail_get,mail_fetchmail_add,mail_fetchmail_update,mail_fetchmail_delete'] = 'Mail fetchmail functions';
+$function_list['mail_spamfilter_whitelist_get,mail_spamfilter_whitelist_add,mail_spamfilter_whitelist_update,mail_spamfilter_whitelist_delete'] = 'Mail spamfilter whitelist functions';
+$function_list['mail_spamfilter_blacklist_get,mail_spamfilter_blacklist_add,mail_spamfilter_blacklist_update,mail_spamfilter_blacklist_delete'] = 'Mail spamfilter blacklist functions';
+$function_list['mail_user_filter_get,mail_user_filter_add,mail_user_filter_update,mail_user_filter_delete'] = 'Mail user filter functions';
+$function_list['mail_filter_get,mail_filter_add,mail_filter_update,mail_filter_delete'] = 'Mail filter functions';
 $function_list['client_get,client_add,client_update,client_delete,client_get_sites_by_user,client_get_by_username,client_change_password,client_get_id,client_delete_everything'] = 'Client functions';
 $function_list['server_get,get_function_list,client_templates_get_all,server_get_serverid_by_ip'] = 'Server functions';
-$function_list['sites_cron_get,sites_cron_add,sites_cron_update,sites_cron_delete'] = 'Sites cron functions';
-$function_list['sites_database_get,sites_database_add,sites_database_update,sites_database_delete, sites_database_get_all_by_user'] = 'Sites database functions';
-$function_list['sites_ftp_user_get,sites_ftp_user_add,sites_ftp_user_update,sites_ftp_user_delete'] = 'Sites FTP-User functions';
-$function_list['sites_shell_user_get,sites_shell_user_add,sites_shell_user_update,sites_shell_user_delete'] = 'Sites Shell-User functions';
-$function_list['sites_web_domain_get,sites_web_domain_add,sites_web_domain_update,sites_web_domain_delete,sites_web_domain_set_status'] = 'Sites Domain functions';
-$function_list['sites_web_aliasdomain_get,sites_web_aliasdomain_add,sites_web_aliasdomain_update,sites_web_aliasdomain_delete'] = 'Sites Aliasdomain functions';
-$function_list['sites_web_subdomain_get,sites_web_subdomain_add,sites_web_subdomain_update,sites_web_subdomain_delete'] = 'Sites Subdomain functions';
-$function_list['dns_zone_get,dns_zone_add,dns_zone_update,dns_zone_delete,dns_zone_set_status'] = 'DNS zone functions';
-$function_list['dns_a_get,dns_a_add,dns_a_update,dns_a_delete'] = 'DNS a functions';
-$function_list['dns_aaaa_get,dns_aaaa_add,dns_aaaa_update,dns_aaaa_delete'] = 'DNS aaaa functions';
-$function_list['dns_alias_get,dns_alias_add,dns_alias_update,dns_alias_delete'] = 'DNS alias functions';
-$function_list['dns_cname_get,dns_cname_add,dns_cname_update,dns_cname_delete'] = 'DNS cname functions';
-$function_list['dns_hinfo_get,dns_hinfo_add,dns_hinfo_update,dns_hinfo_delete'] = 'DNS hinfo functions';
-$function_list['dns_mx_get,dns_mx_add,dns_mx_update,dns_mx_delete'] = 'DNS mx functions';
-$function_list['dns_ns_get,dns_ns_add,dns_ns_update,dns_ns_delete'] = 'DNS ns functions';
-$function_list['dns_ptr_get,dns_ptr_add,dns_ptr_update,dns_ptr_delete'] = 'DNS ptr functions';
-$function_list['dns_rp_get,dns_rp_add,dns_rp_update,dns_rp_delete'] = 'DNS rp functions';
-$function_list['dns_srv_get,dns_srv_add,dns_srv_update,dns_srv_delete'] = 'DNS srv functions';
-$function_list['dns_txt_get,dns_txt_add,dns_txt_update,dns_txt_delete'] = 'DNS txt functions';
+$function_list['sites_cron_get,sites_cron_add,sites_cron_update,sites_cron_delete'] = 'Sites cron functions';
+$function_list['sites_database_get,sites_database_add,sites_database_update,sites_database_delete, sites_database_get_all_by_user'] = 'Sites database functions';
+$function_list['sites_ftp_user_get,sites_ftp_user_add,sites_ftp_user_update,sites_ftp_user_delete'] = 'Sites FTP-User functions';
+$function_list['sites_shell_user_get,sites_shell_user_add,sites_shell_user_update,sites_shell_user_delete'] = 'Sites Shell-User functions';
+$function_list['sites_web_domain_get,sites_web_domain_add,sites_web_domain_update,sites_web_domain_delete,sites_web_domain_set_status'] = 'Sites Domain functions';
+$function_list['sites_web_aliasdomain_get,sites_web_aliasdomain_add,sites_web_aliasdomain_update,sites_web_aliasdomain_delete'] = 'Sites Aliasdomain functions';
+$function_list['sites_web_subdomain_get,sites_web_subdomain_add,sites_web_subdomain_update,sites_web_subdomain_delete'] = 'Sites Subdomain functions';
+$function_list['dns_zone_get,dns_zone_add,dns_zone_update,dns_zone_delete,dns_zone_set_status'] = 'DNS zone functions';
+$function_list['dns_a_get,dns_a_add,dns_a_update,dns_a_delete'] = 'DNS a functions';
+$function_list['dns_aaaa_get,dns_aaaa_add,dns_aaaa_update,dns_aaaa_delete'] = 'DNS aaaa functions';
+$function_list['dns_alias_get,dns_alias_add,dns_alias_update,dns_alias_delete'] = 'DNS alias functions';
+$function_list['dns_cname_get,dns_cname_add,dns_cname_update,dns_cname_delete'] = 'DNS cname functions';
+$function_list['dns_hinfo_get,dns_hinfo_add,dns_hinfo_update,dns_hinfo_delete'] = 'DNS hinfo functions';
+$function_list['dns_mx_get,dns_mx_add,dns_mx_update,dns_mx_delete'] = 'DNS mx functions';
+$function_list['dns_ns_get,dns_ns_add,dns_ns_update,dns_ns_delete'] = 'DNS ns functions';
+$function_list['dns_ptr_get,dns_ptr_add,dns_ptr_update,dns_ptr_delete'] = 'DNS ptr functions';
+$function_list['dns_rp_get,dns_rp_add,dns_rp_update,dns_rp_delete'] = 'DNS rp functions';
+$function_list['dns_srv_get,dns_srv_add,dns_srv_update,dns_srv_delete'] = 'DNS srv functions';
+$function_list['dns_txt_get,dns_txt_add,dns_txt_update,dns_txt_delete'] = 'DNS txt functions';
 $function_list['domains_domain_get,domains_domain_add,domains_domain_delete,domains_get_all_by_user'] = 'Domaintool functions';
-
-$form["title"] 			= "Remote user";
-$form["description"] 	= "";
-$form["name"] 			= "remote_user";
-$form["action"]			= "remote_user_edit.php";
-$form["db_table"]		= "remote_user";
-$form["db_table_idx"]	= "remote_userid";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "remote_user";
-$form["list_default"]	= "remote_user_list.php";
-$form["auth"]			= 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['remote_user'] = array (
-	'title' 	=> "Remote User",
-	'width' 	=> 100,
-	'template' 	=> "templates/remote_user_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'remote_userid' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT remote_userid,remote_username FROM remote_user WHERE {AUTHSQL} ORDER BY remote_username',
-										'keyfield'=> 'remote_userid',
-										'valuefield'=> 'remote_username'
-									 ),
-			'value'		=> ''
-		),
-		
-		'remote_username' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'UNIQUE',
-														'errmsg'=> 'username_error_unique'),
-										1 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\w\.\-]{0,64}$/',
-														'errmsg'=> 'username_error_regex'),
-2 => array (	'type' => 'NOTEMPTY',
-		'errmsg'=> 'username_error_empty'),
-									),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'remote_password' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'PASSWORD',
-			'encryption' => 'MD5',
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'remote_functions' => array (
-			'datatype'	=> 'TEXT',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> $function_list,
-			'separator'	=> ';',
-			'width'		=> '',
-			'maxlength'	=> '',
-			'rows'		=> '5',
-			'cols'		=> '30'
-		)
-		
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-
-
-
-
-?>
+
+$form["title"] 			= "Remote user";
+$form["description"] 	= "";
+$form["name"] 			= "remote_user";
+$form["action"]			= "remote_user_edit.php";
+$form["db_table"]		= "remote_user";
+$form["db_table_idx"]	= "remote_userid";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "remote_user";
+$form["list_default"]	= "remote_user_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['remote_user'] = array (
+	'title' 	=> "Remote User",
+	'width' 	=> 100,
+	'template' 	=> "templates/remote_user_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'remote_userid' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT remote_userid,remote_username FROM remote_user WHERE {AUTHSQL} ORDER BY remote_username',
+										'keyfield'=> 'remote_userid',
+										'valuefield'=> 'remote_username'
+									 ),
+			'value'		=> ''
+		),
+		
+		'remote_username' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'UNIQUE',
+														'errmsg'=> 'username_error_unique'),
+										1 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\w\.\-]{0,64}$/',
+														'errmsg'=> 'username_error_regex'),
+2 => array (	'type' => 'NOTEMPTY',
+		'errmsg'=> 'username_error_empty'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'remote_password' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption' => 'MD5',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'remote_functions' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> $function_list,
+			'separator'	=> ';',
+			'width'		=> '',
+			'maxlength'	=> '',
+			'rows'		=> '5',
+			'cols'		=> '30'
+		)
+		
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
+
+
+
+?>
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 7c080ccbdf..bc3e972f80 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -1,270 +1,270 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "System Config";
-$form["description"] 	= "";
-$form["name"] 			= "system_config";
-$form["action"]			= "system_config_edit.php";
-$form["db_table"]		= "sys_ini";
-$form["db_table_idx"]	= "sysini_id";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "sites";
-$form["list_default"]	= "server_list.php";
-$form["auth"]			= 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['sites'] = array (
-	'title' 	=> "Sites",
-	'width' 	=> 70,
-	'template' 	=> "templates/system_config_sites_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'dbname_prefix' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
-														'errmsg'=> 'dbname_prefix_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'dbuser_prefix' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
-														'errmsg'=> 'dbuser_prefix_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'ftpuser_prefix' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
-														'errmsg'=> 'ftpuser_prefix_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'shelluser_prefix' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
-														'errmsg'=> 'shelluser_prefix_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'webdavuser_prefix' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
-														'errmsg'=> 'webdavuser_prefix_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'dblist_phpmyadmin_link' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'n',
-			'value'		=> array(0 => 'n',1 => 'y')
-		),
-		'phpmyadmin_url' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
-														'errmsg'=> 'phpmyadmin_url_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'webftp_url' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
-														'errmsg'=> 'webftp_url_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-$form["tabs"]['mail'] = array (
-	'title' 	=> "Mail",
-	'width' 	=> 70,
-	'template' 	=> "templates/system_config_mail_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'mailboxlist_webmail_link' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'n',
-			'value'		=> array(0 => 'n',1 => 'y')
-		),
-		'webmail_url' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
-														'errmsg'=> 'webmail_url_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'mailmailinglist_link' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'n',
-			'value'		=> array(0 => 'n',1 => 'y')
-		),
-		'mailmailinglist_url' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
-														'errmsg'=> 'mailinglist_url_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'admin_mail' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'admin_name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-$form["tabs"]['domains'] = array (
-	'title' 	=> "Domains",
-	'width' 	=> 70,
-	'template' 	=> "templates/system_config_domains_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'use_domain_module' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'n',
-			'value'		=> array(0 => 'n',1 => 'y')
-		),
-		'new_domain_html' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> ''
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-$form["tabs"]['misc'] = array (
-	'title' 	=> "Misc",
-	'width' 	=> 70,
-	'template' 	=> "templates/system_config_misc_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'dashboard_atom_url' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> 'http://www.ispconfig.org/atom',
-			'value'		=> ''
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-
-?>
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "System Config";
+$form["description"] 	= "";
+$form["name"] 			= "system_config";
+$form["action"]			= "system_config_edit.php";
+$form["db_table"]		= "sys_ini";
+$form["db_table_idx"]	= "sysini_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "sites";
+$form["list_default"]	= "server_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['sites'] = array (
+	'title' 	=> "Sites",
+	'width' 	=> 70,
+	'template' 	=> "templates/system_config_sites_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'dbname_prefix' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+														'errmsg'=> 'dbname_prefix_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'dbuser_prefix' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+														'errmsg'=> 'dbuser_prefix_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'ftpuser_prefix' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+														'errmsg'=> 'ftpuser_prefix_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'shelluser_prefix' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+														'errmsg'=> 'shelluser_prefix_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'webdavuser_prefix' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+														'errmsg'=> 'webdavuser_prefix_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'dblist_phpmyadmin_link' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'n',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
+		'phpmyadmin_url' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
+														'errmsg'=> 'phpmyadmin_url_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'webftp_url' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
+														'errmsg'=> 'webftp_url_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+$form["tabs"]['mail'] = array (
+	'title' 	=> "Mail",
+	'width' 	=> 70,
+	'template' 	=> "templates/system_config_mail_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'mailboxlist_webmail_link' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'n',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
+		'webmail_url' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
+														'errmsg'=> 'webmail_url_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'mailmailinglist_link' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'n',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
+		'mailmailinglist_url' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[0-9a-zA-Z\:\/\-\.]{0,255}$/',
+														'errmsg'=> 'mailinglist_url_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'admin_mail' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'admin_name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+$form["tabs"]['domains'] = array (
+	'title' 	=> "Domains",
+	'width' 	=> 70,
+	'template' 	=> "templates/system_config_domains_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'use_domain_module' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'n',
+			'value'		=> array(0 => 'n',1 => 'y')
+		),
+		'new_domain_html' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> ''
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+$form["tabs"]['misc'] = array (
+	'title' 	=> "Misc",
+	'width' 	=> 70,
+	'template' 	=> "templates/system_config_misc_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'dashboard_atom_url' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> 'http://www.ispconfig.org/atom',
+			'value'		=> ''
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
+?>
diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index 1edbb0cc43..afe5956310 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -1,456 +1,456 @@
-<?php
-
-/*
-Copyright (c) 2005, 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.
-*/
-
-/*
-	Form Definition
-
-	Tabellendefinition
-
-	Datentypen:
-	- INTEGER (Wandelt Ausdr�cke in Int um)
-	- DOUBLE
-	- CURRENCY (Formatiert Zahlen nach W�hrungsnotation)
-	- VARCHAR (kein weiterer Format Check)
-	- TEXT (kein weiterer Format Check)
-	- DATE (Datumsformat, Timestamp Umwandlung)
-
-	Formtype:
-	- TEXT (normales Textfeld)
-	- TEXTAREA (normales Textfeld)
-	- PASSWORD (Feldinhalt wird nicht angezeigt)
-	- SELECT (Gibt Werte als option Feld aus)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hinweis:
-	Das ID-Feld ist nicht bei den Table Values einzuf�gen.
-
-
-*/
-
-$form['title'] 			= 'Users';
-$form['description'] 	= 'Form to edit systemusers.';
-$form['name'] 			= 'users';
-$form['action']			= 'users_edit.php';
-$form['db_table']		= 'sys_user';
-$form['db_table_idx']	= 'userid';
-$form["db_history"]		= "no";
-$form['tab_default']	= 'users';
-$form['list_default']	= 'users_list.php';
-$form['auth']			= 'yes';
-
-//* 0 = id of the user, > 0 id must match with id of current user
-$form['auth_preset']['userid']  = 0; 
-//* 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form['auth_preset']['groupid'] = 0; 
-
-//** Permissions are: r = read, i = insert, u = update, d = delete
-$form['auth_preset']['perm_user']  = 'riud';
-$form['auth_preset']['perm_group'] = 'riud';
-$form['auth_preset']['perm_other'] = ''; 
-
-//* Pick out modules
-$modules_list = array();
-$handle = @opendir(ISPC_WEB_PATH); 
-while ($file = @readdir ($handle)) { 
-    if ($file != '.' && $file != '..') {
-        if(@is_dir(ISPC_WEB_PATH."/$file")) {
-            if(is_file(ISPC_WEB_PATH."/$file/lib/module.conf.php") and $file != 'login' && $file != 'designer') {
-				$modules_list[$file] = $file;
-			}
-        }
-	}
-}
-
-//* Load themes
-$themes_list = array();
-$handle = @opendir(ISPC_THEMES_PATH); 
-while ($file = @readdir ($handle)) { 
-    if (substr($file, 0, 1) != '.') {
-        if(@is_dir(ISPC_THEMES_PATH."/$file")) {
-			$themes_list[$file] = $file;
-        }
-	}
-}
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang'); 
-while ($file = @readdir ($handle)) { 
-    if ($file != '.' && $file != '..') {
-        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-        }
-	}
-}
-
-//* Pick out groups
-$groups_list = array();
-$tmp_records = $app->db->queryAllRecords('SELECT groupid, name FROM sys_group ORDER BY name');
-if(is_array($tmp_records)) {
-	foreach($tmp_records as $tmp_rec) {
-		$groups_list[$tmp_rec['groupid']] = $tmp_rec['name'];
-	}
-}
-
-$form['tabs']['users'] = array (
-	'title' 	=> 'Users',
-	'width' 	=> 80,
-	'template' 	=> 'templates/users_user_edit.htm',
-	'fields' 	=> array (
-	##################################
-	# Beginn Datenbankfelder
-	##################################
-		'username' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'username_empty'),
-										1 => array (	'type'	=> 'UNIQUE',
-														'errmsg'=> 'username_unique'),
-										2 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\w\.\-\_]{0,64}$/',
-														'errmsg'=> 'username_err'),
-									),
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '15',
-			'maxlength'	=> '30',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'passwort' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'PASSWORD',
-			'encryption'=> 'CRYPT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '15',
-			'maxlength'	=> '100',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'modules' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> 'admin,forms',
-			'value'		=> $modules_list,
-			'separator'	=> ',',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'startmodule' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> $modules_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'app_theme' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'RADIO',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> 'default',
-			'value'		=> $themes_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'typ' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'RADIO',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> 'user',
-			'value'		=> array ('user' => 'user', 'admin' => 'admin'),
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'active' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'CHECKBOX',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> array(0 => 0,1 => 1),
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'language' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> $language_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '2',
-			'rows'		=> '',
-			'cols'		=> ''
-		)
-	##################################
-	# ENDE Datenbankfelder
-	##################################
-	)
-);
-/*
-$form['tabs']['address'] = array (
-	'title' 	=> 'Address',
-	'width' 	=> 80,
-	'template' 	=> 'templates/users_address_edit.htm',
-	'fields' 	=> array (
-	##################################
-	# Beginn Datenbankfelder
-	##################################
-		'name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'vorname' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'unternehmen' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'strasse' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'ort' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'plz' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'land' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'email' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'url' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'telefon' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'fax' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		)
-
-	##################################
-	# ENDE Datenbankfelder
-	##################################
-	)
-);
-*/
-
-$form['tabs']['groups'] = array (
-	'title' 	=> 'Groups',
-	'width' 	=> 80,
-	'template' 	=> 'templates/users_groups_edit.htm',
-	'fields' 	=> array (
-	##################################
-	# Beginn Datenbankfelder
-	##################################
-		'default_group' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> $groups_list,
-			'separator'	=> ',',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'groups' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> $groups_list,
-			'separator'	=> ',',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		)
-
-	##################################
-	# ENDE Datenbankfelder
-	##################################
-	)
-);
-
+<?php
+
+/*
+Copyright (c) 2005, 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.
+*/
+
+/*
+	Form Definition
+
+	Tabellendefinition
+
+	Datentypen:
+	- INTEGER (Wandelt Ausdr�cke in Int um)
+	- DOUBLE
+	- CURRENCY (Formatiert Zahlen nach W�hrungsnotation)
+	- VARCHAR (kein weiterer Format Check)
+	- TEXT (kein weiterer Format Check)
+	- DATE (Datumsformat, Timestamp Umwandlung)
+
+	Formtype:
+	- TEXT (normales Textfeld)
+	- TEXTAREA (normales Textfeld)
+	- PASSWORD (Feldinhalt wird nicht angezeigt)
+	- SELECT (Gibt Werte als option Feld aus)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hinweis:
+	Das ID-Feld ist nicht bei den Table Values einzuf�gen.
+
+
+*/
+
+$form['title'] 			= 'Users';
+$form['description'] 	= 'Form to edit systemusers.';
+$form['name'] 			= 'users';
+$form['action']			= 'users_edit.php';
+$form['db_table']		= 'sys_user';
+$form['db_table_idx']	= 'userid';
+$form["db_history"]		= "no";
+$form['tab_default']	= 'users';
+$form['list_default']	= 'users_list.php';
+$form['auth']			= 'yes';
+
+//* 0 = id of the user, > 0 id must match with id of current user
+$form['auth_preset']['userid']  = 0; 
+//* 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form['auth_preset']['groupid'] = 0; 
+
+//** Permissions are: r = read, i = insert, u = update, d = delete
+$form['auth_preset']['perm_user']  = 'riud';
+$form['auth_preset']['perm_group'] = 'riud';
+$form['auth_preset']['perm_other'] = ''; 
+
+//* Pick out modules
+$modules_list = array();
+$handle = @opendir(ISPC_WEB_PATH); 
+while ($file = @readdir ($handle)) { 
+    if ($file != '.' && $file != '..') {
+        if(@is_dir(ISPC_WEB_PATH."/$file")) {
+            if(is_file(ISPC_WEB_PATH."/$file/lib/module.conf.php") and $file != 'login' && $file != 'designer') {
+				$modules_list[$file] = $file;
+			}
+        }
+	}
+}
+
+//* Load themes
+$themes_list = array();
+$handle = @opendir(ISPC_THEMES_PATH); 
+while ($file = @readdir ($handle)) { 
+    if (substr($file, 0, 1) != '.') {
+        if(@is_dir(ISPC_THEMES_PATH."/$file")) {
+			$themes_list[$file] = $file;
+        }
+	}
+}
+
+//* Languages
+$language_list = array();
+$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang'); 
+while ($file = @readdir ($handle)) { 
+    if ($file != '.' && $file != '..') {
+        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
+			$tmp = substr($file, 0, 2);
+			$language_list[$tmp] = $tmp;
+        }
+	}
+}
+
+//* Pick out groups
+$groups_list = array();
+$tmp_records = $app->db->queryAllRecords('SELECT groupid, name FROM sys_group ORDER BY name');
+if(is_array($tmp_records)) {
+	foreach($tmp_records as $tmp_rec) {
+		$groups_list[$tmp_rec['groupid']] = $tmp_rec['name'];
+	}
+}
+
+$form['tabs']['users'] = array (
+	'title' 	=> 'Users',
+	'width' 	=> 80,
+	'template' 	=> 'templates/users_user_edit.htm',
+	'fields' 	=> array (
+	##################################
+	# Beginn Datenbankfelder
+	##################################
+		'username' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'username_empty'),
+										1 => array (	'type'	=> 'UNIQUE',
+														'errmsg'=> 'username_unique'),
+										2 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\w\.\-\_]{0,64}$/',
+														'errmsg'=> 'username_err'),
+									),
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '15',
+			'maxlength'	=> '30',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'passwort' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption'=> 'CRYPT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '15',
+			'maxlength'	=> '100',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'modules' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> 'admin,forms',
+			'value'		=> $modules_list,
+			'separator'	=> ',',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'startmodule' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> $modules_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'app_theme' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'RADIO',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> 'default',
+			'value'		=> $themes_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'typ' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'RADIO',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> 'user',
+			'value'		=> array ('user' => 'user', 'admin' => 'admin'),
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'active' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'CHECKBOX',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> array(0 => 0,1 => 1),
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'language' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> $language_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '2',
+			'rows'		=> '',
+			'cols'		=> ''
+		)
+	##################################
+	# ENDE Datenbankfelder
+	##################################
+	)
+);
+/*
+$form['tabs']['address'] = array (
+	'title' 	=> 'Address',
+	'width' 	=> 80,
+	'template' 	=> 'templates/users_address_edit.htm',
+	'fields' 	=> array (
+	##################################
+	# Beginn Datenbankfelder
+	##################################
+		'name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'vorname' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'unternehmen' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'strasse' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'ort' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'plz' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'land' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'email' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'url' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'telefon' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'fax' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		)
+
+	##################################
+	# ENDE Datenbankfelder
+	##################################
+	)
+);
+*/
+
+$form['tabs']['groups'] = array (
+	'title' 	=> 'Groups',
+	'width' 	=> 80,
+	'template' 	=> 'templates/users_groups_edit.htm',
+	'fields' 	=> array (
+	##################################
+	# Beginn Datenbankfelder
+	##################################
+		'default_group' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> $groups_list,
+			'separator'	=> ',',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'groups' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> $groups_list,
+			'separator'	=> ',',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		)
+
+	##################################
+	# ENDE Datenbankfelder
+	##################################
+	)
+);
+
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index c97ca0e5ec..f672e9943c 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -1,84 +1,84 @@
-<?php
-$wb["try_rescue_txt"] = 'Activate rescue of all services installed at this server';
-$wb["do_not_try_rescue_apache_txt"] = 'If rescue ist activated, do NOT try to rescue Apache';
-$wb["do_not_try_rescue_mysql_txt"] = 'If rescue ist activated, do NOT try to rescue mysql';
-$wb["do_not_try_rescue_mail_txt"] = 'If rescue ist activated, do NOT try to rescue mail';
-$wb["jailkit_chroot_home_txt"] = 'Jailkit chroot home';
-$wb["jailkit_chroot_app_sections_txt"] = 'Jailkit chroot app sections';
-$wb["jailkit_chroot_app_programs_txt"] = 'Jailkit chrooted applications';
-$wb["jailkit_chroot_cron_programs_txt"] = 'Jailkit cron chrooted applications';
-$wb["website_path_txt"] = 'Website path';
-$wb["website_symlinks_txt"] = 'Website symlinks';
-$wb["website_basedir_txt"] = 'Website basedir';
-$wb["vhost_conf_dir_txt"] = 'Vhost config dir';
-$wb["vhost_conf_enabled_dir_txt"] = 'Vhost config enabled dir';
-$wb["getmail_config_dir_txt"] = 'Getmail config dir';
-$wb["fastcgi_starter_path_txt"] = 'FastCGI starter path';
-$wb["fastcgi_starter_script_txt"] = 'FastCGI starter script';
-$wb["fastcgi_alias_txt"] = 'FastCGI Alias';
-$wb["fastcgi_phpini_path_txt"] = 'FastCGI php.ini Path';
-$wb["fastcgi_children_txt"] = 'FastCGI Children';
-$wb["fastcgi_max_requests_txt"] = 'FastCGI max. Requests';
-$wb["fastcgi_bin_txt"] = 'FastCGI Bin';
-$wb["module_txt"] = 'Module';
-$wb["maildir_path_txt"] = 'Maildir Path';
-$wb["homedir_path_txt"] = 'Homedir Path';
-$wb["mailuser_uid_txt"] = 'Mailuser UID';
-$wb["mailuser_gid_txt"] = 'Mailuser GID';
-$wb["mailuser_name_txt"] = 'Mailuser Name';
-$wb["mailuser_group_txt"] = 'Mailuser Group';
-$wb["relayhost_txt"] = 'Relayhost';
-$wb["relayhost_user_txt"] = 'Relayhost User';
-$wb["relayhost_password_txt"] = 'Relayhost Password';
-$wb["mailbox_size_limit_txt"] = 'Mailbox Size Limit';
-$wb["message_size_limit_txt"] = 'Message Size Limit';
-$wb["ip_address_txt"] = 'IP Address';
-$wb["netmask_txt"] = 'Netmask';
-$wb["gateway_txt"] = 'Gateway';
-$wb["hostname_txt"] = 'Hostname';
-$wb["nameservers_txt"] = 'Nameservers';
-$wb["auto_network_configuration_txt"] = 'Network Configuration';
-$wb["ip_address_error_wrong"] = 'Invalid IP address format.';
-$wb["netmask_error_wrong"] = 'Invalid Netmask format.';
-$wb["gateway_error_wrong"] = 'Invalid Gateway format.';
-$wb["hostname_error_empty"] = 'Hostname is empty.';
-$wb["nameservers_error_empty"] = 'Nameserver is empty.';
-$wb["config_dir_txt"] = 'Config directory';
-$wb["init_script_txt"] = 'Cron init script name';
-$wb["crontab_dir_txt"] = 'Path for individual crontabs';
-$wb["wget_txt"] = 'Path to wget program';
-$wb["web_user_txt"] = 'Apache user';
-$wb["web_group_txt"] = 'Apache group';
-$wb["security_level_txt"] = 'Security level';
-$wb["loglevel_txt"] = 'Loglevel';
-$wb["apps_vhost_port_txt"] = 'Apps-vhost port';
-$wb["apps_vhost_ip_txt"] = 'Apps-vhost IP';
-$wb["apps_vhost_servername_txt"] = 'Apps-vhost Domain';
-$wb["bind_user_txt"] = 'BIND User';
-$wb["bind_group_txt"] = 'BIND Group';
-$wb["bind_zonefiles_dir_txt"] = 'BIND zonefiles directory';
-$wb["named_conf_path_txt"] = 'BIND named.conf path';
-$wb["bind_user_error_empty"] = 'BIND user is empty.';
-$wb["bind_group_error_empty"] = 'BIND group is empty.';
-$wb["bind_zonefiles_dir_error_empty"] = 'BIND zonefiles directory is empty.';
-$wb["named_conf_path_error_empty"] = 'BIND named.conf path is empty.';
-$wb["named_conf_local_path_error_empty"] = 'BIND named.conf.local path is empty.';
-$wb["mail_filter_syntax_txt"] = 'Mailfilter Syntax';
-$wb["pop3_imap_daemon_txt"] = 'POP3/IMAP Daemon';
-$wb["php_open_basedir_txt"] = 'PHP open_basedir';
-$wb["php_open_basedir_error_empty"] = 'PHP open_basedir is empty.';
-$wb["htaccess_allow_override_txt"] = '.htaccess AllowOverride';
-$wb["htaccess_allow_override_error_empty"] = '.htaccess AllowOverride is empty.';
-$wb["awstats_conf_dir_txt"] = 'awstats conf folder';
-$wb["awstats_data_dir_txt"] = 'awstats data folder';
-$wb["awstats_pl_txt"] = 'awstats.pl script';
-$wb["awstats_buildstaticpages_pl_txt"] = 'awstats_buildstaticpages.pl script';
-$wb["backup_dir_txt"] = 'Backup directory';
-$wb["named_conf_local_path_txt"] = 'BIND named.conf.local path';
-$wb["php_ini_path_cgi_txt"] = 'CGI php.ini path';
-$wb["php_ini_path_apache_txt"] = 'Apache php.ini path';
-$wb["check_apache_config_txt"] = 'Test apache configuration on restart';
-$wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
+<?php
+$wb["try_rescue_txt"] = 'Activate rescue of all services installed at this server';
+$wb["do_not_try_rescue_apache_txt"] = 'If rescue ist activated, do NOT try to rescue Apache';
+$wb["do_not_try_rescue_mysql_txt"] = 'If rescue ist activated, do NOT try to rescue mysql';
+$wb["do_not_try_rescue_mail_txt"] = 'If rescue ist activated, do NOT try to rescue mail';
+$wb["jailkit_chroot_home_txt"] = 'Jailkit chroot home';
+$wb["jailkit_chroot_app_sections_txt"] = 'Jailkit chroot app sections';
+$wb["jailkit_chroot_app_programs_txt"] = 'Jailkit chrooted applications';
+$wb["jailkit_chroot_cron_programs_txt"] = 'Jailkit cron chrooted applications';
+$wb["website_path_txt"] = 'Website path';
+$wb["website_symlinks_txt"] = 'Website symlinks';
+$wb["website_basedir_txt"] = 'Website basedir';
+$wb["vhost_conf_dir_txt"] = 'Vhost config dir';
+$wb["vhost_conf_enabled_dir_txt"] = 'Vhost config enabled dir';
+$wb["getmail_config_dir_txt"] = 'Getmail config dir';
+$wb["fastcgi_starter_path_txt"] = 'FastCGI starter path';
+$wb["fastcgi_starter_script_txt"] = 'FastCGI starter script';
+$wb["fastcgi_alias_txt"] = 'FastCGI Alias';
+$wb["fastcgi_phpini_path_txt"] = 'FastCGI php.ini Path';
+$wb["fastcgi_children_txt"] = 'FastCGI Children';
+$wb["fastcgi_max_requests_txt"] = 'FastCGI max. Requests';
+$wb["fastcgi_bin_txt"] = 'FastCGI Bin';
+$wb["module_txt"] = 'Module';
+$wb["maildir_path_txt"] = 'Maildir Path';
+$wb["homedir_path_txt"] = 'Homedir Path';
+$wb["mailuser_uid_txt"] = 'Mailuser UID';
+$wb["mailuser_gid_txt"] = 'Mailuser GID';
+$wb["mailuser_name_txt"] = 'Mailuser Name';
+$wb["mailuser_group_txt"] = 'Mailuser Group';
+$wb["relayhost_txt"] = 'Relayhost';
+$wb["relayhost_user_txt"] = 'Relayhost User';
+$wb["relayhost_password_txt"] = 'Relayhost Password';
+$wb["mailbox_size_limit_txt"] = 'Mailbox Size Limit';
+$wb["message_size_limit_txt"] = 'Message Size Limit';
+$wb["ip_address_txt"] = 'IP Address';
+$wb["netmask_txt"] = 'Netmask';
+$wb["gateway_txt"] = 'Gateway';
+$wb["hostname_txt"] = 'Hostname';
+$wb["nameservers_txt"] = 'Nameservers';
+$wb["auto_network_configuration_txt"] = 'Network Configuration';
+$wb["ip_address_error_wrong"] = 'Invalid IP address format.';
+$wb["netmask_error_wrong"] = 'Invalid Netmask format.';
+$wb["gateway_error_wrong"] = 'Invalid Gateway format.';
+$wb["hostname_error_empty"] = 'Hostname is empty.';
+$wb["nameservers_error_empty"] = 'Nameserver is empty.';
+$wb["config_dir_txt"] = 'Config directory';
+$wb["init_script_txt"] = 'Cron init script name';
+$wb["crontab_dir_txt"] = 'Path for individual crontabs';
+$wb["wget_txt"] = 'Path to wget program';
+$wb["web_user_txt"] = 'Apache user';
+$wb["web_group_txt"] = 'Apache group';
+$wb["security_level_txt"] = 'Security level';
+$wb["loglevel_txt"] = 'Loglevel';
+$wb["apps_vhost_port_txt"] = 'Apps-vhost port';
+$wb["apps_vhost_ip_txt"] = 'Apps-vhost IP';
+$wb["apps_vhost_servername_txt"] = 'Apps-vhost Domain';
+$wb["bind_user_txt"] = 'BIND User';
+$wb["bind_group_txt"] = 'BIND Group';
+$wb["bind_zonefiles_dir_txt"] = 'BIND zonefiles directory';
+$wb["named_conf_path_txt"] = 'BIND named.conf path';
+$wb["bind_user_error_empty"] = 'BIND user is empty.';
+$wb["bind_group_error_empty"] = 'BIND group is empty.';
+$wb["bind_zonefiles_dir_error_empty"] = 'BIND zonefiles directory is empty.';
+$wb["named_conf_path_error_empty"] = 'BIND named.conf path is empty.';
+$wb["named_conf_local_path_error_empty"] = 'BIND named.conf.local path is empty.';
+$wb["mail_filter_syntax_txt"] = 'Mailfilter Syntax';
+$wb["pop3_imap_daemon_txt"] = 'POP3/IMAP Daemon';
+$wb["php_open_basedir_txt"] = 'PHP open_basedir';
+$wb["php_open_basedir_error_empty"] = 'PHP open_basedir is empty.';
+$wb["htaccess_allow_override_txt"] = '.htaccess AllowOverride';
+$wb["htaccess_allow_override_error_empty"] = '.htaccess AllowOverride is empty.';
+$wb["awstats_conf_dir_txt"] = 'awstats conf folder';
+$wb["awstats_data_dir_txt"] = 'awstats data folder';
+$wb["awstats_pl_txt"] = 'awstats.pl script';
+$wb["awstats_buildstaticpages_pl_txt"] = 'awstats_buildstaticpages.pl script';
+$wb["backup_dir_txt"] = 'Backup directory';
+$wb["named_conf_local_path_txt"] = 'BIND named.conf.local path';
+$wb["php_ini_path_cgi_txt"] = 'CGI php.ini path';
+$wb["php_ini_path_apache_txt"] = 'Apache php.ini path';
+$wb["check_apache_config_txt"] = 'Test apache configuration on restart';
+$wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.';
 $wb["CA_path_txt"] = 'CA Path';
 $wb["CA_pass_txt"] = 'CA passphrase';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_users.lng b/interface/web/admin/lib/lang/en_users.lng
index 0f9a1c5b56..df00438811 100644
--- a/interface/web/admin/lib/lang/en_users.lng
+++ b/interface/web/admin/lib/lang/en_users.lng
@@ -1,28 +1,28 @@
-<?php
-$wb["username_txt"] = 'Username';
-$wb["username_err"] = 'The username is too long or contains invalid characters.';
-$wb["username_empty"] = 'The username is empty.';
-$wb["username_unique"] = 'There is already a user with this username.';
-$wb["passwort_txt"] = 'Password';
-$wb["password_strength_txt"] = 'Password strength';
-$wb["modules_txt"] = 'Module';
-$wb["startmodule_txt"] = 'Startmodule';
-$wb["app_theme_txt"] = 'Design';
-$wb["typ_txt"] = 'Type';
-$wb["active_txt"] = 'Active';
-$wb["language_txt"] = 'Language';
-$wb["name_txt"] = 'Name';
-$wb["vorname_txt"] = 'Forename';
-$wb["unternehmen_txt"] = 'Company';
-$wb["strasse_txt"] = 'Street';
-$wb["ort_txt"] = 'City';
-$wb["plz_txt"] = 'ZIP';
-$wb["land_txt"] = 'Country';
-$wb["email_txt"] = 'Email';
-$wb["url_txt"] = 'Url';
-$wb["telefon_txt"] = 'Telephone';
-$wb["fax_txt"] = 'Fax';
-$wb["groups_txt"] = 'Groups';
-$wb["default_group_txt"] = 'Default Group';
-$wb["startmodule_err"] = 'Start module is not within modules.';
-?>
+<?php
+$wb["username_txt"] = 'Username';
+$wb["username_err"] = 'The username is too long or contains invalid characters.';
+$wb["username_empty"] = 'The username is empty.';
+$wb["username_unique"] = 'There is already a user with this username.';
+$wb["passwort_txt"] = 'Password';
+$wb["password_strength_txt"] = 'Password strength';
+$wb["modules_txt"] = 'Module';
+$wb["startmodule_txt"] = 'Startmodule';
+$wb["app_theme_txt"] = 'Design';
+$wb["typ_txt"] = 'Type';
+$wb["active_txt"] = 'Active';
+$wb["language_txt"] = 'Language';
+$wb["name_txt"] = 'Name';
+$wb["vorname_txt"] = 'Forename';
+$wb["unternehmen_txt"] = 'Company';
+$wb["strasse_txt"] = 'Street';
+$wb["ort_txt"] = 'City';
+$wb["plz_txt"] = 'ZIP';
+$wb["land_txt"] = 'Country';
+$wb["email_txt"] = 'Email';
+$wb["url_txt"] = 'Url';
+$wb["telefon_txt"] = 'Telephone';
+$wb["fax_txt"] = 'Fax';
+$wb["groups_txt"] = 'Groups';
+$wb["default_group_txt"] = 'Default Group';
+$wb["startmodule_err"] = 'Start module is not within modules.';
+?>
diff --git a/interface/web/admin/templates/firewall_edit.htm b/interface/web/admin/templates/firewall_edit.htm
index 554f7d0a0c..4c59b55764 100644
--- a/interface/web/admin/templates/firewall_edit.htm
+++ b/interface/web/admin/templates/firewall_edit.htm
@@ -1,38 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_firewall">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="tcp_port">{tmpl_var name='tcp_port_txt'}</label>
-        <input name="tcp_port" id="tcp_port" value="{tmpl_var name='tcp_port'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="udp_port">{tmpl_var name='udp_port_txt'}</label>
-        <input name="udp_port" id="udp_port" value="{tmpl_var name='udp_port'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/firewall_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/firewall_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_firewall">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="tcp_port">{tmpl_var name='tcp_port_txt'}</label>
+        <input name="tcp_port" id="tcp_port" value="{tmpl_var name='tcp_port'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="udp_port">{tmpl_var name='udp_port_txt'}</label>
+        <input name="udp_port" id="udp_port" value="{tmpl_var name='udp_port'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/firewall_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/firewall_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/groups_edit.htm b/interface/web/admin/templates/groups_edit.htm
index 6a3434714f..34f1d81efb 100644
--- a/interface/web/admin/templates/groups_edit.htm
+++ b/interface/web/admin/templates/groups_edit.htm
@@ -1,26 +1,26 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_groups">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="name">{tmpl_var name='name_txt'}</label>
-        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="description">{tmpl_var name='description_txt'}</label>
-        <textarea name="description" id="description" rows='5' cols='30'>{tmpl_var name='description'}</textarea>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/groups_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/groups_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_groups">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="name">{tmpl_var name='name_txt'}</label>
+        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="description">{tmpl_var name='description_txt'}</label>
+        <textarea name="description" id="description" rows='5' cols='30'>{tmpl_var name='description'}</textarea>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/groups_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/groups_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/language_add.htm b/interface/web/admin/templates/language_add.htm
index b0ebde4ff7..e395c6918c 100644
--- a/interface/web/admin/templates/language_add.htm
+++ b/interface/web/admin/templates/language_add.htm
@@ -1,32 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_language_add">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Language Add</legend>
-      <div class="ctrlHolder">
-      	<label for="lng_select">{tmpl_var name='language_select_txt'}</label>
-        <select name="lng_select" id="language" class="selectInput withicons">
-					{tmpl_var name='language_option'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="lng_new">{tmpl_var name='language_new_txt'}</label>
-        <input name="lng_new" id="lng_new" value="" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-        <p class="formHint">{tmpl_var name='language_new_hint_txt'}</p>
-			</div>
-    
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_add.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-	
-	</fieldset>
-	
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_language_add">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Language Add</legend>
+      <div class="ctrlHolder">
+      	<label for="lng_select">{tmpl_var name='language_select_txt'}</label>
+        <select name="lng_select" id="language" class="selectInput withicons">
+					{tmpl_var name='language_option'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="lng_new">{tmpl_var name='language_new_txt'}</label>
+        <input name="lng_new" id="lng_new" value="" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+        <p class="formHint">{tmpl_var name='language_new_hint_txt'}</p>
+			</div>
+    
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_add.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+	
+	</fieldset>
+	
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/language_edit.htm b/interface/web/admin/templates/language_edit.htm
index 1e5d306bb8..75376dfaa7 100644
--- a/interface/web/admin/templates/language_edit.htm
+++ b/interface/web/admin/templates/language_edit.htm
@@ -1,32 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_language_edit">
-  
-  <div class="pnl_formsarea">
-    <fieldset id="wf_area_language_edit"><legend>Language File Edit: {tmpl_var name="file_path"}</legend>
-      <span class="wf_oneField">
-        <tmpl_loop name="records">
-        <span class="wf_oneField">
-          <label for="records[{tmpl_var name="key"}]" class="wf_preField">{tmpl_var name="key"}</label>
-          <input type="text" id="records[{tmpl_var name="key"}]" name="records[{tmpl_var name="key"}]" value="{tmpl_var name='val'}" size="50" maxlength="255">
-        </span> 
-        </tmpl_loop>
-      </span>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input type="hidden" name="lang" value="{tmpl_var name='lang'}">
-    <input type="hidden" name="lang_file" value="{tmpl_var name='lang_file'}">
-    <input type="hidden" name="module" value="{tmpl_var name='module'}">
-
-    <div class="wf_actions buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php?lng_select={tmpl_var name='lang'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-	
-	
-	
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_language_edit">
+  
+  <div class="pnl_formsarea">
+    <fieldset id="wf_area_language_edit"><legend>Language File Edit: {tmpl_var name="file_path"}</legend>
+      <span class="wf_oneField">
+        <tmpl_loop name="records">
+        <span class="wf_oneField">
+          <label for="records[{tmpl_var name="key"}]" class="wf_preField">{tmpl_var name="key"}</label>
+          <input type="text" id="records[{tmpl_var name="key"}]" name="records[{tmpl_var name="key"}]" value="{tmpl_var name='val'}" size="50" maxlength="255">
+        </span> 
+        </tmpl_loop>
+      </span>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input type="hidden" name="lang" value="{tmpl_var name='lang'}">
+    <input type="hidden" name="lang_file" value="{tmpl_var name='lang_file'}">
+    <input type="hidden" name="module" value="{tmpl_var name='module'}">
+
+    <div class="wf_actions buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php?lng_select={tmpl_var name='lang'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+	
+	
+	
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/language_list.htm b/interface/web/admin/templates/language_list.htm
index 4c8fb0c312..1c05fd3878 100644
--- a/interface/web/admin/templates/language_list.htm
+++ b/interface/web/admin/templates/language_list.htm
@@ -1,47 +1,47 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_language_groups">
-
-  <div class="pnl_toolsarea">
-    <fieldset class="inlineLabels"><legend>Tools</legend>
-      <div class="buttons">
-	      <div class="ctrlHolder">
-	      	<label for="lng_select">{tmpl_var name='language_select_txt'}</label>
-	        <select name="lng_select" id="language" class="selectInput withicons" onChange="submitForm('pageForm','admin/language_list.php');">
-						{tmpl_var name='language_option'}
-					</select>
-	      </div>
-      </div>
-    </fieldset>
-  </div>
-  
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
-          <tr>
-            <th class="tbl_col_module" scope="col"><tmpl_var name="module_txt"></th>
-            <th class="tbl_col_lang_file" scope="col"><tmpl_var name="lang_file_txt"></th>
-            <th scope="col"><tmpl_var name="lang_file_date_txt"></th>
-          </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_module"><a href="#" onClick="loadContent('admin/language_edit.php?lang_file={tmpl_var name="lang_file"}&module={tmpl_var name="module"}&lang={tmpl_var name="lang"}');">{tmpl_var name="module"}</a></td>
-            <td class="tbl_col_lang_file"><a href="#" onClick="loadContent('admin/language_edit.php?lang_file={tmpl_var name="lang_file"}&module={tmpl_var name="module"}&lang={tmpl_var name="lang"}');">{tmpl_var name="lang_file"}</a></td>
-            <td><a href="#" onClick="loadContent('admin/language_edit.php?lang_file={tmpl_var name="lang_file"}&module={tmpl_var name="module"}&lang={tmpl_var name="lang"}');">{tmpl_var name="lang_file_date"}</a></td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_language_groups">
+
+  <div class="pnl_toolsarea">
+    <fieldset class="inlineLabels"><legend>Tools</legend>
+      <div class="buttons">
+	      <div class="ctrlHolder">
+	      	<label for="lng_select">{tmpl_var name='language_select_txt'}</label>
+	        <select name="lng_select" id="language" class="selectInput withicons" onChange="submitForm('pageForm','admin/language_list.php');">
+						{tmpl_var name='language_option'}
+					</select>
+	      </div>
+      </div>
+    </fieldset>
+  </div>
+  
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_module" scope="col"><tmpl_var name="module_txt"></th>
+            <th class="tbl_col_lang_file" scope="col"><tmpl_var name="lang_file_txt"></th>
+            <th scope="col"><tmpl_var name="lang_file_date_txt"></th>
+          </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_module"><a href="#" onClick="loadContent('admin/language_edit.php?lang_file={tmpl_var name="lang_file"}&module={tmpl_var name="module"}&lang={tmpl_var name="lang"}');">{tmpl_var name="module"}</a></td>
+            <td class="tbl_col_lang_file"><a href="#" onClick="loadContent('admin/language_edit.php?lang_file={tmpl_var name="lang_file"}&module={tmpl_var name="module"}&lang={tmpl_var name="lang"}');">{tmpl_var name="lang_file"}</a></td>
+            <td><a href="#" onClick="loadContent('admin/language_edit.php?lang_file={tmpl_var name="lang_file"}&module={tmpl_var name="module"}&lang={tmpl_var name="lang"}');">{tmpl_var name="lang_file_date"}</a></td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/remote_action_ispcupdate.htm b/interface/web/admin/templates/remote_action_ispcupdate.htm
index 8726622240..156949a21a 100644
--- a/interface/web/admin/templates/remote_action_ispcupdate.htm
+++ b/interface/web/admin/templates/remote_action_ispcupdate.htm
@@ -1,25 +1,25 @@
-<h2><tmpl_var name="do_ispcupdate_caption"></h2>
-<p><tmpl_var name="do_ispcupdate_desc"></p>
-
-<div class="panel panel_language_add">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>{tmpl_var name='do_ispcupdate_caption'}</legend>
-      <div class="ctrlHolder">
-      	<label for="server_select">{tmpl_var name='select_server_txt'}</label>
-        <select name="server_select" id="server" class="selectInput" onchange="document.getElementById('OKMsg').style.visibility = 'hidden'; ">
-					{tmpl_var name='server_option'}
-				</select>
-      </div>
-    </fieldset>
-
-	<tmpl_if name="msg">
-	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
-  </tmpl_if>
-
-	  <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_do_txt'}" onClick="submitForm('pageForm','admin/remote_action_ispcupdate.php');"><span>{tmpl_var name='btn_do_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="do_ispcupdate_caption"></h2>
+<p><tmpl_var name="do_ispcupdate_desc"></p>
+
+<div class="panel panel_language_add">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>{tmpl_var name='do_ispcupdate_caption'}</legend>
+      <div class="ctrlHolder">
+      	<label for="server_select">{tmpl_var name='select_server_txt'}</label>
+        <select name="server_select" id="server" class="selectInput" onchange="document.getElementById('OKMsg').style.visibility = 'hidden'; ">
+					{tmpl_var name='server_option'}
+				</select>
+      </div>
+    </fieldset>
+
+	<tmpl_if name="msg">
+	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+  </tmpl_if>
+
+	  <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_do_txt'}" onClick="submitForm('pageForm','admin/remote_action_ispcupdate.php');"><span>{tmpl_var name='btn_do_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/remote_action_osupdate.htm b/interface/web/admin/templates/remote_action_osupdate.htm
index 27dc8e9c85..4e2ac5a56e 100644
--- a/interface/web/admin/templates/remote_action_osupdate.htm
+++ b/interface/web/admin/templates/remote_action_osupdate.htm
@@ -1,25 +1,25 @@
-<h2><tmpl_var name="do_osupdate_caption"></h2>
-<p><tmpl_var name="do_osupdate_desc"></p>
-
-<div class="panel panel_language_add">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>{tmpl_var name='do_osupdate_caption'}</legend>
-      <div class="ctrlHolder">
-      	<label for="server_select">{tmpl_var name='select_server_txt'}</label>
-        <select name="server_select" id="server" class="selectInput" onchange="document.getElementById('OKMsg').style.visibility = 'hidden'; ">
-					{tmpl_var name='server_option'}
-				</select>
-      </div>
-    </fieldset>
-
-	<tmpl_if name="msg">
-	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
-  </tmpl_if>
-
-	  <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_do_txt'}" onClick="submitForm('pageForm','admin/remote_action_osupdate.php');"><span>{tmpl_var name='btn_do_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="do_osupdate_caption"></h2>
+<p><tmpl_var name="do_osupdate_desc"></p>
+
+<div class="panel panel_language_add">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>{tmpl_var name='do_osupdate_caption'}</legend>
+      <div class="ctrlHolder">
+      	<label for="server_select">{tmpl_var name='select_server_txt'}</label>
+        <select name="server_select" id="server" class="selectInput" onchange="document.getElementById('OKMsg').style.visibility = 'hidden'; ">
+					{tmpl_var name='server_option'}
+				</select>
+      </div>
+    </fieldset>
+
+	<tmpl_if name="msg">
+	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+  </tmpl_if>
+
+	  <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_do_txt'}" onClick="submitForm('pageForm','admin/remote_action_osupdate.php');"><span>{tmpl_var name='btn_do_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_config_cron_edit.htm b/interface/web/admin/templates/server_config_cron_edit.htm
index 066693ed83..c378938c43 100644
--- a/interface/web/admin/templates/server_config_cron_edit.htm
+++ b/interface/web/admin/templates/server_config_cron_edit.htm
@@ -1,30 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server_config">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-        <label for="init_script">{tmpl_var name='init_script_txt'}</label>
-        <input name="init_script" id="init_script" value="{tmpl_var name='init_script'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-      <div class="ctrlHolder">
-        <label for="crontab_dir">{tmpl_var name='crontab_dir_txt'}</label>
-        <input name="crontab_dir" id="crontab_dir" value="{tmpl_var name='crontab_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-      <div class="ctrlHolder">
-        <label for="wget">{tmpl_var name='wget_txt'}</label>
-        <input name="wget" id="wget" value="{tmpl_var name='wget'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server_config">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+        <label for="init_script">{tmpl_var name='init_script_txt'}</label>
+        <input name="init_script" id="init_script" value="{tmpl_var name='init_script'}" size="40" maxlength="255" type="text" class="textInput" />
+            </div>
+      <div class="ctrlHolder">
+        <label for="crontab_dir">{tmpl_var name='crontab_dir_txt'}</label>
+        <input name="crontab_dir" id="crontab_dir" value="{tmpl_var name='crontab_dir'}" size="40" maxlength="255" type="text" class="textInput" />
+            </div>
+      <div class="ctrlHolder">
+        <label for="wget">{tmpl_var name='wget_txt'}</label>
+        <input name="wget" id="wget" value="{tmpl_var name='wget'}" size="40" maxlength="255" type="text" class="textInput" />
+            </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_config_fastcgi_edit.htm b/interface/web/admin/templates/server_config_fastcgi_edit.htm
index 8551d87abb..6e1bfea336 100644
--- a/interface/web/admin/templates/server_config_fastcgi_edit.htm
+++ b/interface/web/admin/templates/server_config_fastcgi_edit.htm
@@ -1,46 +1,46 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server_config">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="fastcgi_starter_path">{tmpl_var name='fastcgi_starter_path_txt'}</label>
-        <input name="fastcgi_starter_path" id="fastcgi_starter_path" value="{tmpl_var name='fastcgi_starter_path'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fastcgi_starter_script">{tmpl_var name='fastcgi_starter_script_txt'}</label>
-        <input name="fastcgi_starter_script" id="fastcgi_starter_script" value="{tmpl_var name='fastcgi_starter_script'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fastcgi_alias">{tmpl_var name='fastcgi_alias_txt'}</label>
-        <input name="fastcgi_alias" id="fastcgi_alias" value="{tmpl_var name='fastcgi_alias'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fastcgi_phpini_path">{tmpl_var name='fastcgi_phpini_path_txt'}</label>
-        <input name="fastcgi_phpini_path" id="fastcgi_phpini_path" value="{tmpl_var name='fastcgi_phpini_path'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fastcgi_children">{tmpl_var name='fastcgi_children_txt'}</label>
-        <input name="fastcgi_children" id="fastcgi_children" value="{tmpl_var name='fastcgi_children'}" size="40" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fastcgi_max_requests">{tmpl_var name='fastcgi_max_requests_txt'}</label>
-        <input name="fastcgi_max_requests" id="fastcgi_max_requests" value="{tmpl_var name='fastcgi_max_requests'}" size="40" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fastcgi_bin">{tmpl_var name='fastcgi_bin_txt'}</label>
-        <input name="fastcgi_bin" id="fastcgi_bin" value="{tmpl_var name='fastcgi_bin'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server_config">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="fastcgi_starter_path">{tmpl_var name='fastcgi_starter_path_txt'}</label>
+        <input name="fastcgi_starter_path" id="fastcgi_starter_path" value="{tmpl_var name='fastcgi_starter_path'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fastcgi_starter_script">{tmpl_var name='fastcgi_starter_script_txt'}</label>
+        <input name="fastcgi_starter_script" id="fastcgi_starter_script" value="{tmpl_var name='fastcgi_starter_script'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fastcgi_alias">{tmpl_var name='fastcgi_alias_txt'}</label>
+        <input name="fastcgi_alias" id="fastcgi_alias" value="{tmpl_var name='fastcgi_alias'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fastcgi_phpini_path">{tmpl_var name='fastcgi_phpini_path_txt'}</label>
+        <input name="fastcgi_phpini_path" id="fastcgi_phpini_path" value="{tmpl_var name='fastcgi_phpini_path'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fastcgi_children">{tmpl_var name='fastcgi_children_txt'}</label>
+        <input name="fastcgi_children" id="fastcgi_children" value="{tmpl_var name='fastcgi_children'}" size="40" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fastcgi_max_requests">{tmpl_var name='fastcgi_max_requests_txt'}</label>
+        <input name="fastcgi_max_requests" id="fastcgi_max_requests" value="{tmpl_var name='fastcgi_max_requests'}" size="40" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fastcgi_bin">{tmpl_var name='fastcgi_bin_txt'}</label>
+        <input name="fastcgi_bin" id="fastcgi_bin" value="{tmpl_var name='fastcgi_bin'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_config_getmail_edit.htm b/interface/web/admin/templates/server_config_getmail_edit.htm
index fc86eb4cad..e8112cce44 100644
--- a/interface/web/admin/templates/server_config_getmail_edit.htm
+++ b/interface/web/admin/templates/server_config_getmail_edit.htm
@@ -1,22 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server_config">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="getmail_config_dir">{tmpl_var name='getmail_config_dir_txt'}</label>
-        <input name="getmail_config_dir" id="getmail_config_dir" value="{tmpl_var name='getmail_config_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server_config">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="getmail_config_dir">{tmpl_var name='getmail_config_dir_txt'}</label>
+        <input name="getmail_config_dir" id="getmail_config_dir" value="{tmpl_var name='getmail_config_dir'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_config_jailkit_edit.htm b/interface/web/admin/templates/server_config_jailkit_edit.htm
index 320fb87542..2dd603539a 100644
--- a/interface/web/admin/templates/server_config_jailkit_edit.htm
+++ b/interface/web/admin/templates/server_config_jailkit_edit.htm
@@ -1,34 +1,34 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server_config">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="jailkit_chroot_home">{tmpl_var name='jailkit_chroot_home_txt'}</label>
-        <input name="jailkit_chroot_home" id="jailkit_chroot_home" value="{tmpl_var name='jailkit_chroot_home'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="jailkit_chroot_app_sections">{tmpl_var name='jailkit_chroot_app_sections_txt'}</label>
-        <input name="jailkit_chroot_app_sections" id="jailkit_chroot_app_sections" value="{tmpl_var name='jailkit_chroot_app_sections'}" size="40" maxlength="1000" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="jailkit_chroot_app_programs">{tmpl_var name='jailkit_chroot_app_programs_txt'}</label>
-        <input name="jailkit_chroot_app_programs" id="jailkit_chroot_app_programs" value="{tmpl_var name='jailkit_chroot_app_programs'}" size="40" maxlength="1000" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-        <label for="jailkit_chroot_cron_programs">{tmpl_var name='jailkit_chroot_cron_programs_txt'}</label>
-        <input name="jailkit_chroot_cron_programs" id="jailkit_chroot_cron_programs" value="{tmpl_var name='jailkit_chroot_cron_programs'}" size="40" maxlength="1000" type="text" class="textInput" />
-            </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server_config">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="jailkit_chroot_home">{tmpl_var name='jailkit_chroot_home_txt'}</label>
+        <input name="jailkit_chroot_home" id="jailkit_chroot_home" value="{tmpl_var name='jailkit_chroot_home'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="jailkit_chroot_app_sections">{tmpl_var name='jailkit_chroot_app_sections_txt'}</label>
+        <input name="jailkit_chroot_app_sections" id="jailkit_chroot_app_sections" value="{tmpl_var name='jailkit_chroot_app_sections'}" size="40" maxlength="1000" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="jailkit_chroot_app_programs">{tmpl_var name='jailkit_chroot_app_programs_txt'}</label>
+        <input name="jailkit_chroot_app_programs" id="jailkit_chroot_app_programs" value="{tmpl_var name='jailkit_chroot_app_programs'}" size="40" maxlength="1000" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+        <label for="jailkit_chroot_cron_programs">{tmpl_var name='jailkit_chroot_cron_programs_txt'}</label>
+        <input name="jailkit_chroot_cron_programs" id="jailkit_chroot_cron_programs" value="{tmpl_var name='jailkit_chroot_cron_programs'}" size="40" maxlength="1000" type="text" class="textInput" />
+            </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_config_vlogger_edit.htm b/interface/web/admin/templates/server_config_vlogger_edit.htm
index bf6a82ab31..f468faec72 100644
--- a/interface/web/admin/templates/server_config_vlogger_edit.htm
+++ b/interface/web/admin/templates/server_config_vlogger_edit.htm
@@ -1,22 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server_config">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="config_dir">{tmpl_var name='config_dir_txt'}</label>
-        <input name="config_dir" id="config_dir" value="{tmpl_var name='config_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server_config">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="config_dir">{tmpl_var name='config_dir_txt'}</label>
+        <input name="config_dir" id="config_dir" value="{tmpl_var name='config_dir'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_edit_config.htm b/interface/web/admin/templates/server_edit_config.htm
index 02f6ef34d3..31208dc3ed 100644
--- a/interface/web/admin/templates/server_edit_config.htm
+++ b/interface/web/admin/templates/server_edit_config.htm
@@ -1,22 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="config">{tmpl_var name='config_txt'}</label>
-        <textarea name="config" id="config" rows='20' cols='40'>{tmpl_var name='config'}</textarea>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="config">{tmpl_var name='config_txt'}</label>
+        <textarea name="config" id="config" rows='20' cols='40'>{tmpl_var name='config'}</textarea>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/server_ip_edit.htm b/interface/web/admin/templates/server_ip_edit.htm
index 1ebe8bd91a..87e3d4bb77 100644
--- a/interface/web/admin/templates/server_ip_edit.htm
+++ b/interface/web/admin/templates/server_ip_edit.htm
@@ -1,34 +1,34 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_server_ip">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="ip_address">{tmpl_var name='ip_address_txt'}</label>
-        <input name="ip_address" id="ip_address" value="{tmpl_var name='ip_address'}" size="15" maxlength="15" type="text" class="textInput formLengthIPv4" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='virtualhost_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='virtualhost'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_ip_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_ip_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_server_ip">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="ip_address">{tmpl_var name='ip_address_txt'}</label>
+        <input name="ip_address" id="ip_address" value="{tmpl_var name='ip_address'}" size="15" maxlength="15" type="text" class="textInput formLengthIPv4" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='virtualhost_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='virtualhost'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_ip_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_ip_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/software_package_install.htm b/interface/web/admin/templates/software_package_install.htm
index d034de77d1..fddda4f2de 100644
--- a/interface/web/admin/templates/software_package_install.htm
+++ b/interface/web/admin/templates/software_package_install.htm
@@ -1,30 +1,30 @@
-<h2><tmpl_var name="head_txt"></h2>
-<p><tmpl_var name="desc_txt"></p>
-
-<div class="panel panel_software_repo">
-<tmpl_if name="message_err">
-<div id="errorMsg"><tmpl_var name="message_err"></div>
-</tmpl_if>
-<tmpl_if name="message_ok">
-<div id="OKMsg"><tmpl_var name="message_ok"></div>
-</tmpl_if>
-<tmpl_if name="insert_key">
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <p>&nbsp;</p>
-	  <div class="ctrlHolder">
-      	<label for="install_key">{tmpl_var name='install_key_txt'}</label>
-        <input name="install_key" id="install_key" value="{tmpl_var name='install_key'}" size="40" maxlength="40" type="text" class="textInput" />
-	  </div>
-
-    <input type="hidden" name="package" value="{tmpl_var name='package_name'}">
-	<input type="hidden" name="server_id" value="{tmpl_var name='server_id'}">
-	<p>&nbsp;</p>
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/software_package_install.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/software_package_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-	</fieldset>
-  </div>
-</tmpl_if>
+<h2><tmpl_var name="head_txt"></h2>
+<p><tmpl_var name="desc_txt"></p>
+
+<div class="panel panel_software_repo">
+<tmpl_if name="message_err">
+<div id="errorMsg"><tmpl_var name="message_err"></div>
+</tmpl_if>
+<tmpl_if name="message_ok">
+<div id="OKMsg"><tmpl_var name="message_ok"></div>
+</tmpl_if>
+<tmpl_if name="insert_key">
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <p>&nbsp;</p>
+	  <div class="ctrlHolder">
+      	<label for="install_key">{tmpl_var name='install_key_txt'}</label>
+        <input name="install_key" id="install_key" value="{tmpl_var name='install_key'}" size="40" maxlength="40" type="text" class="textInput" />
+	  </div>
+
+    <input type="hidden" name="package" value="{tmpl_var name='package_name'}">
+	<input type="hidden" name="server_id" value="{tmpl_var name='server_id'}">
+	<p>&nbsp;</p>
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/software_package_install.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/software_package_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+	</fieldset>
+  </div>
+</tmpl_if>
 </div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/software_package_list.htm b/interface/web/admin/templates/software_package_list.htm
index 2c16c583da..7a94318fd5 100644
--- a/interface/web/admin/templates/software_package_list.htm
+++ b/interface/web/admin/templates/software_package_list.htm
@@ -1,46 +1,46 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_list_package">
-
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-        <button class="iconstxt icoAdd" type="button" onClick="loadContent('admin/software_package_list.php?action=repoupdate');">
-				<span>{tmpl_var name="repoupdate_txt"}</span>
-			</button>
-      </div>
-    </fieldset>
-  </div>
-
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
-          <tr>
-            <th class="tbl_col_installed" scope="col"><tmpl_var name="installed_txt"></th>
-            <th class="tbl_col_package_title" scope="col"><tmpl_var name="package_title_txt"></th>
-            <th class="tbl_col_package_description" scope="col"><tmpl_var name="package_description_txt"></th>
-			<th class="tbl_col_package_description" scope="col"><tmpl_var name="package_id_txt"></th>
-          </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_installed">{tmpl_var name="installed"}</td>
-            <td class="tbl_col_package_title">{tmpl_var name="package_title"}</td>
-            <td class="tbl_col_package_description">{tmpl_var name="package_description"}</td>
-			<td class="tbl_col_package_description">ispapp{tmpl_var name="package_id"}</td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="4"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_package">
+
+  <div class="pnl_toolsarea">
+    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+      <div class="buttons">
+        <button class="iconstxt icoAdd" type="button" onClick="loadContent('admin/software_package_list.php?action=repoupdate');">
+				<span>{tmpl_var name="repoupdate_txt"}</span>
+			</button>
+      </div>
+    </fieldset>
+  </div>
+
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_installed" scope="col"><tmpl_var name="installed_txt"></th>
+            <th class="tbl_col_package_title" scope="col"><tmpl_var name="package_title_txt"></th>
+            <th class="tbl_col_package_description" scope="col"><tmpl_var name="package_description_txt"></th>
+			<th class="tbl_col_package_description" scope="col"><tmpl_var name="package_id_txt"></th>
+          </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_installed">{tmpl_var name="installed"}</td>
+            <td class="tbl_col_package_title">{tmpl_var name="package_title"}</td>
+            <td class="tbl_col_package_description">{tmpl_var name="package_description"}</td>
+			<td class="tbl_col_package_description">ispapp{tmpl_var name="package_id"}</td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="4"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/software_repo_edit.htm b/interface/web/admin/templates/software_repo_edit.htm
index af335ecf5c..31b5db05c5 100644
--- a/interface/web/admin/templates/software_repo_edit.htm
+++ b/interface/web/admin/templates/software_repo_edit.htm
@@ -1,40 +1,40 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_software_repo">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="repo_name">{tmpl_var name='repo_name_txt'}</label>
-        <input name="repo_name" id="repo_name" value="{tmpl_var name='repo_name'}" size="40" maxlength="40" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="repo_url">{tmpl_var name='repo_url_txt'}</label>
-        <input name="repo_url" id="repo_url" value="{tmpl_var name='repo_url'}" size="40" maxlength="40" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="repo_username">{tmpl_var name='repo_username_txt'}</label>
-        <input name="repo_username" id="repo_username" value="{tmpl_var name='repo_username'}" size="30" maxlength="30" type="text" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="repo_password">{tmpl_var name='repo_password_txt'}</label>
-        <input name="repo_password" id="repo_password" value="{tmpl_var name='repo_password'}" size="30" maxlength="30" type="password" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/software_repo_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/software_repo_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_software_repo">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="repo_name">{tmpl_var name='repo_name_txt'}</label>
+        <input name="repo_name" id="repo_name" value="{tmpl_var name='repo_name'}" size="40" maxlength="40" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="repo_url">{tmpl_var name='repo_url_txt'}</label>
+        <input name="repo_url" id="repo_url" value="{tmpl_var name='repo_url'}" size="40" maxlength="40" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="repo_username">{tmpl_var name='repo_username_txt'}</label>
+        <input name="repo_username" id="repo_username" value="{tmpl_var name='repo_username'}" size="30" maxlength="30" type="text" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="repo_password">{tmpl_var name='repo_password_txt'}</label>
+        <input name="repo_password" id="repo_password" value="{tmpl_var name='repo_password'}" size="30" maxlength="30" type="password" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/software_repo_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/software_repo_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/software_update_list.htm b/interface/web/admin/templates/software_update_list.htm
index db2b03631d..d707fc9ba9 100644
--- a/interface/web/admin/templates/software_update_list.htm
+++ b/interface/web/admin/templates/software_update_list.htm
@@ -1,49 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_list_software_update">
-
-  <div class="pnl_toolsarea">
-    <fieldset class="inlineLabels"><legend>Tools</legend>
-      <div class="buttons">
-	      <div class="ctrlHolder">
-			<label for="server_id">{tmpl_var name='server_select_txt'}</label>
-	        <select name="server_id" id="server_id" class="selectInput" onChange="submitForm('pageForm','admin/software_update_list.php');">
-	        <tmpl_loop name="servers">
-	          <option value="{tmpl_var name='server_id'}" {tmpl_var name='selected'}>{tmpl_var name='server_name'}</option>
-	        </tmpl_loop>
-					</select>
-	      </div>
-      </div>
-    </fieldset>
-  </div>
-  
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
-          <tr>
-            <th class="tbl_col_installed" scope="col"><tmpl_var name="installed_txt"></th>
-            <th class="tbl_col_update_title" scope="col"><tmpl_var name="update_title_txt"></th>
-            <th class="tbl_col_version" scope="col"><tmpl_var name="version_txt"></th>
-          </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_installed">{tmpl_var name="installed"}</td>
-            <td class="tbl_col_update_title">{tmpl_var name="update_title"}</td>
-            <td class="tbl_col_version">{tmpl_var name="version"}</td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="3"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_software_update">
+
+  <div class="pnl_toolsarea">
+    <fieldset class="inlineLabels"><legend>Tools</legend>
+      <div class="buttons">
+	      <div class="ctrlHolder">
+			<label for="server_id">{tmpl_var name='server_select_txt'}</label>
+	        <select name="server_id" id="server_id" class="selectInput" onChange="submitForm('pageForm','admin/software_update_list.php');">
+	        <tmpl_loop name="servers">
+	          <option value="{tmpl_var name='server_id'}" {tmpl_var name='selected'}>{tmpl_var name='server_name'}</option>
+	        </tmpl_loop>
+					</select>
+	      </div>
+      </div>
+    </fieldset>
+  </div>
+  
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_installed" scope="col"><tmpl_var name="installed_txt"></th>
+            <th class="tbl_col_update_title" scope="col"><tmpl_var name="update_title_txt"></th>
+            <th class="tbl_col_version" scope="col"><tmpl_var name="version_txt"></th>
+          </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_installed">{tmpl_var name="installed"}</td>
+            <td class="tbl_col_update_title">{tmpl_var name="update_title"}</td>
+            <td class="tbl_col_version">{tmpl_var name="version"}</td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="3"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/users_groups_edit.htm b/interface/web/admin/templates/users_groups_edit.htm
index 004c7dbd6e..0a1a9797f0 100644
--- a/interface/web/admin/templates/users_groups_edit.htm
+++ b/interface/web/admin/templates/users_groups_edit.htm
@@ -1,30 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_users">
-	
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="default_group">{tmpl_var name='default_group_txt'}</label>
-        <select name="default_group" id="default_group" class="selectInput">
-					{tmpl_var name='default_group'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='groups_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='groups'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/users_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_users">
+	
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="default_group">{tmpl_var name='default_group_txt'}</label>
+        <select name="default_group" id="default_group" class="selectInput">
+					{tmpl_var name='default_group'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='groups_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='groups'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/users_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/admin/templates/users_user_edit.htm b/interface/web/admin/templates/users_user_edit.htm
index ce0017823f..f16e9ebf35 100644
--- a/interface/web/admin/templates/users_user_edit.htm
+++ b/interface/web/admin/templates/users_user_edit.htm
@@ -1,67 +1,67 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_users">
-	
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="username">{tmpl_var name='username_txt'}</label>
-        <input name="username" id="username" value="{tmpl_var name='username'}" size="15" maxlength="30" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="passwort">{tmpl_var name='passwort_txt'}</label>
-        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput"  onkeyup="pass_check(this.value)"/>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='modules_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='modules'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="startmodule">{tmpl_var name='startmodule_txt'}</label>
-        <select name="startmodule" id="startmodule" class="selectInput formLengthHalf">
-					{tmpl_var name='startmodule'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='app_theme_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='app_theme'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='typ_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='typ'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="language">{tmpl_var name='language_txt'}</label>
-        <select name="language" id="language" class="selectInput withicons">
-					{tmpl_var name='language'}
-				</select>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/users_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_users">
+	
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="username">{tmpl_var name='username_txt'}</label>
+        <input name="username" id="username" value="{tmpl_var name='username'}" size="15" maxlength="30" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="passwort">{tmpl_var name='passwort_txt'}</label>
+        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput"  onkeyup="pass_check(this.value)"/>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='modules_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='modules'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="startmodule">{tmpl_var name='startmodule_txt'}</label>
+        <select name="startmodule" id="startmodule" class="selectInput formLengthHalf">
+					{tmpl_var name='startmodule'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='app_theme_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='app_theme'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='typ_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='typ'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="language">{tmpl_var name='language_txt'}</label>
+        <select name="language" id="language" class="selectInput withicons">
+					{tmpl_var name='language'}
+				</select>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/users_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/capp.php b/interface/web/capp.php
index 354652ce37..02f5c7faed 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -1,56 +1,56 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-require_once('../lib/config.inc.php');
-require_once('../lib/app.inc.php');
-
-// importiere Modul
-$mod = $_REQUEST["mod"];
-
-// Checke ob User eingeloggt
-if($_SESSION["s"]["user"]['active'] != 1) {
-	header("Location: index.php?phpsessid=".$_SESSION["s"]["id"]);
-	die();
-}
-
-// checke ob User Modul verwenden darf
-$user_modules = explode(",",$_SESSION["s"]["user"]["modules"]);
-
-if(!in_array($mod,$user_modules)) $app->error($app->lng(301));
-
-// lade Moduldaten in Session
-if(is_file($mod."/lib/module.conf.php")) {
-	include_once($mod."/lib/module.conf.php");
-	$_SESSION["s"]["module"] = $module;
-	echo "HEADER_REDIRECT:".$_SESSION["s"]["module"]["startpage"];
-} else {
-	$app->error($app->lng(302));
-}
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+require_once('../lib/config.inc.php');
+require_once('../lib/app.inc.php');
+
+// importiere Modul
+$mod = $_REQUEST["mod"];
+
+// Checke ob User eingeloggt
+if($_SESSION["s"]["user"]['active'] != 1) {
+	header("Location: index.php?phpsessid=".$_SESSION["s"]["id"]);
+	die();
+}
+
+// checke ob User Modul verwenden darf
+$user_modules = explode(",",$_SESSION["s"]["user"]["modules"]);
+
+if(!in_array($mod,$user_modules)) $app->error($app->lng(301));
+
+// lade Moduldaten in Session
+if(is_file($mod."/lib/module.conf.php")) {
+	include_once($mod."/lib/module.conf.php");
+	$_SESSION["s"]["module"] = $module;
+	echo "HEADER_REDIRECT:".$_SESSION["s"]["module"]["startpage"];
+} else {
+	$app->error($app->lng(302));
+}
 ?>
\ No newline at end of file
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 61daec1759..b6a54ae99d 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -1,860 +1,860 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "Client";
-$form["description"] 	= "";
-$form["name"] 			= "client";
-$form["action"]			= "client_edit.php";
-$form["db_table"]		= "client";
-$form["db_table_idx"]	= "client_id";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "address";
-$form["list_default"]	= "client_list.php";
-$form["auth"]			= 'yes';
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
-while ($file = @readdir ($handle)) {
-    if ($file != '.' && $file != '..') {
-        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-        }
-	}
-}
-
-//* Load themes
-$themes_list = array();
-$handle = @opendir(ISPC_THEMES_PATH); 
-while ($file = @readdir ($handle)) { 
-    if (substr($file, 0, 1) != '.') {
-        if(@is_dir(ISPC_THEMES_PATH."/$file")) {
-			$themes_list[$file] = $file;
-        }
-	}
-}
-
-$form["tabs"]['address'] = array (
-	'title' 	=> "Address",
-	'width' 	=> 100,
-	'template' 	=> "templates/client_edit_address.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'company_name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'contact_name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'contact_error_empty'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'customer_no' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'username' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'username_error_empty'),
-										1 => array (	'type'	=> 'CUSTOM',
-														'class' => 'validate_client',
-														'function' => 'username_unique',
-														'errmsg'=> 'username_error_unique'),
-										2 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\w\.\-\_]{0,64}$/',
-														'errmsg'=> 'username_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'password' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'PASSWORD',
-			'encryption'=> 'CRYPT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'language' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> $conf["language"],
-			'value'		=> $language_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'usertheme' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'default',
-			'value'		=> $themes_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'street' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'zip' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'city' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'state' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'country' => array (
-			'datatype'	=> 'VARCHAR',
-
-			'formtype'	=> 'SELECT',
-			'default'	=> 'DE',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
-										'keyfield'=> 'iso',
-										'valuefield'=> 'printable_name'
-									 ),
-			'value'		=> ''
-		),
-		'telephone' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'mobile' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'fax' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'email' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'internet' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> 'http://',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'icq' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'vat_id' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'company_id' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '20',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'notes' => array (
-			'datatype'	=> 'TEXT',
-			'formtype'	=> 'TEXTAREA',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '',
-			'maxlength'	=> '',
-			'rows'		=> '10',
-			'cols'		=> '30'
-		),
-	##################################
-	# END Datatable fields
-	##################################
-	)
-);
-
-$form["tabs"]['limits'] = array (
-	'title' 	=> "Limits",
-	'width' 	=> 80,
-	'template' 	=> "templates/client_edit_limits.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'template_master' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
-										'class'=> 'custom_datasource',
-										'function'=> 'master_templates'
-									 ),
-			'value'		=> ''
-		),
-		'template_additional' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-		),
-		'default_mailserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
-										'class'=> 'custom_datasource',
-										'function'=> 'client_servers'
-									 ),
-			'value'		=> '',
-			'name'		=> 'default_mailserver'
-		),
-		'limit_maildomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_maildomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailbox' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailbox_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailalias' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailalias_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailaliasdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailaliasdomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailmailinglist' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailmailinglist_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailforward' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailforward_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailcatchall' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailcatchall_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailrouting' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailrouting_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailfilter' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailfilter_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_fetchmail' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailfetchmail_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailquota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailquota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_wblist' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_policy' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_policy_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'default_webserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
-										'class'=> 'custom_datasource',
-										'function'=> 'client_servers'
-									 ),
-			'value'		=> '',
-			'name'		=> 'default_webserver'
-		),
-		'limit_web_domain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_domain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_quota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_quota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'web_php_options' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'separator' => ',',
-			'valuelimit' => 'client:web_php_options',
-			'value'		=> array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
-		),
-		'limit_web_aliasdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_aliasdomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_subdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_subdomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_ftp_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_ftp_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_shell_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_shell_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'ssh_chroot' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'separator' => ',',
-			'valuelimit' => 'client:ssh_chroot',
-			'value'		=> array('no' => 'None', 'jailkit' => 'Jailkit')
-		),
-		'limit_webdav_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_webdav_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'default_dnsserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
-										'class'=> 'custom_datasource',
-										'function'=> 'client_servers'
-									 ),
-			'value'		=> '',
-			'name'		=> 'default_dnsserver'
-		),
-		'limit_dns_zone' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_dns_zone_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-                'limit_dns_slave_zone' => array (
-                        'datatype'      => 'INTEGER',
-                        'formtype'      => 'TEXT',
-                        'validators'    => array (      0 => array (    'type'  => 'ISINT',
-                                                                                                                'errmsg'=> 'limit_dns_slave_zone_error_notint'),
-                                                                        ),
-                        'default'       => '-1',
-                        'value'         => '',
-                        'separator'     => '',
-                        'width'         => '10',
-                        'maxlength'     => '10',
-                        'rows'          => '',
-                        'cols'          => ''
-                ),
-		'limit_dns_record' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_dns_record_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_client' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_client_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'default_dbserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
-										'class'=> 'custom_datasource',
-										'function'=> 'client_servers'
-									 ),
-			'value'		=> '',
-			'name'		=> 'default_dbserver'
-		),
-		'limit_database' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_database_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-        'limit_cron' => array (
-            'datatype'  => 'INTEGER',
-            'formtype'  => 'TEXT',
-            'validators'    => array (  0 => array (    'type'  => 'ISINT',
-                                                        'errmsg'=> 'limit_cron_error_notint'),
-                                    ),
-            'default'   => '0',
-            'value'     => '',
-            'separator' => '',
-            'width'     => '10',
-            'maxlength' => '10',
-            'rows'      => '',
-            'cols'      => ''
-        ),
-        'limit_cron_type' => array (
-            'datatype'  => 'VARCHAR',
-            'formtype'  => 'SELECT',
-            'default'   => '',
-            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
-        ),
-        'limit_cron_frequency' => array (
-            'datatype'  => 'INTEGER',
-            'formtype'  => 'TEXT',
-            'validators'    => array (  0 => array (    'type'  => 'ISINT',
-                                                        'errmsg'=> 'limit_cron_error_frequency'),
-                                    ),
-            'default'   => '-1',
-            'value'     => '',
-            'separator' => '',
-            'width'     => '10',
-            'maxlength' => '10',
-            'rows'      => '',
-            'cols'      => ''
-        ),
-		'limit_traffic_quota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_traffic_quota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-	##################################
-	# END Datatable fields
-	##################################
-	)
-);
-
-/*
-$form["tabs"]['ipaddress'] = array (
-	'title' 	=> "IP Addresses",
-	'width' 	=> 100,
-	'template' 	=> "templates/client_edit_ipaddress.htm",
-	'fields' 	=> array (
-	##################################
-	# Beginn Datatable fields
-	##################################
-		'ip_address' => array (
-			'datatype'	=> 'TEXT',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'value'		=> array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
-			'separator'	=> ';'
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-*/
-
-
-?>
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Client";
+$form["description"] 	= "";
+$form["name"] 			= "client";
+$form["action"]			= "client_edit.php";
+$form["db_table"]		= "client";
+$form["db_table_idx"]	= "client_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "address";
+$form["list_default"]	= "client_list.php";
+$form["auth"]			= 'yes';
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+//* Languages
+$language_list = array();
+$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
+while ($file = @readdir ($handle)) {
+    if ($file != '.' && $file != '..') {
+        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
+			$tmp = substr($file, 0, 2);
+			$language_list[$tmp] = $tmp;
+        }
+	}
+}
+
+//* Load themes
+$themes_list = array();
+$handle = @opendir(ISPC_THEMES_PATH); 
+while ($file = @readdir ($handle)) { 
+    if (substr($file, 0, 1) != '.') {
+        if(@is_dir(ISPC_THEMES_PATH."/$file")) {
+			$themes_list[$file] = $file;
+        }
+	}
+}
+
+$form["tabs"]['address'] = array (
+	'title' 	=> "Address",
+	'width' 	=> 100,
+	'template' 	=> "templates/client_edit_address.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'company_name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'contact_name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'contact_error_empty'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'customer_no' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'username' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'username_error_empty'),
+										1 => array (	'type'	=> 'CUSTOM',
+														'class' => 'validate_client',
+														'function' => 'username_unique',
+														'errmsg'=> 'username_error_unique'),
+										2 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\w\.\-\_]{0,64}$/',
+														'errmsg'=> 'username_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'password' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption'=> 'CRYPT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'language' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> $conf["language"],
+			'value'		=> $language_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'usertheme' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'default',
+			'value'		=> $themes_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'street' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'zip' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'city' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'state' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'country' => array (
+			'datatype'	=> 'VARCHAR',
+
+			'formtype'	=> 'SELECT',
+			'default'	=> 'DE',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
+										'keyfield'=> 'iso',
+										'valuefield'=> 'printable_name'
+									 ),
+			'value'		=> ''
+		),
+		'telephone' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'mobile' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'fax' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'email' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'internet' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> 'http://',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'icq' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'vat_id' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'company_id' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '20',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'notes' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'TEXTAREA',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '',
+			'maxlength'	=> '',
+			'rows'		=> '10',
+			'cols'		=> '30'
+		),
+	##################################
+	# END Datatable fields
+	##################################
+	)
+);
+
+$form["tabs"]['limits'] = array (
+	'title' 	=> "Limits",
+	'width' 	=> 80,
+	'template' 	=> "templates/client_edit_limits.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'template_master' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
+										'class'=> 'custom_datasource',
+										'function'=> 'master_templates'
+									 ),
+			'value'		=> ''
+		),
+		'template_additional' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+		),
+		'default_mailserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
+										'class'=> 'custom_datasource',
+										'function'=> 'client_servers'
+									 ),
+			'value'		=> '',
+			'name'		=> 'default_mailserver'
+		),
+		'limit_maildomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_maildomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailbox' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailbox_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailalias' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailalias_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailaliasdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailaliasdomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailmailinglist' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailmailinglist_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailforward' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailforward_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailcatchall' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailcatchall_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailrouting' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailrouting_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailfilter' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailfilter_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_fetchmail' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailfetchmail_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailquota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailquota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_wblist' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_policy' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_policy_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'default_webserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
+										'class'=> 'custom_datasource',
+										'function'=> 'client_servers'
+									 ),
+			'value'		=> '',
+			'name'		=> 'default_webserver'
+		),
+		'limit_web_domain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_domain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_quota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_quota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'web_php_options' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'valuelimit' => 'client:web_php_options',
+			'value'		=> array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
+		),
+		'limit_web_aliasdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_aliasdomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_subdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_subdomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_ftp_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_ftp_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_shell_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_shell_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'ssh_chroot' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'valuelimit' => 'client:ssh_chroot',
+			'value'		=> array('no' => 'None', 'jailkit' => 'Jailkit')
+		),
+		'limit_webdav_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_webdav_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'default_dnsserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
+										'class'=> 'custom_datasource',
+										'function'=> 'client_servers'
+									 ),
+			'value'		=> '',
+			'name'		=> 'default_dnsserver'
+		),
+		'limit_dns_zone' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_dns_zone_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+                'limit_dns_slave_zone' => array (
+                        'datatype'      => 'INTEGER',
+                        'formtype'      => 'TEXT',
+                        'validators'    => array (      0 => array (    'type'  => 'ISINT',
+                                                                                                                'errmsg'=> 'limit_dns_slave_zone_error_notint'),
+                                                                        ),
+                        'default'       => '-1',
+                        'value'         => '',
+                        'separator'     => '',
+                        'width'         => '10',
+                        'maxlength'     => '10',
+                        'rows'          => '',
+                        'cols'          => ''
+                ),
+		'limit_dns_record' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_dns_record_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_client' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_client_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'default_dbserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
+										'class'=> 'custom_datasource',
+										'function'=> 'client_servers'
+									 ),
+			'value'		=> '',
+			'name'		=> 'default_dbserver'
+		),
+		'limit_database' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_database_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+        'limit_cron' => array (
+            'datatype'  => 'INTEGER',
+            'formtype'  => 'TEXT',
+            'validators'    => array (  0 => array (    'type'  => 'ISINT',
+                                                        'errmsg'=> 'limit_cron_error_notint'),
+                                    ),
+            'default'   => '0',
+            'value'     => '',
+            'separator' => '',
+            'width'     => '10',
+            'maxlength' => '10',
+            'rows'      => '',
+            'cols'      => ''
+        ),
+        'limit_cron_type' => array (
+            'datatype'  => 'VARCHAR',
+            'formtype'  => 'SELECT',
+            'default'   => '',
+            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
+        ),
+        'limit_cron_frequency' => array (
+            'datatype'  => 'INTEGER',
+            'formtype'  => 'TEXT',
+            'validators'    => array (  0 => array (    'type'  => 'ISINT',
+                                                        'errmsg'=> 'limit_cron_error_frequency'),
+                                    ),
+            'default'   => '-1',
+            'value'     => '',
+            'separator' => '',
+            'width'     => '10',
+            'maxlength' => '10',
+            'rows'      => '',
+            'cols'      => ''
+        ),
+		'limit_traffic_quota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_traffic_quota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+	##################################
+	# END Datatable fields
+	##################################
+	)
+);
+
+/*
+$form["tabs"]['ipaddress'] = array (
+	'title' 	=> "IP Addresses",
+	'width' 	=> 100,
+	'template' 	=> "templates/client_edit_ipaddress.htm",
+	'fields' 	=> array (
+	##################################
+	# Beginn Datatable fields
+	##################################
+		'ip_address' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'value'		=> array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
+			'separator'	=> ';'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+*/
+
+
+?>
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index dc1627ce12..628def1a69 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -1,524 +1,524 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "Client-Templates";
-$form["description"] 	= "";
-$form["name"] 			= "client_template";
-$form["action"]			= "client_template_edit.php";
-$form["db_table"]		= "client_template";
-$form["db_table_idx"]	= "template_id";
-$form["db_history"]		= "no";
-$form["tab_default"]	= "template";
-$form["list_default"]	= "client_template_list.php";
-$form["auth"]			= 'yes';
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
-while ($file = @readdir ($handle)) {
-    if ($file != '.' && $file != '..') {
-        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-        }
-	}
-}
-
-$form["tabs"]['template'] = array (
-	'title' 	=> "Template",
-	'width' 	=> 80,
-	'template' 	=> "templates/client_template_edit_template.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'template_type' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'm',
-			'value'		=> array('m' => "Main Template",'a' => "Additional Template"),
-		),
-		'template_name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'error_template_name_empty'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-	##################################
-	# END Datatable fields
-	##################################
-	)
-);
-
-$form["tabs"]['limits'] = array (
-	'title' 	=> "Limits",
-	'width' 	=> 80,
-	'template' 	=> "templates/client_template_edit_limits.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'limit_maildomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_maildomain_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailbox' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailbox_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailalias' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailalias_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailaliasdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailaliasdomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailmailinglist' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailmailinglist_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailforward' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailforward_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailcatchall' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailcatchall_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailrouting' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailrouting_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailfilter' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailfilter_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_fetchmail' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailfetchmail_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailquota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailquota_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_wblist' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_user_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_policy' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_policy_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_domain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_domain_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_quota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_quota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_aliasdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_aliasdomain_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_subdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_subdomain_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_ftp_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_ftp_user_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_shell_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_shell_user_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_webdav_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_webdav_user_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_dns_zone' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_dns_zone_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-                'limit_dns_slave_zone' => array (
-                        'datatype'      => 'INTEGER',
-                        'formtype'      => 'TEXT',
-                        'validators'    => array (      0 => array (    'type'  => 'ISINT',
-                                                                                                                'errmsg'=> 'limit_dns_slave_zone_error_notint'),
-                                                                        ),
-                        'default'       => '0',
-                        'value'         => '',
-                        'separator'     => '',
-                        'width'         => '10',
-                        'maxlength'     => '10',
-                        'rows'          => '',
-                        'cols'          => ''
-                ),
-		'limit_dns_record' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_dns_record_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		/*
-		'limit_client' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_client_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		*/
-		'limit_database' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_database_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-        'limit_cron' => array (
-            'datatype'  => 'INTEGER',
-            'formtype'  => 'TEXT',
-            'validators'    => array (  0 => array (    'type'  => 'ISINT',
-                                                        'errmsg'=> 'limit_cron_error_notint'),
-                                    ),
-            'default'   => '0',
-            'value'     => '',
-            'separator' => '',
-            'width'     => '10',
-            'maxlength' => '10',
-            'rows'      => '',
-            'cols'      => ''
-        ),
-        'limit_cron_type' => array (
-            'datatype'  => 'VARCHAR',
-            'formtype'  => 'SELECT',
-            'default'   => '',
-            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
-        ),
-        'limit_cron_frequency' => array (
-            'datatype'  => 'INTEGER',
-            'formtype'  => 'TEXT',
-            'validators'    => array (  0 => array (    'type'  => 'ISINT',
-                                                        'errmsg'=> 'limit_cron_error_frequency'),
-                                    ),
-            'default'   => '-1',
-            'value'     => '',
-            'separator' => '',
-            'width'     => '10',
-            'maxlength' => '10',
-            'rows'      => '',
-            'cols'      => ''
-        ),
-		'limit_traffic_quota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_traffic_quota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-	##################################
-	# END Datatable fields
-	##################################
-	)
-);
-
-?>
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Client-Templates";
+$form["description"] 	= "";
+$form["name"] 			= "client_template";
+$form["action"]			= "client_template_edit.php";
+$form["db_table"]		= "client_template";
+$form["db_table_idx"]	= "template_id";
+$form["db_history"]		= "no";
+$form["tab_default"]	= "template";
+$form["list_default"]	= "client_template_list.php";
+$form["auth"]			= 'yes';
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+//* Languages
+$language_list = array();
+$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
+while ($file = @readdir ($handle)) {
+    if ($file != '.' && $file != '..') {
+        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
+			$tmp = substr($file, 0, 2);
+			$language_list[$tmp] = $tmp;
+        }
+	}
+}
+
+$form["tabs"]['template'] = array (
+	'title' 	=> "Template",
+	'width' 	=> 80,
+	'template' 	=> "templates/client_template_edit_template.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'template_type' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'm',
+			'value'		=> array('m' => "Main Template",'a' => "Additional Template"),
+		),
+		'template_name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'error_template_name_empty'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+	##################################
+	# END Datatable fields
+	##################################
+	)
+);
+
+$form["tabs"]['limits'] = array (
+	'title' 	=> "Limits",
+	'width' 	=> 80,
+	'template' 	=> "templates/client_template_edit_limits.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'limit_maildomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_maildomain_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailbox' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailbox_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailalias' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailalias_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailaliasdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailaliasdomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailmailinglist' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailmailinglist_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailforward' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailforward_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailcatchall' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailcatchall_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailrouting' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailrouting_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailfilter' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailfilter_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_fetchmail' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailfetchmail_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailquota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailquota_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_wblist' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_user_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_policy' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_policy_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_domain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_domain_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_quota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_quota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_aliasdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_aliasdomain_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_subdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_subdomain_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_ftp_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_ftp_user_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_shell_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_shell_user_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_webdav_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_webdav_user_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_dns_zone' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_dns_zone_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+                'limit_dns_slave_zone' => array (
+                        'datatype'      => 'INTEGER',
+                        'formtype'      => 'TEXT',
+                        'validators'    => array (      0 => array (    'type'  => 'ISINT',
+                                                                                                                'errmsg'=> 'limit_dns_slave_zone_error_notint'),
+                                                                        ),
+                        'default'       => '0',
+                        'value'         => '',
+                        'separator'     => '',
+                        'width'         => '10',
+                        'maxlength'     => '10',
+                        'rows'          => '',
+                        'cols'          => ''
+                ),
+		'limit_dns_record' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_dns_record_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		/*
+		'limit_client' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_client_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		*/
+		'limit_database' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_database_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+        'limit_cron' => array (
+            'datatype'  => 'INTEGER',
+            'formtype'  => 'TEXT',
+            'validators'    => array (  0 => array (    'type'  => 'ISINT',
+                                                        'errmsg'=> 'limit_cron_error_notint'),
+                                    ),
+            'default'   => '0',
+            'value'     => '',
+            'separator' => '',
+            'width'     => '10',
+            'maxlength' => '10',
+            'rows'      => '',
+            'cols'      => ''
+        ),
+        'limit_cron_type' => array (
+            'datatype'  => 'VARCHAR',
+            'formtype'  => 'SELECT',
+            'default'   => '',
+            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
+        ),
+        'limit_cron_frequency' => array (
+            'datatype'  => 'INTEGER',
+            'formtype'  => 'TEXT',
+            'validators'    => array (  0 => array (    'type'  => 'ISINT',
+                                                        'errmsg'=> 'limit_cron_error_frequency'),
+                                    ),
+            'default'   => '-1',
+            'value'     => '',
+            'separator' => '',
+            'width'     => '10',
+            'maxlength' => '10',
+            'rows'      => '',
+            'cols'      => ''
+        ),
+		'limit_traffic_quota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_traffic_quota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+	##################################
+	# END Datatable fields
+	##################################
+	)
+);
+
+?>
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index ebd8af79cd..e35447f3c8 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -1,640 +1,640 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "Reseller";
-$form["description"] 	= "";
-$form["name"] 			= "reseller";
-$form["action"]			= "reseller_edit.php";
-$form["db_table"]		= "client";
-$form["db_table_idx"]	= "client_id";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "address";
-$form["list_default"]	= "reseller_list.php";
-$form["auth"]			= 'yes';
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
-while ($file = @readdir ($handle)) {
-    if ($file != '.' && $file != '..') {
-        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-        }
-	}
-}
-
-$form["tabs"]['address'] = array (
-	'title' 	=> "Address",
-	'width' 	=> 100,
-	'template' 	=> "templates/reseller_edit_address.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'company_name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'contact_name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'contact_error_empty'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'customer_no' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'username' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'username_error_empty'),
-										1 => array (	'type'	=> 'CUSTOM',
-														'class' => 'validate_client',
-														'function' => 'username_unique',
-														'errmsg'=> 'username_error_unique'),
-										2 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\w\.\-\_]{0,64}$/',
-														'errmsg'=> 'username_error_regex'),
-										),
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'password' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'PASSWORD',
-			'encryption'=> 'CRYPT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'language' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> $conf["language"],
-			'value'		=> $language_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'usertheme' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'default'	=> 'default',
-			'value'		=> array('default' => 'default'),
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'street' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'zip' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'city' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'state' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'country' => array (
-			'datatype'	=> 'VARCHAR',
-
-			'formtype'	=> 'SELECT',
-			'default'	=> 'DE',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
-										'keyfield'=> 'iso',
-										'valuefield'=> 'printable_name'
-									 ),
-			'value'		=> ''
-		),
-		'telephone' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'mobile' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'fax' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'email' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'internet' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> 'http://',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'icq' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'vat_id' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'notes' => array (
-			'datatype'	=> 'TEXT',
-			'formtype'	=> 'TEXTAREA',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '',
-			'maxlength'	=> '',
-			'rows'		=> '10',
-			'cols'		=> '30'
-		),
-	##################################
-	# END Datatable fields
-	##################################
-	)
-);
-
-$form["tabs"]['limits'] = array (
-	'title' 	=> "Limits",
-	'width' 	=> 80,
-	'template' 	=> "templates/reseller_edit_limits.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'template_master' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
-										'class'=> 'custom_datasource',
-										'function'=> 'master_templates'
-									 ),
-			'value'		=> ''
-		),
-		'template_additional' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-		),
-		'default_mailserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND {AUTHSQL} ORDER BY server_name',
-										'keyfield'=> 'server_id',
-										'valuefield'=> 'server_name'
-									 ),
-			'value'		=> ''
-		),
-		'limit_maildomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_maildomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailmailinglist' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailmailinglist_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailbox' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailbox_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailalias' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailalias_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailforward' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailforward_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailcatchall' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailcatchall_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailrouting' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailrouting_error_notint'),
-									),
-			'default'	=> '0',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailfilter' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailfilter_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_fetchmail' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailfetchmail_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_mailquota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_mailquota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_wblist' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_spamfilter_policy' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_spamfilter_policy_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'default_webserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT server_id,server_name FROM server WHERE web_server = 1 AND {AUTHSQL} ORDER BY server_name',
-										'keyfield'=> 'server_id',
-										'valuefield'=> 'server_name'
-									 ),
-			'value'		=> ''
-		),
-		'limit_web_domain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_domain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_quota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_quota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'web_php_options' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'separator' => ',',
-			'value'		=> array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
-		),
-		'limit_web_aliasdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_aliasdomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_web_subdomain' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_web_subdomain_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_ftp_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_ftp_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_shell_user' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_shell_user_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'ssh_chroot' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'separator' => ',',
-			'value'		=> array('no' => 'None', 'jailkit' => 'Jailkit')
-		),
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Reseller";
+$form["description"] 	= "";
+$form["name"] 			= "reseller";
+$form["action"]			= "reseller_edit.php";
+$form["db_table"]		= "client";
+$form["db_table_idx"]	= "client_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "address";
+$form["list_default"]	= "reseller_list.php";
+$form["auth"]			= 'yes';
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+//* Languages
+$language_list = array();
+$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
+while ($file = @readdir ($handle)) {
+    if ($file != '.' && $file != '..') {
+        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
+			$tmp = substr($file, 0, 2);
+			$language_list[$tmp] = $tmp;
+        }
+	}
+}
+
+$form["tabs"]['address'] = array (
+	'title' 	=> "Address",
+	'width' 	=> 100,
+	'template' 	=> "templates/reseller_edit_address.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'company_name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'contact_name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'contact_error_empty'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'customer_no' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'username' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'username_error_empty'),
+										1 => array (	'type'	=> 'CUSTOM',
+														'class' => 'validate_client',
+														'function' => 'username_unique',
+														'errmsg'=> 'username_error_unique'),
+										2 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\w\.\-\_]{0,64}$/',
+														'errmsg'=> 'username_error_regex'),
+										),
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'password' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption'=> 'CRYPT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'language' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> $conf["language"],
+			'value'		=> $language_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'usertheme' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'default'	=> 'default',
+			'value'		=> array('default' => 'default'),
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'street' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'zip' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'city' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'state' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'country' => array (
+			'datatype'	=> 'VARCHAR',
+
+			'formtype'	=> 'SELECT',
+			'default'	=> 'DE',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
+										'keyfield'=> 'iso',
+										'valuefield'=> 'printable_name'
+									 ),
+			'value'		=> ''
+		),
+		'telephone' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'mobile' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'fax' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'email' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'internet' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> 'http://',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'icq' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'vat_id' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'notes' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'TEXTAREA',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '',
+			'maxlength'	=> '',
+			'rows'		=> '10',
+			'cols'		=> '30'
+		),
+	##################################
+	# END Datatable fields
+	##################################
+	)
+);
+
+$form["tabs"]['limits'] = array (
+	'title' 	=> "Limits",
+	'width' 	=> 80,
+	'template' 	=> "templates/reseller_edit_limits.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'template_master' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'CUSTOM',
+										'class'=> 'custom_datasource',
+										'function'=> 'master_templates'
+									 ),
+			'value'		=> ''
+		),
+		'template_additional' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+		),
+		'default_mailserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'		=> ''
+		),
+		'limit_maildomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_maildomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailmailinglist' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailmailinglist_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailbox' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailbox_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailalias' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailalias_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailforward' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailforward_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailcatchall' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailcatchall_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailrouting' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailrouting_error_notint'),
+									),
+			'default'	=> '0',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailfilter' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailfilter_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_fetchmail' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailfetchmail_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_mailquota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_mailquota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_wblist' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_spamfilter_policy' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_spamfilter_policy_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'default_webserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE web_server = 1 AND {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'		=> ''
+		),
+		'limit_web_domain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_domain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_quota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_quota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'web_php_options' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'value'		=> array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
+		),
+		'limit_web_aliasdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_aliasdomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_web_subdomain' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_web_subdomain_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_ftp_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_ftp_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_shell_user' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_shell_user_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'ssh_chroot' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'value'		=> array('no' => 'None', 'jailkit' => 'Jailkit')
+		),
 		'limit_webdav_user' => array (
 			'datatype'	=> 'INTEGER',
 			'formtype'	=> 'TEXT',
@@ -649,177 +649,177 @@ $form["tabs"]['limits'] = array (
 			'rows'		=> '',
 			'cols'		=> ''
 		),
-		'default_dnsserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT server_id,server_name FROM server WHERE dns_server = 1 AND {AUTHSQL} ORDER BY server_name',
-										'keyfield'=> 'server_id',
-										'valuefield'=> 'server_name'
-									 ),
-			'value'		=> ''
-		),
-		'limit_dns_zone' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_dns_zone_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-                'limit_dns_slave_zone' => array (
-                        'datatype'      => 'INTEGER',
-                        'formtype'      => 'TEXT',
-                        'validators'    => array (      0 => array (    'type'  => 'ISINT',
-                                                                                                                'errmsg'=> 'limit_dns_slave_zone_error_notint'),
-                                                                        ),
-                        'default'       => '-1',
-                        'value'         => '',
-                        'separator'     => '',
-                        'width'         => '10',
-                        'maxlength'     => '10',
-                        'rows'          => '',
-                        'cols'          => ''
-                ),
-		'limit_dns_record' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_dns_record_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'limit_client' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_client_error_notint'),
-										1 => array (	'type'	=> 'CUSTOM',
-														'class' => 'validate_reseller',
-														'function' => 'limit_client'),
-									),
-			'default'	=> '1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'default_dbserver' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '1',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT server_id,server_name FROM server WHERE db_server = 1 AND {AUTHSQL} ORDER BY server_name',
-										'keyfield'=> 'server_id',
-										'valuefield'=> 'server_name'
-									 ),
-			'value'		=> ''
-		),
-		'limit_database' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_database_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-        'limit_cron' => array (
-            'datatype'  => 'INTEGER',
-            'formtype'  => 'TEXT',
-            'validators'    => array (  0 => array (    'type'  => 'ISINT',
-                                                        'errmsg'=> 'limit_cron_error_notint'),
-                                    ),
-            'default'   => '0',
-            'value'     => '',
-            'separator' => '',
-            'width'     => '10',
-            'maxlength' => '10',
-            'rows'      => '',
-            'cols'      => ''
-        ),
-        'limit_cron_type' => array (
-            'datatype'  => 'VARCHAR',
-            'formtype'  => 'SELECT',
-            'default'   => '',
-            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
-        ),
-        'limit_cron_frequency' => array (
-            'datatype'  => 'INTEGER',
-            'formtype'  => 'TEXT',
-            'validators'    => array (  0 => array (    'type'  => 'ISINT',
-                                                        'errmsg'=> 'limit_cron_error_frequency'),
-                                    ),
-            'default'   => '-1',
-            'value'     => '',
-            'separator' => '',
-            'width'     => '10',
-            'maxlength' => '10',
-            'rows'      => '',
-            'cols'      => ''
-        ),
-		'limit_traffic_quota' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
-														'errmsg'=> 'limit_traffic_quota_error_notint'),
-									),
-			'default'	=> '-1',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-	##################################
-	# END Datatable fields
-	##################################
-	)
-);
-
-/*
-$form["tabs"]['ipaddress'] = array (
-	'title' 	=> "IP Addresses",
-	'width' 	=> 100,
-	'template' 	=> "templates/client_edit_ipaddress.htm",
-	'fields' 	=> array (
-	##################################
-	# Beginn Datatable fields
-	##################################
-		'ip_address' => array (
-			'datatype'	=> 'TEXT',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'value'		=> array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
-			'separator'	=> ';'
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-*/
-
-
-?>
+		'default_dnsserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE dns_server = 1 AND {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'		=> ''
+		),
+		'limit_dns_zone' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_dns_zone_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+                'limit_dns_slave_zone' => array (
+                        'datatype'      => 'INTEGER',
+                        'formtype'      => 'TEXT',
+                        'validators'    => array (      0 => array (    'type'  => 'ISINT',
+                                                                                                                'errmsg'=> 'limit_dns_slave_zone_error_notint'),
+                                                                        ),
+                        'default'       => '-1',
+                        'value'         => '',
+                        'separator'     => '',
+                        'width'         => '10',
+                        'maxlength'     => '10',
+                        'rows'          => '',
+                        'cols'          => ''
+                ),
+		'limit_dns_record' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_dns_record_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'limit_client' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_client_error_notint'),
+										1 => array (	'type'	=> 'CUSTOM',
+														'class' => 'validate_reseller',
+														'function' => 'limit_client'),
+									),
+			'default'	=> '1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'default_dbserver' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '1',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE db_server = 1 AND {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'		=> ''
+		),
+		'limit_database' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_database_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+        'limit_cron' => array (
+            'datatype'  => 'INTEGER',
+            'formtype'  => 'TEXT',
+            'validators'    => array (  0 => array (    'type'  => 'ISINT',
+                                                        'errmsg'=> 'limit_cron_error_notint'),
+                                    ),
+            'default'   => '0',
+            'value'     => '',
+            'separator' => '',
+            'width'     => '10',
+            'maxlength' => '10',
+            'rows'      => '',
+            'cols'      => ''
+        ),
+        'limit_cron_type' => array (
+            'datatype'  => 'VARCHAR',
+            'formtype'  => 'SELECT',
+            'default'   => '',
+            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
+        ),
+        'limit_cron_frequency' => array (
+            'datatype'  => 'INTEGER',
+            'formtype'  => 'TEXT',
+            'validators'    => array (  0 => array (    'type'  => 'ISINT',
+                                                        'errmsg'=> 'limit_cron_error_frequency'),
+                                    ),
+            'default'   => '-1',
+            'value'     => '',
+            'separator' => '',
+            'width'     => '10',
+            'maxlength' => '10',
+            'rows'      => '',
+            'cols'      => ''
+        ),
+		'limit_traffic_quota' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISINT',
+														'errmsg'=> 'limit_traffic_quota_error_notint'),
+									),
+			'default'	=> '-1',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+	##################################
+	# END Datatable fields
+	##################################
+	)
+);
+
+/*
+$form["tabs"]['ipaddress'] = array (
+	'title' 	=> "IP Addresses",
+	'width' 	=> 100,
+	'template' 	=> "templates/client_edit_ipaddress.htm",
+	'fields' 	=> array (
+	##################################
+	# Beginn Datatable fields
+	##################################
+		'ip_address' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'value'		=> array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
+			'separator'	=> ';'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+*/
+
+
+?>
diff --git a/interface/web/client/lib/admin.conf.php b/interface/web/client/lib/admin.conf.php
index a45d440345..67c94a5742 100644
--- a/interface/web/client/lib/admin.conf.php
+++ b/interface/web/client/lib/admin.conf.php
@@ -1,2 +1,2 @@
-<?php
+<?php
 ?>
\ No newline at end of file
diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm
index 520c3fa32c..850804637b 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -1,114 +1,114 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_client">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Address</legend>
-      <div class="ctrlHolder">
-      	<label for="company_name">{tmpl_var name='company_name_txt'}</label>
-        <input name="company_name" id="company_name" value="{tmpl_var name='company_name'}" size="30" maxlength="255" type="text" class="textInput" />
-	  </div>
-      <div class="ctrlHolder">
-      	<label for="contact_name">{tmpl_var name='contact_name_txt'}*</label>
-        <input name="contact_name" id="contact_name" value="{tmpl_var name='contact_name'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-	  <div class="ctrlHolder">
-      	<label for="customer_no">{tmpl_var name='customer_no_txt'}</label>
-        <input name="customer_no" id="customer_no" value="{tmpl_var name='customer_no'}" size="30" maxlength="255" type="text" class="textInput" />
-	  </div>
-      <div class="ctrlHolder">
-      	<label for="username">{tmpl_var name='username_txt'}*</label>
-        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="language">{tmpl_var name='language_txt'}</label>
-        <select name="language" id="language" class="selectInput withicons">
-					{tmpl_var name='language'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="usertheme">{tmpl_var name='usertheme_txt'}</label>
-        <select name="usertheme" id="usertheme" class="selectInput">
-					{tmpl_var name='usertheme'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="street">{tmpl_var name='street_txt'}</label>
-        <input name="street" id="street" value="{tmpl_var name='street'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="zip">{tmpl_var name='zip_txt'}</label>
-        <input name="zip" id="zip" value="{tmpl_var name='zip'}" size="10" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="city">{tmpl_var name='city_txt'}</label>
-        <input name="city" id="city" value="{tmpl_var name='city'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="state">{tmpl_var name='state_txt'}</label>
-        <input name="state" id="state" value="{tmpl_var name='state'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="country">{tmpl_var name='country_txt'}</label>
-        <select name="country" id="country" class="selectInput withicons">
-					{tmpl_var name='country'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="telephone">{tmpl_var name='telephone_txt'}</label>
-        <input name="telephone" id="telephone" value="{tmpl_var name='telephone'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="mobile">{tmpl_var name='mobile_txt'}</label>
-        <input name="mobile" id="mobile" value="{tmpl_var name='mobile'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fax">{tmpl_var name='fax_txt'}</label>
-        <input name="fax" id="fax" value="{tmpl_var name='fax'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="email">{tmpl_var name='email_txt'}</label>
-        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="internet">{tmpl_var name='internet_txt'}</label>
-        <input name="internet" id="internet" value="{tmpl_var name='internet'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="icq">{tmpl_var name='icq_txt'}</label>
-        <input name="icq" id="icq" value="{tmpl_var name='icq'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-	  <div class="ctrlHolder">
-      	<label for="vat_id">{tmpl_var name='vat_id_txt'}</label>
-        <input name="vat_id" id="vat_id" value="{tmpl_var name='vat_id'}" size="30" maxlength="255" type="text" class="textInput" />
-	  </div>
-	  <div class="ctrlHolder">
-      	<label for="company_id">{tmpl_var name='company_id_txt'}</label>
-        <input name="company_id" id="company_id" value="{tmpl_var name='company_id'}" size="30" maxlength="255" type="text" class="textInput" />
-	  </div>
-      <div class="ctrlHolder">
-      	<label for="notes">{tmpl_var name='notes_txt'}</label>
-        <textarea name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea>
-      </div>
-	  {tmpl_var name='required_fields_txt'}
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_client">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Address</legend>
+      <div class="ctrlHolder">
+      	<label for="company_name">{tmpl_var name='company_name_txt'}</label>
+        <input name="company_name" id="company_name" value="{tmpl_var name='company_name'}" size="30" maxlength="255" type="text" class="textInput" />
+	  </div>
+      <div class="ctrlHolder">
+      	<label for="contact_name">{tmpl_var name='contact_name_txt'}*</label>
+        <input name="contact_name" id="contact_name" value="{tmpl_var name='contact_name'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+	  <div class="ctrlHolder">
+      	<label for="customer_no">{tmpl_var name='customer_no_txt'}</label>
+        <input name="customer_no" id="customer_no" value="{tmpl_var name='customer_no'}" size="30" maxlength="255" type="text" class="textInput" />
+	  </div>
+      <div class="ctrlHolder">
+      	<label for="username">{tmpl_var name='username_txt'}*</label>
+        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="password">{tmpl_var name='password_txt'}</label>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="language">{tmpl_var name='language_txt'}</label>
+        <select name="language" id="language" class="selectInput withicons">
+					{tmpl_var name='language'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="usertheme">{tmpl_var name='usertheme_txt'}</label>
+        <select name="usertheme" id="usertheme" class="selectInput">
+					{tmpl_var name='usertheme'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="street">{tmpl_var name='street_txt'}</label>
+        <input name="street" id="street" value="{tmpl_var name='street'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="zip">{tmpl_var name='zip_txt'}</label>
+        <input name="zip" id="zip" value="{tmpl_var name='zip'}" size="10" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="city">{tmpl_var name='city_txt'}</label>
+        <input name="city" id="city" value="{tmpl_var name='city'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="state">{tmpl_var name='state_txt'}</label>
+        <input name="state" id="state" value="{tmpl_var name='state'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="country">{tmpl_var name='country_txt'}</label>
+        <select name="country" id="country" class="selectInput withicons">
+					{tmpl_var name='country'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="telephone">{tmpl_var name='telephone_txt'}</label>
+        <input name="telephone" id="telephone" value="{tmpl_var name='telephone'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="mobile">{tmpl_var name='mobile_txt'}</label>
+        <input name="mobile" id="mobile" value="{tmpl_var name='mobile'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fax">{tmpl_var name='fax_txt'}</label>
+        <input name="fax" id="fax" value="{tmpl_var name='fax'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="email">{tmpl_var name='email_txt'}</label>
+        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="internet">{tmpl_var name='internet_txt'}</label>
+        <input name="internet" id="internet" value="{tmpl_var name='internet'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="icq">{tmpl_var name='icq_txt'}</label>
+        <input name="icq" id="icq" value="{tmpl_var name='icq'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+	  <div class="ctrlHolder">
+      	<label for="vat_id">{tmpl_var name='vat_id_txt'}</label>
+        <input name="vat_id" id="vat_id" value="{tmpl_var name='vat_id'}" size="30" maxlength="255" type="text" class="textInput" />
+	  </div>
+	  <div class="ctrlHolder">
+      	<label for="company_id">{tmpl_var name='company_id_txt'}</label>
+        <input name="company_id" id="company_id" value="{tmpl_var name='company_id'}" size="30" maxlength="255" type="text" class="textInput" />
+	  </div>
+      <div class="ctrlHolder">
+      	<label for="notes">{tmpl_var name='notes_txt'}</label>
+        <textarea name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea>
+      </div>
+	  {tmpl_var name='required_fields_txt'}
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm
index ae6ad737bb..c8b8819dd0 100644
--- a/interface/web/client/templates/client_edit_limits.htm
+++ b/interface/web/client/templates/client_edit_limits.htm
@@ -1,202 +1,202 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_client">
-
-	<tmpl_if name="is_admin">
-		<div class="pnl_toolsarea">
-			<fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-				<div class="buttons">
-					<button class="positive iconstxt icoAdd" type="button" value="Add additional template" onClick="addAdditionalTemplate();"><span>Add additional template</span></button>
-					<button class="negative iconstxt icoDelete" type="button" value="Delete additional template" onClick="delAdditionalTemplate();"><span>Delete additional template</span></button>
-				</div>
-			</fieldset>
-		</div>
-	</tmpl_if>
-
-	<div class="pnl_formsarea">
-		<fieldset class="inlineLabels"><legend>Limits</legend>
-			<tmpl_if name="is_admin">
-				<div class="ctrlHolder">
-					<label for="template_master">{tmpl_var name='template_master_txt'}</label>
-					<select name="template_master" id="template_master" class="selectInput">
-					{tmpl_var name='template_master'}
-					</select>
-				</div>
-				<div class="ctrlHolder">
-					<label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
-					<select name="tpl_add_select" id="tpl_add_select" class="selectInput">
-					{tmpl_var name='tpl_add_select'}
-					</select>
-					<div id="template_additional_list"><br /><br />{tmpl_var name='template_additional_list'}</div>
-					<input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
-				</div>
-				<div class="ctrlHolder">
-					&nbsp;
-				</div>
-			</tmpl_if>
-			<div class="ctrlHolder">
-				<label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
-				<select name="default_mailserver" id="default_mailserver" class="selectInput">
-					{tmpl_var name='default_mailserver'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
-				<input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
-				<input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
-				<input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
-				<input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailmailinglist">{tmpl_var name='limit_mailmailinglist_txt'}</label>
-				<input name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
-				<input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
-				<input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
-				<input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
-				<input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
-				<input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
-				<input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
-				<input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
-				<input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
-				<input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
-				<select name="default_webserver" id="default_webserver" class="selectInput">
-					{tmpl_var name='default_webserver'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
-				<input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
-				<input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='web_php_options_txt'}</p>
-				<div class="multiField">
-						{tmpl_var name='web_php_options'}
-				</div>
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
-				<input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
-				<input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
-				<input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
-				<input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
-				<div class="multiField">
-						{tmpl_var name='ssh_chroot'}
-				</div>
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
-				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
-				<select name="default_dnsserver" id="default_dnsserver" class="selectInput">
-					{tmpl_var name='default_dnsserver'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
-				<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
-				<input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
-				<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
-				<select name="default_dbserver" id="default_dbserver" class="selectInput">
-					{tmpl_var name='default_dbserver'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
-				<input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
-				<input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-			<div class="ctrlHolder">
-				<label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
-				<select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
-					{tmpl_var name='limit_cron_type'}
-				</select>
-            </div>
-			<div class="ctrlHolder">
-				<label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
-				<input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-			<div class="ctrlHolder">
-				<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
-				<input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-		</fieldset>
-
-		<input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-		<div class="buttonHolder buttons">
-			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-		</div>
-	</div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_client">
+
+	<tmpl_if name="is_admin">
+		<div class="pnl_toolsarea">
+			<fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+				<div class="buttons">
+					<button class="positive iconstxt icoAdd" type="button" value="Add additional template" onClick="addAdditionalTemplate();"><span>Add additional template</span></button>
+					<button class="negative iconstxt icoDelete" type="button" value="Delete additional template" onClick="delAdditionalTemplate();"><span>Delete additional template</span></button>
+				</div>
+			</fieldset>
+		</div>
+	</tmpl_if>
+
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels"><legend>Limits</legend>
+			<tmpl_if name="is_admin">
+				<div class="ctrlHolder">
+					<label for="template_master">{tmpl_var name='template_master_txt'}</label>
+					<select name="template_master" id="template_master" class="selectInput">
+					{tmpl_var name='template_master'}
+					</select>
+				</div>
+				<div class="ctrlHolder">
+					<label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
+					<select name="tpl_add_select" id="tpl_add_select" class="selectInput">
+					{tmpl_var name='tpl_add_select'}
+					</select>
+					<div id="template_additional_list"><br /><br />{tmpl_var name='template_additional_list'}</div>
+					<input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
+				</div>
+				<div class="ctrlHolder">
+					&nbsp;
+				</div>
+			</tmpl_if>
+			<div class="ctrlHolder">
+				<label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
+				<select name="default_mailserver" id="default_mailserver" class="selectInput">
+					{tmpl_var name='default_mailserver'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
+				<input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
+				<input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
+				<input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+				<input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailmailinglist">{tmpl_var name='limit_mailmailinglist_txt'}</label>
+				<input name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
+				<input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
+				<input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
+				<input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
+				<input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
+				<input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
+				<input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+				<input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+				<input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+				<input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
+				<select name="default_webserver" id="default_webserver" class="selectInput">
+					{tmpl_var name='default_webserver'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
+				<input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
+				<input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='web_php_options_txt'}</p>
+				<div class="multiField">
+						{tmpl_var name='web_php_options'}
+				</div>
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+				<input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
+				<input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
+				<input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
+				<input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
+				<div class="multiField">
+						{tmpl_var name='ssh_chroot'}
+				</div>
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
+				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
+				<select name="default_dnsserver" id="default_dnsserver" class="selectInput">
+					{tmpl_var name='default_dnsserver'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
+				<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+				<input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
+				<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
+				<select name="default_dbserver" id="default_dbserver" class="selectInput">
+					{tmpl_var name='default_dbserver'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
+				<input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
+				<input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+            </div>
+			<div class="ctrlHolder">
+				<label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
+				<select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
+					{tmpl_var name='limit_cron_type'}
+				</select>
+            </div>
+			<div class="ctrlHolder">
+				<label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
+				<input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+            </div>
+			<div class="ctrlHolder">
+				<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
+				<input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+		</fieldset>
+
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
+</div>
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm
index 5e405a177f..a1c67129e9 100644
--- a/interface/web/client/templates/client_template_edit_limits.htm
+++ b/interface/web/client/templates/client_template_edit_limits.htm
@@ -1,136 +1,136 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_client_template">
-
-	<div class="pnl_formsarea">
-		<fieldset class="inlineLabels"><legend>Limits</legend>
-			<div class="ctrlHolder">
-				<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
-				<input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
-				<input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
-				<input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
-				<input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailmailinglist">{tmpl_var name='limit_mailmailinglist_txt'}</label>
-				<input name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
-				<input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
-				<input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
-				<input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
-				<input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
-				<input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
-				<input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
-				<input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
-				<input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
-				<input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
-				<input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
-				<input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
-				<input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
-				<input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
-				<input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
-				<input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
-				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
-				<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
-				<input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
-				<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
-				<input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
-				<input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-			<div class="ctrlHolder">
-				<label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
-				<select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
-					{tmpl_var name='limit_cron_type'}
-				</select>
-            </div>
-			<div class="ctrlHolder">
-				<label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
-				<input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-			<div class="ctrlHolder">
-				<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
-				<input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-		</fieldset>
-
-		<input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-		<div class="buttonHolder buttons">
-			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-		</div>
-	</div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_client_template">
+
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels"><legend>Limits</legend>
+			<div class="ctrlHolder">
+				<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
+				<input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
+				<input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
+				<input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailaliasdomain">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+				<input name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailmailinglist">{tmpl_var name='limit_mailmailinglist_txt'}</label>
+				<input name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
+				<input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
+				<input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
+				<input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
+				<input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
+				<input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
+				<input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+				<input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+				<input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+				<input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
+				<input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
+				<input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+				<input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
+				<input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
+				<input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
+				<input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
+				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
+				<input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+				<input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
+				<input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
+				<input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
+				<input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+            </div>
+			<div class="ctrlHolder">
+				<label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
+				<select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
+					{tmpl_var name='limit_cron_type'}
+				</select>
+            </div>
+			<div class="ctrlHolder">
+				<label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
+				<input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+            </div>
+			<div class="ctrlHolder">
+				<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
+				<input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+		</fieldset>
+
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
+</div>
diff --git a/interface/web/client/templates/client_template_edit_template.htm b/interface/web/client/templates/client_template_edit_template.htm
index 6c9d905340..a3a8fe577b 100644
--- a/interface/web/client/templates/client_template_edit_template.htm
+++ b/interface/web/client/templates/client_template_edit_template.htm
@@ -1,28 +1,28 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_client_template">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Template</legend>
-      <div class="ctrlHolder">
-      	<label for="template_type">{tmpl_var name='template_type_txt'}</label>
-        <select name="template_type" id="template_type" class="selectInput">
-					{tmpl_var name='template_type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="template_name">{tmpl_var name='template_name_txt'}</label>
-        <input name="template_name" id="template_name" value="{tmpl_var name='template_name'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_client_template">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Template</legend>
+      <div class="ctrlHolder">
+      	<label for="template_type">{tmpl_var name='template_type_txt'}</label>
+        <select name="template_type" id="template_type" class="selectInput">
+					{tmpl_var name='template_type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="template_name">{tmpl_var name='template_name_txt'}</label>
+        <input name="template_name" id="template_name" value="{tmpl_var name='template_name'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm
index 280a24ed19..7ac3519172 100644
--- a/interface/web/client/templates/reseller_edit_limits.htm
+++ b/interface/web/client/templates/reseller_edit_limits.htm
@@ -1,191 +1,191 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_client">
-  
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Limits</legend>
-<tmpl_if name="is_admin">
-      <div class="ctrlHolder">
-      	<label for="template_master">{tmpl_var name='template_master_txt'}</label>
-        <select name="template_master" id="template_master" class="selectInput">
-					{tmpl_var name='template_master'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
-        <select name="tpl_add_select" id="tpl_add_select" class="selectInput">
-					{tmpl_var name='tpl_add_select'}
-				</select>
-	      <span id="template_additional_list">{tmpl_var name='template_additional_list'}</span>
-	  	  <input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
-      </div>
-	  <div class="ctrlHolder">
-	    &nbsp;
-	  </div>
-</tmpl_if>
-      <div class="ctrlHolder">
-      	<label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
-        <select name="default_mailserver" id="default_mailserver" class="selectInput">
-					{tmpl_var name='default_mailserver'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
-        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-	  <div class="ctrlHolder">
-				<label for="limit_mailmailinglist">{tmpl_var name='limit_mailmailinglist_txt'}</label>
-				<input name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
-        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
-        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
-        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
-        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
-        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
-        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
-        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
-        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
-        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
-        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
-        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
-        <select name="default_webserver" id="default_webserver" class="selectInput">
-					{tmpl_var name='default_webserver'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
-        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-	  <div class="ctrlHolder">
-      	<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
-        <input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-	  </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='web_php_options_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='web_php_options'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
-        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
-        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
-        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
-        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='ssh_chroot'}
-					</div>
-			</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_client">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Limits</legend>
+<tmpl_if name="is_admin">
+      <div class="ctrlHolder">
+      	<label for="template_master">{tmpl_var name='template_master_txt'}</label>
+        <select name="template_master" id="template_master" class="selectInput">
+					{tmpl_var name='template_master'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
+        <select name="tpl_add_select" id="tpl_add_select" class="selectInput">
+					{tmpl_var name='tpl_add_select'}
+				</select>
+	      <span id="template_additional_list">{tmpl_var name='template_additional_list'}</span>
+	  	  <input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
+      </div>
+	  <div class="ctrlHolder">
+	    &nbsp;
+	  </div>
+</tmpl_if>
+      <div class="ctrlHolder">
+      	<label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
+        <select name="default_mailserver" id="default_mailserver" class="selectInput">
+					{tmpl_var name='default_mailserver'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
+        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+	  <div class="ctrlHolder">
+				<label for="limit_mailmailinglist">{tmpl_var name='limit_mailmailinglist_txt'}</label>
+				<input name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
+        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
+        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
+        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
+        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
+        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
+        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
+        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
+        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
+        <select name="default_webserver" id="default_webserver" class="selectInput">
+					{tmpl_var name='default_webserver'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
+        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+	  <div class="ctrlHolder">
+      	<label for="limit_web_quota">{tmpl_var name='limit_web_quota_txt'}</label>
+        <input name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+	  </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='web_php_options_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='web_php_options'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
+        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
+        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
+        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='ssh_chroot'}
+					</div>
+			</div>
 	  <div class="ctrlHolder">
 				<label for="limit_webdav_user">{tmpl_var name='limit_webdav_user_txt'}</label>
 				<input name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
 			</div>
-      <div class="ctrlHolder">
-      	<label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
-        <select name="default_dnsserver" id="default_dnsserver" class="selectInput">
-					{tmpl_var name='default_dnsserver'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
-        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
-        <input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
-        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="limit_client">{tmpl_var name='limit_client_txt'}</label>
-        <input name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
-        <select name="default_dbserver" id="default_dbserver" class="selectInput">
-					{tmpl_var name='default_dbserver'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
-        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
-        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-      <div class="ctrlHolder">
-        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
-        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
-          {tmpl_var name='limit_cron_type'}
-        </select>
-            </div>
-      <div class="ctrlHolder">
-        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
-        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-	  <div class="ctrlHolder">
-      	<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
-        <input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-	  </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/reseller_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/reseller_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+      <div class="ctrlHolder">
+      	<label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
+        <select name="default_dnsserver" id="default_dnsserver" class="selectInput">
+					{tmpl_var name='default_dnsserver'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
+        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_dns_slave_zone">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+        <input name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
+        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="limit_client">{tmpl_var name='limit_client_txt'}</label>
+        <input name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
+        <select name="default_dbserver" id="default_dbserver" class="selectInput">
+					{tmpl_var name='default_dbserver'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
+        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
+        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+            </div>
+      <div class="ctrlHolder">
+        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
+        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
+          {tmpl_var name='limit_cron_type'}
+        </select>
+            </div>
+      <div class="ctrlHolder">
+        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
+        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
+            </div>
+	  <div class="ctrlHolder">
+      	<label for="limit_traffic_quota">{tmpl_var name='limit_traffic_quota_txt'}</label>
+        <input name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
+	  </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/reseller_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/reseller_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php
index b020def549..81f8701746 100644
--- a/interface/web/dashboard/dashlets/limits.php
+++ b/interface/web/dashboard/dashlets/limits.php
@@ -1,177 +1,177 @@
-<?php
-
-class dashlet_limits {
-	
-	function show() {
-		global $app, $conf;
-		
-		$limits = array();
-		
-		/* Limits to be shown*/
-		
-		$limits[] = array('field' => 'limit_maildomain',
-						  'db_table' => 'mail_domain',
-						  'db_where' => '');
-						  
-		$limits[] = array('field' => 'limit_mailmailinglist',
-						  'db_table' => 'mail_mailinglist',
-						  'db_where' => '');
-		
-		$limits[] = array('field' => 'limit_mailbox',
-						  'db_table' => 'mail_user',
-						  'db_where' => '');
-		
-		$limits[] = array('field' => 'limit_mailalias',
-						  'db_table' => 'mail_forwarding',
-						  'db_where' => "type = 'alias'");
-		
-		$limits[] = array('field' => 'limit_mailaliasdomain',
-						  'db_table' => 'mail_forwarding',
-						  'db_where' => "type = 'aliasdomain'");
-		
-		$limits[] = array('field' => 'limit_mailforward',
-						  'db_table' => 'mail_forwarding',
-						  'db_where' => "type = 'forward'");
-		
-		$limits[] = array('field' => 'limit_mailcatchall',
-						  'db_table' => 'mail_forwarding',
-						  'db_where' => "type = 'catchall'");
-		
-		$limits[] = array('field' => 'limit_mailrouting',
-						  'db_table' => 'mail_transport',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_mailfilter',
-						  'db_table' => 'mail_user_filter',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_fetchmail',
-						  'db_table' => 'mail_get',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_spamfilter_wblist',
-						  'db_table' => 'spamfilter_wblist',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_spamfilter_user',
-						  'db_table' => 'spamfilter_users',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_spamfilter_policy',
-						  'db_table' => 'spamfilter_policy',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_web_domain',
-						  'db_table' => 'web_domain',
-						  'db_where' => "type = 'vhost'");
-		
-		$limits[] = array('field' => 'limit_web_subdomain',
-						  'db_table' => 'web_domain',
-						  'db_where' => "type = 'subdomain'");
-		
-		$limits[] = array('field' => 'limit_web_aliasdomain',
-						  'db_table' => 'web_domain',
-						  'db_where' => "type = 'alias'");
-		
-		$limits[] = array('field' => 'limit_ftp_user',
-						  'db_table' => 'ftp_user',
-						  'db_where' => "");
-
-		$limits[] = array('field' => 'limit_shell_user',
-						  'db_table' => 'shell_user',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_dns_zone',
-						  'db_table' => 'dns_soa',
-						  'db_where' => "");
-
-		$limits[] = array('field' => 'limit_dns_slave_zone',
-						  'db_table' => 'dns_slave',
-						  'db_where' => "");
-
-		$limits[] = array('field' => 'limit_dns_record',
-						  'db_table' => 'dns_rr',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_database',
-						  'db_table' => 'web_database',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_cron',
-						  'db_table' => 'cron',
-						  'db_where' => "");
-		
-		$limits[] = array('field' => 'limit_client',
-						  'db_table' => 'client',
-						  'db_where' => "");
-		
-		
-		
-		
-		//* Loading Template
-		$app->uses('tpl,tform');
-		
-		$tpl = new tpl;
-		$tpl->newTemplate("dashlets/templates/limits.htm");
-		
-		$wb = array();
-		$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_limits.lng';
-		if(is_file($lng_file)) include($lng_file);
-		$tpl->setVar($wb);
-		
-		if($app->auth->is_admin()) {
-			$user_is_admin = true;
-		} else {
-			$user_is_admin = false;
-		}
-		$tpl->setVar('is_admin',$user_is_admin);
-		
-		if($user_is_admin == false) {
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-		}
-		
-		$rows = array();
-		foreach($limits as $limit) {
-			$field = $limit['field'];
-			if($user_is_admin) {
-				$value = $wb['unlimited_txt'];
-			} else {
-				$value = $client[$field];
-			}
-			if($value != 0 || $value == $wb['unlimited_txt']) {
-				$value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value;
-				$rows[] = array('field' => $field,
-								'field_txt' => $wb[$field.'_txt'],
-								'value' => $value_formatted,
-								'usage' => $this->_get_limit_usage($limit));
-			}
-		}
-		$tpl->setLoop('rows',$rows);
-		
-		
-		return $tpl->grab();
-		
-	}
-	
-	function _get_limit_usage($limit) {
-		global $app;
-		
-		$sql = "SELECT count(sys_userid) as number FROM ".$limit['db_table']." WHERE ";
-		if($limit['db_where'] != '') $sql .= $limit['db_where']." AND ";
-		$sql .= $app->tform->getAuthSQL('r');
-		$rec = $app->db->queryOneRecord($sql);
-		return $rec['number'];
-		
-	}
-	
-}
-
-
-
-
-
-
-
-
-?>
+<?php
+
+class dashlet_limits {
+	
+	function show() {
+		global $app, $conf;
+		
+		$limits = array();
+		
+		/* Limits to be shown*/
+		
+		$limits[] = array('field' => 'limit_maildomain',
+						  'db_table' => 'mail_domain',
+						  'db_where' => '');
+						  
+		$limits[] = array('field' => 'limit_mailmailinglist',
+						  'db_table' => 'mail_mailinglist',
+						  'db_where' => '');
+		
+		$limits[] = array('field' => 'limit_mailbox',
+						  'db_table' => 'mail_user',
+						  'db_where' => '');
+		
+		$limits[] = array('field' => 'limit_mailalias',
+						  'db_table' => 'mail_forwarding',
+						  'db_where' => "type = 'alias'");
+		
+		$limits[] = array('field' => 'limit_mailaliasdomain',
+						  'db_table' => 'mail_forwarding',
+						  'db_where' => "type = 'aliasdomain'");
+		
+		$limits[] = array('field' => 'limit_mailforward',
+						  'db_table' => 'mail_forwarding',
+						  'db_where' => "type = 'forward'");
+		
+		$limits[] = array('field' => 'limit_mailcatchall',
+						  'db_table' => 'mail_forwarding',
+						  'db_where' => "type = 'catchall'");
+		
+		$limits[] = array('field' => 'limit_mailrouting',
+						  'db_table' => 'mail_transport',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_mailfilter',
+						  'db_table' => 'mail_user_filter',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_fetchmail',
+						  'db_table' => 'mail_get',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_spamfilter_wblist',
+						  'db_table' => 'spamfilter_wblist',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_spamfilter_user',
+						  'db_table' => 'spamfilter_users',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_spamfilter_policy',
+						  'db_table' => 'spamfilter_policy',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_web_domain',
+						  'db_table' => 'web_domain',
+						  'db_where' => "type = 'vhost'");
+		
+		$limits[] = array('field' => 'limit_web_subdomain',
+						  'db_table' => 'web_domain',
+						  'db_where' => "type = 'subdomain'");
+		
+		$limits[] = array('field' => 'limit_web_aliasdomain',
+						  'db_table' => 'web_domain',
+						  'db_where' => "type = 'alias'");
+		
+		$limits[] = array('field' => 'limit_ftp_user',
+						  'db_table' => 'ftp_user',
+						  'db_where' => "");
+
+		$limits[] = array('field' => 'limit_shell_user',
+						  'db_table' => 'shell_user',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_dns_zone',
+						  'db_table' => 'dns_soa',
+						  'db_where' => "");
+
+		$limits[] = array('field' => 'limit_dns_slave_zone',
+						  'db_table' => 'dns_slave',
+						  'db_where' => "");
+
+		$limits[] = array('field' => 'limit_dns_record',
+						  'db_table' => 'dns_rr',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_database',
+						  'db_table' => 'web_database',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_cron',
+						  'db_table' => 'cron',
+						  'db_where' => "");
+		
+		$limits[] = array('field' => 'limit_client',
+						  'db_table' => 'client',
+						  'db_where' => "");
+		
+		
+		
+		
+		//* Loading Template
+		$app->uses('tpl,tform');
+		
+		$tpl = new tpl;
+		$tpl->newTemplate("dashlets/templates/limits.htm");
+		
+		$wb = array();
+		$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_limits.lng';
+		if(is_file($lng_file)) include($lng_file);
+		$tpl->setVar($wb);
+		
+		if($app->auth->is_admin()) {
+			$user_is_admin = true;
+		} else {
+			$user_is_admin = false;
+		}
+		$tpl->setVar('is_admin',$user_is_admin);
+		
+		if($user_is_admin == false) {
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			$client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		}
+		
+		$rows = array();
+		foreach($limits as $limit) {
+			$field = $limit['field'];
+			if($user_is_admin) {
+				$value = $wb['unlimited_txt'];
+			} else {
+				$value = $client[$field];
+			}
+			if($value != 0 || $value == $wb['unlimited_txt']) {
+				$value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value;
+				$rows[] = array('field' => $field,
+								'field_txt' => $wb[$field.'_txt'],
+								'value' => $value_formatted,
+								'usage' => $this->_get_limit_usage($limit));
+			}
+		}
+		$tpl->setLoop('rows',$rows);
+		
+		
+		return $tpl->grab();
+		
+	}
+	
+	function _get_limit_usage($limit) {
+		global $app;
+		
+		$sql = "SELECT count(sys_userid) as number FROM ".$limit['db_table']." WHERE ";
+		if($limit['db_where'] != '') $sql .= $limit['db_where']." AND ";
+		$sql .= $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryOneRecord($sql);
+		return $rec['number'];
+		
+	}
+	
+}
+
+
+
+
+
+
+
+
+?>
diff --git a/interface/web/dashboard/dashlets/modules.php b/interface/web/dashboard/dashlets/modules.php
index b958de69e3..cfb2e129da 100644
--- a/interface/web/dashboard/dashlets/modules.php
+++ b/interface/web/dashboard/dashlets/modules.php
@@ -1,55 +1,55 @@
-<?php
-
-class dashlet_modules {
-	
-	function show() {
-		global $app, $conf;
-		
-		//* Loading Template
-		$app->uses('tpl');
-		
-		$tpl = new tpl;
-		$tpl->newTemplate("dashlets/templates/modules.htm");
-		
-		$wb = array();
-		$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_modules.lng';
-		if(is_file($lng_file)) include($lng_file);
-		$tpl->setVar($wb);
-		
-		/*
-		 * Show all modules, the user is allowed to use
-		*/
-		$modules = explode(',', $_SESSION['s']['user']['modules']);
-		$mod = array();
-		if(is_array($modules)) {
-			foreach($modules as $mt) {
-				if(is_file('../' . $mt . '/lib/module.conf.php')) {
-					if(!preg_match("/^[a-z]{2,20}$/i", $mt)) die('module name contains unallowed chars.');
-					include_once('../' . $mt.'/lib/module.conf.php');
-					/* We don't want to show the dashboard */
-					if ($mt != 'dashboard') {
-						$module_title = $app->lng($module['title']);
-						if(strlen($module_title) > 8) $module_title = substr($module_title,0,7).'..';
-						$mod[] = array(	'modules_title' 	=> $module_title,
-								'modules_startpage'	=> $module['startpage'],
-								'modules_name'  	=> $module['name']);
-					}
-				}
-			}
-
-			$tpl->setloop('modules', $mod);
-		}
-		
-		return $tpl->grab();
-		
-	}
-}
-
-
-
-
-
-
-
-
+<?php
+
+class dashlet_modules {
+	
+	function show() {
+		global $app, $conf;
+		
+		//* Loading Template
+		$app->uses('tpl');
+		
+		$tpl = new tpl;
+		$tpl->newTemplate("dashlets/templates/modules.htm");
+		
+		$wb = array();
+		$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_modules.lng';
+		if(is_file($lng_file)) include($lng_file);
+		$tpl->setVar($wb);
+		
+		/*
+		 * Show all modules, the user is allowed to use
+		*/
+		$modules = explode(',', $_SESSION['s']['user']['modules']);
+		$mod = array();
+		if(is_array($modules)) {
+			foreach($modules as $mt) {
+				if(is_file('../' . $mt . '/lib/module.conf.php')) {
+					if(!preg_match("/^[a-z]{2,20}$/i", $mt)) die('module name contains unallowed chars.');
+					include_once('../' . $mt.'/lib/module.conf.php');
+					/* We don't want to show the dashboard */
+					if ($mt != 'dashboard') {
+						$module_title = $app->lng($module['title']);
+						if(strlen($module_title) > 8) $module_title = substr($module_title,0,7).'..';
+						$mod[] = array(	'modules_title' 	=> $module_title,
+								'modules_startpage'	=> $module['startpage'],
+								'modules_name'  	=> $module['name']);
+					}
+				}
+			}
+
+			$tpl->setloop('modules', $mod);
+		}
+		
+		return $tpl->grab();
+		
+	}
+}
+
+
+
+
+
+
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dashboard/lib/custom_menu.inc.php b/interface/web/dashboard/lib/custom_menu.inc.php
index 0effc49e19..60b95ddc6a 100644
--- a/interface/web/dashboard/lib/custom_menu.inc.php
+++ b/interface/web/dashboard/lib/custom_menu.inc.php
@@ -1,76 +1,76 @@
-<?php
-
-/*
-Copyright (c) 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.
-*/
-
-$app->uses('simplepie');
-
-$app->tpl->newTemplate('dashboard/templates/custom_menu.htm');
-
-$app->uses('getconf');
-		$misc_config = $app->getconf->get_global_config('misc');
-
-//* We want to show the news only to the admin user
-if($misc_config['dashboard_atom_url'] != '') {
-
-	if(!isset($_SESSION['s']['rss_news'])) {
-		
-		$app->simplepie->set_feed_url($misc_config['dashboard_atom_url']);
-		$app->simplepie->enable_cache(false);
-		$app->simplepie->init();
-		$items = $app->simplepie->get_items();
-
-		$rows = array();
-		$n = 1;
-
-		foreach ($items as $item)
-		{
-			//* We want to show only the first 10 news records
-			if($n <= 10) {
-				$rows[] = array('title' => $item->get_title(),
-								'link' => $item->get_link(),
-								'content' => $item->get_content(),
-								'date' => $item->get_date('Y-m-d')
-								);
-			}
-			$n++;
-		}
-		
-		$_SESSION['s']['rss_news'] = $rows;
-		
-	} else {
-		$rows = $_SESSION['s']['rss_news'];
-	}
-	
-	$app->tpl->setVar('latest_news_txt',$app->lng('latest_news_txt'));
-
-}
-
-$app->tpl->setLoop('news',$rows);
-
-?>
+<?php
+
+/*
+Copyright (c) 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.
+*/
+
+$app->uses('simplepie');
+
+$app->tpl->newTemplate('dashboard/templates/custom_menu.htm');
+
+$app->uses('getconf');
+		$misc_config = $app->getconf->get_global_config('misc');
+
+//* We want to show the news only to the admin user
+if($misc_config['dashboard_atom_url'] != '') {
+
+	if(!isset($_SESSION['s']['rss_news'])) {
+		
+		$app->simplepie->set_feed_url($misc_config['dashboard_atom_url']);
+		$app->simplepie->enable_cache(false);
+		$app->simplepie->init();
+		$items = $app->simplepie->get_items();
+
+		$rows = array();
+		$n = 1;
+
+		foreach ($items as $item)
+		{
+			//* We want to show only the first 10 news records
+			if($n <= 10) {
+				$rows[] = array('title' => $item->get_title(),
+								'link' => $item->get_link(),
+								'content' => $item->get_content(),
+								'date' => $item->get_date('Y-m-d')
+								);
+			}
+			$n++;
+		}
+		
+		$_SESSION['s']['rss_news'] = $rows;
+		
+	} else {
+		$rows = $_SESSION['s']['rss_news'];
+	}
+	
+	$app->tpl->setVar('latest_news_txt',$app->lng('latest_news_txt'));
+
+}
+
+$app->tpl->setLoop('news',$rows);
+
+?>
diff --git a/interface/web/dashboard/templates/custom_menu.htm b/interface/web/dashboard/templates/custom_menu.htm
index 3d2a62c730..8fe5bbf14e 100644
--- a/interface/web/dashboard/templates/custom_menu.htm
+++ b/interface/web/dashboard/templates/custom_menu.htm
@@ -1,8 +1,8 @@
-<ul id="submenu">
-  <li class="title"><a>{tmpl_var name='latest_news_txt'}</a></li>
-  <tmpl_loop name="news">
-  <li><a href="{tmpl_var name="link"}" target="_blank" style="margin-top:8px;padding-bottom:5px;"><b>{tmpl_var name="date"}</b><br />
-  {tmpl_var name="title"}</a>
-  </li>
-  </tmpl_loop>
+<ul id="submenu">
+  <li class="title"><a>{tmpl_var name='latest_news_txt'}</a></li>
+  <tmpl_loop name="news">
+  <li><a href="{tmpl_var name="link"}" target="_blank" style="margin-top:8px;padding-bottom:5px;"><b>{tmpl_var name="date"}</b><br />
+  {tmpl_var name="title"}</a>
+  </li>
+  </tmpl_loop>
 </ul>
\ No newline at end of file
diff --git a/interface/web/designer/lib/admin.conf.php b/interface/web/designer/lib/admin.conf.php
index 8dce5a5734..dc10d56334 100644
--- a/interface/web/designer/lib/admin.conf.php
+++ b/interface/web/designer/lib/admin.conf.php
@@ -1,4 +1,4 @@
-<?php
-
-
+<?php
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/designer/lib/lang/cz_module_edit.lng b/interface/web/designer/lib/lang/cz_module_edit.lng
index 4e51062a7a..d34a668d7a 100644
--- a/interface/web/designer/lib/lang/cz_module_edit.lng
+++ b/interface/web/designer/lib/lang/cz_module_edit.lng
@@ -8,15 +8,15 @@ $wb['tab_width_txt'] = 'Šířka záložky';
 $wb['save_txt'] = 'Uložit';
 $wb['cancel_txt'] = 'Storno';
 $wb['header_txt'] = 'Vlastnosti modulu';
-$wb['description_txt'] = '
-<b>Popis</b>
-<br><br>
-<b>Název modulu:</b> Název adresáře modulu. Pouze čísla, znaky a podtržitko jsou povoleny.<br>
-<b>Titulek modulu:</b> Bude zobrazen v horní části hlavní navigace.<br>
-<b>Soubor se šablonou:</b> Šablonový soubor modulu. Nyní dostupné: module.tpl.htm a module_tree.tpl.htm.Výchozí je module.tpl.htm.<br>
-<b>NaviFrame:</b> Pokud je vybrán module_tree.tpl.htm jako šablona, zadejte zde cestu ke skriptu pro levý frame.<br>
-<b>Výchozí stránka:</b> Tato stránka bude ukázána, když je modul zobrazen.<br>
-<b>Šířka záložek:</b> Šířka záložek v hlavní navigaci. Pole je ve výchozím stavu prázdné. Můžete zadat absolutní hodnotu v pixelech (např. 20) nebo relativně (např 20%).<br>
-<b>Rada:</b> Všechny cesty jsou relativně k adresáři web web.
+$wb['description_txt'] = '
+<b>Popis</b>
+<br><br>
+<b>Název modulu:</b> Název adresáře modulu. Pouze čísla, znaky a podtržitko jsou povoleny.<br>
+<b>Titulek modulu:</b> Bude zobrazen v horní části hlavní navigace.<br>
+<b>Soubor se šablonou:</b> Šablonový soubor modulu. Nyní dostupné: module.tpl.htm a module_tree.tpl.htm.Výchozí je module.tpl.htm.<br>
+<b>NaviFrame:</b> Pokud je vybrán module_tree.tpl.htm jako šablona, zadejte zde cestu ke skriptu pro levý frame.<br>
+<b>Výchozí stránka:</b> Tato stránka bude ukázána, když je modul zobrazen.<br>
+<b>Šířka záložek:</b> Šířka záložek v hlavní navigaci. Pole je ve výchozím stavu prázdné. Můžete zadat absolutní hodnotu v pixelech (např. 20) nebo relativně (např 20%).<br>
+<b>Rada:</b> Všechny cesty jsou relativně k adresáři web web.
 ';
 ?>
diff --git a/interface/web/designer/lib/lang/fr_module_edit.lng b/interface/web/designer/lib/lang/fr_module_edit.lng
index c2eab9481b..87b8e54281 100644
--- a/interface/web/designer/lib/lang/fr_module_edit.lng
+++ b/interface/web/designer/lib/lang/fr_module_edit.lng
@@ -8,7 +8,7 @@ $wb['tab_width_txt'] = 'Largeur tableau';
 $wb['save_txt'] = 'Sauver';
 $wb['cancel_txt'] = 'Annuler';
 $wb['header_txt'] = 'Proprits du Module';
-$wb['description_txt'] = '
-<b>Description</b?><br><br?><b>Nom du Module:</b> Nom du rpertoire du module. Seulement nombres, lettres et underscore sont autoriss.<br?><b>Titre du Module:</b> Seras affich dans le menu de navigation (suprieur).<br?><b>Fichier Template:</b> Fichier Template du module. Disponible actuellement: module.tpl.htm et module_tree.tpl.htm. Par dfaut module.tpl.htm.<br?><b>Frame de Navigation:</b> Si module_tree.tpl.htm est choisi comme fichier template, entrer ici le chemin vers le script de la frame de gauche.<br?><b>Page par Dfaut:</b> Cette page seras affiche quand le module seras ouvert.<br?><b>Largeur tableau:</b> Largeur des tableau dans la frame principale. Le champ est vide par defaut. Vous pouvez entrer une valeur absolue en pixel (e.g 20) ou relative (e.g 20%).<br?><b>Note:</b> Tous les paths sont relatifs par rapport au dossier web.
+$wb['description_txt'] = '
+<b>Description</b?><br><br?><b>Nom du Module:</b> Nom du rpertoire du module. Seulement nombres, lettres et underscore sont autoriss.<br?><b>Titre du Module:</b> Seras affich dans le menu de navigation (suprieur).<br?><b>Fichier Template:</b> Fichier Template du module. Disponible actuellement: module.tpl.htm et module_tree.tpl.htm. Par dfaut module.tpl.htm.<br?><b>Frame de Navigation:</b> Si module_tree.tpl.htm est choisi comme fichier template, entrer ici le chemin vers le script de la frame de gauche.<br?><b>Page par Dfaut:</b> Cette page seras affiche quand le module seras ouvert.<br?><b>Largeur tableau:</b> Largeur des tableau dans la frame principale. Le champ est vide par defaut. Vous pouvez entrer une valeur absolue en pixel (e.g 20) ou relative (e.g 20%).<br?><b>Note:</b> Tous les paths sont relatifs par rapport au dossier web.
 ';
 ?>
diff --git a/interface/web/designer/lib/lang/id_module_edit.lng b/interface/web/designer/lib/lang/id_module_edit.lng
index 7bdac2db95..31b0692379 100644
--- a/interface/web/designer/lib/lang/id_module_edit.lng
+++ b/interface/web/designer/lib/lang/id_module_edit.lng
@@ -8,15 +8,15 @@ $wb['tab_width_txt'] = 'Lebar Tab';
 $wb['save_txt'] = 'Simpan';
 $wb['cancel_txt'] = 'Batal';
 $wb['header_txt'] = 'Properti Modul';
-$wb['description_txt'] = '
-<b>Keterangan</b>
-<br><br>
-<b>Nama Modul:</b> Nama direktori modul. Hanya angka, karakter dan garis bawah yang diizinkan.<br>
-<b>Judul Modul:</b> Akan terlihat di navigasi utama (bagian atas).<br>
-<b>Berkas Template:</b> Berkas Template modul. Yang tersedia saat ini: module.tpl.htm dan module_tree.tpl.htm. Defaultnya adalah module.tpl.htm.<br>
-<b>Frame Navigasi:</b> Jika memilih module_tree.tpl.htm sebagai berkas template, masukkan path ke berkas skrip untuk frame sebelah kiri.<br>
-<b>Halaman Default:</b> Halaman ini akan muncul ketika modul dibuka.<br>
-<b>Lebar Tab:</b> Lebar tab di navigasi utama. Kolom ini defaultnya kosong. Anda dapat memasukkan nilai pixel absolut (mis. 20) atau relatif (mis. 20%).<br>
-<b>Petunjuk:</b> Semua path adalah relatif terhadap direktori web.
+$wb['description_txt'] = '
+<b>Keterangan</b>
+<br><br>
+<b>Nama Modul:</b> Nama direktori modul. Hanya angka, karakter dan garis bawah yang diizinkan.<br>
+<b>Judul Modul:</b> Akan terlihat di navigasi utama (bagian atas).<br>
+<b>Berkas Template:</b> Berkas Template modul. Yang tersedia saat ini: module.tpl.htm dan module_tree.tpl.htm. Defaultnya adalah module.tpl.htm.<br>
+<b>Frame Navigasi:</b> Jika memilih module_tree.tpl.htm sebagai berkas template, masukkan path ke berkas skrip untuk frame sebelah kiri.<br>
+<b>Halaman Default:</b> Halaman ini akan muncul ketika modul dibuka.<br>
+<b>Lebar Tab:</b> Lebar tab di navigasi utama. Kolom ini defaultnya kosong. Anda dapat memasukkan nilai pixel absolut (mis. 20) atau relatif (mis. 20%).<br>
+<b>Petunjuk:</b> Semua path adalah relatif terhadap direktori web.
 ';
 ?>
diff --git a/interface/web/designer/lib/lang/nl_module_edit.lng b/interface/web/designer/lib/lang/nl_module_edit.lng
index aca2b612db..289ac62fe3 100644
--- a/interface/web/designer/lib/lang/nl_module_edit.lng
+++ b/interface/web/designer/lib/lang/nl_module_edit.lng
@@ -8,15 +8,15 @@ $wb['tab_width_txt'] = 'Tab breedte';
 $wb['save_txt'] = 'Opslaan';
 $wb['cancel_txt'] = 'Cancel';
 $wb['header_txt'] = 'Module eigenschappen';
-$wb['description_txt'] = '
-<b>Description</b>
-<br><br>
-<b>Modulename:</b> Naam van de module directory. Alleen numerieke waarden, karakters en underscore zijn toegestaan.<br>
-<b>Moduletitle:</b> Worden weergegeven in de (bovenste) hoofd navigatiebalk.<br>
-<b>Template file:</b> Template bestand van de module. Momenteel beschikbaar: module.tpl.htm and module_tree.tpl.htm. Standaard is module.tpl.htm.<br>
-<b>NaviFrame:</b> Als module_tree.tpl.htm is geselecteerd als template bestand, geef hier dan het pad op naar het script bestand voor het linker frame.<br>
-<b>Default page:</b> Deze pagina wordt weergegeven wanneer de module is geopened.<br>
-<b>Tab width:</b> Breedte van de tabs in de hoofdnavigatiebalk. Dit veld is standaard leeg. U kunt hier absulute pixel waarden invoeren (bijv. 20) of relatief (bijv. 20%).<br>
-<b>Hint:</b> Alle paden zijn relatief tot de directory web.
+$wb['description_txt'] = '
+<b>Description</b>
+<br><br>
+<b>Modulename:</b> Naam van de module directory. Alleen numerieke waarden, karakters en underscore zijn toegestaan.<br>
+<b>Moduletitle:</b> Worden weergegeven in de (bovenste) hoofd navigatiebalk.<br>
+<b>Template file:</b> Template bestand van de module. Momenteel beschikbaar: module.tpl.htm and module_tree.tpl.htm. Standaard is module.tpl.htm.<br>
+<b>NaviFrame:</b> Als module_tree.tpl.htm is geselecteerd als template bestand, geef hier dan het pad op naar het script bestand voor het linker frame.<br>
+<b>Default page:</b> Deze pagina wordt weergegeven wanneer de module is geopened.<br>
+<b>Tab width:</b> Breedte van de tabs in de hoofdnavigatiebalk. Dit veld is standaard leeg. U kunt hier absulute pixel waarden invoeren (bijv. 20) of relatief (bijv. 20%).<br>
+<b>Hint:</b> Alle paden zijn relatief tot de directory web.
 ';
 ?>
diff --git a/interface/web/designer/lib/lang/pl_module_edit.lng b/interface/web/designer/lib/lang/pl_module_edit.lng
index 691e55052f..b87d04b182 100644
--- a/interface/web/designer/lib/lang/pl_module_edit.lng
+++ b/interface/web/designer/lib/lang/pl_module_edit.lng
@@ -8,15 +8,15 @@ $wb['tab_width_txt'] = 'Szerokość zakładki';
 $wb['save_txt'] = 'Zapisz';
 $wb['cancel_txt'] = 'Anuluj';
 $wb['header_txt'] = 'Parametry modułu';
-$wb['description_txt'] = '
-<b>Opis</b>
-<br><br>
-<b>Nazwa modułu:</b> Nazwa katalogu z modułem. Tylko liczby, litery (bez polskich) i podkreślenie są dozwolone.<br>
-<b>Tytuł modułu:</b> Będzie wyświetlaby w głównym menu nawigacyjnym.<br>
-<b>Plik szablonu:</b> Plik szablonu modułu. Aktualnie dostępne: module.tpl.htm oraz module_tree.tpl.htm. Domyślnie jest module.tpl.htm.<br>
-<b>Ramka nawigacyjna:</b> Jeśli module_tree.tpl.htm wybrano jako plik szablonu, wpisz tutaj ścieżkę do pliku ze skryptem dla lewej ramki.<br>
-<b>Strona domyślna:</b> Ta strona będzie otwierana na początku podczas otwarcia modułu.<br>
-<b>Szerokość zakładki:</b> Szerokość zakładek w głownym menu nawigacyjnym. To pole jest domyślnie puste. Możesz podać wartość w pikselach (np.: 20) lub procentach (np.: 20%).<br>
-<b>Podpowiedź:</b> Wszystkie ścieżki są względne według strony www..
+$wb['description_txt'] = '
+<b>Opis</b>
+<br><br>
+<b>Nazwa modułu:</b> Nazwa katalogu z modułem. Tylko liczby, litery (bez polskich) i podkreślenie są dozwolone.<br>
+<b>Tytuł modułu:</b> Będzie wyświetlaby w głównym menu nawigacyjnym.<br>
+<b>Plik szablonu:</b> Plik szablonu modułu. Aktualnie dostępne: module.tpl.htm oraz module_tree.tpl.htm. Domyślnie jest module.tpl.htm.<br>
+<b>Ramka nawigacyjna:</b> Jeśli module_tree.tpl.htm wybrano jako plik szablonu, wpisz tutaj ścieżkę do pliku ze skryptem dla lewej ramki.<br>
+<b>Strona domyślna:</b> Ta strona będzie otwierana na początku podczas otwarcia modułu.<br>
+<b>Szerokość zakładki:</b> Szerokość zakładek w głownym menu nawigacyjnym. To pole jest domyślnie puste. Możesz podać wartość w pikselach (np.: 20) lub procentach (np.: 20%).<br>
+<b>Podpowiedź:</b> Wszystkie ścieżki są względne według strony www..
 ';
 ?>
diff --git a/interface/web/designer/templates/form_edit.htm b/interface/web/designer/templates/form_edit.htm
index 4d1c991ab1..38a28c4aa3 100644
--- a/interface/web/designer/templates/form_edit.htm
+++ b/interface/web/designer/templates/form_edit.htm
@@ -1,79 +1,79 @@
-<form method="POST" action="form_edit.php">
-<div class="frmTextHead"><tmpl_var name="header_txt"></div><br />
-<table width="500" border="0" cellspacing="0" cellpadding="2">
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="name_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[name]" type="text" class="text" value="{tmpl_var name='name'}" size="20" maxlength="50" {tmpl_var name='readonly'}></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="title_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[title]" type="text" class="text" value="{tmpl_var name='title'}" size="20" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="description_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[description]" type="text" class="text" value="{tmpl_var name='description'}" size="30" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="action_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[action]" type="text" class="text" value="{tmpl_var name='action'}" size="30" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="db_table_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[db_table]" type="text" class="text" value="{tmpl_var name='db_table'}" size="10" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="db_table_idx_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[db_table_idx]" type="text" class="text" value="{tmpl_var name='db_table_idx'}" size="10" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="db_history_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[db_history]" type="text" class="text" value="{tmpl_var name='db_history'}" size="3" maxlength="3"> yes / no</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="tab_default_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[tab_default]" type="text" class="text" value="{tmpl_var name='tab_default'}" size="30" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="list_default_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[list_default]" type="text" class="text" value="{tmpl_var name='list_default'}" size="30" maxlength="255"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="auth_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[auth]" type="text" class="text" value="{tmpl_var name='auth'}" size="3" maxlength="3"> yes / no</td>
-  </tr>
-  <tr>
-    <td colspan="2" class="frmText11">&nbsp;</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="auth_preset_userid_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[auth_preset][userid]" type="text" class="text" value="{tmpl_var name='auth_preset_userid'}" size="4" maxlength="4"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="auth_preset_groupid_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[auth_preset][groupid]" type="text" class="text" value="{tmpl_var name='auth_preset_groupid'}" size="4" maxlength="4"></td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="auth_preset_perm_user_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[auth_preset][perm_user]" type="text" class="text" value="{tmpl_var name='auth_preset_perm_user'}" size="4" maxlength="4"> r = read, i = insert, u = update, d = delete</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="auth_preset_perm_group_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[auth_preset][perm_group]" type="text" class="text" value="{tmpl_var name='auth_preset_perm_group'}" size="4" maxlength="4"> r = read, i = insert, u = update, d = delete</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="auth_preset_perm_other_txt">:</td>
-    <td width="366" class="frmText11"><input name="form[auth_preset][perm_other]" type="text" class="text" value="{tmpl_var name='auth_preset_perm_other'}" size="4" maxlength="4"> r = read, i = insert, u = update, d = delete</td>
-  </tr>
-  <tr>
-    <td colspan="2" class="frmText11">&nbsp;</td>
-  </tr>
-  <tr>
-    <td>&nbsp;</td>
-    <td><input name="Speichern" type="submit" class="button" value="{tmpl_var name='save_txt'}">
-      <input name="Abbrechen" type="button" class="button" value="{tmpl_var name='cancel_txt'}" onClick="self.location.href='form_list.php';">
-    </td>
-  </tr>
-</table>
-<input type="hidden" name="module_name" value="{tmpl_var name='module_name'}">
-<input type="hidden" name="form_name" value="{tmpl_var name='form_name'}">
+<form method="POST" action="form_edit.php">
+<div class="frmTextHead"><tmpl_var name="header_txt"></div><br />
+<table width="500" border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="name_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[name]" type="text" class="text" value="{tmpl_var name='name'}" size="20" maxlength="50" {tmpl_var name='readonly'}></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="title_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[title]" type="text" class="text" value="{tmpl_var name='title'}" size="20" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="description_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[description]" type="text" class="text" value="{tmpl_var name='description'}" size="30" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="action_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[action]" type="text" class="text" value="{tmpl_var name='action'}" size="30" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="db_table_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[db_table]" type="text" class="text" value="{tmpl_var name='db_table'}" size="10" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="db_table_idx_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[db_table_idx]" type="text" class="text" value="{tmpl_var name='db_table_idx'}" size="10" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="db_history_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[db_history]" type="text" class="text" value="{tmpl_var name='db_history'}" size="3" maxlength="3"> yes / no</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="tab_default_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[tab_default]" type="text" class="text" value="{tmpl_var name='tab_default'}" size="30" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="list_default_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[list_default]" type="text" class="text" value="{tmpl_var name='list_default'}" size="30" maxlength="255"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="auth_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[auth]" type="text" class="text" value="{tmpl_var name='auth'}" size="3" maxlength="3"> yes / no</td>
+  </tr>
+  <tr>
+    <td colspan="2" class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="auth_preset_userid_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[auth_preset][userid]" type="text" class="text" value="{tmpl_var name='auth_preset_userid'}" size="4" maxlength="4"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="auth_preset_groupid_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[auth_preset][groupid]" type="text" class="text" value="{tmpl_var name='auth_preset_groupid'}" size="4" maxlength="4"></td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="auth_preset_perm_user_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[auth_preset][perm_user]" type="text" class="text" value="{tmpl_var name='auth_preset_perm_user'}" size="4" maxlength="4"> r = read, i = insert, u = update, d = delete</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="auth_preset_perm_group_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[auth_preset][perm_group]" type="text" class="text" value="{tmpl_var name='auth_preset_perm_group'}" size="4" maxlength="4"> r = read, i = insert, u = update, d = delete</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="auth_preset_perm_other_txt">:</td>
+    <td width="366" class="frmText11"><input name="form[auth_preset][perm_other]" type="text" class="text" value="{tmpl_var name='auth_preset_perm_other'}" size="4" maxlength="4"> r = read, i = insert, u = update, d = delete</td>
+  </tr>
+  <tr>
+    <td colspan="2" class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td>&nbsp;</td>
+    <td><input name="Speichern" type="submit" class="button" value="{tmpl_var name='save_txt'}">
+      <input name="Abbrechen" type="button" class="button" value="{tmpl_var name='cancel_txt'}" onClick="self.location.href='form_list.php';">
+    </td>
+  </tr>
+</table>
+<input type="hidden" name="module_name" value="{tmpl_var name='module_name'}">
+<input type="hidden" name="form_name" value="{tmpl_var name='form_name'}">
 </form>
\ No newline at end of file
diff --git a/interface/web/designer/templates/form_show.htm b/interface/web/designer/templates/form_show.htm
index b10407018c..2a3eff4ea5 100644
--- a/interface/web/designer/templates/form_show.htm
+++ b/interface/web/designer/templates/form_show.htm
@@ -1,61 +1,61 @@
-<script language="JavaScript">
-<!--
-function del_module(link) {
-  if(window.confirm("{tmpl_var name='module_del_txt'}")) {
-  	location.href = link;
-  }
-}
-function del_menu(link) {
-  if(window.confirm("{tmpl_var name='menu_del_txt'}")) {
-  	location.href = link;
-  }
-}
-function del_menuitem(link) {
-  if(window.confirm("{tmpl_var name='item_del_txt'}")) {
-  	location.href = link;
-  }
-}
-
-//-->
-</script>
-<form name="myform" action="module_show.php" method="POST">
-<div class="frmTextHead"><tmpl_var name="header_txt"></div><br />
-<fieldset style="width:320px;"><legend class="frmText11"><b>{tmpl_var name='form_txt'}</b></legend>
-<table border="0" cellspacing="0" cellpadding="2">
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="title_txt">:</td>
-    <td width="366" class="frmText11">{tmpl_var name='title'}</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="name_txt">:</td>
-    <td width="366" class="frmText11">{tmpl_var name='form_name'}</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="module_txt">:</td>
-    <td width="366" class="frmText11">{tmpl_var name='module_name'}</td>
-  </tr>
-  <tr>
-    <td width="126" class="frmText11"><tmpl_var name="description_txt">:</td>
-    <td width="366" class="frmText11" valign="top">{tmpl_var name='description'}</td>
-  </tr>
-  <tr>
-    <td colspan="2" class="frmText11">&nbsp;</td>
-  </tr>
-  <tr>
-    <td colspan="2" class="frmText11">
-	  <input type="button" name="ed1" value="{tmpl_var name='properties_txt'}" onClick="location.href='form_edit.php?form_name={tmpl_var name='form_name'}&module_name={tmpl_var name='module_name'}'" class="button" />
-	  <input type="button" name="ed2" value="{tmpl_var name='delete_txt'}" onClick="del_module('form_del.php?form_name={tmpl_var name='form_name'}&module_name={tmpl_var name='module_name'}');" class="button" />
-	  <input type="button" name="ed3" value="{tmpl_var name='new_tab_txt'}" onClick="location.href='form_tab_edit.php?form_name={tmpl_var name='form_name'}&module_name={tmpl_var name='module_name'}'" class="button" /></td>
-  </tr>
-</table>
-</fieldset>
-<table width="350" border="0" cellspacing="0" cellpadding="2">
-  <tr>
-    <td colspan="2" class="frmText11">&nbsp;</td>
-  </tr>
-  <tmpl_var name="nav">
-  <tr>
-    <td colspan="2" class="frmText11">&nbsp;</td>
-  </tr>
-</table>
+<script language="JavaScript">
+<!--
+function del_module(link) {
+  if(window.confirm("{tmpl_var name='module_del_txt'}")) {
+  	location.href = link;
+  }
+}
+function del_menu(link) {
+  if(window.confirm("{tmpl_var name='menu_del_txt'}")) {
+  	location.href = link;
+  }
+}
+function del_menuitem(link) {
+  if(window.confirm("{tmpl_var name='item_del_txt'}")) {
+  	location.href = link;
+  }
+}
+
+//-->
+</script>
+<form name="myform" action="module_show.php" method="POST">
+<div class="frmTextHead"><tmpl_var name="header_txt"></div><br />
+<fieldset style="width:320px;"><legend class="frmText11"><b>{tmpl_var name='form_txt'}</b></legend>
+<table border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="title_txt">:</td>
+    <td width="366" class="frmText11">{tmpl_var name='title'}</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="name_txt">:</td>
+    <td width="366" class="frmText11">{tmpl_var name='form_name'}</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="module_txt">:</td>
+    <td width="366" class="frmText11">{tmpl_var name='module_name'}</td>
+  </tr>
+  <tr>
+    <td width="126" class="frmText11"><tmpl_var name="description_txt">:</td>
+    <td width="366" class="frmText11" valign="top">{tmpl_var name='description'}</td>
+  </tr>
+  <tr>
+    <td colspan="2" class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td colspan="2" class="frmText11">
+	  <input type="button" name="ed1" value="{tmpl_var name='properties_txt'}" onClick="location.href='form_edit.php?form_name={tmpl_var name='form_name'}&module_name={tmpl_var name='module_name'}'" class="button" />
+	  <input type="button" name="ed2" value="{tmpl_var name='delete_txt'}" onClick="del_module('form_del.php?form_name={tmpl_var name='form_name'}&module_name={tmpl_var name='module_name'}');" class="button" />
+	  <input type="button" name="ed3" value="{tmpl_var name='new_tab_txt'}" onClick="location.href='form_tab_edit.php?form_name={tmpl_var name='form_name'}&module_name={tmpl_var name='module_name'}'" class="button" /></td>
+  </tr>
+</table>
+</fieldset>
+<table width="350" border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td colspan="2" class="frmText11">&nbsp;</td>
+  </tr>
+  <tmpl_var name="nav">
+  <tr>
+    <td colspan="2" class="frmText11">&nbsp;</td>
+  </tr>
+</table>
 </form>
\ No newline at end of file
diff --git a/interface/web/designer/templates/paging.tpl.htm b/interface/web/designer/templates/paging.tpl.htm
index cb82704047..eb3bfa6c73 100644
--- a/interface/web/designer/templates/paging.tpl.htm
+++ b/interface/web/designer/templates/paging.tpl.htm
@@ -1,9 +1,9 @@
-[ <a href='{tmpl_var name="list_file"}?page=0'>|<< </a>]
-<tmpl_if name="show_page_back">
-	[<< <a href='{tmpl_var name="list_file"}?page={tmpl_var name="last_page"}'>Zurück</a>] 
-</tmpl_if>
-  Seite {tmpl_var name="next_page"} von {tmpl_var name="max_pages"}
-<tmpl_if name="show_page_next">
-   [<a href='{tmpl_var name="list_file"}?page={tmpl_var name="next_page"}'>Weiter >></a>]  
-</tmpl_if>
+[ <a href='{tmpl_var name="list_file"}?page=0'>|<< </a>]
+<tmpl_if name="show_page_back">
+	[<< <a href='{tmpl_var name="list_file"}?page={tmpl_var name="last_page"}'>Zurück</a>] 
+</tmpl_if>
+  Seite {tmpl_var name="next_page"} von {tmpl_var name="max_pages"}
+<tmpl_if name="show_page_next">
+   [<a href='{tmpl_var name="list_file"}?page={tmpl_var name="next_page"}'>Weiter >></a>]  
+</tmpl_if>
  [<a href='{tmpl_var name="list_file"}?page={tmpl_var name="pages"}'> >>| </a>]
\ No newline at end of file
diff --git a/interface/web/dns/dns_a_list.php b/interface/web/dns/dns_a_list.php
index 681e158395..c01aec6943 100644
--- a/interface/web/dns/dns_a_list.php
+++ b/interface/web/dns/dns_a_list.php
@@ -1,24 +1,24 @@
-<?php
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/dns_a.list.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-$app->uses('listform_actions');
-$app->listform_actions->SQLExtWhere = "type = 'A'";
-
-$app->listform_actions->onLoad();
-
-
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_a.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('listform_actions');
+$app->listform_actions->SQLExtWhere = "type = 'A'";
+
+$app->listform_actions->onLoad();
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_rr_del.php b/interface/web/dns/dns_rr_del.php
index 26d369ec6c..d88e2d9491 100644
--- a/interface/web/dns/dns_rr_del.php
+++ b/interface/web/dns/dns_rr_del.php
@@ -1,67 +1,67 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/dns_a.list.php";
-$tform_def_file = "form/dns_a.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function onAfterDelete() {
-		global $app; $conf;
-				
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = intval($this->dataRecord["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_a.list.php";
+$tform_def_file = "form/dns_a.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('tpl,tform,tform_actions,validate_dns');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onAfterDelete() {
+		global $app; $conf;
+				
+		//* Update the serial number of the SOA record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
+		$soa_id = intval($this->dataRecord["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
+	}
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_slave_del.php b/interface/web/dns/dns_slave_del.php
index 845d776b17..470bb7c0a7 100644
--- a/interface/web/dns/dns_slave_del.php
+++ b/interface/web/dns/dns_slave_del.php
@@ -1,69 +1,69 @@
-<?php
-
-/*
-Copyright (c) 2008, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/dns_slave.list.php";
-$tform_def_file = "form/dns_slave.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function onBeforeDelete() {
-		global $app; $conf;
-		
-		if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
-		
-		// Delete all records that belog to this zone.
-		$records = $app->db->queryAllRecords("SELECT id FROM dns_slave WHERE zone = '".intval($this->id)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('dns_slave','id',$rec['id']);
-		}
-	}
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2008, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_slave.list.php";
+$tform_def_file = "form/dns_slave.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onBeforeDelete() {
+		global $app; $conf;
+		
+		if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
+		
+		// Delete all records that belog to this zone.
+		$records = $app->db->queryAllRecords("SELECT id FROM dns_slave WHERE zone = '".intval($this->id)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('dns_slave','id',$rec['id']);
+		}
+	}
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_soa_del.php b/interface/web/dns/dns_soa_del.php
index 38e35bd67c..0a1944b5f2 100644
--- a/interface/web/dns/dns_soa_del.php
+++ b/interface/web/dns/dns_soa_del.php
@@ -1,69 +1,69 @@
-<?php
-
-/*
-Copyright (c) 2008, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/dns_soa.list.php";
-$tform_def_file = "form/dns_soa.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function onBeforeDelete() {
-		global $app; $conf;
-		
-		if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
-		
-		// Delete all records that belog to this zone.
-		$records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE zone = '".intval($this->id)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('dns_rr','id',$rec['id']);
-		}
-	}
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2008, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_soa.list.php";
+$tform_def_file = "form/dns_soa.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onBeforeDelete() {
+		global $app; $conf;
+		
+		if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
+		
+		// Delete all records that belog to this zone.
+		$records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE zone = '".intval($this->id)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('dns_rr','id',$rec['id']);
+		}
+	}
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_template_del.php b/interface/web/dns/dns_template_del.php
index 5aa1ff748f..bfb343cbf8 100644
--- a/interface/web/dns/dns_template_del.php
+++ b/interface/web/dns/dns_template_del.php
@@ -1,58 +1,58 @@
-<?php
-
-/*
-Copyright (c) 2008, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/dns_template.list.php";
-$tform_def_file = "form/dns_template.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2008, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_template.list.php";
+$tform_def_file = "form/dns_template.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/dns_template_list.php b/interface/web/dns/dns_template_list.php
index 4cde9a0133..20efa8d43d 100644
--- a/interface/web/dns/dns_template_list.php
+++ b/interface/web/dns/dns_template_list.php
@@ -1,24 +1,24 @@
-<?php
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/dns_template.list.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-$app->uses('listform_actions');
-// $app->listform_actions->SQLExtWhere = "access = 'REJECT'";
-
-$app->listform_actions->onLoad();
-
-
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/dns_template.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+$app->uses('listform_actions');
+// $app->listform_actions->SQLExtWhere = "access = 'REJECT'";
+
+$app->listform_actions->onLoad();
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/form/dns_template.tform.php b/interface/web/dns/form/dns_template.tform.php
index a648fd43c7..1f020da04c 100644
--- a/interface/web/dns/form/dns_template.tform.php
+++ b/interface/web/dns/form/dns_template.tform.php
@@ -1,101 +1,101 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "DNS Wizard template";
-$form["description"] 	= "";
-$form["name"] 			= "dns_template";
-$form["action"]			= "dns_template_edit.php";
-$form["db_table"]		= "dns_template";
-$form["db_table_idx"]	= "template_id";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "template";
-$form["list_default"]	= "dns_template_list.php";
-$form["auth"]			= 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['template'] = array (
-	'title' 	=> "DNS Template",
-	'width' 	=> 100,
-	'template' 	=> "templates/dns_template_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'name' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'name_error_empty'),
-									),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '40',
-			'maxlength'	=> '255'
-		),
-		'fields' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOXARRAY',
-			'default'	=> '',
-			'separator' => ',',
-			'value'		=> array('DOMAIN' => 'Domain','IP' => 'IP Address','NS1' => 'NS 1','NS2' => 'NS 2','EMAIL' => 'Email')
-		),
-		'template' => array (
-			'datatype'	=> 'TEXT',
-			'formtype'	=> 'TEXTAREA',
-			'default'	=> '',
-			'value'		=> '',
-			'cols'		=> '40',
-			'rows'		=> '15'
-		),
-		'visible' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'CHECKBOX',
-			'default'	=> 'Y',
-			'value'		=> array(0 => 'N',1 => 'Y')
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
-
-
-
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "DNS Wizard template";
+$form["description"] 	= "";
+$form["name"] 			= "dns_template";
+$form["action"]			= "dns_template_edit.php";
+$form["db_table"]		= "dns_template";
+$form["db_table_idx"]	= "template_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "template";
+$form["list_default"]	= "dns_template_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['template'] = array (
+	'title' 	=> "DNS Template",
+	'width' 	=> 100,
+	'template' 	=> "templates/dns_template_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'name' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'name_error_empty'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '40',
+			'maxlength'	=> '255'
+		),
+		'fields' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOXARRAY',
+			'default'	=> '',
+			'separator' => ',',
+			'value'		=> array('DOMAIN' => 'Domain','IP' => 'IP Address','NS1' => 'NS 1','NS2' => 'NS 2','EMAIL' => 'Email')
+		),
+		'template' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'TEXTAREA',
+			'default'	=> '',
+			'value'		=> '',
+			'cols'		=> '40',
+			'rows'		=> '15'
+		),
+		'visible' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'CHECKBOX',
+			'default'	=> 'Y',
+			'value'		=> array(0 => 'N',1 => 'Y')
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/admin.conf.php b/interface/web/dns/lib/admin.conf.php
index a45d440345..67c94a5742 100644
--- a/interface/web/dns/lib/admin.conf.php
+++ b/interface/web/dns/lib/admin.conf.php
@@ -1,2 +1,2 @@
-<?php
+<?php
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/list/dns_template.list.php b/interface/web/dns/list/dns_template.list.php
index 11a1919b11..3101eb259b 100644
--- a/interface/web/dns/list/dns_template.list.php
+++ b/interface/web/dns/list/dns_template.list.php
@@ -1,80 +1,80 @@
-<?php
-
-/*
-	Datatypes:
-	- INTEGER
-	- DOUBLE
-	- CURRENCY
-	- VARCHAR
-	- TEXT
-	- DATE
-*/
-
-
-
-// Name of the list
-$liste["name"] 				= "dns_template";
-
-// Database table
-$liste["table"] 			= "dns_template";
-
-// Index index field of the database table
-$liste["table_idx"]			= "template_id";
-
-// Search Field Prefix
-$liste["search_prefix"] 	= "search_";
-
-// Records per page
-$liste["records_per_page"] 	= 15;
-
-// Script File of the list
-$liste["file"]				= "dns_template_list.php";
-
-// Script file of the edit form
-$liste["edit_file"]			= "dns_template_edit.php";
-
-// Script File of the delete script
-$liste["delete_file"]		= "dns_template_del.php";
-
-// Paging Template
-$liste["paging_tpl"]		= "templates/paging.tpl.htm";
-
-// Enable auth
-$liste["auth"]				= "yes";
-
-
-/*****************************************************
-* Suchfelder
-*****************************************************/
-
-
-$liste["item"][] = array(	'field'		=> "visible",
-							'datatype'	=> "VARCHAR",
-							'formtype'	=> "SELECT",
-							'op'		=> "=",
-							'prefix'	=> "",
-							'suffix'	=> "",
-							'width'		=> "",
-							'value'		=> array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>",'N' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
-
-
-$liste["item"][] = array(	'field'		=> "name",
-							'datatype'	=> "VARCHAR",
-							'formtype'	=> "TEXT",
-							'op'		=> "like",
-							'prefix'	=> "%",
-							'suffix'	=> "%",
-							'width'		=> "",
-							'value'		=> "");
-
-
-
-
-
-
-
-
-
-
-
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+$liste["name"] 				= "dns_template";
+
+// Database table
+$liste["table"] 			= "dns_template";
+
+// Index index field of the database table
+$liste["table_idx"]			= "template_id";
+
+// Search Field Prefix
+$liste["search_prefix"] 	= "search_";
+
+// Records per page
+$liste["records_per_page"] 	= 15;
+
+// Script File of the list
+$liste["file"]				= "dns_template_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]			= "dns_template_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]		= "dns_template_del.php";
+
+// Paging Template
+$liste["paging_tpl"]		= "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]				= "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+
+$liste["item"][] = array(	'field'		=> "visible",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "SELECT",
+							'op'		=> "=",
+							'prefix'	=> "",
+							'suffix'	=> "",
+							'width'		=> "",
+							'value'		=> array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>",'N' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+
+
+$liste["item"][] = array(	'field'		=> "name",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
+
+
+
+
+
+
+
+
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_records_edit.htm b/interface/web/dns/templates/dns_records_edit.htm
index 1feb3f970c..1ae070c63c 100644
--- a/interface/web/dns/templates/dns_records_edit.htm
+++ b/interface/web/dns/templates/dns_records_edit.htm
@@ -1,12 +1,12 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_dns_soa">
-
-  {tmpl_var name='dns_records'}
-    
-  <div class="pnl_formsarea">
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_dns_soa">
+
+  {tmpl_var name='dns_records'}
+    
+  <div class="pnl_formsarea">
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+  </div>
+  
+</div>
diff --git a/interface/web/dns/templates/dns_template_edit.htm b/interface/web/dns/templates/dns_template_edit.htm
index 34cf3b1e09..48b99747c2 100644
--- a/interface/web/dns/templates/dns_template_edit.htm
+++ b/interface/web/dns/templates/dns_template_edit.htm
@@ -1,38 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_dns_template">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="name">{tmpl_var name='name_txt'}</label>
-        <input name="name" id="name" value="{tmpl_var name='name'}" size="40" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='fields_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='fields'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="template">{tmpl_var name='template_txt'}</label>
-        <textarea name="template" id="template" rows='15' cols='40'>{tmpl_var name='template'}</textarea>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='visible_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='visible'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_dns_template">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="name">{tmpl_var name='name_txt'}</label>
+        <input name="name" id="name" value="{tmpl_var name='name'}" size="40" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='fields_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='fields'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="template">{tmpl_var name='template_txt'}</label>
+        <textarea name="template" id="template" rows='15' cols='40'>{tmpl_var name='template'}</textarea>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='visible_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='visible'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/domain/lib/admin.conf.php b/interface/web/domain/lib/admin.conf.php
index 5e64662218..584f28bad6 100644
--- a/interface/web/domain/lib/admin.conf.php
+++ b/interface/web/domain/lib/admin.conf.php
@@ -1,29 +1,29 @@
-<?php
-/*
-Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
-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.
-*/
+<?php
+/*
+Copyright (c) 2010 Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+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.
+*/
 ?>
\ No newline at end of file
diff --git a/interface/web/domain/lib/lang/en_domain_list.lng b/interface/web/domain/lib/lang/en_domain_list.lng
index 161fd504e1..0898a00d02 100644
--- a/interface/web/domain/lib/lang/en_domain_list.lng
+++ b/interface/web/domain/lib/lang/en_domain_list.lng
@@ -1,5 +1,5 @@
-<?php
-$wb['list_head_txt'] = 'Domains';
-$wb['add_new_record_txt'] = 'Add new Domain';
-$wb['domain_txt'] = 'Domain';
+<?php
+$wb['list_head_txt'] = 'Domains';
+$wb['add_new_record_txt'] = 'Add new Domain';
+$wb['domain_txt'] = 'Domain';
 ?>
\ No newline at end of file
diff --git a/interface/web/help/templates/support_message_edit.htm b/interface/web/help/templates/support_message_edit.htm
index 305a47a2b9..4c8fbddc49 100644
--- a/interface/web/help/templates/support_message_edit.htm
+++ b/interface/web/help/templates/support_message_edit.htm
@@ -1,33 +1,33 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_support_message">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Message</legend>
-      <div class="ctrlHolder">
-      	<label for="recipient_id">{tmpl_var name='recipient_id_txt'}</label>
-        <select name="recipient_id" id="recipient_id" class="selectInput">
-					{tmpl_var name='recipient_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="subject">{tmpl_var name='subject_txt'}</label>
-        <input name="subject" id="subject" value="{tmpl_var name='subject'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="message">{tmpl_var name='message_txt'}</label>
-        <textarea name="message" id="message" rows='10' cols='30'>{tmpl_var name='message'}</textarea>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input type="hidden" name="tstamp" value="{tmpl_var name='tstamp'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','help/support_message_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('help/support_message_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_support_message">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Message</legend>
+      <div class="ctrlHolder">
+      	<label for="recipient_id">{tmpl_var name='recipient_id_txt'}</label>
+        <select name="recipient_id" id="recipient_id" class="selectInput">
+					{tmpl_var name='recipient_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="subject">{tmpl_var name='subject_txt'}</label>
+        <input name="subject" id="subject" value="{tmpl_var name='subject'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="message">{tmpl_var name='message_txt'}</label>
+        <textarea name="message" id="message" rows='10' cols='30'>{tmpl_var name='message'}</textarea>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input type="hidden" name="tstamp" value="{tmpl_var name='tstamp'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','help/support_message_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('help/support_message_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/help/templates/support_message_view.htm b/interface/web/help/templates/support_message_view.htm
index f406e9cbf5..9ca312c107 100644
--- a/interface/web/help/templates/support_message_view.htm
+++ b/interface/web/help/templates/support_message_view.htm
@@ -1,24 +1,24 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_support_message">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Message</legend>
-      <div class="ctrlHolder">
-      	<label for="subject">{tmpl_var name='subject_txt'}</label>
-        <p>{tmpl_var name='subject'}</p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="message">{tmpl_var name='message_txt'}</label>
-        <p>{tmpl_var name='message'}</p>
-      </div>
-    </fieldset>
-<div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='reply_txt'}" onClick="loadContent('help/support_message_edit.php?reply={tmpl_var name='id'}');"><span>{tmpl_var name='reply_txt'}</span></button>
-    </div>
-  </div>
-
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_support_message">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Message</legend>
+      <div class="ctrlHolder">
+      	<label for="subject">{tmpl_var name='subject_txt'}</label>
+        <p>{tmpl_var name='subject'}</p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="message">{tmpl_var name='message_txt'}</label>
+        <p>{tmpl_var name='message'}</p>
+      </div>
+    </fieldset>
+<div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='reply_txt'}" onClick="loadContent('help/support_message_edit.php?reply={tmpl_var name='id'}');"><span>{tmpl_var name='reply_txt'}</span></button>
+    </div>
+  </div>
+
+  </div>
+  
+</div>
diff --git a/interface/web/index.php b/interface/web/index.php
index 9c312824e6..b8b32ec78a 100644
--- a/interface/web/index.php
+++ b/interface/web/index.php
@@ -1,41 +1,41 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-error_reporting(E_ALL|E_STRICT);
-
-require_once('../lib/config.inc.php');
-require_once('../lib/app.inc.php');
-
-$app->uses('tpl');
-$app->tpl->newTemplate('main.tpl.htm');
-
-$app->tpl_defaults();
-$app->tpl->pparse();
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+error_reporting(E_ALL|E_STRICT);
+
+require_once('../lib/config.inc.php');
+require_once('../lib/app.inc.php');
+
+$app->uses('tpl');
+$app->tpl->newTemplate('main.tpl.htm');
+
+$app->tpl_defaults();
+$app->tpl->pparse();
 ?>
\ No newline at end of file
diff --git a/interface/web/js/yui/datatable/assets/datatable.css b/interface/web/js/yui/datatable/assets/datatable.css
index bdf4a7ae24..4885ff7386 100644
--- a/interface/web/js/yui/datatable/assets/datatable.css
+++ b/interface/web/js/yui/datatable/assets/datatable.css
@@ -4,79 +4,79 @@ Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
 version: 2.2.0
 */
-/*debug css
-.example span, .example .yui-dt-columntext {border:1px solid red;}*/
-
-/*foundational css*/
-td {
-    overflow:hidden;
-}
-
-.yui-dt-headcontainer {
-    position:relative;
-    
-}
-
-.yui-dt-headtext {
-    position:relative;
-    border-right:10px;
-}
-
-.yui-dt-headresizer {
-    position:absolute;
-    margin-right:-6px;
-    right:0;
-    bottom:0;
-    width:6px;
-    height:100%;
-    cursor:w-resize;
-    cursor:col-resize;
-}
-
-.yui-dt-firstlink,.yui-dt-prevlink,.yui-dt-nextlink,.yui-dt-lastlink,.yui-dt-pagelink {
-    cursor:hand;
-    cursor:pointer;
-    text-decoration:underline;
-}
-
-.yui-dt-scrollable  {
-   width:20em;
-   margin-bottom:3em;
-}
-
-
-.yui-dt-scrollable  thead {
-   background:#696969; /*  IE needs a bgcolor to hide tbody as it scrolls */
-   border:1px solid #000;
-   display:block; /* enables tbody scrolling for safari and opera */
-}
-
-.yui-dt-scrollable  thead th {
-   width:10em; /* any value seems to here, just need something */
-}
-
-tbody.yui-dt-scrollable {
-   display:block; /* enables tbody scrolling for safari and opera */
-   height:10em;
-   overflow:auto; /* for scrolling other than IE */
-}
-
-/* IE specific */
-.yui-dt-scrollable  {
-   height:10em;
-   *overflow-y:auto;
-}
-
-.yui-dt-scrollable  tbody {
-   *height:auto; /* override the non IE height */
-}
-
-.yui-dt-scrollable thead tr {
-   position:relative;  /* IE cant scroll tbody, so trick it into fixing thead */
-}
-
-.yui-dt-scrollable tbody td {
-    width:10em;
-}
-
-
+/*debug css
+.example span, .example .yui-dt-columntext {border:1px solid red;}*/
+
+/*foundational css*/
+td {
+    overflow:hidden;
+}
+
+.yui-dt-headcontainer {
+    position:relative;
+    
+}
+
+.yui-dt-headtext {
+    position:relative;
+    border-right:10px;
+}
+
+.yui-dt-headresizer {
+    position:absolute;
+    margin-right:-6px;
+    right:0;
+    bottom:0;
+    width:6px;
+    height:100%;
+    cursor:w-resize;
+    cursor:col-resize;
+}
+
+.yui-dt-firstlink,.yui-dt-prevlink,.yui-dt-nextlink,.yui-dt-lastlink,.yui-dt-pagelink {
+    cursor:hand;
+    cursor:pointer;
+    text-decoration:underline;
+}
+
+.yui-dt-scrollable  {
+   width:20em;
+   margin-bottom:3em;
+}
+
+
+.yui-dt-scrollable  thead {
+   background:#696969; /*  IE needs a bgcolor to hide tbody as it scrolls */
+   border:1px solid #000;
+   display:block; /* enables tbody scrolling for safari and opera */
+}
+
+.yui-dt-scrollable  thead th {
+   width:10em; /* any value seems to here, just need something */
+}
+
+tbody.yui-dt-scrollable {
+   display:block; /* enables tbody scrolling for safari and opera */
+   height:10em;
+   overflow:auto; /* for scrolling other than IE */
+}
+
+/* IE specific */
+.yui-dt-scrollable  {
+   height:10em;
+   *overflow-y:auto;
+}
+
+.yui-dt-scrollable  tbody {
+   *height:auto; /* override the non IE height */
+}
+
+.yui-dt-scrollable thead tr {
+   position:relative;  /* IE cant scroll tbody, so trick it into fixing thead */
+}
+
+.yui-dt-scrollable tbody td {
+    width:10em;
+}
+
+
diff --git a/interface/web/js/yui/logger/assets/logger.css b/interface/web/js/yui/logger/assets/logger.css
index a723cfee3b..bca6e0b6c7 100644
--- a/interface/web/js/yui/logger/assets/logger.css
+++ b/interface/web/js/yui/logger/assets/logger.css
@@ -4,23 +4,23 @@ Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
 version: 2.2.0
 */
-/* logger default styles */
-/* font size is controlled here: default 77% */
-#yui-log {position:absolute;top:1em;right:1em;font-size:77%;text-align:left;}
-/* width is controlled here: default 31em */
-.yui-log {padding:1em;width:31em;background-color:#AAA;border:1px solid black;font-family:monospace;z-index:9000;}
-.yui-log p {margin:1px;padding:.1em;}
-.yui-log button {font-family:monospace;}
-.yui-log .yui-log-hd {margin-top:1em;padding:.5em;background-color:#575757;color:#FFF;}
-/* height is controlled here: default 20em*/
-.yui-log .yui-log-bd {width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto;}
-.yui-log .yui-log-ft {margin-top:.5em;margin-bottom:1em;}
-.yui-log .yui-log-ft .yui-log-categoryfilters {}
-.yui-log .yui-log-ft .yui-log-sourcefilters {width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em;}
-.yui-log .yui-log-btns {position:relative;float:right;bottom:.25em;}
-.yui-log .yui-log-filtergrp {margin-right:.5em;}
-.yui-log .info {background-color:#A7CC25;} /* A7CC25 green */
-.yui-log .warn {background-color:#F58516;} /* F58516 orange */
-.yui-log .error {background-color:#E32F0B;} /* E32F0B red */
-.yui-log .time {background-color:#A6C9D7;} /* A6C9D7 blue */
-.yui-log .window {background-color:#F2E886;} /* F2E886 tan */
+/* logger default styles */
+/* font size is controlled here: default 77% */
+#yui-log {position:absolute;top:1em;right:1em;font-size:77%;text-align:left;}
+/* width is controlled here: default 31em */
+.yui-log {padding:1em;width:31em;background-color:#AAA;border:1px solid black;font-family:monospace;z-index:9000;}
+.yui-log p {margin:1px;padding:.1em;}
+.yui-log button {font-family:monospace;}
+.yui-log .yui-log-hd {margin-top:1em;padding:.5em;background-color:#575757;color:#FFF;}
+/* height is controlled here: default 20em*/
+.yui-log .yui-log-bd {width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto;}
+.yui-log .yui-log-ft {margin-top:.5em;margin-bottom:1em;}
+.yui-log .yui-log-ft .yui-log-categoryfilters {}
+.yui-log .yui-log-ft .yui-log-sourcefilters {width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em;}
+.yui-log .yui-log-btns {position:relative;float:right;bottom:.25em;}
+.yui-log .yui-log-filtergrp {margin-right:.5em;}
+.yui-log .info {background-color:#A7CC25;} /* A7CC25 green */
+.yui-log .warn {background-color:#F58516;} /* F58516 orange */
+.yui-log .error {background-color:#E32F0B;} /* E32F0B red */
+.yui-log .time {background-color:#A6C9D7;} /* A6C9D7 blue */
+.yui-log .window {background-color:#F2E886;} /* F2E886 tan */
diff --git a/interface/web/login/templates/password_reset.htm b/interface/web/login/templates/password_reset.htm
index f3f99d2250..d47210ad49 100644
--- a/interface/web/login/templates/password_reset.htm
+++ b/interface/web/login/templates/password_reset.htm
@@ -1,33 +1,33 @@
-<h2>Password Reset</h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_password_reset">
-  
-  <tmpl_if name="msg">
-	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
-  </tmpl_if>
-  <tmpl_if name="error">
-	<div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
-  </tmpl_if>
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Password reset</legend>
-      <div class="ctrlHolder">
-      	<label for="email"><em>*</em> E-Mail</label>
-        <input name="email" id="email" value="" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="username"><em>*</em> Username</label>
-        <input name="username" id="username" value="" size="30" maxlength="255" type="text" class="textInput" />
-			</div>			
-    </fieldset>
-
-    <input type="hidden" name="s_mod" value="login" />
-    <input type="hidden" name="s_pg" value="index" />
-    
-    <div class="buttonHolder buttons">
-      <button class="positive" type="button" value="{tmpl_var name="add_new_record_txt"}" onClick="submitForm('pageForm','login/password_reset.php');"><span>Resend password</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2>Password Reset</h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_password_reset">
+  
+  <tmpl_if name="msg">
+	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+  </tmpl_if>
+  <tmpl_if name="error">
+	<div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
+  </tmpl_if>
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Password reset</legend>
+      <div class="ctrlHolder">
+      	<label for="email"><em>*</em> E-Mail</label>
+        <input name="email" id="email" value="" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="username"><em>*</em> Username</label>
+        <input name="username" id="username" value="" size="30" maxlength="255" type="text" class="textInput" />
+			</div>			
+    </fieldset>
+
+    <input type="hidden" name="s_mod" value="login" />
+    <input type="hidden" name="s_pg" value="index" />
+    
+    <div class="buttonHolder buttons">
+      <button class="positive" type="button" value="{tmpl_var name="add_new_record_txt"}" onClick="submitForm('pageForm','login/password_reset.php');"><span>Resend password</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/form/mail_mailinglist.tform.php b/interface/web/mail/form/mail_mailinglist.tform.php
index 1b4ce69080..b0e390b468 100644
--- a/interface/web/mail/form/mail_mailinglist.tform.php
+++ b/interface/web/mail/form/mail_mailinglist.tform.php
@@ -1,122 +1,122 @@
-<?php
-
-/*
-	Form Definition
-
-	Tabledefinition
-
-	Datatypes:
-	- INTEGER (Forces the input to Int)
-	- DOUBLE
-	- CURRENCY (Formats the values to currency notation)
-	- VARCHAR (no format check, maxlength: 255)
-	- TEXT (no format check)
-	- DATE (Dateformat, automatic conversion to timestamps)
-
-	Formtype:
-	- TEXT (Textfield)
-	- TEXTAREA (Textarea)
-	- PASSWORD (Password textfield, input is not shown when edited)
-	- SELECT (Select option field)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hint:
-	The ID field of the database table is not part of the datafield definition.
-	The ID field must be always auto incement (int or bigint).
-
-
-*/
-
-$form["title"] 			= "Mailing List";
-$form["description"] 	= "";
-$form["name"] 			= "mail_mailinglist";
-$form["action"]			= "mail_mailinglist_edit.php";
-$form["db_table"]		= "mail_mailinglist";
-$form["db_table_idx"]	= "mailinglist_id";
-$form["db_history"]		= "yes";
-$form["tab_default"]	= "mailinglist";
-$form["list_default"]	= "mail_mailinglist_list.php";
-$form["auth"]			= 'yes'; // yes / no
-
-$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
-$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
-$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
-
-$form["tabs"]['mailinglist'] = array (
-	'title' 	=> "Mailing List",
-	'width' 	=> 100,
-	'template' 	=> "templates/mail_mailinglist_edit.htm",
-	'fields' 	=> array (
-	##################################
-	# Begin Datatable fields
-	##################################
-		'server_id' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'SELECT',
-			'default'	=> '',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND mirror_server_id = 0 AND {AUTHSQL} ORDER BY server_name',
-										'keyfield'=> 'server_id',
-										'valuefield'=> 'server_name'
-									 ),
-			'value'	=> ''
-		),
-		'domain' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'domain_error_empty'),
-										1 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z\-]{2,10}$/',
-														'errmsg'=> 'domain_error_regex'),
-									),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'listname' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'listname_error_empty'),
-									),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'email' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'ISEMAIL',
-														'errmsg'=> 'email_error_isemail'),
-									),
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-		'password' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'PASSWORD',
-			'encryption'=> 'CLEARTEXT',
-			'default'	=> '',
-			'value'		=> '',
-			'width'		=> '30',
-			'maxlength'	=> '255'
-		),
-	##################################
-	# ENDE Datatable fields
-	##################################
-	)
-);
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"] 			= "Mailing List";
+$form["description"] 	= "";
+$form["name"] 			= "mail_mailinglist";
+$form["action"]			= "mail_mailinglist_edit.php";
+$form["db_table"]		= "mail_mailinglist";
+$form["db_table_idx"]	= "mailinglist_id";
+$form["db_history"]		= "yes";
+$form["tab_default"]	= "mailinglist";
+$form["list_default"]	= "mail_mailinglist_list.php";
+$form["auth"]			= 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['mailinglist'] = array (
+	'title' 	=> "Mailing List",
+	'width' 	=> 100,
+	'template' 	=> "templates/mail_mailinglist_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'server_id' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'SELECT',
+			'default'	=> '',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND mirror_server_id = 0 AND {AUTHSQL} ORDER BY server_name',
+										'keyfield'=> 'server_id',
+										'valuefield'=> 'server_name'
+									 ),
+			'value'	=> ''
+		),
+		'domain' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'domain_error_empty'),
+										1 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z\-]{2,10}$/',
+														'errmsg'=> 'domain_error_regex'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'listname' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'listname_error_empty'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'email' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'ISEMAIL',
+														'errmsg'=> 'email_error_isemail'),
+									),
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+		'password' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption'=> 'CLEARTEXT',
+			'default'	=> '',
+			'value'		=> '',
+			'width'		=> '30',
+			'maxlength'	=> '255'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/admin.conf.php b/interface/web/mail/lib/admin.conf.php
index a45d440345..67c94a5742 100644
--- a/interface/web/mail/lib/admin.conf.php
+++ b/interface/web/mail/lib/admin.conf.php
@@ -1,2 +1,2 @@
-<?php
+<?php
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_alias_list.lng b/interface/web/mail/lib/lang/en_mail_alias_list.lng
index 10d5a6c7eb..2a6fbc32ad 100644
--- a/interface/web/mail/lib/lang/en_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_alias_list.lng
@@ -1,8 +1,8 @@
-<?php
-$wb["list_head_txt"] = 'Email Alias';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Email alias';
+<?php
+$wb["list_head_txt"] = 'Email Alias';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Email alias';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_blacklist_list.lng b/interface/web/mail/lib/lang/en_mail_blacklist_list.lng
index 9eb28ce3bc..322d8bda94 100644
--- a/interface/web/mail/lib/lang/en_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_blacklist_list.lng
@@ -1,10 +1,10 @@
-<?php
-$wb["list_head_txt"] = 'Email Blacklist';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["source_txt"] = 'Blacklisted address';
-$wb["type_txt"] = 'Type';
-$wb["recipient_txt"] = 'Recipient';
-$wb["add_new_record_txt"] = 'Add new Blacklist record';
-$wb["access_txt"] = 'access';
+<?php
+$wb["list_head_txt"] = 'Email Blacklist';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["source_txt"] = 'Blacklisted address';
+$wb["type_txt"] = 'Type';
+$wb["recipient_txt"] = 'Recipient';
+$wb["add_new_record_txt"] = 'Add new Blacklist record';
+$wb["access_txt"] = 'access';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/en_mail_domain_admin_list.lng
index 03350cf800..c56e27b8e8 100644
--- a/interface/web/mail/lib/lang/en_mail_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_domain_admin_list.lng
@@ -1,8 +1,8 @@
-<?php
-$wb["list_head_txt"] = 'Email Domain';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["add_new_record_txt"] = 'Add new Domain';
-$wb["active_txt"] = 'Active';
-$wb["sys_groupid_txt"] = 'Client';
+<?php
+$wb["list_head_txt"] = 'Email Domain';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["add_new_record_txt"] = 'Add new Domain';
+$wb["active_txt"] = 'Active';
+$wb["sys_groupid_txt"] = 'Client';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/en_mail_domain_catchall_list.lng
index 589423b9a5..386737fb13 100644
--- a/interface/web/mail/lib/lang/en_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_domain_catchall_list.lng
@@ -1,9 +1,9 @@
-<?php
-$wb["list_head_txt"] = 'Email Catchall';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination email address';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["add_new_record_txt"] = 'Add new Catchall';
+<?php
+$wb["list_head_txt"] = 'Email Catchall';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination email address';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["add_new_record_txt"] = 'Add new Catchall';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_forward_list.lng b/interface/web/mail/lib/lang/en_mail_forward_list.lng
index f850512f1d..9d10b1cabd 100644
--- a/interface/web/mail/lib/lang/en_mail_forward_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_forward_list.lng
@@ -1,8 +1,8 @@
-<?php
-$wb["list_head_txt"] = 'Mail Forward';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Email forward';
+<?php
+$wb["list_head_txt"] = 'Mail Forward';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Email forward';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_mailinglist.lng b/interface/web/mail/lib/lang/en_mail_mailinglist.lng
index 44790b1ad4..f7ada3e384 100644
--- a/interface/web/mail/lib/lang/en_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/en_mail_mailinglist.lng
@@ -1,15 +1,15 @@
-<?php
-$wb["limit_mailmailinglist_txt"] = 'Limit reached';
-$wb["domain_error_empty"] = 'Domain is empty.';
-$wb["listname_error_empty"] = 'Listname is empty.';
-$wb["domain_error_regex"] = 'Invalid domain name.';
-$wb["email_in_use_txt"] = 'Email is in use';
-$wb["no_domain_perm"] = 'You have no permission for this domain.';
-$wb["password_strength_txt"] = 'Password strength';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["listname_txt"] = 'Listname';
-$wb["client_txt"] = 'Client';
-$wb["email_txt"] = 'Email';
-$wb["password_txt"] = 'Password';
+<?php
+$wb["limit_mailmailinglist_txt"] = 'Limit reached';
+$wb["domain_error_empty"] = 'Domain is empty.';
+$wb["listname_error_empty"] = 'Listname is empty.';
+$wb["domain_error_regex"] = 'Invalid domain name.';
+$wb["email_in_use_txt"] = 'Email is in use';
+$wb["no_domain_perm"] = 'You have no permission for this domain.';
+$wb["password_strength_txt"] = 'Password strength';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["listname_txt"] = 'Listname';
+$wb["client_txt"] = 'Client';
+$wb["email_txt"] = 'Email';
+$wb["password_txt"] = 'Password';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/en_mail_mailinglist_list.lng
index ec48108bf9..0f88589718 100644
--- a/interface/web/mail/lib/lang/en_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_mailinglist_list.lng
@@ -1,5 +1,5 @@
-<?php
-$wb["list_head_txt"] = 'Mailing List';
-$wb["domain_txt"] = 'Domain';
-$wb["listname_txt"] = 'Listname';
+<?php
+$wb["list_head_txt"] = 'Mailing List';
+$wb["domain_txt"] = 'Domain';
+$wb["listname_txt"] = 'Listname';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/en_mail_spamfilter_list.lng
index 22316fa12b..bcc1f83b2b 100644
--- a/interface/web/mail/lib/lang/en_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_spamfilter_list.lng
@@ -1,8 +1,8 @@
-<?php
-$wb["list_head_txt"] = 'Spamfilter';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["server_name_txt"] = 'server_name';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Spamfilter record';
+<?php
+$wb["list_head_txt"] = 'Spamfilter';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["server_name_txt"] = 'server_name';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Spamfilter record';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_transport_list.lng b/interface/web/mail/lib/lang/en_mail_transport_list.lng
index febadb874b..5dfb8091fc 100644
--- a/interface/web/mail/lib/lang/en_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_transport_list.lng
@@ -1,9 +1,9 @@
-<?php
-$wb["list_head_txt"] = 'Advanced Email Routing';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["transport_txt"] = 'Transport';
-$wb["sort_order_txt"] = 'Sort by';
-$wb["add_new_record_txt"] = 'Add new transport';
+<?php
+$wb["list_head_txt"] = 'Advanced Email Routing';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["transport_txt"] = 'Transport';
+$wb["sort_order_txt"] = 'Sort by';
+$wb["add_new_record_txt"] = 'Add new transport';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_whitelist_list.lng b/interface/web/mail/lib/lang/en_mail_whitelist_list.lng
index 22aedf23d0..5396c721e6 100644
--- a/interface/web/mail/lib/lang/en_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_whitelist_list.lng
@@ -1,10 +1,10 @@
-<?php
-$wb["list_head_txt"] = 'Email Whitelist';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["source_txt"] = 'Whitelisted address';
-$wb["type_txt"] = 'Type';
-$wb["recipient_txt"] = 'Recipient';
-$wb["add_new_record_txt"] = 'Add new Whitelist record';
-$wb["access_txt"] = 'access';
+<?php
+$wb["list_head_txt"] = 'Email Whitelist';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["source_txt"] = 'Whitelisted address';
+$wb["type_txt"] = 'Type';
+$wb["recipient_txt"] = 'Recipient';
+$wb["add_new_record_txt"] = 'Add new Whitelist record';
+$wb["access_txt"] = 'access';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/en_spamfilter_policy_list.lng
index 1e87733a0f..f534123dee 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_policy_list.lng
@@ -1,9 +1,9 @@
-<?php
-$wb["list_head_txt"] = 'Spamfilter Policy';
-$wb["policy_name_txt"] = 'Name';
-$wb["virus_lover_txt"] = 'Virus lover';
-$wb["spam_lover_txt"] = 'Spam lover';
-$wb["banned_files_lover_txt"] = 'Banned Files lover';
-$wb["bad_header_lover_txt"] = 'Bad Header lover';
-$wb["add_new_record_txt"] = 'Add Policy record';
+<?php
+$wb["list_head_txt"] = 'Spamfilter Policy';
+$wb["policy_name_txt"] = 'Name';
+$wb["virus_lover_txt"] = 'Virus lover';
+$wb["spam_lover_txt"] = 'Spam lover';
+$wb["banned_files_lover_txt"] = 'Banned Files lover';
+$wb["bad_header_lover_txt"] = 'Bad Header lover';
+$wb["add_new_record_txt"] = 'Add Policy record';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_spamfilter_users_list.lng b/interface/web/mail/lib/lang/en_spamfilter_users_list.lng
index 75fc98e76c..aa8fea39ba 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_users_list.lng
@@ -1,10 +1,10 @@
-<?php
-$wb["list_head_txt"] = 'Spamfilter Users';
-$wb["local_txt"] = 'Local';
-$wb["server_id_txt"] = 'Server';
-$wb["priority_txt"] = 'Priority';
-$wb["policy_id_txt"] = 'Policy';
-$wb["fullname_txt"] = 'Name';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add Spamfilter User';
+<?php
+$wb["list_head_txt"] = 'Spamfilter Users';
+$wb["local_txt"] = 'Local';
+$wb["server_id_txt"] = 'Server';
+$wb["priority_txt"] = 'Priority';
+$wb["policy_id_txt"] = 'Policy';
+$wb["fullname_txt"] = 'Name';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add Spamfilter User';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/en_spamfilter_whitelist_list.lng
index 72495f5e09..e5efd3f4d2 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_whitelist_list.lng
@@ -1,9 +1,9 @@
-<?php
-$wb["list_head_txt"] = 'Spamfilter Whitelist';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["priority_txt"] = 'Priority';
-$wb["rid_txt"] = 'User';
-$wb["email_txt"] = 'Whitelisted Email';
-$wb["add_new_record_txt"] = 'Add Whitelist record';
+<?php
+$wb["list_head_txt"] = 'Spamfilter Whitelist';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["priority_txt"] = 'Priority';
+$wb["rid_txt"] = 'User';
+$wb["email_txt"] = 'Whitelisted Email';
+$wb["add_new_record_txt"] = 'Add Whitelist record';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 9af401fe7c..c2cc1b1ad5 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -22,8 +22,8 @@ $wb['no_policy'] = '- non activé -';
 $wb['limit_mailbox_txt'] = 'The max. number of mailboxes for your account is reached.';
 $wb['limit_mailquota_txt'] = 'The max space for mailboxes is reached. The max. available space in MB is';
 $wb['welcome_mail_subject'] = 'Bienvenue sur votre nouveau compte mail.';
-$wb['welcome_mail_message'] = 'Bienvenue sur votre nouveau compte mail.
-
+$wb['welcome_mail_message'] = 'Bienvenue sur votre nouveau compte mail.
+
 Votre webmaster.';
 $wb['disableimap_txt'] = 'Désactiver IMAP';
 $wb['disablepop3_txt'] = 'Désactiver POP3';
diff --git a/interface/web/mail/lib/lang/id_mail_alias_list.lng b/interface/web/mail/lib/lang/id_mail_alias_list.lng
index 10d5a6c7eb..2a6fbc32ad 100644
--- a/interface/web/mail/lib/lang/id_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/id_mail_alias_list.lng
@@ -1,8 +1,8 @@
-<?php
-$wb["list_head_txt"] = 'Email Alias';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Email alias';
+<?php
+$wb["list_head_txt"] = 'Email Alias';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Email alias';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index 522845c6ee..11fad78c5f 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -1,200 +1,200 @@
-<?php
-
-$userid=$app->auth->get_user_id();
-
-$module['name'] 		= 'mail';
-$module['title'] 		= 'top_menu_email';
-$module['template'] 	= 'module.tpl.htm';
-$module['startpage'] 	= 'mail/mail_domain_list.php';
-$module['tab_width']    = '';
-
-
-//**** Email accounts menu
-$items = array();
-
-if($app->auth->get_client_limit($userid,'maildomain') != 0)
-{
-	$items[] = array( 'title' 	=> 'Domain',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_domain_list.php',
-					  'html_id' => 'mail_domain_list');
-}
-	
-if($app->auth->get_client_limit($userid,'mailaliasdomain') != 0)
-{
-	$items[] = array( 'title' 	=> 'Domain Alias',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_aliasdomain_list.php',
-					  'html_id' => 'mail_aliasdomain_list');
-}
-
-if($app->auth->get_client_limit($userid,'mailbox') != 0)
-{
-	$items[] = array( 'title' 	=> 'Email Mailbox',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_user_list.php',
-					  'html_id' => 'mail_user_list');
-}
-
-if($app->auth->get_client_limit($userid,'mailalias') != 0)
-{
-	$items[] = array( 'title' 	=> 'Email Alias',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_alias_list.php',
-					  'html_id' => 'mail_alias_list');
-}
-
-if($app->auth->get_client_limit($userid,'mailforward') != 0)
-{
-	$items[] = array( 'title' 	=> 'Email Forward',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_forward_list.php',
-					  'html_id' => 'mail_forward_list');
-}
-
-if($app->auth->get_client_limit($userid,'mailcatchall') != 0)
-{
-	$items[] = array( 'title' 	=> 'Email Catchall',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_domain_catchall_list.php',
-					  'html_id' => 'mail_domain_catchall_list');
-}
-
-if($app->auth->get_client_limit($userid,'mailrouting') != 0)
-{
-	$items[] = array( 'title' 	=> 'Email Routing',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_transport_list.php',
-					  'html_id' => 'mail_transport_list');
-}
-
-if(count($items))
-{
-	$module['nav'][] = array(	'title'	=> 'Email Accounts',
-								'open' 	=> 1,
-								'items'	=> $items);
-}
-
-//**** Mailinglist menu
-$items = array();
-
-if($app->auth->get_client_limit($userid,'mailmailinglist') != 0)
-{
-	$items[] = array( 'title' 	=> 'Mailing List',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_mailinglist_list.php',
-					  'html_id' => 'mail_mailinglist_list');
-}
-
-if(count($items))
-{
-	$module['nav'][] = array(	'title'	=> 'Mailing List',
-								'open' 	=> 1,
-								'items'	=> $items);
-}
-
-//**** Spamfilter menu
-$items = array();
-
-if($app->auth->get_client_limit($userid,'spamfilter_wblist') != 0)
-{
-	$items[] = array( 'title' 	=> 'Whitelist',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/spamfilter_whitelist_list.php',
-					  'html_id' => 'spamfilter_whitelist_list');
-		
-	$items[] = array( 'title' 	=> 'Blacklist',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/spamfilter_blacklist_list.php',
-					  'html_id' => 'spamfilter_blacklist_list');
-}
-
-if($app->auth->is_admin()) {
-
-	$items[] = array( 	'title' 	=> 'User / Domain',
-				  		'target' 	=> 'content',
-				  		'link'	    => 'mail/spamfilter_users_list.php',
-				  		'html_id' => 'spamfilter_users_list');
-
-	$items[] = array( 	'title' 	=> 'Policy',
-				  		'target' 	=> 'content',
-				  		'link'	    => 'mail/spamfilter_policy_list.php',
-				  		'html_id' => 'spamfilter_policy_list');
-
-//	$items[] = array( 	'title' 	=> 'Server Settings',
-//				  		'target' 	=> 'content',
-//				  		'link'	    => 'mail/spamfilter_config_list.php');
-}
-
-if(count($items))
-{
-	$module['nav'][] = array(	'title'	=> 'Spamfilter',
-								'open' 	=> 1,
-								'items'	=> $items);
-}
-
-//**** Fetchmail menu
-$items = array();
-
-if($app->auth->get_client_limit($userid,'fetchmail') != 0)
-{
-	$items[] = array( 'title' 	=> 'Fetchmail',
-					  'target' 	=> 'content',
-					  'link'	=> 'mail/mail_get_list.php',
-					  'html_id' => 'mail_get_list');
-		
-	$module['nav'][] = array(	'title'	=> 'Fetchmail',
-								'open' 	=> 1,
-								'items'	=> $items);
-}
-
-
-
-//**** Statistics menu
-$items = array();
-
-$items[] = array( 'title' 	=> 'Mailbox traffic',
-				  'target' 	=> 'content',
-				  'link'	=> 'mail/mail_user_stats.php',
-				  'html_id' => 'mail_user_stats');
-
-
-
-$module['nav'][] = array(	'title'	=> 'Statistics',
-							'open' 	=> 1,
-							'items'	=> $items);
-
-
-//**** Global filters menu
-$items = array();
-if($_SESSION['s']['user']['typ'] == 'admin') {
-
-	$items[] = array(   'title' 	=> 'Postfix Whitelist',
-  				  	    'target' 	=> 'content',
-				  	    'link'	    => 'mail/mail_whitelist_list.php',
-				  	    'html_id' => 'mail_whitelist_list');
-
-
-	$items[] = array(   'title' 	=> 'Postfix Blacklist',
-				 	    'target' 	=> 'content',
-				  	    'link'	    => 'mail/mail_blacklist_list.php',
-				  	    'html_id' => 'mail_blacklist_list');
-
-
-	$items[] = array(   'title' 	=> 'Content Filter',
-				 	    'target' 	=> 'content',
-				  	    'link'	    => 'mail/mail_content_filter_list.php',
-				  	    'html_id' => 'mail_content_filter_list');
-
-
-	$items[] = array(   'title' 	=> 'Relay Recipients',
-				 	    'target' 	=> 'content',
-				  	    'link'	    => 'mail/mail_relay_recipient_list.php',
-				  	    'html_id' => 'mail_relay_recipient_list');
-
-
-	$module['nav'][] = array(	'title'	=> 'Global Filters',
-								'open' 	=> 1,
-								'items'	=> $items);
-}
+<?php
+
+$userid=$app->auth->get_user_id();
+
+$module['name'] 		= 'mail';
+$module['title'] 		= 'top_menu_email';
+$module['template'] 	= 'module.tpl.htm';
+$module['startpage'] 	= 'mail/mail_domain_list.php';
+$module['tab_width']    = '';
+
+
+//**** Email accounts menu
+$items = array();
+
+if($app->auth->get_client_limit($userid,'maildomain') != 0)
+{
+	$items[] = array( 'title' 	=> 'Domain',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_domain_list.php',
+					  'html_id' => 'mail_domain_list');
+}
+	
+if($app->auth->get_client_limit($userid,'mailaliasdomain') != 0)
+{
+	$items[] = array( 'title' 	=> 'Domain Alias',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_aliasdomain_list.php',
+					  'html_id' => 'mail_aliasdomain_list');
+}
+
+if($app->auth->get_client_limit($userid,'mailbox') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Mailbox',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_user_list.php',
+					  'html_id' => 'mail_user_list');
+}
+
+if($app->auth->get_client_limit($userid,'mailalias') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Alias',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_alias_list.php',
+					  'html_id' => 'mail_alias_list');
+}
+
+if($app->auth->get_client_limit($userid,'mailforward') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Forward',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_forward_list.php',
+					  'html_id' => 'mail_forward_list');
+}
+
+if($app->auth->get_client_limit($userid,'mailcatchall') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Catchall',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_domain_catchall_list.php',
+					  'html_id' => 'mail_domain_catchall_list');
+}
+
+if($app->auth->get_client_limit($userid,'mailrouting') != 0)
+{
+	$items[] = array( 'title' 	=> 'Email Routing',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_transport_list.php',
+					  'html_id' => 'mail_transport_list');
+}
+
+if(count($items))
+{
+	$module['nav'][] = array(	'title'	=> 'Email Accounts',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
+
+//**** Mailinglist menu
+$items = array();
+
+if($app->auth->get_client_limit($userid,'mailmailinglist') != 0)
+{
+	$items[] = array( 'title' 	=> 'Mailing List',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_mailinglist_list.php',
+					  'html_id' => 'mail_mailinglist_list');
+}
+
+if(count($items))
+{
+	$module['nav'][] = array(	'title'	=> 'Mailing List',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
+
+//**** Spamfilter menu
+$items = array();
+
+if($app->auth->get_client_limit($userid,'spamfilter_wblist') != 0)
+{
+	$items[] = array( 'title' 	=> 'Whitelist',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/spamfilter_whitelist_list.php',
+					  'html_id' => 'spamfilter_whitelist_list');
+		
+	$items[] = array( 'title' 	=> 'Blacklist',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/spamfilter_blacklist_list.php',
+					  'html_id' => 'spamfilter_blacklist_list');
+}
+
+if($app->auth->is_admin()) {
+
+	$items[] = array( 	'title' 	=> 'User / Domain',
+				  		'target' 	=> 'content',
+				  		'link'	    => 'mail/spamfilter_users_list.php',
+				  		'html_id' => 'spamfilter_users_list');
+
+	$items[] = array( 	'title' 	=> 'Policy',
+				  		'target' 	=> 'content',
+				  		'link'	    => 'mail/spamfilter_policy_list.php',
+				  		'html_id' => 'spamfilter_policy_list');
+
+//	$items[] = array( 	'title' 	=> 'Server Settings',
+//				  		'target' 	=> 'content',
+//				  		'link'	    => 'mail/spamfilter_config_list.php');
+}
+
+if(count($items))
+{
+	$module['nav'][] = array(	'title'	=> 'Spamfilter',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
+
+//**** Fetchmail menu
+$items = array();
+
+if($app->auth->get_client_limit($userid,'fetchmail') != 0)
+{
+	$items[] = array( 'title' 	=> 'Fetchmail',
+					  'target' 	=> 'content',
+					  'link'	=> 'mail/mail_get_list.php',
+					  'html_id' => 'mail_get_list');
+		
+	$module['nav'][] = array(	'title'	=> 'Fetchmail',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
+
+
+
+//**** Statistics menu
+$items = array();
+
+$items[] = array( 'title' 	=> 'Mailbox traffic',
+				  'target' 	=> 'content',
+				  'link'	=> 'mail/mail_user_stats.php',
+				  'html_id' => 'mail_user_stats');
+
+
+
+$module['nav'][] = array(	'title'	=> 'Statistics',
+							'open' 	=> 1,
+							'items'	=> $items);
+
+
+//**** Global filters menu
+$items = array();
+if($_SESSION['s']['user']['typ'] == 'admin') {
+
+	$items[] = array(   'title' 	=> 'Postfix Whitelist',
+  				  	    'target' 	=> 'content',
+				  	    'link'	    => 'mail/mail_whitelist_list.php',
+				  	    'html_id' => 'mail_whitelist_list');
+
+
+	$items[] = array(   'title' 	=> 'Postfix Blacklist',
+				 	    'target' 	=> 'content',
+				  	    'link'	    => 'mail/mail_blacklist_list.php',
+				  	    'html_id' => 'mail_blacklist_list');
+
+
+	$items[] = array(   'title' 	=> 'Content Filter',
+				 	    'target' 	=> 'content',
+				  	    'link'	    => 'mail/mail_content_filter_list.php',
+				  	    'html_id' => 'mail_content_filter_list');
+
+
+	$items[] = array(   'title' 	=> 'Relay Recipients',
+				 	    'target' 	=> 'content',
+				  	    'link'	    => 'mail/mail_relay_recipient_list.php',
+				  	    'html_id' => 'mail_relay_recipient_list');
+
+
+	$module['nav'][] = array(	'title'	=> 'Global Filters',
+								'open' 	=> 1,
+								'items'	=> $items);
+}
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/list/mail_mailinglist.list.php b/interface/web/mail/list/mail_mailinglist.list.php
index 27842a5d34..4070b22b04 100644
--- a/interface/web/mail/list/mail_mailinglist.list.php
+++ b/interface/web/mail/list/mail_mailinglist.list.php
@@ -1,67 +1,67 @@
-<?php
-
-/*
-	Datatypes:
-	- INTEGER
-	- DOUBLE
-	- CURRENCY
-	- VARCHAR
-	- TEXT
-	- DATE
-*/
-
-
-
-// Name of the list
-$liste["name"] 				= "mail_mailinglist";
-
-// Database table
-$liste["table"] 			= "mail_mailinglist";
-
-// Index index field of the database table
-$liste["table_idx"]			= "mailinglist_id";
-
-// Search Field Prefix
-$liste["search_prefix"] 	= "search_";
-
-// Records per page
-$liste["records_per_page"] 	= 15;
-
-// Script File of the list
-$liste["file"]				= "mail_mailinglist_list.php";
-
-// Script file of the edit form
-$liste["edit_file"]			= "mail_mailinglist_edit.php";
-
-// Script File of the delete script
-$liste["delete_file"]		= "mail_mailinglist_del.php";
-
-// Paging Template
-$liste["paging_tpl"]		= "templates/paging.tpl.htm";
-
-// Enable auth
-$liste["auth"]				= "yes";
-
-
-/*****************************************************
-* Suchfelder
-*****************************************************/
-$liste["item"][] = array(	'field'		=> "listname",
-							'datatype'	=> "VARCHAR",
-							'formtype'	=> "TEXT",
-							'op'		=> "like",
-							'prefix'	=> "%",
-							'suffix'	=> "%",
-							'width'		=> "",
-							'value'		=> "");
-							
-$liste["item"][] = array(	'field'		=> "domain",
-							'datatype'	=> "VARCHAR",
-							'formtype'	=> "TEXT",
-							'op'		=> "like",
-							'prefix'	=> "%",
-							'suffix'	=> "%",
-							'width'		=> "",
-							'value'		=> "");
-
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+$liste["name"] 				= "mail_mailinglist";
+
+// Database table
+$liste["table"] 			= "mail_mailinglist";
+
+// Index index field of the database table
+$liste["table_idx"]			= "mailinglist_id";
+
+// Search Field Prefix
+$liste["search_prefix"] 	= "search_";
+
+// Records per page
+$liste["records_per_page"] 	= 15;
+
+// Script File of the list
+$liste["file"]				= "mail_mailinglist_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]			= "mail_mailinglist_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]		= "mail_mailinglist_del.php";
+
+// Paging Template
+$liste["paging_tpl"]		= "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]				= "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+$liste["item"][] = array(	'field'		=> "listname",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+							
+$liste["item"][] = array(	'field'		=> "domain",
+							'datatype'	=> "VARCHAR",
+							'formtype'	=> "TEXT",
+							'op'		=> "like",
+							'prefix'	=> "%",
+							'suffix'	=> "%",
+							'width'		=> "",
+							'value'		=> "");
+
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/mail_domain_del.php b/interface/web/mail/mail_domain_del.php
index 456a7335a3..d686341e63 100644
--- a/interface/web/mail/mail_domain_del.php
+++ b/interface/web/mail/mail_domain_del.php
@@ -1,98 +1,98 @@
-<?php
-
-/*
-Copyright (c) 2005, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/mail_domain.list.php";
-$tform_def_file = "form/mail_domain.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('mail');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function onBeforeDelete() {
-		global $app; $conf;
-		
-		$domain = $this->dataRecord['domain'];
-		
-		// Before we delete the email domain,
-		// we will delete all depending records.
-		
-		// Delete all forwardings where the osurce or destination belongs to this domain
-		$records = $app->db->queryAllRecords("SELECT forwarding_id as id FROM mail_forwarding WHERE source like '%@".$app->db->quote($domain)."' OR destination like '%@".$app->db->quote($domain)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('mail_forwarding','forwarding_id',$rec['id']);
-		}
-		
-		// Delete all fetchmail accounts where destination belongs to this domain
-		$records = $app->db->queryAllRecords("SELECT mailget_id as id FROM mail_get WHERE destination like '%@".$app->db->quote($domain)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('mail_get','mailget_id',$rec['id']);
-		}
-		
-		// Delete all mailboxes where destination belongs to this domain
-		$records = $app->db->queryAllRecords("SELECT mailuser_id as id FROM mail_user WHERE email like '%@".$app->db->quote($domain)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('mail_user','mailuser_id',$rec['id']);
-		}
-		
-		// Delete all spamfilters that belong to this domain
-		$records = $app->db->queryAllRecords("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($domain)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('spamfilter_users','id',$rec['id']);
-		}
-		
-		// Delete all mailinglists that belong to this domain
-		$records = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = '".$app->db->quote($domain)."'");
-		foreach($records as $rec) {
-			$app->db->datalogDelete('mail_mailinglist','mailinglist_id',$rec['id']);
-		}
-		
-	}
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2005, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_domain.list.php";
+$tform_def_file = "form/mail_domain.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onBeforeDelete() {
+		global $app; $conf;
+		
+		$domain = $this->dataRecord['domain'];
+		
+		// Before we delete the email domain,
+		// we will delete all depending records.
+		
+		// Delete all forwardings where the osurce or destination belongs to this domain
+		$records = $app->db->queryAllRecords("SELECT forwarding_id as id FROM mail_forwarding WHERE source like '%@".$app->db->quote($domain)."' OR destination like '%@".$app->db->quote($domain)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('mail_forwarding','forwarding_id',$rec['id']);
+		}
+		
+		// Delete all fetchmail accounts where destination belongs to this domain
+		$records = $app->db->queryAllRecords("SELECT mailget_id as id FROM mail_get WHERE destination like '%@".$app->db->quote($domain)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('mail_get','mailget_id',$rec['id']);
+		}
+		
+		// Delete all mailboxes where destination belongs to this domain
+		$records = $app->db->queryAllRecords("SELECT mailuser_id as id FROM mail_user WHERE email like '%@".$app->db->quote($domain)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('mail_user','mailuser_id',$rec['id']);
+		}
+		
+		// Delete all spamfilters that belong to this domain
+		$records = $app->db->queryAllRecords("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($domain)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('spamfilter_users','id',$rec['id']);
+		}
+		
+		// Delete all mailinglists that belong to this domain
+		$records = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = '".$app->db->quote($domain)."'");
+		foreach($records as $rec) {
+			$app->db->datalogDelete('mail_mailinglist','mailinglist_id',$rec['id']);
+		}
+		
+	}
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index c323d3c328..06ce64baf7 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -1,370 +1,370 @@
-<?php
-/*
-Copyright (c) 2007, 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.
-*/
-
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$tform_def_file = "form/mail_domain.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('mail');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function onShowNew() {
-		global $app, $conf;
-
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-			if(!$app->tform->checkClientLimit('limit_maildomain')) {
-				$app->error($app->tform->wordbook["limit_maildomain_txt"]);
-			}
-			if(!$app->tform->checkResellerLimit('limit_maildomain')) {
-				$app->error('Reseller: '.$app->tform->wordbook["limit_maildomain_txt"]);
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onShowEnd() {
-		global $app, $conf;
-
-		if($_SESSION["s"]["user"]["typ"] == 'admin') {
-			// Getting Clients of the user
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
-			} else {
-				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$sql = "SELECT client.client_id, limit_web_domain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
-			}
-			$clients = $app->db->queryAllRecords($sql);
-			$client_select = '';
-			if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
-			$tmp_data_record = $app->tform->getDataRecord($this->id);
-			if(is_array($clients)) {
-				foreach( $clients as $client) {
-					$selected = ($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
-					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("client_group_id",$client_select);
-
-		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client.client_id, contact_name, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id order by contact_name");
-
-			// Set the mailserver to the default server of the client
-			$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_mailserver]");
-			$app->tpl->setVar("server_id","<option value='$client[default_mailserver]'>$tmp[server_name]</option>");
-			unset($tmp);
-
-			// Fill the client select field
-			$sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
-			$clients = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
-			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contact_name'].'</option>';
-			$tmp_data_record = $app->tform->getDataRecord($this->id);
-			if(is_array($clients)) {
-				foreach( $clients as $client) {
-					$selected = @($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
-					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("client_group_id",$client_select);
-
-		}
-
-		/*
-		 * Now we have to check, if we should use the domain-module to select the domain
-		 * or not
-		 */
-		$app->uses('ini_parser,getconf');
-		$settings = $app->getconf->get_global_config('domains');
-		if ($settings['use_domain_module'] == 'y') {
-			/*
-			 * The domain-module is in use.
-			*/
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			/*
-			 * The admin can select ALL domains, the user only the domains assigned to him
-			 */
-			$sql = "SELECT domain FROM domain ";
-			if ($_SESSION["s"]["user"]["typ"] != 'admin') {
-				$sql .= "WHERE sys_groupid =" . $client_group_id;
-			}
-			$sql .= " ORDER BY domain";
-			$domains = $app->db->queryAllRecords($sql);
-			$domain_select = '';
-			if(is_array($domains) && sizeof($domains) > 0) {
-				/* We have domains in the list, so create the drop-down-list */
-				foreach( $domains as $domain) {
-					$domain_select .= "<option value=" . $domain['domain'] ;
-					if ($domain['domain'] == $this->dataRecord["domain"]) {
-						$domain_select .= " selected";
-					}
-					$domain_select .= ">" . $domain['domain'] . "</option>\r\n";
-				}
-			}
-			else {
-				/*
-				 * We have no domains in the domain-list. This means, we can not add ANY new domain.
-				 * To avoid, that the variable "domain_option" is empty and so the user can
-				 * free enter a domain, we have to create a empty option!
-				*/
-				$domain_select .= "<option value=''></option>\r\n";
-			}
-			$app->tpl->setVar("domain_option",$domain_select);
-		}
-
-
-		// Get the spamfilter policys for the user
-		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = '@".$this->dataRecord["domain"]."'");
-		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r');
-		$policys = $app->db->queryAllRecords($sql);
-		$policy_select = "<option value='0'>".$app->tform->wordbook["no_policy"]."</option>";
-		if(is_array($policys)) {
-			foreach( $policys as $p) {
-				$selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
-				$policy_select .= "<option value='$p[id]' $selected>$p[policy_name]</option>\r\n";
-			}
-		}
-		$app->tpl->setVar("policy",$policy_select);
-		unset($policys);
-		unset($policy_select);
-		unset($tmp_user);
-
-		if($this->id > 0) {
-			//* we are editing a existing record
-			$app->tpl->setVar("edit_disabled", 1);
-			$app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]);
-		} else {
-			$app->tpl->setVar("edit_disabled", 0);
-		}
-
-		parent::onShowEnd();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-		if($_SESSION["s"]["user"]["typ"] != 'admin') {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// 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 FROM mail_domain WHERE domain_id = ".intval($this->id));
-				$this->dataRecord["server_id"] = $tmp["server_id"];
-				unset($tmp);
-				// When the record is inserted
-			} else {
-				// set the server ID to the default mailserver of the client
-				$this->dataRecord["server_id"] = $client["default_mailserver"];
-
-				// Check if the user may add another mail_domain
-				if($client["limit_maildomain"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE sys_groupid = $client_group_id");
-					if($tmp["number"] >= $client["limit_maildomain"]) {
-						$app->error($app->tform->wordbook["limit_maildomain_txt"]);
-					}
-				}
-			}
-
-			// Clients may not set the client_group_id, so we unset them if user is not a admin
-			if(!$app->auth->has_clients($_SESSION['s']['user']['userid'])) unset($this->dataRecord["client_group_id"]);
-		}
-
-		//* make sure that the email domain is lowercase
-		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
-		// also make sure that the user can not delete domain created by a admin
-		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
-		}
-		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
-		}
-
-		// Spamfilter policy
-		$policy_id = intval($this->dataRecord["policy"]);
-		if($policy_id > 0) {
-			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->dataRecord["domain"])."'");
-			if($tmp_user["id"] > 0) {
-				// There is already a record that we will update
-				$app->db->datalogUpdate('spamfilter_users', "policy_id = $ploicy_id", 'id', $tmp_user["id"]);
-			} else {
-				$tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ".$this->id);
-				// We create a new record
-				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `priority`, `policy_id`, `email`, `fullname`, `local`)
-				        VALUES (".$_SESSION["s"]["user"]["userid"].", ".$tmp_domain["sys_groupid"].", 'riud', 'riud', '', ".$this->dataRecord["server_id"].", 5, ".$policy_id.", '@".mysql_real_escape_string($this->dataRecord["domain"])."', '@".mysql_real_escape_string($this->dataRecord["domain"])."', 'Y')";
-				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
-				unset($tmp_domain);
-			}
-		}  // endif spamfilter policy
-	}
-
-	function onBeforeUpdate() {
-		global $app, $conf;
-
-		//* Check if the server has been changed
-		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
-		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			$rec = $app->db->queryOneRecord("SELECT server_id, domain from mail_domain WHERE domain_id = ".$this->id);
-			if($rec['server_id'] != $this->dataRecord["server_id"]) {
-				//* Add a error message and switch back to old server
-				$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
-				$this->dataRecord["server_id"] = $rec['server_id'];
-			}
-			unset($rec);
-			//* If the user is neither admin nor reseller
-		} else {
-			//* We do not allow users to change a domain which has been created by the admin
-			$rec = $app->db->queryOneRecord("SELECT domain from mail_domain WHERE domain_id = ".$this->id);
-			if($rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
-				//* Add a error message and switch back to old server
-				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
-				$this->dataRecord["domain"] = $rec['domain'];
-			}
-			unset($rec);
-		}
-	}
-
-
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		// make sure that the record belongs to the clinet group and not the admin group when admin inserts it
-		// also make sure that the user can not delete domain created by a admin
-		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
-		}
-		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
-		}
-
-		// Spamfilter policy
-		$policy_id = intval($this->dataRecord["policy"]);
-		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->dataRecord["domain"])."'");
-		if($policy_id > 0) {
-			if($tmp_user["id"] > 0) {
-				// There is already a record that we will update
-				$app->db->datalogUpdate('spamfilter_users', "policy_id = $policy_id", 'id', $tmp_user["id"]);
-			} else {
-				$tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ".$this->id);
-				// We create a new record
-				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `priority`, `policy_id`, `email`, `fullname`, `local`)
-				        VALUES (".$_SESSION["s"]["user"]["userid"].", ".$tmp_domain["sys_groupid"].", 'riud', 'riud', '', ".$this->dataRecord["server_id"].", 5, ".$policy_id.", '@".mysql_real_escape_string($this->dataRecord["domain"])."', '@".mysql_real_escape_string($this->dataRecord["domain"])."', 'Y')";
-				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
-				unset($tmp_domain);
-			}
-		} else {
-			if($tmp_user["id"] > 0) {
-				// There is already a record but the user shall have no policy, so we delete it
-				$app->db->datalogDelete('spamfilter_users', 'id', $tmp_user["id"]);
-			}
-		} // endif spamfilter policy
-		//** If the domain name or owner has been changed, change the domain and owner in all mailbox records
-		if($this->oldDataRecord['domain'] != $this->dataRecord['domain'] || (isset($this->dataRecord['client_group_id']) && $this->oldDataRecord['sys_groupid'] != $this->dataRecord['client_group_id'])) {
-			$app->uses('getconf');
-			$mail_config = $app->getconf->get_server_config($this->dataRecord["server_id"],'mail');
-
-			//* Update the mailboxes
-			$mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like '%@".mysql_real_escape_string($this->oldDataRecord['domain'])."'");
-			$sys_groupid = (isset($this->dataRecord['client_group_id']))?$this->dataRecord['client_group_id']:$this->oldDataRecord['sys_groupid'];
-			if(is_array($mailusers)) {
-				foreach($mailusers as $rec) {
-					// setting Maildir, Homedir, UID and GID
-					$mail_parts = explode("@",$rec['email']);
-					$maildir = str_replace("[domain]",$this->dataRecord['domain'],$mail_config["maildir_path"]);
-					$maildir = str_replace("[localpart]",$mail_parts[0],$maildir);
-					$maildir = mysql_real_escape_string($maildir);
-					$email = mysql_real_escape_string($mail_parts[0].'@'.$this->dataRecord['domain']);
-					$app->db->datalogUpdate('mail_user', "maildir = '$maildir', email = '$email', sys_groupid = '$sys_groupid'", 'mailuser_id', $rec['mailuser_id']);
-				}
-			}
-
-			//* Update the aliases
-			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like '%@".mysql_real_escape_string($this->oldDataRecord['domain'])."' OR destination like '%@".mysql_real_escape_string($this->oldDataRecord['domain'])."'");
-			if(is_array($forwardings)) {
-				foreach($forwardings as $rec) {
-					$destination = mysql_real_escape_string(str_replace($this->oldDataRecord['domain'],$this->dataRecord['domain'],$rec['destination']));
-					$source = mysql_real_escape_string(str_replace($this->oldDataRecord['domain'],$this->dataRecord['domain'],$rec['source']));
-					$app->db->datalogUpdate('mail_forwarding', "source = '$source', destination = '$destination', sys_groupid = '$sys_groupid'", 'forwarding_id', $rec['forwarding_id']);
-				}
-			}
-			
-			//* Update the mailinglist
-			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $sys_groupid WHERE domain = '".mysql_real_escape_string($this->oldDataRecord['domain'])."'");
-
-			//* Delete the old spamfilter record
-			$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->oldDataRecord["domain"])."'");
-			$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
-			unset($tmp);
-
-		} // end if domain name changed
-
-	}
-
-}
-
-$page = new page_action;
-$page->onLoad();
-
+<?php
+/*
+Copyright (c) 2007, 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.
+*/
+
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/mail_domain.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onShowNew() {
+		global $app, $conf;
+
+		// we will check only users, not admins
+		if($_SESSION["s"]["user"]["typ"] == 'user') {
+			if(!$app->tform->checkClientLimit('limit_maildomain')) {
+				$app->error($app->tform->wordbook["limit_maildomain_txt"]);
+			}
+			if(!$app->tform->checkResellerLimit('limit_maildomain')) {
+				$app->error('Reseller: '.$app->tform->wordbook["limit_maildomain_txt"]);
+			}
+		}
+
+		parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		if($_SESSION["s"]["user"]["typ"] == 'admin') {
+			// Getting Clients of the user
+			if($_SESSION["s"]["user"]["typ"] == 'admin') {
+				$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
+			} else {
+				$client_group_id = $_SESSION["s"]["user"]["default_group"];
+				$sql = "SELECT client.client_id, limit_web_domain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
+			}
+			$clients = $app->db->queryAllRecords($sql);
+			$client_select = '';
+			if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
+			$tmp_data_record = $app->tform->getDataRecord($this->id);
+			if(is_array($clients)) {
+				foreach( $clients as $client) {
+					$selected = ($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
+					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
+				}
+			}
+			$app->tpl->setVar("client_group_id",$client_select);
+
+		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+
+			// Get the limits of the client
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			$client = $app->db->queryOneRecord("SELECT client.client_id, contact_name, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id order by contact_name");
+
+			// Set the mailserver to the default server of the client
+			$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_mailserver]");
+			$app->tpl->setVar("server_id","<option value='$client[default_mailserver]'>$tmp[server_name]</option>");
+			unset($tmp);
+
+			// Fill the client select field
+			$sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
+			$clients = $app->db->queryAllRecords($sql);
+			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
+			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contact_name'].'</option>';
+			$tmp_data_record = $app->tform->getDataRecord($this->id);
+			if(is_array($clients)) {
+				foreach( $clients as $client) {
+					$selected = @($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
+					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
+				}
+			}
+			$app->tpl->setVar("client_group_id",$client_select);
+
+		}
+
+		/*
+		 * Now we have to check, if we should use the domain-module to select the domain
+		 * or not
+		 */
+		$app->uses('ini_parser,getconf');
+		$settings = $app->getconf->get_global_config('domains');
+		if ($settings['use_domain_module'] == 'y') {
+			/*
+			 * The domain-module is in use.
+			*/
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			/*
+			 * The admin can select ALL domains, the user only the domains assigned to him
+			 */
+			$sql = "SELECT domain FROM domain ";
+			if ($_SESSION["s"]["user"]["typ"] != 'admin') {
+				$sql .= "WHERE sys_groupid =" . $client_group_id;
+			}
+			$sql .= " ORDER BY domain";
+			$domains = $app->db->queryAllRecords($sql);
+			$domain_select = '';
+			if(is_array($domains) && sizeof($domains) > 0) {
+				/* We have domains in the list, so create the drop-down-list */
+				foreach( $domains as $domain) {
+					$domain_select .= "<option value=" . $domain['domain'] ;
+					if ($domain['domain'] == $this->dataRecord["domain"]) {
+						$domain_select .= " selected";
+					}
+					$domain_select .= ">" . $domain['domain'] . "</option>\r\n";
+				}
+			}
+			else {
+				/*
+				 * We have no domains in the domain-list. This means, we can not add ANY new domain.
+				 * To avoid, that the variable "domain_option" is empty and so the user can
+				 * free enter a domain, we have to create a empty option!
+				*/
+				$domain_select .= "<option value=''></option>\r\n";
+			}
+			$app->tpl->setVar("domain_option",$domain_select);
+		}
+
+
+		// Get the spamfilter policys for the user
+		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = '@".$this->dataRecord["domain"]."'");
+		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r');
+		$policys = $app->db->queryAllRecords($sql);
+		$policy_select = "<option value='0'>".$app->tform->wordbook["no_policy"]."</option>";
+		if(is_array($policys)) {
+			foreach( $policys as $p) {
+				$selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
+				$policy_select .= "<option value='$p[id]' $selected>$p[policy_name]</option>\r\n";
+			}
+		}
+		$app->tpl->setVar("policy",$policy_select);
+		unset($policys);
+		unset($policy_select);
+		unset($tmp_user);
+
+		if($this->id > 0) {
+			//* we are editing a existing record
+			$app->tpl->setVar("edit_disabled", 1);
+			$app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]);
+		} else {
+			$app->tpl->setVar("edit_disabled", 0);
+		}
+
+		parent::onShowEnd();
+	}
+
+	function onSubmit() {
+		global $app, $conf;
+		if($_SESSION["s"]["user"]["typ"] != 'admin') {
+
+			// Get the limits of the client
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			$client = $app->db->queryOneRecord("SELECT limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+
+			// 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 FROM mail_domain WHERE domain_id = ".intval($this->id));
+				$this->dataRecord["server_id"] = $tmp["server_id"];
+				unset($tmp);
+				// When the record is inserted
+			} else {
+				// set the server ID to the default mailserver of the client
+				$this->dataRecord["server_id"] = $client["default_mailserver"];
+
+				// Check if the user may add another mail_domain
+				if($client["limit_maildomain"] >= 0) {
+					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE sys_groupid = $client_group_id");
+					if($tmp["number"] >= $client["limit_maildomain"]) {
+						$app->error($app->tform->wordbook["limit_maildomain_txt"]);
+					}
+				}
+			}
+
+			// Clients may not set the client_group_id, so we unset them if user is not a admin
+			if(!$app->auth->has_clients($_SESSION['s']['user']['userid'])) unset($this->dataRecord["client_group_id"]);
+		}
+
+		//* make sure that the email domain is lowercase
+		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+		global $app, $conf;
+
+		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
+		// also make sure that the user can not delete domain created by a admin
+		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
+		}
+		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
+		}
+
+		// Spamfilter policy
+		$policy_id = intval($this->dataRecord["policy"]);
+		if($policy_id > 0) {
+			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->dataRecord["domain"])."'");
+			if($tmp_user["id"] > 0) {
+				// There is already a record that we will update
+				$app->db->datalogUpdate('spamfilter_users', "policy_id = $ploicy_id", 'id', $tmp_user["id"]);
+			} else {
+				$tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ".$this->id);
+				// We create a new record
+				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `priority`, `policy_id`, `email`, `fullname`, `local`)
+				        VALUES (".$_SESSION["s"]["user"]["userid"].", ".$tmp_domain["sys_groupid"].", 'riud', 'riud', '', ".$this->dataRecord["server_id"].", 5, ".$policy_id.", '@".mysql_real_escape_string($this->dataRecord["domain"])."', '@".mysql_real_escape_string($this->dataRecord["domain"])."', 'Y')";
+				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
+				unset($tmp_domain);
+			}
+		}  // endif spamfilter policy
+	}
+
+	function onBeforeUpdate() {
+		global $app, $conf;
+
+		//* Check if the server has been changed
+		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
+		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+			$rec = $app->db->queryOneRecord("SELECT server_id, domain from mail_domain WHERE domain_id = ".$this->id);
+			if($rec['server_id'] != $this->dataRecord["server_id"]) {
+				//* Add a error message and switch back to old server
+				$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
+				$this->dataRecord["server_id"] = $rec['server_id'];
+			}
+			unset($rec);
+			//* If the user is neither admin nor reseller
+		} else {
+			//* We do not allow users to change a domain which has been created by the admin
+			$rec = $app->db->queryOneRecord("SELECT domain from mail_domain WHERE domain_id = ".$this->id);
+			if($rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
+				//* Add a error message and switch back to old server
+				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
+				$this->dataRecord["domain"] = $rec['domain'];
+			}
+			unset($rec);
+		}
+	}
+
+
+
+	function onAfterUpdate() {
+		global $app, $conf;
+
+		// make sure that the record belongs to the clinet group and not the admin group when admin inserts it
+		// also make sure that the user can not delete domain created by a admin
+		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
+		}
+		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
+		}
+
+		// Spamfilter policy
+		$policy_id = intval($this->dataRecord["policy"]);
+		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->dataRecord["domain"])."'");
+		if($policy_id > 0) {
+			if($tmp_user["id"] > 0) {
+				// There is already a record that we will update
+				$app->db->datalogUpdate('spamfilter_users', "policy_id = $policy_id", 'id', $tmp_user["id"]);
+			} else {
+				$tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ".$this->id);
+				// We create a new record
+				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `priority`, `policy_id`, `email`, `fullname`, `local`)
+				        VALUES (".$_SESSION["s"]["user"]["userid"].", ".$tmp_domain["sys_groupid"].", 'riud', 'riud', '', ".$this->dataRecord["server_id"].", 5, ".$policy_id.", '@".mysql_real_escape_string($this->dataRecord["domain"])."', '@".mysql_real_escape_string($this->dataRecord["domain"])."', 'Y')";
+				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
+				unset($tmp_domain);
+			}
+		} else {
+			if($tmp_user["id"] > 0) {
+				// There is already a record but the user shall have no policy, so we delete it
+				$app->db->datalogDelete('spamfilter_users', 'id', $tmp_user["id"]);
+			}
+		} // endif spamfilter policy
+		//** If the domain name or owner has been changed, change the domain and owner in all mailbox records
+		if($this->oldDataRecord['domain'] != $this->dataRecord['domain'] || (isset($this->dataRecord['client_group_id']) && $this->oldDataRecord['sys_groupid'] != $this->dataRecord['client_group_id'])) {
+			$app->uses('getconf');
+			$mail_config = $app->getconf->get_server_config($this->dataRecord["server_id"],'mail');
+
+			//* Update the mailboxes
+			$mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like '%@".mysql_real_escape_string($this->oldDataRecord['domain'])."'");
+			$sys_groupid = (isset($this->dataRecord['client_group_id']))?$this->dataRecord['client_group_id']:$this->oldDataRecord['sys_groupid'];
+			if(is_array($mailusers)) {
+				foreach($mailusers as $rec) {
+					// setting Maildir, Homedir, UID and GID
+					$mail_parts = explode("@",$rec['email']);
+					$maildir = str_replace("[domain]",$this->dataRecord['domain'],$mail_config["maildir_path"]);
+					$maildir = str_replace("[localpart]",$mail_parts[0],$maildir);
+					$maildir = mysql_real_escape_string($maildir);
+					$email = mysql_real_escape_string($mail_parts[0].'@'.$this->dataRecord['domain']);
+					$app->db->datalogUpdate('mail_user', "maildir = '$maildir', email = '$email', sys_groupid = '$sys_groupid'", 'mailuser_id', $rec['mailuser_id']);
+				}
+			}
+
+			//* Update the aliases
+			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like '%@".mysql_real_escape_string($this->oldDataRecord['domain'])."' OR destination like '%@".mysql_real_escape_string($this->oldDataRecord['domain'])."'");
+			if(is_array($forwardings)) {
+				foreach($forwardings as $rec) {
+					$destination = mysql_real_escape_string(str_replace($this->oldDataRecord['domain'],$this->dataRecord['domain'],$rec['destination']));
+					$source = mysql_real_escape_string(str_replace($this->oldDataRecord['domain'],$this->dataRecord['domain'],$rec['source']));
+					$app->db->datalogUpdate('mail_forwarding', "source = '$source', destination = '$destination', sys_groupid = '$sys_groupid'", 'forwarding_id', $rec['forwarding_id']);
+				}
+			}
+			
+			//* Update the mailinglist
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $sys_groupid WHERE domain = '".mysql_real_escape_string($this->oldDataRecord['domain'])."'");
+
+			//* Delete the old spamfilter record
+			$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->oldDataRecord["domain"])."'");
+			$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
+			unset($tmp);
+
+		} // end if domain name changed
+
+	}
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/mail_mailinglist_del.php b/interface/web/mail/mail_mailinglist_del.php
index a0f0a8fb1a..1622aefb01 100644
--- a/interface/web/mail/mail_mailinglist_del.php
+++ b/interface/web/mail/mail_mailinglist_del.php
@@ -1,58 +1,58 @@
-<?php
-
-/*
-Copyright (c) 2005, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/mail_mailinglist.list.php";
-$tform_def_file = "form/mail_mailinglist.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('mail');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2005, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_mailinglist.list.php";
+$tform_def_file = "form/mail_mailinglist.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/mail_mailinglist_edit.php b/interface/web/mail/mail_mailinglist_edit.php
index 9729757db0..81e518f4c2 100644
--- a/interface/web/mail/mail_mailinglist_edit.php
+++ b/interface/web/mail/mail_mailinglist_edit.php
@@ -1,256 +1,256 @@
-<?php
-/*
-Copyright (c) 2005 - 2009, 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.
-*/
-
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$tform_def_file = "form/mail_mailinglist.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('mail');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-	
-	
-	function onShowNew() {
-		global $app, $conf;
-		
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-			if(!$app->tform->checkClientLimit('limit_mailmailinglist')) {
-				$app->error($app->tform->wordbook["limit_mailmailinglist_txt"]);
-			}
-			if(!$app->tform->checkResellerLimit('limit_mailmailinglist')) {
-				$app->error('Reseller: '.$app->tform->wordbook["limit_mailmailinglist_txt"]);
-			}
-		}
-		
-		parent::onShowNew();
-	}
-	
-	function onShowEnd() {
-		global $app, $conf;
-		
-		if($_SESSION["s"]["user"]["typ"] == 'admin') {
-			// Getting Clients of the user
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
-			} else {
-				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$sql = "SELECT client.client_id, limit_web_domain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
-			}
-			$clients = $app->db->queryAllRecords($sql);
-			$client_select = '';
-			if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
-			$tmp_data_record = $app->tform->getDataRecord($this->id);
-			if(is_array($clients)) {
-				foreach( $clients as $client) {
-					$selected = ($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
-					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("client_group_id",$client_select);
-
-		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client.client_id, contact_name, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id order by contact_name");
-
-			// Fill the client select field
-			$sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
-			$clients = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
-			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contact_name'].'</option>';
-			$tmp_data_record = $app->tform->getDataRecord($this->id);
-			if(is_array($clients)) {
-				foreach( $clients as $client) {
-					$selected = @($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
-					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
-				}
-			}
-			$app->tpl->setVar("client_group_id",$client_select);
-		}
-		
-		// Getting Domains of the user
-		$sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
-		$domains = $app->db->queryAllRecords($sql);
-		$domain_select = '';
-		if(is_array($domains)) {
-			foreach( $domains as $domain) {
-				$selected = ($domain["domain"] == $this->dataRecord["domain"])?'SELECTED':'';
-				$domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n";
-			}
-		}
-		$app->tpl->setVar("domain_option",$domain_select);
-		
-		if($this->id > 0) {
-			//* we are editing a existing record
-			$app->tpl->setVar("edit_disabled", 1);
-			$app->tpl->setVar("listname_value", $this->dataRecord["listname"]);
-			$app->tpl->setVar("domain_value", $this->dataRecord["domain"]);
-			$app->tpl->setVar("email_value", $this->dataRecord["email"]);
-		} else {
-			$app->tpl->setVar("edit_disabled", 0);
-		}
-		
-		parent::onShowEnd();
-	}
-	
-	function onSubmit() {
-		global $app, $conf;
-		
-		if($_SESSION["s"]["user"]["typ"] != 'admin') {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_mailmailinglist, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-			
-			//* Check if Domain belongs to user
-			if(isset($_POST["domain"])) {
-				$domain = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = '".$this->dataRecord["domain"]."' AND ".$app->tform->getAuthSQL('r'));
-				if($domain["domain"] != $this->dataRecord["domain"]) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
-			}
-
-			// When the record is updated
-			if($this->id == 0) {
-				//Check if email is in use
-				$check = $app->db->queryOneRecord("SELECT count(source) as number FROM mail_forwarding WHERE source = '".$this->dataRecord["listname"]."@".$this->dataRecord["domain"]."'");
-				if($check['number'] != 0) {
-						$app->error($app->tform->wordbook["email_in_use_txt"]);
-				}
-				
-				$check = $app->db->queryOneRecord("SELECT count(email) as number FROM mail_user WHERE email = '".$this->dataRecord["listname"]."@".$this->dataRecord["domain"]."'");
-				if($check['number'] != 0) {
-						$app->error($app->tform->wordbook["email_in_use_txt"]);
-				}
-				
-				$check = $app->db->queryOneRecord("SELECT count(mailinglist_id) as number FROM mail_mailinglist WHERE listname = '".$this->dataRecord["listname"]."' AND domain = '".$this->dataRecord["domain"]."'");
-				if($check['number'] != 0) {
-						$app->error($app->tform->wordbook["email_in_use_txt"]);
-				}
-				
-				// Check if the user may add another mail_domain
-				if($client["limit_mailmailinglist"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(mailinglist_id) as number FROM mail_mailinglist WHERE sys_groupid = $client_group_id");
-					if($tmp["number"] >= $client["limit_mailmailinglist"]) {
-						$app->error($app->tform->wordbook["limit_mailmailinglist_txt"]);
-					}
-				}
-			}
-
-			// Clients may not set the client_group_id, so we unset them if user is not a admin
-			if(!$app->auth->has_clients($_SESSION['s']['user']['userid'])) unset($this->dataRecord["client_group_id"]);
-		}
-
-		//* make sure that the email domain is lowercase
-		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
-		parent::onSubmit();
-	}
-	
-	function onBeforeInsert() {
-		global $app, $conf;
-
-		// Set the server id of the mailinglist = server ID of mail domain.
-		$domain = $app->db->queryOneRecord("SELECT server_id FROM mail_domain WHERE domain = '".$this->dataRecord["domain"]."'");
-		$this->dataRecord["server_id"] = $domain['server_id'];
-	}
-	
-	function onAfterInsert() {
-		global $app, $conf;
-
-		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
-		// also make sure that the user can not delete domain created by a admin
-		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE mailinglist_id = ".$this->id);
-		}
-		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE mailinglist_id = ".$this->id);
-		}
-	}
-	
-	function onBeforeUpdate() {
-		global $app, $conf;
-		
-		//* Check if the server has been changed
-		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
-		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			$rec = $app->db->queryOneRecord("SELECT server_id, domain from mail_mailinglist WHERE mailinglist_id = ".$this->id);
-			$this->dataRecord["server_id"] = $rec['server_id'];
-			unset($rec);
-			//* If the user is neither admin nor reseller
-		} else {
-			//* We do not allow users to change a domain which has been created by the admin
-			$rec = $app->db->queryOneRecord("SELECT domain from mail_mailinglist WHERE mailinglist_id = ".$this->id);
-			if($rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
-				//* Add a error message and switch back to old server
-				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
-				$this->dataRecord["domain"] = $rec['domain'];
-			}
-			unset($rec);
-		}
-	}
-	
-	function onAfterUpdate() {
-		global $app, $conf;
-		
-		// make sure that the record belongs to the clinet group and not the admin group when admin inserts it
-		// also make sure that the user can not delete domain created by a admin
-		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE mailinglist_id = ".$this->id);
-		}
-		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
-			$client_group_id = intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE mailinglist_id = ".$this->id);
-		}
-	}
-	
-}
-
-$app->tform_actions = new page_action;
-$app->tform_actions->onLoad();
-
-?>
+<?php
+/*
+Copyright (c) 2005 - 2009, 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.
+*/
+
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/mail_mailinglist.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+	
+	
+	function onShowNew() {
+		global $app, $conf;
+		
+		// we will check only users, not admins
+		if($_SESSION["s"]["user"]["typ"] == 'user') {
+			if(!$app->tform->checkClientLimit('limit_mailmailinglist')) {
+				$app->error($app->tform->wordbook["limit_mailmailinglist_txt"]);
+			}
+			if(!$app->tform->checkResellerLimit('limit_mailmailinglist')) {
+				$app->error('Reseller: '.$app->tform->wordbook["limit_mailmailinglist_txt"]);
+			}
+		}
+		
+		parent::onShowNew();
+	}
+	
+	function onShowEnd() {
+		global $app, $conf;
+		
+		if($_SESSION["s"]["user"]["typ"] == 'admin') {
+			// Getting Clients of the user
+			if($_SESSION["s"]["user"]["typ"] == 'admin') {
+				$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
+			} else {
+				$client_group_id = $_SESSION["s"]["user"]["default_group"];
+				$sql = "SELECT client.client_id, limit_web_domain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
+			}
+			$clients = $app->db->queryAllRecords($sql);
+			$client_select = '';
+			if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
+			$tmp_data_record = $app->tform->getDataRecord($this->id);
+			if(is_array($clients)) {
+				foreach( $clients as $client) {
+					$selected = ($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
+					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
+				}
+			}
+			$app->tpl->setVar("client_group_id",$client_select);
+
+		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+
+			// Get the limits of the client
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			$client = $app->db->queryOneRecord("SELECT client.client_id, contact_name, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id order by contact_name");
+
+			// Fill the client select field
+			$sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
+			$clients = $app->db->queryAllRecords($sql);
+			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
+			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contact_name'].'</option>';
+			$tmp_data_record = $app->tform->getDataRecord($this->id);
+			if(is_array($clients)) {
+				foreach( $clients as $client) {
+					$selected = @($client["groupid"] == $tmp_data_record["sys_groupid"])?'SELECTED':'';
+					$client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
+				}
+			}
+			$app->tpl->setVar("client_group_id",$client_select);
+		}
+		
+		// Getting Domains of the user
+		$sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
+		$domains = $app->db->queryAllRecords($sql);
+		$domain_select = '';
+		if(is_array($domains)) {
+			foreach( $domains as $domain) {
+				$selected = ($domain["domain"] == $this->dataRecord["domain"])?'SELECTED':'';
+				$domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n";
+			}
+		}
+		$app->tpl->setVar("domain_option",$domain_select);
+		
+		if($this->id > 0) {
+			//* we are editing a existing record
+			$app->tpl->setVar("edit_disabled", 1);
+			$app->tpl->setVar("listname_value", $this->dataRecord["listname"]);
+			$app->tpl->setVar("domain_value", $this->dataRecord["domain"]);
+			$app->tpl->setVar("email_value", $this->dataRecord["email"]);
+		} else {
+			$app->tpl->setVar("edit_disabled", 0);
+		}
+		
+		parent::onShowEnd();
+	}
+	
+	function onSubmit() {
+		global $app, $conf;
+		
+		if($_SESSION["s"]["user"]["typ"] != 'admin') {
+
+			// Get the limits of the client
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			$client = $app->db->queryOneRecord("SELECT limit_mailmailinglist, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			
+			//* Check if Domain belongs to user
+			if(isset($_POST["domain"])) {
+				$domain = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = '".$this->dataRecord["domain"]."' AND ".$app->tform->getAuthSQL('r'));
+				if($domain["domain"] != $this->dataRecord["domain"]) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
+			}
+
+			// When the record is updated
+			if($this->id == 0) {
+				//Check if email is in use
+				$check = $app->db->queryOneRecord("SELECT count(source) as number FROM mail_forwarding WHERE source = '".$this->dataRecord["listname"]."@".$this->dataRecord["domain"]."'");
+				if($check['number'] != 0) {
+						$app->error($app->tform->wordbook["email_in_use_txt"]);
+				}
+				
+				$check = $app->db->queryOneRecord("SELECT count(email) as number FROM mail_user WHERE email = '".$this->dataRecord["listname"]."@".$this->dataRecord["domain"]."'");
+				if($check['number'] != 0) {
+						$app->error($app->tform->wordbook["email_in_use_txt"]);
+				}
+				
+				$check = $app->db->queryOneRecord("SELECT count(mailinglist_id) as number FROM mail_mailinglist WHERE listname = '".$this->dataRecord["listname"]."' AND domain = '".$this->dataRecord["domain"]."'");
+				if($check['number'] != 0) {
+						$app->error($app->tform->wordbook["email_in_use_txt"]);
+				}
+				
+				// Check if the user may add another mail_domain
+				if($client["limit_mailmailinglist"] >= 0) {
+					$tmp = $app->db->queryOneRecord("SELECT count(mailinglist_id) as number FROM mail_mailinglist WHERE sys_groupid = $client_group_id");
+					if($tmp["number"] >= $client["limit_mailmailinglist"]) {
+						$app->error($app->tform->wordbook["limit_mailmailinglist_txt"]);
+					}
+				}
+			}
+
+			// Clients may not set the client_group_id, so we unset them if user is not a admin
+			if(!$app->auth->has_clients($_SESSION['s']['user']['userid'])) unset($this->dataRecord["client_group_id"]);
+		}
+
+		//* make sure that the email domain is lowercase
+		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+
+		parent::onSubmit();
+	}
+	
+	function onBeforeInsert() {
+		global $app, $conf;
+
+		// Set the server id of the mailinglist = server ID of mail domain.
+		$domain = $app->db->queryOneRecord("SELECT server_id FROM mail_domain WHERE domain = '".$this->dataRecord["domain"]."'");
+		$this->dataRecord["server_id"] = $domain['server_id'];
+	}
+	
+	function onAfterInsert() {
+		global $app, $conf;
+
+		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
+		// also make sure that the user can not delete domain created by a admin
+		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE mailinglist_id = ".$this->id);
+		}
+		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE mailinglist_id = ".$this->id);
+		}
+	}
+	
+	function onBeforeUpdate() {
+		global $app, $conf;
+		
+		//* Check if the server has been changed
+		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
+		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+			$rec = $app->db->queryOneRecord("SELECT server_id, domain from mail_mailinglist WHERE mailinglist_id = ".$this->id);
+			$this->dataRecord["server_id"] = $rec['server_id'];
+			unset($rec);
+			//* If the user is neither admin nor reseller
+		} else {
+			//* We do not allow users to change a domain which has been created by the admin
+			$rec = $app->db->queryOneRecord("SELECT domain from mail_mailinglist WHERE mailinglist_id = ".$this->id);
+			if($rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
+				//* Add a error message and switch back to old server
+				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
+				$this->dataRecord["domain"] = $rec['domain'];
+			}
+			unset($rec);
+		}
+	}
+	
+	function onAfterUpdate() {
+		global $app, $conf;
+		
+		// make sure that the record belongs to the clinet group and not the admin group when admin inserts it
+		// also make sure that the user can not delete domain created by a admin
+		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE mailinglist_id = ".$this->id);
+		}
+		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+			$client_group_id = intval($this->dataRecord["client_group_id"]);
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE mailinglist_id = ".$this->id);
+		}
+	}
+	
+}
+
+$app->tform_actions = new page_action;
+$app->tform_actions->onLoad();
+
+?>
diff --git a/interface/web/mail/mail_mailinglist_list.php b/interface/web/mail/mail_mailinglist_list.php
index b466c522d9..732b14391b 100644
--- a/interface/web/mail/mail_mailinglist_list.php
+++ b/interface/web/mail/mail_mailinglist_list.php
@@ -1,44 +1,44 @@
-<?php
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/mail_mailinglist.list.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-//* Check permissions for module
-$app->auth->check_module_permissions('mail');
-
-$app->load('listform_actions');
-
-
-class list_action extends listform_actions {
-	
-	function onShow() {
-		global $app,$conf;
-		
-		$app->uses('getconf');
-		$global_config = $app->getconf->get_global_config('mail');
-		
-		if($global_config['mailmailinglist_link'] == 'y') {
-			$app->tpl->setVar('mailmailinglist_link',1);
-		} else {
-			$app->tpl->setVar('mailmailinglist_link',0);
-		}
-		
-		parent::onShow();
-	}
-	
-}
-
-$list = new list_action;
-$list->onLoad();
-
-
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_mailinglist.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+$app->load('listform_actions');
+
+
+class list_action extends listform_actions {
+	
+	function onShow() {
+		global $app,$conf;
+		
+		$app->uses('getconf');
+		$global_config = $app->getconf->get_global_config('mail');
+		
+		if($global_config['mailmailinglist_link'] == 'y') {
+			$app->tpl->setVar('mailmailinglist_link',1);
+		} else {
+			$app->tpl->setVar('mailmailinglist_link',0);
+		}
+		
+		parent::onShow();
+	}
+	
+}
+
+$list = new list_action;
+$list->onLoad();
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/mailinglist.php b/interface/web/mail/mailinglist.php
index 67b35e179a..9940e64cc4 100644
--- a/interface/web/mail/mailinglist.php
+++ b/interface/web/mail/mailinglist.php
@@ -1,68 +1,68 @@
-<?php
-/*
-Copyright (c) 2008, 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.
-*/
-
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('mail');
-
-/* get the id of the mail (must be int!) */
-if (!isset($_GET['id'])){
-    die ("No List selected!");
-}
-$listId = intval($_GET['id']);
-
-/*
- * Get the data to connect to the database
- */
-$dbData = $app->db->queryAllRecords("SELECT server_id, listname FROM mail_mailinglist WHERE mailinglist_id = " . $listId);
-$serverId = intval($dbData[0]['server_id']);
-if ($serverId == 0){
-    die ("No List - Server found!");
-}
-
-$serverData = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$serverId);
-
-$app->uses('getconf');
-$global_config = $app->getconf->get_global_config('mail');
-
-if($global_config['mailmailinglist_url'] != '') {
-	header('Location:' . $global_config['mailmailinglist_url']);
-} else {
-
-/*
- * We only redirect to the login-form, so there is no need, to check any rights
- */
-	isset($_SERVER['HTTPS'])? $http = 'https' : $http = 'http';
-	header('Location:' . $http . '://' . $serverData['server_name'] . '/cgi-bin/mailman/admin/' . $dbData[0]['listname']);
-}
-exit;
+<?php
+/*
+Copyright (c) 2008, 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.
+*/
+
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+/* get the id of the mail (must be int!) */
+if (!isset($_GET['id'])){
+    die ("No List selected!");
+}
+$listId = intval($_GET['id']);
+
+/*
+ * Get the data to connect to the database
+ */
+$dbData = $app->db->queryAllRecords("SELECT server_id, listname FROM mail_mailinglist WHERE mailinglist_id = " . $listId);
+$serverId = intval($dbData[0]['server_id']);
+if ($serverId == 0){
+    die ("No List - Server found!");
+}
+
+$serverData = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$serverId);
+
+$app->uses('getconf');
+$global_config = $app->getconf->get_global_config('mail');
+
+if($global_config['mailmailinglist_url'] != '') {
+	header('Location:' . $global_config['mailmailinglist_url']);
+} else {
+
+/*
+ * We only redirect to the login-form, so there is no need, to check any rights
+ */
+	isset($_SERVER['HTTPS'])? $http = 'https' : $http = 'http';
+	header('Location:' . $http . '://' . $serverData['server_name'] . '/cgi-bin/mailman/admin/' . $dbData[0]['listname']);
+}
+exit;
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_alias_edit.htm b/interface/web/mail/templates/mail_alias_edit.htm
index 0606ab64d8..af8444cfd4 100644
--- a/interface/web/mail/templates/mail_alias_edit.htm
+++ b/interface/web/mail/templates/mail_alias_edit.htm
@@ -1,39 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_alias">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-        <p class="label"><em>*</em> {tmpl_var name='email_txt'}</p>
-        <div class="multiField">
-          <label for="email_local_part" class="blockLabel">Alias<input type="text" id="email_local_part" name="email_local_part" size="20" value="{tmpl_var name='email_local_part'}" class="textInput" /></label>
-          <label for="email_at" class="blockLabel email_at">&nbsp;<span id="email_at" name="email_at" />@</label>
-          <label for="email_domain" class="blockLabel">{tmpl_var name='domain_txt'}<select name="email_domain" id="email_domain" class="selectInput">{tmpl_var name='email_domain'}</select></label>
-        </div>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="destination">{tmpl_var name='destination_txt'}</label>
-        <select name="destination" id="destination" class="selectInput">
-					{tmpl_var name='destination'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input type="hidden" name="type" value="alias">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_alias_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_alias_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_alias">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+        <p class="label"><em>*</em> {tmpl_var name='email_txt'}</p>
+        <div class="multiField">
+          <label for="email_local_part" class="blockLabel">Alias<input type="text" id="email_local_part" name="email_local_part" size="20" value="{tmpl_var name='email_local_part'}" class="textInput" /></label>
+          <label for="email_at" class="blockLabel email_at">&nbsp;<span id="email_at" name="email_at" />@</label>
+          <label for="email_domain" class="blockLabel">{tmpl_var name='domain_txt'}<select name="email_domain" id="email_domain" class="selectInput">{tmpl_var name='email_domain'}</select></label>
+        </div>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="destination">{tmpl_var name='destination_txt'}</label>
+        <select name="destination" id="destination" class="selectInput">
+					{tmpl_var name='destination'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input type="hidden" name="type" value="alias">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_alias_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_alias_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_blacklist_edit.htm b/interface/web/mail/templates/mail_blacklist_edit.htm
index e64fe2d5da..63531fdd83 100644
--- a/interface/web/mail/templates/mail_blacklist_edit.htm
+++ b/interface/web/mail/templates/mail_blacklist_edit.htm
@@ -1,41 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_blacklist">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="source">{tmpl_var name='source_txt'}</label>
-        <input name="source" id="source" value="{tmpl_var name='source'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="type">{tmpl_var name='type_txt'}</label>
-        <select name="type" id="type" class="selectInput">
-					{tmpl_var name='type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input name="access" type="hidden" value="{tmpl_var name='access'}">
-    
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_blacklist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_blacklist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_blacklist">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="source">{tmpl_var name='source_txt'}</label>
+        <input name="source" id="source" value="{tmpl_var name='source'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="type">{tmpl_var name='type_txt'}</label>
+        <select name="type" id="type" class="selectInput">
+					{tmpl_var name='type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input name="access" type="hidden" value="{tmpl_var name='access'}">
+    
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_blacklist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_blacklist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_content_filter_edit.htm b/interface/web/mail/templates/mail_content_filter_edit.htm
index ffe844e8d2..e93c26c139 100644
--- a/interface/web/mail/templates/mail_content_filter_edit.htm
+++ b/interface/web/mail/templates/mail_content_filter_edit.htm
@@ -1,50 +1,50 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_content_filter">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="type">{tmpl_var name='type_txt'}</label>
-        <select name="type" id="type" class="selectInput">
-					{tmpl_var name='type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="pattern">{tmpl_var name='pattern_txt'}</label>
-        <input name="pattern" id="pattern" value="{tmpl_var name='pattern'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="data">{tmpl_var name='data_txt'}</label>
-        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="action">{tmpl_var name='action_txt'}</label>
-        <select name="action" id="action" class="selectInput">
-					{tmpl_var name='action'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_content_filter_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_content_filter_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_content_filter">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="type">{tmpl_var name='type_txt'}</label>
+        <select name="type" id="type" class="selectInput">
+					{tmpl_var name='type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="pattern">{tmpl_var name='pattern_txt'}</label>
+        <input name="pattern" id="pattern" value="{tmpl_var name='pattern'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="data">{tmpl_var name='data_txt'}</label>
+        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="action">{tmpl_var name='action_txt'}</label>
+        <select name="action" id="action" class="selectInput">
+					{tmpl_var name='action'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_content_filter_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_content_filter_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_domain_admin_list.htm b/interface/web/mail/templates/mail_domain_admin_list.htm
index b0e14e5f7f..a2b4ba62e8 100644
--- a/interface/web/mail/templates/mail_domain_admin_list.htm
+++ b/interface/web/mail/templates/mail_domain_admin_list.htm
@@ -17,27 +17,27 @@
       <table class="list">
         <thead>
           <tr>
-            <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_domain" scope="col"><tmpl_var name="domain_txt"></th>
+            <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_domain" scope="col"><tmpl_var name="domain_txt"></th>
             <th class="tbl_col_buttons" scope="col">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','mail/mail_domain_list.php');">{tmpl_var name='search_active'}</select></td>
-            <td class="tbl_col_sys_groupid"><select name="search_sys_groupid" onChange="submitForm('pageForm','mail/mail_domain_list.php');">{tmpl_var name='search_sys_groupid'}</select></td>
-            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','mail/mail_domain_list.php');">{tmpl_var name='search_server_id'}</select></td>
-            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','mail/mail_domain_list.php');">{tmpl_var name='search_active'}</select></td>
+            <td class="tbl_col_sys_groupid"><select name="search_sys_groupid" onChange="submitForm('pageForm','mail/mail_domain_list.php');">{tmpl_var name='search_sys_groupid'}</select></td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','mail/mail_domain_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
             <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_domain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-            <td class="tbl_col_sys_groupid"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
-            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-            <td class="tbl_col_domain"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
+            <td class="tbl_col_active"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+            <td class="tbl_col_sys_groupid"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+            <td class="tbl_col_domain"><a href="#" onClick="loadContent('mail/mail_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
             <td class="tbl_col_buttons">
               <div class="buttons icons16">    
                 <a class="icons16 icoDelete" href="javascript: del_record('mail/mail_domain_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>
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm
index cd412dde69..90b8af7b44 100644
--- a/interface/web/mail/templates/mail_domain_catchall_edit.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm
@@ -1,38 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_domain_catchall">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-        <p class="label">{tmpl_var name='email_txt'}</p>
-        <div class="multiField">
-          <label for="email_at" class="blockLabel email_at">&nbsp;<span id="email_at" name="email_at" />@</label>
-          <label for="email_domain" class="blockLabel">{tmpl_var name='domain_txt'}<select name="email_domain" id="email_domain" class="selectInput">{tmpl_var name='email_domain'}</select></label>
-        </div>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="destination">{tmpl_var name='destination_txt'}</label>
-        <select name="destination" id="destination" class="selectInput">
-					{tmpl_var name='destination'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input type="hidden" name="type" value="catchall">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_domain_catchall_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_domain_catchall_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_domain_catchall">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+        <p class="label">{tmpl_var name='email_txt'}</p>
+        <div class="multiField">
+          <label for="email_at" class="blockLabel email_at">&nbsp;<span id="email_at" name="email_at" />@</label>
+          <label for="email_domain" class="blockLabel">{tmpl_var name='domain_txt'}<select name="email_domain" id="email_domain" class="selectInput">{tmpl_var name='email_domain'}</select></label>
+        </div>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="destination">{tmpl_var name='destination_txt'}</label>
+        <select name="destination" id="destination" class="selectInput">
+					{tmpl_var name='destination'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input type="hidden" name="type" value="catchall">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_domain_catchall_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_domain_catchall_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_get_edit.htm b/interface/web/mail/templates/mail_get_edit.htm
index 2da485e38d..6d45cdb115 100644
--- a/interface/web/mail/templates/mail_get_edit.htm
+++ b/interface/web/mail/templates/mail_get_edit.htm
@@ -1,54 +1,54 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_get">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="type">{tmpl_var name='type_txt'}</label>
-        <select name="type" id="type" class="selectInput">
-					{tmpl_var name='type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="source_server">{tmpl_var name='source_server_txt'}</label>
-        <input name="source_server" id="source_server" value="{tmpl_var name='source_server'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="source_username">{tmpl_var name='source_username_txt'}</label>
-        <input name="source_username" id="source_username" value="{tmpl_var name='source_username'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="source_password">{tmpl_var name='source_password_txt'}</label>
-        <input name="source_password" id="source_password" value="{tmpl_var name='source_password'}" size="30" maxlength="255" type="password" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='source_delete_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='source_delete'}
-					</div>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="destination">{tmpl_var name='destination_txt'}</label>
-        <select name="destination" id="destination" class="selectInput">
-					{tmpl_var name='destination'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_get_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_get_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_get">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="type">{tmpl_var name='type_txt'}</label>
+        <select name="type" id="type" class="selectInput">
+					{tmpl_var name='type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="source_server">{tmpl_var name='source_server_txt'}</label>
+        <input name="source_server" id="source_server" value="{tmpl_var name='source_server'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="source_username">{tmpl_var name='source_username_txt'}</label>
+        <input name="source_username" id="source_username" value="{tmpl_var name='source_username'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="source_password">{tmpl_var name='source_password_txt'}</label>
+        <input name="source_password" id="source_password" value="{tmpl_var name='source_password'}" size="30" maxlength="255" type="password" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='source_delete_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='source_delete'}
+					</div>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="destination">{tmpl_var name='destination_txt'}</label>
+        <select name="destination" id="destination" class="selectInput">
+					{tmpl_var name='destination'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_get_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_get_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_mailinglist_edit.htm b/interface/web/mail/templates/mail_mailinglist_edit.htm
index 2ac742ee1b..bbf993df92 100644
--- a/interface/web/mail/templates/mail_mailinglist_edit.htm
+++ b/interface/web/mail/templates/mail_mailinglist_edit.htm
@@ -1,80 +1,80 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_mailinglist">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Mailing List</legend>	
-		<tmpl_if name="is_admin">
-			<div class="ctrlHolder">
-				<label for="client_group_id">{tmpl_var name='client_txt'}</label>
-				<select name="client_group_id" id="client_group_id" class="selectInput">
-					{tmpl_var name='client_group_id'}
-				</select>
-			</div>
-		</tmpl_if>
-	  
-		<tmpl_if name="is_reseller">
-      		<div class="ctrlHolder">
-      			<label for="client_group_id">{tmpl_var name='client_txt'}</label>
-        		<select name="client_group_id" id="client_group_id" class="selectInput">
-					{tmpl_var name='client_group_id'}
-				</select>
-      		</div>
-      	</tmpl_if>
-		
-		<tmpl_if name="edit_disabled">
-			<div class="ctrlHolder">
-				<label for="domain_disabled">{tmpl_var name='domain_txt'}</label>
-				<select name="domain_disabled" id="domain_disabled" class="selectInput" disabled="disabled">
-						{tmpl_var name='domain_option'}
-				</select>
-				<input type="hidden" name="domain" value="{tmpl_var name='domain_value'}" />
-			</div>
-			
-			<div class="ctrlHolder">
-				<label for="listname_disabled">{tmpl_var name='listname_txt'}</label>
-				<input name="listname_disabled" id="listname_disabled" value="{tmpl_var name='listname'}" size="30" maxlength="255" type="text" class="textInput" disabled="disabled" />
-				<input type="hidden" name="listname" value="{tmpl_var name='listname_value'}" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="email_disabled">{tmpl_var name='email_txt'}</label>
-				<input name="email_disabled" id="email_disabled" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" disabled="disabled" />
-				<input type="hidden" name="email" value="{tmpl_var name='email_value'}" />
-			</div>
-		<tmpl_else>
-			<div class="ctrlHolder">
-				<label for="domain">{tmpl_var name='domain_txt'}</label>
-				<select name="domain" id="domain" class="selectInput">
-						{tmpl_var name='domain_option'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="listname">{tmpl_var name='listname_txt'}</label>
-				<input name="listname" id="listname" value="{tmpl_var name='listname'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="email">{tmpl_var name='email_txt'}</label>
-				<input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-		</tmpl_if>
-		<div class="ctrlHolder">
-			<label for="password">{tmpl_var name='password_txt'}</label>
-			<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
-		</div>
-		<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_mailinglist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_mailinglist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_mailinglist">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Mailing List</legend>	
+		<tmpl_if name="is_admin">
+			<div class="ctrlHolder">
+				<label for="client_group_id">{tmpl_var name='client_txt'}</label>
+				<select name="client_group_id" id="client_group_id" class="selectInput">
+					{tmpl_var name='client_group_id'}
+				</select>
+			</div>
+		</tmpl_if>
+	  
+		<tmpl_if name="is_reseller">
+      		<div class="ctrlHolder">
+      			<label for="client_group_id">{tmpl_var name='client_txt'}</label>
+        		<select name="client_group_id" id="client_group_id" class="selectInput">
+					{tmpl_var name='client_group_id'}
+				</select>
+      		</div>
+      	</tmpl_if>
+		
+		<tmpl_if name="edit_disabled">
+			<div class="ctrlHolder">
+				<label for="domain_disabled">{tmpl_var name='domain_txt'}</label>
+				<select name="domain_disabled" id="domain_disabled" class="selectInput" disabled="disabled">
+						{tmpl_var name='domain_option'}
+				</select>
+				<input type="hidden" name="domain" value="{tmpl_var name='domain_value'}" />
+			</div>
+			
+			<div class="ctrlHolder">
+				<label for="listname_disabled">{tmpl_var name='listname_txt'}</label>
+				<input name="listname_disabled" id="listname_disabled" value="{tmpl_var name='listname'}" size="30" maxlength="255" type="text" class="textInput" disabled="disabled" />
+				<input type="hidden" name="listname" value="{tmpl_var name='listname_value'}" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="email_disabled">{tmpl_var name='email_txt'}</label>
+				<input name="email_disabled" id="email_disabled" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" disabled="disabled" />
+				<input type="hidden" name="email" value="{tmpl_var name='email_value'}" />
+			</div>
+		<tmpl_else>
+			<div class="ctrlHolder">
+				<label for="domain">{tmpl_var name='domain_txt'}</label>
+				<select name="domain" id="domain" class="selectInput">
+						{tmpl_var name='domain_option'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="listname">{tmpl_var name='listname_txt'}</label>
+				<input name="listname" id="listname" value="{tmpl_var name='listname'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="email">{tmpl_var name='email_txt'}</label>
+				<input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+		</tmpl_if>
+		<div class="ctrlHolder">
+			<label for="password">{tmpl_var name='password_txt'}</label>
+			<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
+		</div>
+		<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_mailinglist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_mailinglist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_mailinglist_list.htm b/interface/web/mail/templates/mail_mailinglist_list.htm
index 58da87ecc9..37b0be7c8b 100644
--- a/interface/web/mail/templates/mail_mailinglist_list.htm
+++ b/interface/web/mail/templates/mail_mailinglist_list.htm
@@ -1,53 +1,53 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-
-<div class="panel panel_list_mail_mailinglist">
-
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-        <button class="iconstxt icoAdd" type="button" onClick="loadContent('mail/mail_mailinglist_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>
-            <th class="tbl_col_listname" scope="col"><tmpl_var name="listname_txt"></th>
-            <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
-          </tr>
-          <tr>
-            <td class="tbl_col_listname"><input type="text" name="search_listname" value="{tmpl_var name='search_listname'}" /></td>
-            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
-            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_mailinglist_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_listname"><a href="#" onClick="loadContent('mail/mail_mailinglist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="listname"}</a></td>
-            <td class="tbl_col_domain"><a href="#" onClick="loadContent('mail/mail_mailinglist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
-            <td class="tbl_col_buttons">
-              <div class="buttons icons16">
-			  	<tmpl_if name="mailmailinglist_link"><a class="icons16 icoWebmailer" href="mail/mailinglist.php?id={tmpl_var name='id'}" target="mailmailinglist"><span>{tmpl_var name='delete_txt'}</span></a></tmpl_if>
-                <a class="icons16 icoDelete" href="javascript: del_record('mail/mail_mailinglist_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>
-              </div>
-            </td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+
+<div class="panel panel_list_mail_mailinglist">
+
+  <div class="pnl_toolsarea">
+    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+      <div class="buttons">
+        <button class="iconstxt icoAdd" type="button" onClick="loadContent('mail/mail_mailinglist_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>
+            <th class="tbl_col_listname" scope="col"><tmpl_var name="listname_txt"></th>
+            <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
+            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+          </tr>
+          <tr>
+            <td class="tbl_col_listname"><input type="text" name="search_listname" value="{tmpl_var name='search_listname'}" /></td>
+            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_mailinglist_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_listname"><a href="#" onClick="loadContent('mail/mail_mailinglist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="listname"}</a></td>
+            <td class="tbl_col_domain"><a href="#" onClick="loadContent('mail/mail_mailinglist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
+            <td class="tbl_col_buttons">
+              <div class="buttons icons16">
+			  	<tmpl_if name="mailmailinglist_link"><a class="icons16 icoWebmailer" href="mail/mailinglist.php?id={tmpl_var name='id'}" target="mailmailinglist"><span>{tmpl_var name='delete_txt'}</span></a></tmpl_if>
+                <a class="icons16 icoDelete" href="javascript: del_record('mail/mail_mailinglist_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>
+              </div>
+            </td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/mail/templates/mail_relay_recipient_list.htm b/interface/web/mail/templates/mail_relay_recipient_list.htm
index 331aa5e2b8..0a648e4264 100644
--- a/interface/web/mail/templates/mail_relay_recipient_list.htm
+++ b/interface/web/mail/templates/mail_relay_recipient_list.htm
@@ -17,24 +17,24 @@
       <table class="list">
         <thead>
           <tr>
-            <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-            <th class="tbl_col_source" scope="col"><tmpl_var name="source_txt"></th>
+            <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+            <th class="tbl_col_source" scope="col"><tmpl_var name="source_txt"></th>
             <th class="tbl_col_buttons" scope="col">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','mail/mail_relay_recipient_list.php');">{tmpl_var name='search_active'}</select></td>
-            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','mail/mail_relay_recipient_list.php');">{tmpl_var name='search_server_id'}</select></td>
-            <td class="tbl_col_source"><input type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','mail/mail_relay_recipient_list.php');">{tmpl_var name='search_active'}</select></td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','mail/mail_relay_recipient_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_source"><input type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
             <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_relay_recipient_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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('mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-            <td class="tbl_col_source"><a href="#" onClick="loadContent('mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
+            <td class="tbl_col_active"><a href="#" onClick="loadContent('mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+            <td class="tbl_col_source"><a href="#" onClick="loadContent('mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
             <td class="tbl_col_buttons">
               <div class="buttons icons16">    
                 <a class="icons16 icoDelete" href="javascript: del_record('mail/mail_relay_recipient_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>
diff --git a/interface/web/mail/templates/mail_transport_edit.htm b/interface/web/mail/templates/mail_transport_edit.htm
index 5f16db3662..b6e1c9762c 100644
--- a/interface/web/mail/templates/mail_transport_edit.htm
+++ b/interface/web/mail/templates/mail_transport_edit.htm
@@ -1,56 +1,56 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_transport">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="domain">{tmpl_var name='domain_txt'}</label>
-        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-			<div class="ctrlHolder">
-      	<label for="type">{tmpl_var name='type_txt'}</label>
-        <select name="type" id="type" class="selectInput formLengthHalf">
-					{tmpl_var name='type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='mx_txt'}</p>
-					<div class="multiField">
-						<input type="checkbox" value="y" id="mx" name="mx" {tmpl_var name='mx'} />
-					</div>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="destination">{tmpl_var name='destination_txt'}</label>
-        <input name="destination" id="transport" value="{tmpl_var name='destination'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-			<div class="ctrlHolder">
-      	<label for="sort_order">{tmpl_var name='sort_order_txt'}</label>
-        <select name="sort_order" id="sort_order" class="selectInput formLengthHalf">
-					{tmpl_var name='sort_order'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_transport_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_transport_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_transport">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="domain">{tmpl_var name='domain_txt'}</label>
+        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+			<div class="ctrlHolder">
+      	<label for="type">{tmpl_var name='type_txt'}</label>
+        <select name="type" id="type" class="selectInput formLengthHalf">
+					{tmpl_var name='type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='mx_txt'}</p>
+					<div class="multiField">
+						<input type="checkbox" value="y" id="mx" name="mx" {tmpl_var name='mx'} />
+					</div>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="destination">{tmpl_var name='destination_txt'}</label>
+        <input name="destination" id="transport" value="{tmpl_var name='destination'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+			<div class="ctrlHolder">
+      	<label for="sort_order">{tmpl_var name='sort_order_txt'}</label>
+        <select name="sort_order" id="sort_order" class="selectInput formLengthHalf">
+					{tmpl_var name='sort_order'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_transport_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_transport_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_user_custom_rules_edit.htm b/interface/web/mail/templates/mail_user_custom_rules_edit.htm
index 0ca1b3c6ec..33d597d9be 100644
--- a/interface/web/mail/templates/mail_user_custom_rules_edit.htm
+++ b/interface/web/mail/templates/mail_user_custom_rules_edit.htm
@@ -1,22 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_user">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="custom_mailfilter">{tmpl_var name='custom_mailfilter_txt'}</label>
-        <textarea name="custom_mailfilter" id="custom_mailfilter" rows='15' cols='30'>{tmpl_var name='custom_mailfilter'}</textarea>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_user">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="custom_mailfilter">{tmpl_var name='custom_mailfilter_txt'}</label>
+        <textarea name="custom_mailfilter" id="custom_mailfilter" rows='15' cols='30'>{tmpl_var name='custom_mailfilter'}</textarea>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/mail_user_stats_list.htm b/interface/web/mail/templates/mail_user_stats_list.htm
index 47e4b07b67..b7f0d28ae5 100644
--- a/interface/web/mail/templates/mail_user_stats_list.htm
+++ b/interface/web/mail/templates/mail_user_stats_list.htm
@@ -1,52 +1,52 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_list_mail_user_stats">
-
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
-          <tr>
-            <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-            <th class="tbl_col_this_month" scope="col"><tmpl_var name="this_month_txt"></th>
-            <th class="tbl_col_last_month" scope="col"><tmpl_var name="last_month_txt"></th>
-            <th class="tbl_col_this_year" scope="col"><tmpl_var name="this_year_txt"></th>
-            <th class="tbl_col_last_year" scope="col"><tmpl_var name="last_year_txt"></th>
-            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
-          </tr>
-          <tr>
-            <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
-            <td class="tbl_col_this_month"></td>
-            <td class="tbl_col_last_month"></td>
-            <td class="tbl_col_this_year"></td>
-            <td class="tbl_col_last_year"></td>
-            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_user_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_email"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="email"}</a></td>
-            <td class="tbl_col_this_month"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_month"} MB</a></td>
-            <td class="tbl_col_last_month"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_month"} MB</a></td>
-            <td class="tbl_col_this_year"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_year"} MB</a></td>
-            <td class="tbl_col_last_year"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_year"} MB</a></td>
-            <td class="tbl_col_buttons">
-              <div class="buttons icons16">    
-              </div>
-            </td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_mail_user_stats">
+
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
+            <th class="tbl_col_this_month" scope="col"><tmpl_var name="this_month_txt"></th>
+            <th class="tbl_col_last_month" scope="col"><tmpl_var name="last_month_txt"></th>
+            <th class="tbl_col_this_year" scope="col"><tmpl_var name="this_year_txt"></th>
+            <th class="tbl_col_last_year" scope="col"><tmpl_var name="last_year_txt"></th>
+            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+          </tr>
+          <tr>
+            <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
+            <td class="tbl_col_this_month"></td>
+            <td class="tbl_col_last_month"></td>
+            <td class="tbl_col_this_year"></td>
+            <td class="tbl_col_last_year"></td>
+            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','mail/mail_user_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_email"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="email"}</a></td>
+            <td class="tbl_col_this_month"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_month"} MB</a></td>
+            <td class="tbl_col_last_month"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_month"} MB</a></td>
+            <td class="tbl_col_this_year"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_year"} MB</a></td>
+            <td class="tbl_col_last_year"><a href="#" onClick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_year"} MB</a></td>
+            <td class="tbl_col_buttons">
+              <div class="buttons icons16">    
+              </div>
+            </td>
+          </tr>
+          </tmpl_loop>
+        </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/mail/templates/mail_whitelist_edit.htm b/interface/web/mail/templates/mail_whitelist_edit.htm
index d8e6b8b53b..dc31da2df1 100644
--- a/interface/web/mail/templates/mail_whitelist_edit.htm
+++ b/interface/web/mail/templates/mail_whitelist_edit.htm
@@ -1,41 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_whitelist">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="source">{tmpl_var name='source_txt'}</label>
-        <input name="source" id="source" value="{tmpl_var name='source'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="type">{tmpl_var name='type_txt'}</label>
-        <select name="type" id="type" class="selectInput">
-					{tmpl_var name='type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input name="access" type="hidden" value="{tmpl_var name='access'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_whitelist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_whitelist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_mail_whitelist">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="source">{tmpl_var name='source_txt'}</label>
+        <input name="source" id="source" value="{tmpl_var name='source'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="type">{tmpl_var name='type_txt'}</label>
+        <select name="type" id="type" class="selectInput">
+					{tmpl_var name='type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input name="access" type="hidden" value="{tmpl_var name='access'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_whitelist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_whitelist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_blacklist_edit.htm b/interface/web/mail/templates/spamfilter_blacklist_edit.htm
index 36058d9a4c..750c4b1e21 100644
--- a/interface/web/mail/templates/spamfilter_blacklist_edit.htm
+++ b/interface/web/mail/templates/spamfilter_blacklist_edit.htm
@@ -1,49 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_blacklist">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-<!--
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
--->
-      <div class="ctrlHolder">
-      	<label for="rid">{tmpl_var name='rid_txt'}</label>
-        <select name="rid" id="rid" class="selectInput">
-					{tmpl_var name='rid'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="email">{tmpl_var name='email_txt'}</label>
-        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="priority">{tmpl_var name='priority_txt'}</label>
-        <select name="priority" id="priority" class="selectInput formLengthHalf">
-					{tmpl_var name='priority'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input type="hidden" name="wb" value="{tmpl_var name='wb'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_blacklist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_blacklist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_blacklist">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+<!--
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+-->
+      <div class="ctrlHolder">
+      	<label for="rid">{tmpl_var name='rid_txt'}</label>
+        <select name="rid" id="rid" class="selectInput">
+					{tmpl_var name='rid'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="email">{tmpl_var name='email_txt'}</label>
+        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="priority">{tmpl_var name='priority_txt'}</label>
+        <select name="priority" id="priority" class="selectInput formLengthHalf">
+					{tmpl_var name='priority'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input type="hidden" name="wb" value="{tmpl_var name='wb'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_blacklist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_blacklist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_config_getmail_edit.htm b/interface/web/mail/templates/spamfilter_config_getmail_edit.htm
index 1bdb88675b..49f5ff1a63 100644
--- a/interface/web/mail/templates/spamfilter_config_getmail_edit.htm
+++ b/interface/web/mail/templates/spamfilter_config_getmail_edit.htm
@@ -1,22 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_config">
-
-  <div class="pnl_formsarea">
-    <fieldset id="wf_area_spamfilter_config">
-      <span class="wf_oneField">
-        <label for="getmail_config_dir" class="wf_preField">{tmpl_var name='getmail_config_dir_txt'}</label>
-        <input type="text" id="getmail_config_dir" name="getmail_config_dir" value="{tmpl_var name='getmail_config_dir'}" size="40" maxlength="255">
-      </span>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="wf_actions buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_config">
+
+  <div class="pnl_formsarea">
+    <fieldset id="wf_area_spamfilter_config">
+      <span class="wf_oneField">
+        <label for="getmail_config_dir" class="wf_preField">{tmpl_var name='getmail_config_dir_txt'}</label>
+        <input type="text" id="getmail_config_dir" name="getmail_config_dir" value="{tmpl_var name='getmail_config_dir'}" size="40" maxlength="255">
+      </span>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="wf_actions buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_config_mail_edit.htm b/interface/web/mail/templates/spamfilter_config_mail_edit.htm
index 3526589ab1..50d43cdaf2 100644
--- a/interface/web/mail/templates/spamfilter_config_mail_edit.htm
+++ b/interface/web/mail/templates/spamfilter_config_mail_edit.htm
@@ -1,66 +1,66 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_config">
-
-  <div class="pnl_formsarea">
-    <fieldset id="wf_area_spamfilter_config">
-      <span class="wf_oneField">
-        <label for="module" class="wf_preField">{tmpl_var name='module_txt'}</label>
-        <select id="module" name="module">{tmpl_var name='module'}</select>
-      </span>
-      <span class="wf_oneField">
-        <label for="maildir_path" class="wf_preField">{tmpl_var name='maildir_path_txt'}</label>
-        <input type="text" id="maildir_path" name="maildir_path" value="{tmpl_var name='maildir_path'}" size="40" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="homedir_path" class="wf_preField">{tmpl_var name='homedir_path_txt'}</label>
-        <input type="text" id="homedir_path" name="homedir_path" value="{tmpl_var name='homedir_path'}" size="40" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="mailuser_uid" class="wf_preField">{tmpl_var name='mailuser_uid_txt'}</label>
-        <input type="text" id="mailuser_uid" name="mailuser_uid" value="{tmpl_var name='mailuser_uid'}" size="10" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="mailuser_gid" class="wf_preField">{tmpl_var name='mailuser_gid_txt'}</label>
-        <input type="text" id="mailuser_gid" name="mailuser_gid" value="{tmpl_var name='mailuser_gid'}" size="10" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="mailuser_name" class="wf_preField">{tmpl_var name='mailuser_name_txt'}</label>
-        <input type="text" id="mailuser_name" name="mailuser_name" value="{tmpl_var name='mailuser_name'}" size="10" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="mailuser_group" class="wf_preField">{tmpl_var name='mailuser_group_txt'}</label>
-        <input type="text" id="mailuser_group" name="mailuser_group" value="{tmpl_var name='mailuser_group'}" size="10" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="relayhost" class="wf_preField">{tmpl_var name='relayhost_txt'}</label>
-        <input type="text" id="relayhost" name="relayhost" value="{tmpl_var name='relayhost'}" size="40" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="relayhost_user" class="wf_preField">{tmpl_var name='relayhost_user_txt'}</label>
-        <input type="text" id="relayhost_user" name="relayhost_user" value="{tmpl_var name='relayhost_user'}" size="40" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="relayhost_password" class="wf_preField">{tmpl_var name='relayhost_password_txt'}</label>
-        <input type="text" id="relayhost_password" name="relayhost_password" value="{tmpl_var name='relayhost_password'}" size="40" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="mailbox_size_limit" class="wf_preField">{tmpl_var name='mailbox_size_limit_txt'}</label>
-        <input type="text" id="mailbox_size_limit" name="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}" size="10" maxlength="15">
-      </span>
-      <span class="wf_oneField">
-        <label for="message_size_limit" class="wf_preField">{tmpl_var name='message_size_limit_txt'}</label>
-        <input type="text" id="message_size_limit" name="message_size_limit" value="{tmpl_var name='message_size_limit'}" size="10" maxlength="15">
-      </span>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="wf_actions buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_config">
+
+  <div class="pnl_formsarea">
+    <fieldset id="wf_area_spamfilter_config">
+      <span class="wf_oneField">
+        <label for="module" class="wf_preField">{tmpl_var name='module_txt'}</label>
+        <select id="module" name="module">{tmpl_var name='module'}</select>
+      </span>
+      <span class="wf_oneField">
+        <label for="maildir_path" class="wf_preField">{tmpl_var name='maildir_path_txt'}</label>
+        <input type="text" id="maildir_path" name="maildir_path" value="{tmpl_var name='maildir_path'}" size="40" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="homedir_path" class="wf_preField">{tmpl_var name='homedir_path_txt'}</label>
+        <input type="text" id="homedir_path" name="homedir_path" value="{tmpl_var name='homedir_path'}" size="40" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="mailuser_uid" class="wf_preField">{tmpl_var name='mailuser_uid_txt'}</label>
+        <input type="text" id="mailuser_uid" name="mailuser_uid" value="{tmpl_var name='mailuser_uid'}" size="10" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="mailuser_gid" class="wf_preField">{tmpl_var name='mailuser_gid_txt'}</label>
+        <input type="text" id="mailuser_gid" name="mailuser_gid" value="{tmpl_var name='mailuser_gid'}" size="10" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="mailuser_name" class="wf_preField">{tmpl_var name='mailuser_name_txt'}</label>
+        <input type="text" id="mailuser_name" name="mailuser_name" value="{tmpl_var name='mailuser_name'}" size="10" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="mailuser_group" class="wf_preField">{tmpl_var name='mailuser_group_txt'}</label>
+        <input type="text" id="mailuser_group" name="mailuser_group" value="{tmpl_var name='mailuser_group'}" size="10" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="relayhost" class="wf_preField">{tmpl_var name='relayhost_txt'}</label>
+        <input type="text" id="relayhost" name="relayhost" value="{tmpl_var name='relayhost'}" size="40" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="relayhost_user" class="wf_preField">{tmpl_var name='relayhost_user_txt'}</label>
+        <input type="text" id="relayhost_user" name="relayhost_user" value="{tmpl_var name='relayhost_user'}" size="40" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="relayhost_password" class="wf_preField">{tmpl_var name='relayhost_password_txt'}</label>
+        <input type="text" id="relayhost_password" name="relayhost_password" value="{tmpl_var name='relayhost_password'}" size="40" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="mailbox_size_limit" class="wf_preField">{tmpl_var name='mailbox_size_limit_txt'}</label>
+        <input type="text" id="mailbox_size_limit" name="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}" size="10" maxlength="15">
+      </span>
+      <span class="wf_oneField">
+        <label for="message_size_limit" class="wf_preField">{tmpl_var name='message_size_limit_txt'}</label>
+        <input type="text" id="message_size_limit" name="message_size_limit" value="{tmpl_var name='message_size_limit'}" size="10" maxlength="15">
+      </span>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="wf_actions buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_config_server_edit.htm b/interface/web/mail/templates/spamfilter_config_server_edit.htm
index ac45009fd2..e5b5428798 100644
--- a/interface/web/mail/templates/spamfilter_config_server_edit.htm
+++ b/interface/web/mail/templates/spamfilter_config_server_edit.htm
@@ -1,38 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_config">
-
-  <div class="pnl_formsarea">
-    <fieldset id="wf_area_spamfilter_config">
-      <span class="wf_oneField">
-        <label for="ip_address" class="wf_preField">{tmpl_var name='ip_address_txt'}</label>
-        <input type="text" id="ip_address" name="ip_address" value="{tmpl_var name='ip_address'}" size="15" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="netmask" class="wf_preField">{tmpl_var name='netmask_txt'}</label>
-        <input type="text" id="netmask" name="netmask" value="{tmpl_var name='netmask'}" size="15" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="gateway" class="wf_preField">{tmpl_var name='gateway_txt'}</label>
-        <input type="text" id="gateway" name="gateway" value="{tmpl_var name='gateway'}" size="15" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="hostname" class="wf_preField">{tmpl_var name='hostname_txt'}</label>
-        <input type="text" id="hostname" name="hostname" value="{tmpl_var name='hostname'}" size="40" maxlength="255">
-      </span>
-      <span class="wf_oneField">
-        <label for="nameservers" class="wf_preField">{tmpl_var name='nameservers_txt'}</label>
-        <input type="text" id="nameservers" name="nameservers" value="{tmpl_var name='nameservers'}" size="40" maxlength="255">
-      </span>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="wf_actions buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_config">
+
+  <div class="pnl_formsarea">
+    <fieldset id="wf_area_spamfilter_config">
+      <span class="wf_oneField">
+        <label for="ip_address" class="wf_preField">{tmpl_var name='ip_address_txt'}</label>
+        <input type="text" id="ip_address" name="ip_address" value="{tmpl_var name='ip_address'}" size="15" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="netmask" class="wf_preField">{tmpl_var name='netmask_txt'}</label>
+        <input type="text" id="netmask" name="netmask" value="{tmpl_var name='netmask'}" size="15" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="gateway" class="wf_preField">{tmpl_var name='gateway_txt'}</label>
+        <input type="text" id="gateway" name="gateway" value="{tmpl_var name='gateway'}" size="15" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="hostname" class="wf_preField">{tmpl_var name='hostname_txt'}</label>
+        <input type="text" id="hostname" name="hostname" value="{tmpl_var name='hostname'}" size="40" maxlength="255">
+      </span>
+      <span class="wf_oneField">
+        <label for="nameservers" class="wf_preField">{tmpl_var name='nameservers_txt'}</label>
+        <input type="text" id="nameservers" name="nameservers" value="{tmpl_var name='nameservers'}" size="40" maxlength="255">
+      </span>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="wf_actions buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_other_edit.htm b/interface/web/mail/templates/spamfilter_other_edit.htm
index 76889a6a94..6b8c739da3 100644
--- a/interface/web/mail/templates/spamfilter_other_edit.htm
+++ b/interface/web/mail/templates/spamfilter_other_edit.htm
@@ -1,80 +1,80 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_policy">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="addr_extension_virus">{tmpl_var name='addr_extension_virus_txt'}</label>
-        <input name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="addr_extension_spam">{tmpl_var name='addr_extension_spam_txt'}</label>
-        <input name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="addr_extension_banned">{tmpl_var name='addr_extension_banned_txt'}</label>
-        <input name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="addr_extension_bad_header">{tmpl_var name='addr_extension_bad_header_txt'}</label>
-        <input name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="warnvirusrecip">{tmpl_var name='warnvirusrecip_txt'}</label>
-        <select name="warnvirusrecip" id="warnvirusrecip" class="selectInput formLengthBool">
-					{tmpl_var name='warnvirusrecip'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="warnbannedrecip">{tmpl_var name='warnbannedrecip_txt'}</label>
-        <select name="warnbannedrecip" id="warnbannedrecip" class="selectInput formLengthBool">
-					{tmpl_var name='warnbannedrecip'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="warnbadhrecip">{tmpl_var name='warnbadhrecip_txt'}</label>
-        <select name="warnbadhrecip" id="warnbadhrecip" class="selectInput formLengthBool">
-					{tmpl_var name='warnbadhrecip'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="newvirus_admin">{tmpl_var name='newvirus_admin_txt'}</label>
-        <input name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="virus_admin">{tmpl_var name='virus_admin_txt'}</label>
-        <input name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="banned_admin">{tmpl_var name='banned_admin_txt'}</label>
-        <input name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="bad_header_admin">{tmpl_var name='bad_header_admin_txt'}</label>
-        <input name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_admin">{tmpl_var name='spam_admin_txt'}</label>
-        <input name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="message_size_limit">{tmpl_var name='message_size_limit_txt'}</label>
-        <input name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;Bytes
-			</div>
-      <div class="ctrlHolder">
-      	<label for="banned_rulenames">{tmpl_var name='banned_rulenames_txt'}</label>
-        <input name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_policy">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="addr_extension_virus">{tmpl_var name='addr_extension_virus_txt'}</label>
+        <input name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="addr_extension_spam">{tmpl_var name='addr_extension_spam_txt'}</label>
+        <input name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="addr_extension_banned">{tmpl_var name='addr_extension_banned_txt'}</label>
+        <input name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="addr_extension_bad_header">{tmpl_var name='addr_extension_bad_header_txt'}</label>
+        <input name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="warnvirusrecip">{tmpl_var name='warnvirusrecip_txt'}</label>
+        <select name="warnvirusrecip" id="warnvirusrecip" class="selectInput formLengthBool">
+					{tmpl_var name='warnvirusrecip'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="warnbannedrecip">{tmpl_var name='warnbannedrecip_txt'}</label>
+        <select name="warnbannedrecip" id="warnbannedrecip" class="selectInput formLengthBool">
+					{tmpl_var name='warnbannedrecip'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="warnbadhrecip">{tmpl_var name='warnbadhrecip_txt'}</label>
+        <select name="warnbadhrecip" id="warnbadhrecip" class="selectInput formLengthBool">
+					{tmpl_var name='warnbadhrecip'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="newvirus_admin">{tmpl_var name='newvirus_admin_txt'}</label>
+        <input name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="virus_admin">{tmpl_var name='virus_admin_txt'}</label>
+        <input name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="banned_admin">{tmpl_var name='banned_admin_txt'}</label>
+        <input name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="bad_header_admin">{tmpl_var name='bad_header_admin_txt'}</label>
+        <input name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_admin">{tmpl_var name='spam_admin_txt'}</label>
+        <input name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="message_size_limit">{tmpl_var name='message_size_limit_txt'}</label>
+        <input name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;Bytes
+			</div>
+      <div class="ctrlHolder">
+      	<label for="banned_rulenames">{tmpl_var name='banned_rulenames_txt'}</label>
+        <input name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_policy_edit.htm b/interface/web/mail/templates/spamfilter_policy_edit.htm
index b725df5fb3..6a0d2acd4a 100644
--- a/interface/web/mail/templates/spamfilter_policy_edit.htm
+++ b/interface/web/mail/templates/spamfilter_policy_edit.htm
@@ -1,64 +1,64 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_policy">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="policy_name">{tmpl_var name='policy_name_txt'}</label>
-        <input name="policy_name" id="policy_name" value="{tmpl_var name='policy_name'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="virus_lover">{tmpl_var name='virus_lover_txt'}</label>
-        <select name="virus_lover" id="virus_lover" class="selectInput formLengthBool">
-					{tmpl_var name='virus_lover'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="spam_lover">{tmpl_var name='spam_lover_txt'}</label>
-        <select name="spam_lover" id="spam_lover" class="selectInput formLengthBool">
-					{tmpl_var name='spam_lover'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="banned_files_lover">{tmpl_var name='banned_files_lover_txt'}</label>
-        <select name="banned_files_lover" id="banned_files_lover" class="selectInput formLengthBool">
-					{tmpl_var name='banned_files_lover'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="bad_header_lover">{tmpl_var name='bad_header_lover_txt'}</label>
-        <select name="bad_header_lover" id="bad_header_lover" class="selectInput formLengthBool">
-					{tmpl_var name='bad_header_lover'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="bypass_virus_checks">{tmpl_var name='bypass_virus_checks_txt'}</label>
-        <select name="bypass_virus_checks" id="bypass_virus_checks" class="selectInput formLengthBool">
-					{tmpl_var name='bypass_virus_checks'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="bypass_banned_checks">{tmpl_var name='bypass_banned_checks_txt'}</label>
-        <select name="bypass_banned_checks" id="bypass_banned_checks" class="selectInput formLengthBool">
-					{tmpl_var name='bypass_banned_checks'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="bypass_header_checks">{tmpl_var name='bypass_header_checks_txt'}</label>
-        <select name="bypass_header_checks" id="bypass_header_checks" class="selectInput formLengthBool">
-					{tmpl_var name='bypass_header_checks'}
-				</select>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_policy">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="policy_name">{tmpl_var name='policy_name_txt'}</label>
+        <input name="policy_name" id="policy_name" value="{tmpl_var name='policy_name'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="virus_lover">{tmpl_var name='virus_lover_txt'}</label>
+        <select name="virus_lover" id="virus_lover" class="selectInput formLengthBool">
+					{tmpl_var name='virus_lover'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="spam_lover">{tmpl_var name='spam_lover_txt'}</label>
+        <select name="spam_lover" id="spam_lover" class="selectInput formLengthBool">
+					{tmpl_var name='spam_lover'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="banned_files_lover">{tmpl_var name='banned_files_lover_txt'}</label>
+        <select name="banned_files_lover" id="banned_files_lover" class="selectInput formLengthBool">
+					{tmpl_var name='banned_files_lover'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="bad_header_lover">{tmpl_var name='bad_header_lover_txt'}</label>
+        <select name="bad_header_lover" id="bad_header_lover" class="selectInput formLengthBool">
+					{tmpl_var name='bad_header_lover'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="bypass_virus_checks">{tmpl_var name='bypass_virus_checks_txt'}</label>
+        <select name="bypass_virus_checks" id="bypass_virus_checks" class="selectInput formLengthBool">
+					{tmpl_var name='bypass_virus_checks'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="bypass_banned_checks">{tmpl_var name='bypass_banned_checks_txt'}</label>
+        <select name="bypass_banned_checks" id="bypass_banned_checks" class="selectInput formLengthBool">
+					{tmpl_var name='bypass_banned_checks'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="bypass_header_checks">{tmpl_var name='bypass_header_checks_txt'}</label>
+        <select name="bypass_header_checks" id="bypass_header_checks" class="selectInput formLengthBool">
+					{tmpl_var name='bypass_header_checks'}
+				</select>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_quarantine_edit.htm b/interface/web/mail/templates/spamfilter_quarantine_edit.htm
index de33b33c8c..565ec84de6 100644
--- a/interface/web/mail/templates/spamfilter_quarantine_edit.htm
+++ b/interface/web/mail/templates/spamfilter_quarantine_edit.htm
@@ -1,44 +1,44 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_policy">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="virus_quarantine_to">{tmpl_var name='virus_quarantine_to_txt'}</label>
-        <input name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_quarantine_to">{tmpl_var name='spam_quarantine_to_txt'}</label>
-        <input name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="banned_quarantine_to">{tmpl_var name='banned_quarantine_to_txt'}</label>
-        <input name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="bad_header_quarantine_to">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
-        <input name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-<!--
-      <div class="ctrlHolder">
-      	<label for="clean_quarantine_to">{tmpl_var name='clean_quarantine_to_txt'}</label>
-        <input name="clean_quarantine_to" id="clean_quarantine_to" value="{tmpl_var name='clean_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="other_quarantine_to">{tmpl_var name='other_quarantine_to_txt'}</label>
-        <input name="other_quarantine_to" id="other_quarantine_to" value="{tmpl_var name='other_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
--->
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_policy">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="virus_quarantine_to">{tmpl_var name='virus_quarantine_to_txt'}</label>
+        <input name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_quarantine_to">{tmpl_var name='spam_quarantine_to_txt'}</label>
+        <input name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="banned_quarantine_to">{tmpl_var name='banned_quarantine_to_txt'}</label>
+        <input name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="bad_header_quarantine_to">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
+        <input name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+<!--
+      <div class="ctrlHolder">
+      	<label for="clean_quarantine_to">{tmpl_var name='clean_quarantine_to_txt'}</label>
+        <input name="clean_quarantine_to" id="clean_quarantine_to" value="{tmpl_var name='clean_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="other_quarantine_to">{tmpl_var name='other_quarantine_to_txt'}</label>
+        <input name="other_quarantine_to" id="other_quarantine_to" value="{tmpl_var name='other_quarantine_to'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+-->
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_taglevel_edit.htm b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
index aef98d3d24..e111a24ed5 100644
--- a/interface/web/mail/templates/spamfilter_taglevel_edit.htm
+++ b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
@@ -1,52 +1,52 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_policy">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="spam_tag_level">{tmpl_var name='spam_tag_level_txt'}</label>
-        <input name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_tag2_level">{tmpl_var name='spam_tag2_level_txt'}</label>
-        <input name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_kill_level">{tmpl_var name='spam_kill_level_txt'}</label>
-        <input name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_dsn_cutoff_level">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
-        <input name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_quarantine_cutoff_level">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
-        <input name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_modifies_subj">{tmpl_var name='spam_modifies_subj_txt'}</label>
-        <select name="spam_modifies_subj" id="spam_modifies_subj" class="selectInput formLengthBool">
-					{tmpl_var name='spam_modifies_subj'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="spam_subject_tag">{tmpl_var name='spam_subject_tag_txt'}</label>
-        <input name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="spam_subject_tag2">{tmpl_var name='spam_subject_tag2_txt'}</label>
-        <input name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_policy">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="spam_tag_level">{tmpl_var name='spam_tag_level_txt'}</label>
+        <input name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_tag2_level">{tmpl_var name='spam_tag2_level_txt'}</label>
+        <input name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_kill_level">{tmpl_var name='spam_kill_level_txt'}</label>
+        <input name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_dsn_cutoff_level">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
+        <input name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_quarantine_cutoff_level">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
+        <input name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" size="10" maxlength="255" type="text" class="textInput formLengthLimit" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_modifies_subj">{tmpl_var name='spam_modifies_subj_txt'}</label>
+        <select name="spam_modifies_subj" id="spam_modifies_subj" class="selectInput formLengthBool">
+					{tmpl_var name='spam_modifies_subj'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="spam_subject_tag">{tmpl_var name='spam_subject_tag_txt'}</label>
+        <input name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="spam_subject_tag2">{tmpl_var name='spam_subject_tag2_txt'}</label>
+        <input name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_policy_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_policy_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_users_edit.htm b/interface/web/mail/templates/spamfilter_users_edit.htm
index 01d5699228..86520a513a 100644
--- a/interface/web/mail/templates/spamfilter_users_edit.htm
+++ b/interface/web/mail/templates/spamfilter_users_edit.htm
@@ -1,50 +1,50 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_users">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="priority">{tmpl_var name='priority_txt'}</label>
-        <select name="priority" id="priority" class="selectInput formLengthLimit">
-					{tmpl_var name='priority'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="policy_id">{tmpl_var name='policy_id_txt'}</label>
-        <select name="policy_id" id="policy_id" class="selectInput">
-					{tmpl_var name='policy_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="email">{tmpl_var name='email_txt'}</label>
-        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="fullname">{tmpl_var name='fullname_txt'}</label>
-        <input name="fullname" id="fullname" value="{tmpl_var name='fullname'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="local">{tmpl_var name='local_txt'}</label>
-        <select name="local" id="local" class="selectInput formLengthBool">
-					{tmpl_var name='local'}
-				</select>
-      </div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_users_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_users">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="priority">{tmpl_var name='priority_txt'}</label>
+        <select name="priority" id="priority" class="selectInput formLengthLimit">
+					{tmpl_var name='priority'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="policy_id">{tmpl_var name='policy_id_txt'}</label>
+        <select name="policy_id" id="policy_id" class="selectInput">
+					{tmpl_var name='policy_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="email">{tmpl_var name='email_txt'}</label>
+        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="fullname">{tmpl_var name='fullname_txt'}</label>
+        <input name="fullname" id="fullname" value="{tmpl_var name='fullname'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="local">{tmpl_var name='local_txt'}</label>
+        <select name="local" id="local" class="selectInput formLengthBool">
+					{tmpl_var name='local'}
+				</select>
+      </div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_users_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/mail/templates/spamfilter_whitelist_edit.htm b/interface/web/mail/templates/spamfilter_whitelist_edit.htm
index 3ef8f5fb2f..138364b765 100644
--- a/interface/web/mail/templates/spamfilter_whitelist_edit.htm
+++ b/interface/web/mail/templates/spamfilter_whitelist_edit.htm
@@ -1,49 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_spamfilter_whitelist">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-<!--
-      <div class="ctrlHolder">
-      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
-        <select name="server_id" id="server_id" class="selectInput">
-					{tmpl_var name='server_id'}
-				</select>
-      </div>
--->
-      <div class="ctrlHolder">
-      	<label for="rid">{tmpl_var name='rid_txt'}</label>
-        <select name="rid" id="rid" class="selectInput">
-					{tmpl_var name='rid'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="email">{tmpl_var name='email_txt'}</label>
-        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="priority">{tmpl_var name='priority_txt'}</label>
-        <select name="priority" id="priority" class="selectInput formLengthHalf">
-					{tmpl_var name='priority'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    <input type="hidden" name="wb" value="{tmpl_var name='wb'}">
-    
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_whitelist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_whitelist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_spamfilter_whitelist">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+<!--
+      <div class="ctrlHolder">
+      	<label for="server_id">{tmpl_var name='server_id_txt'}</label>
+        <select name="server_id" id="server_id" class="selectInput">
+					{tmpl_var name='server_id'}
+				</select>
+      </div>
+-->
+      <div class="ctrlHolder">
+      	<label for="rid">{tmpl_var name='rid_txt'}</label>
+        <select name="rid" id="rid" class="selectInput">
+					{tmpl_var name='rid'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="email">{tmpl_var name='email_txt'}</label>
+        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="priority">{tmpl_var name='priority_txt'}</label>
+        <select name="priority" id="priority" class="selectInput formLengthHalf">
+					{tmpl_var name='priority'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    <input type="hidden" name="wb" value="{tmpl_var name='wb'}">
+    
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/spamfilter_whitelist_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/spamfilter_whitelist_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/monitor/lib/admin.conf.php b/interface/web/monitor/lib/admin.conf.php
index a45d440345..67c94a5742 100644
--- a/interface/web/monitor/lib/admin.conf.php
+++ b/interface/web/monitor/lib/admin.conf.php
@@ -1,2 +1,2 @@
-<?php
+<?php
 ?>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/datalog_list.htm b/interface/web/monitor/templates/datalog_list.htm
index 93eede0574..0ddba820ac 100644
--- a/interface/web/monitor/templates/datalog_list.htm
+++ b/interface/web/monitor/templates/datalog_list.htm
@@ -1,49 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_list_datalog">
-
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
-          <tr>
-            <th class="tbl_col_tstamp" scope="col"><tmpl_var name="tstamp_txt"></th>
-            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-            <th class="tbl_col_action" scope="col"><tmpl_var name="action_txt"></th>
-            <th class="tbl_col_dbtable" scope="col"><tmpl_var name="dbtable_txt"></th>
-            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
-          </tr>
-          <tr>
-            <td class="tbl_col_tstamp">&nbsp;</td>
-            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','monitor/datalog_list.php');">{tmpl_var name='search_server_id'}</select></td>
-            <td class="tbl_col_action"><select name="search_action" onChange="submitForm('pageForm','monitor/datalog_list.php');">{tmpl_var name='search_action'}</select></td>
-            <td class="tbl_col_dbtable"><input type="text" name="search_dbtable" value="{tmpl_var name='search_dbtable'}" /></td>
-            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','monitor/datalog_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_tstamp">{tmpl_var name="tstamp"}</td>
-            <td class="tbl_col_server_id">{tmpl_var name="server_id"}</td>
-            <td class="tbl_col_action">{tmpl_var name="action"}</td>
-            <td class="tbl_col_dbtable">{tmpl_var name="dbtable"}</td>
-            <td class="tbl_col_buttons">
-              <div class="buttons icons16">    
-                <!--<a class="icons16 icoDelete" href="javascript: del_record('monitor/datalog_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> -->
-              </div>
-            </td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_datalog">
+
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_tstamp" scope="col"><tmpl_var name="tstamp_txt"></th>
+            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+            <th class="tbl_col_action" scope="col"><tmpl_var name="action_txt"></th>
+            <th class="tbl_col_dbtable" scope="col"><tmpl_var name="dbtable_txt"></th>
+            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+          </tr>
+          <tr>
+            <td class="tbl_col_tstamp">&nbsp;</td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','monitor/datalog_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_action"><select name="search_action" onChange="submitForm('pageForm','monitor/datalog_list.php');">{tmpl_var name='search_action'}</select></td>
+            <td class="tbl_col_dbtable"><input type="text" name="search_dbtable" value="{tmpl_var name='search_dbtable'}" /></td>
+            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','monitor/datalog_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_tstamp">{tmpl_var name="tstamp"}</td>
+            <td class="tbl_col_server_id">{tmpl_var name="server_id"}</td>
+            <td class="tbl_col_action">{tmpl_var name="action"}</td>
+            <td class="tbl_col_dbtable">{tmpl_var name="dbtable"}</td>
+            <td class="tbl_col_buttons">
+              <div class="buttons icons16">    
+                <!--<a class="icons16 icoDelete" href="javascript: del_record('monitor/datalog_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> -->
+              </div>
+            </td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/monitor/templates/show_data.htm b/interface/web/monitor/templates/show_data.htm
index f83440fe46..96ac62d7dd 100644
--- a/interface/web/monitor/templates/show_data.htm
+++ b/interface/web/monitor/templates/show_data.htm
@@ -1,12 +1,12 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_system">
-
-  <div class="pnl_formarea">
-    <fieldset><legend><tmpl_var name="monTransDate"><tmpl_var name="time"></legend>
-      <div class="systemmonitor"><tmpl_var name="output"></div>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_system">
+
+  <div class="pnl_formarea">
+    <fieldset><legend><tmpl_var name="monTransDate"><tmpl_var name="time"></legend>
+      <div class="systemmonitor"><tmpl_var name="output"></div>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/monitor/templates/show_log.htm b/interface/web/monitor/templates/show_log.htm
index b6077277cd..3b7be6d1ac 100644
--- a/interface/web/monitor/templates/show_log.htm
+++ b/interface/web/monitor/templates/show_log.htm
@@ -1,25 +1,25 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_logview">
-
-  <div class="pnl_toolsarea">
-    <fieldset class="inlineLabels"><legend><tmpl_var name="monTransRefreshsq"></legend>
-      <div class="buttons">
-	      <div class="ctrlHolder">
-	      	<label for="refreshinterval">{tmpl_var name='refreshinterval_txt'}</label>
-	        <select name="refreshinterval" id="refreshinterval" class="selectInput withicons" onChange="loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">
-						{tmpl_var name='refresh'}
-					</select>
-	      </div>
-      </div>
-    </fieldset>
-  </div>
-  
-  <div class="pnl_formarea">
-    <fieldset><legend><tmpl_var name="monTransDate"><tmpl_var name="time"></legend>
-      <div class="codeview"><tmpl_var name="log_data"></div>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_logview">
+
+  <div class="pnl_toolsarea">
+    <fieldset class="inlineLabels"><legend><tmpl_var name="monTransRefreshsq"></legend>
+      <div class="buttons">
+	      <div class="ctrlHolder">
+	      	<label for="refreshinterval">{tmpl_var name='refreshinterval_txt'}</label>
+	        <select name="refreshinterval" id="refreshinterval" class="selectInput withicons" onChange="loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">
+						{tmpl_var name='refresh'}
+					</select>
+	      </div>
+      </div>
+    </fieldset>
+  </div>
+  
+  <div class="pnl_formarea">
+    <fieldset><legend><tmpl_var name="monTransDate"><tmpl_var name="time"></legend>
+      <div class="codeview"><tmpl_var name="log_data"></div>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/monitor/templates/show_sys_state.htm b/interface/web/monitor/templates/show_sys_state.htm
index 904361cb1f..9941738260 100644
--- a/interface/web/monitor/templates/show_sys_state.htm
+++ b/interface/web/monitor/templates/show_sys_state.htm
@@ -1,25 +1,25 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_sys_state">
-
-  <div class="pnl_toolsarea">
-    <fieldset class="inlineLabels"><legend><tmpl_var name="monTransRefreshsq"></legend>
-      <div class="buttons">
-	      <div class="ctrlHolder">
-	      	<label for="refreshinterval">{tmpl_var name='refreshinterval_txt'}</label>
-	        <select name="refreshinterval" id="refreshinterval" class="selectInput withicons" onChange="loadContentRefresh('monitor/show_sys_state.php?state={tmpl_var name="state_type"}')">
-						{tmpl_var name='refresh'}
-					</select>
-	      </div>
-      </div>
-    </fieldset>
-  </div>
-  
-  <div class="pnl_formarea">
-    <fieldset><legend></legend>
-      <div class="stateview"><tmpl_var name="state_data"></div>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_sys_state">
+
+  <div class="pnl_toolsarea">
+    <fieldset class="inlineLabels"><legend><tmpl_var name="monTransRefreshsq"></legend>
+      <div class="buttons">
+	      <div class="ctrlHolder">
+	      	<label for="refreshinterval">{tmpl_var name='refreshinterval_txt'}</label>
+	        <select name="refreshinterval" id="refreshinterval" class="selectInput withicons" onChange="loadContentRefresh('monitor/show_sys_state.php?state={tmpl_var name="state_type"}')">
+						{tmpl_var name='refresh'}
+					</select>
+	      </div>
+      </div>
+    </fieldset>
+  </div>
+  
+  <div class="pnl_formarea">
+    <fieldset><legend></legend>
+      <div class="stateview"><tmpl_var name="state_data"></div>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/monitor/templates/syslog_list.htm b/interface/web/monitor/templates/syslog_list.htm
index 0bbb03cfbc..5f87c79ef9 100644
--- a/interface/web/monitor/templates/syslog_list.htm
+++ b/interface/web/monitor/templates/syslog_list.htm
@@ -1,56 +1,56 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_list_syslog">
-
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
-          <tr>
-            <th class="tbl_col_tstamp" scope="col"><tmpl_var name="tstamp_txt"></th>
-            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-            <th class="tbl_col_loglevel" scope="col"><tmpl_var name="loglevel_txt"></th>
-            <th class="tbl_col_message" scope="col"><tmpl_var name="message_txt"></th>
-            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
-          </tr>
-          <tr>
-            <td class="tbl_col_tstamp">&nbsp;</td>
-            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','monitor/log_list.php');">{tmpl_var name='search_server_id'}</select></td>
-            <td class="tbl_col_loglevel"><select name="search_loglevel" onChange="submitForm('pageForm','monitor/log_list.php');">{tmpl_var name='search_loglevel'}</select></td>
-            <td class="tbl_col_message"><input type="text" name="search_message" value="{tmpl_var name='search_message'}" /></td>
-            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','monitor/log_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_tstamp">{tmpl_var name="tstamp"}</td>
-            <td class="tbl_col_server_id">{tmpl_var name="server_id"}</td>
-            <td class="tbl_col_loglevel">{tmpl_var name="loglevel"}</td>
-            <td class="tbl_col_message">{tmpl_var name="message"}</td>
-            <td class="tbl_col_buttons">
-			  <tmpl_if name="loglevel" op="==" value="Error">
-			  <div class="buttons icons16">
-                <a class="icons16 icoDelete" href="javascript: del_record('monitor/log_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>
-              </div>
-			  </tmpl_if>
-			  <tmpl_if name="loglevel" op="==" value="Warning">
-			  <div class="buttons icons16">
-                <a class="icons16 icoDelete" href="javascript: del_record('monitor/log_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>
-              </div>
-			  </tmpl_if>
-			</td>
-          </tr>
-          </tmpl_loop>
-        </tbody>
-        <tfoot>
-          <tr>
-            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
-          </tr>
-        </tfoot>
-      </table>
-    </fieldset>
-  </div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_syslog">
+
+  <div class="pnl_listarea">
+    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+      <table class="list">
+        <thead>
+          <tr>
+            <th class="tbl_col_tstamp" scope="col"><tmpl_var name="tstamp_txt"></th>
+            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+            <th class="tbl_col_loglevel" scope="col"><tmpl_var name="loglevel_txt"></th>
+            <th class="tbl_col_message" scope="col"><tmpl_var name="message_txt"></th>
+            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+          </tr>
+          <tr>
+            <td class="tbl_col_tstamp">&nbsp;</td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','monitor/log_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_loglevel"><select name="search_loglevel" onChange="submitForm('pageForm','monitor/log_list.php');">{tmpl_var name='search_loglevel'}</select></td>
+            <td class="tbl_col_message"><input type="text" name="search_message" value="{tmpl_var name='search_message'}" /></td>
+            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','monitor/log_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_tstamp">{tmpl_var name="tstamp"}</td>
+            <td class="tbl_col_server_id">{tmpl_var name="server_id"}</td>
+            <td class="tbl_col_loglevel">{tmpl_var name="loglevel"}</td>
+            <td class="tbl_col_message">{tmpl_var name="message"}</td>
+            <td class="tbl_col_buttons">
+			  <tmpl_if name="loglevel" op="==" value="Error">
+			  <div class="buttons icons16">
+                <a class="icons16 icoDelete" href="javascript: del_record('monitor/log_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>
+              </div>
+			  </tmpl_if>
+			  <tmpl_if name="loglevel" op="==" value="Warning">
+			  <div class="buttons icons16">
+                <a class="icons16 icoDelete" href="javascript: del_record('monitor/log_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>
+              </div>
+			  </tmpl_if>
+			</td>
+          </tr>
+          </tmpl_loop>
+        </tbody>
+        <tfoot>
+          <tr>
+            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+          </tr>
+        </tfoot>
+      </table>
+    </fieldset>
+  </div>
+
+</div>
diff --git a/interface/web/nav.php b/interface/web/nav.php
index d563bb5348..0c57adbd9a 100644
--- a/interface/web/nav.php
+++ b/interface/web/nav.php
@@ -1,115 +1,115 @@
-<?php
-
-/*
-Copyright (c) 2007, 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.
-*/
-
-require_once('../lib/config.inc.php');
-require_once('../lib/app.inc.php');
-
-$app->uses('tpl');
-
-//** Top Naviation
-if(isset($_GET['nav']) && $_GET['nav'] == 'top') {
-
-	$app->tpl->newTemplate('topnav.tpl.htm');
-
-	//* Check User Login and current module
-	if(isset($_SESSION["s"]["user"]) && $_SESSION["s"]["user"]['active'] == 1 && is_array($_SESSION['s']['module'])) {
-		//* Loading modules of the user and building top navigation
-		$modules = explode(',', $_SESSION['s']['user']['modules']);
-		/*
-		 * If the dashboard is in the list of modules it always has to be the first!
-		 */
-		if (in_array('dashboard', $modules)) {
-			$key = array_search('dashboard', $modules);
-			unset($modules[$key]);
-			$modules = array_merge(array('dashboard'), $modules);
-		}
-		if(is_array($modules)) {
-			foreach($modules as $mt) {
-				if(is_file($mt.'/lib/module.conf.php')) {
-					if(!preg_match("/^[a-z]{2,20}$/i", $mt)) die('module name contains unallowed chars.');
-					include_once($mt.'/lib/module.conf.php');
-					$active = ($module['name'] == $_SESSION['s']['module']['name']) ? 1 : 0;
-					$topnav[] = array(	'title' 	=> $app->lng($module['title']),
-							'active' 	=> $active,
-							'module'	=> $module['name']);
-				}
-			}
-		}
-	} else {
-		//*  Loading Login Module
-		include_once('login/lib/module.conf.php');
-		$_SESSION['s']['module'] = $module;
-		$topnav[] = array(	'title' 	=> 'Login',
-				'active' 	=> 1);
-		$module = null;
-		unset($module);
-	}
-
-	//* Topnavigation
-	$app->tpl->setLoop('nav_top',$topnav);
-
-}
-
-//** Side Naviation
-if(isset($_GET['nav']) && $_GET['nav'] == 'side') {
-
-	if(isset($_SESSION['s']['module']['name']) && is_file($_SESSION['s']['module']['name'].'/lib/custom_menu.inc.php')) {
-		include_once($_SESSION['s']['module']['name'].'/lib/custom_menu.inc.php');
-	} else {
-	
-		$app->tpl->newTemplate('sidenav.tpl.htm');
-
-		//* translating module navigation
-		$nav_translated = array();
-		if(isset($_SESSION['s']['module']['nav']) && is_array($_SESSION['s']['module']['nav'])) {
-			foreach($_SESSION['s']['module']['nav'] as $nav) {
-				$tmp_items = array();
-				foreach($nav['items'] as $item) {
-					$item['title'] = $app->lng($item['title']);
-					$tmp_items[] = $item;
-				}
-				$nav['title'] = $app->lng($nav['title']);
-				$nav['startpage'] = $nav['items'][0]['link'];
-				$nav['items'] = $tmp_items;
-				$nav_translated[] = $nav;
-			}
-		} else {
-			$nav_translated = null;
-		}
-		$app->tpl->setLoop('nav_left',$nav_translated);
-	
-	}
-
-}
-
-$app->tpl_defaults();
-$app->tpl->pparse();
-
+<?php
+
+/*
+Copyright (c) 2007, 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.
+*/
+
+require_once('../lib/config.inc.php');
+require_once('../lib/app.inc.php');
+
+$app->uses('tpl');
+
+//** Top Naviation
+if(isset($_GET['nav']) && $_GET['nav'] == 'top') {
+
+	$app->tpl->newTemplate('topnav.tpl.htm');
+
+	//* Check User Login and current module
+	if(isset($_SESSION["s"]["user"]) && $_SESSION["s"]["user"]['active'] == 1 && is_array($_SESSION['s']['module'])) {
+		//* Loading modules of the user and building top navigation
+		$modules = explode(',', $_SESSION['s']['user']['modules']);
+		/*
+		 * If the dashboard is in the list of modules it always has to be the first!
+		 */
+		if (in_array('dashboard', $modules)) {
+			$key = array_search('dashboard', $modules);
+			unset($modules[$key]);
+			$modules = array_merge(array('dashboard'), $modules);
+		}
+		if(is_array($modules)) {
+			foreach($modules as $mt) {
+				if(is_file($mt.'/lib/module.conf.php')) {
+					if(!preg_match("/^[a-z]{2,20}$/i", $mt)) die('module name contains unallowed chars.');
+					include_once($mt.'/lib/module.conf.php');
+					$active = ($module['name'] == $_SESSION['s']['module']['name']) ? 1 : 0;
+					$topnav[] = array(	'title' 	=> $app->lng($module['title']),
+							'active' 	=> $active,
+							'module'	=> $module['name']);
+				}
+			}
+		}
+	} else {
+		//*  Loading Login Module
+		include_once('login/lib/module.conf.php');
+		$_SESSION['s']['module'] = $module;
+		$topnav[] = array(	'title' 	=> 'Login',
+				'active' 	=> 1);
+		$module = null;
+		unset($module);
+	}
+
+	//* Topnavigation
+	$app->tpl->setLoop('nav_top',$topnav);
+
+}
+
+//** Side Naviation
+if(isset($_GET['nav']) && $_GET['nav'] == 'side') {
+
+	if(isset($_SESSION['s']['module']['name']) && is_file($_SESSION['s']['module']['name'].'/lib/custom_menu.inc.php')) {
+		include_once($_SESSION['s']['module']['name'].'/lib/custom_menu.inc.php');
+	} else {
+	
+		$app->tpl->newTemplate('sidenav.tpl.htm');
+
+		//* translating module navigation
+		$nav_translated = array();
+		if(isset($_SESSION['s']['module']['nav']) && is_array($_SESSION['s']['module']['nav'])) {
+			foreach($_SESSION['s']['module']['nav'] as $nav) {
+				$tmp_items = array();
+				foreach($nav['items'] as $item) {
+					$item['title'] = $app->lng($item['title']);
+					$tmp_items[] = $item;
+				}
+				$nav['title'] = $app->lng($nav['title']);
+				$nav['startpage'] = $nav['items'][0]['link'];
+				$nav['items'] = $tmp_items;
+				$nav_translated[] = $nav;
+			}
+		} else {
+			$nav_translated = null;
+		}
+		$app->tpl->setLoop('nav_left',$nav_translated);
+	
+	}
+
+}
+
+$app->tpl_defaults();
+$app->tpl->pparse();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/cron_del.php b/interface/web/sites/cron_del.php
index 516b4473b9..484e5073c7 100644
--- a/interface/web/sites/cron_del.php
+++ b/interface/web/sites/cron_del.php
@@ -1,64 +1,64 @@
-<?php
-
-/*
-Copyright (c) 2008, Till Brehm, projektfarm Gmbh
-Modified 2009, 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.
-*/
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/cron.list.php";
-$tform_def_file = "form/cron.tform.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('sites');
-
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function onBeforeDelete() {
-		global $app; $conf;
-		
-		if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
-	}
-}
-
-$page = new page_action;
-$page->onDelete();
-
+<?php
+
+/*
+Copyright (c) 2008, Till Brehm, projektfarm Gmbh
+Modified 2009, 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.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/cron.list.php";
+$tform_def_file = "form/cron.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onBeforeDelete() {
+		global $app; $conf;
+		
+		if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
+	}
+}
+
+$page = new page_action;
+$page->onDelete();
+
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/cron_list.php b/interface/web/sites/cron_list.php
index 68e23163f2..dcd9a547e8 100644
--- a/interface/web/sites/cron_list.php
+++ b/interface/web/sites/cron_list.php
@@ -1,23 +1,23 @@
-<?php
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$list_def_file = "list/cron.list.php";
-
-/******************************************
-* End Form configuration
-******************************************/
-
-//* Check permissions for module
-$app->auth->check_module_permissions('sites');
-
-$app->uses('listform_actions');
-
-$app->listform_actions->onLoad();
-
-
+<?php
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/cron.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+$app->uses('listform_actions');
+
+$app->listform_actions->onLoad();
+
+
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/admin.conf.php b/interface/web/sites/lib/admin.conf.php
index a45d440345..67c94a5742 100644
--- a/interface/web/sites/lib/admin.conf.php
+++ b/interface/web/sites/lib/admin.conf.php
@@ -1,2 +1,2 @@
-<?php
+<?php
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_database_admin_list.lng b/interface/web/sites/lib/lang/en_database_admin_list.lng
index d076d60cf5..a49adcdadd 100644
--- a/interface/web/sites/lib/lang/en_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/en_database_admin_list.lng
@@ -1,10 +1,10 @@
-<?php
-$wb["list_head_txt"] = 'Database';
-$wb["active_txt"] = 'Active';
-$wb["remote_access_txt"] = 'Remote Access';
-$wb["server_id_txt"] = 'Server';
-$wb["database_user_txt"] = 'Database user';
-$wb["database_name_txt"] = 'Database name';
-$wb["add_new_record_txt"] = 'Add new Database';
-$wb["sys_groupid_txt"] = 'Client';
+<?php
+$wb["list_head_txt"] = 'Database';
+$wb["active_txt"] = 'Active';
+$wb["remote_access_txt"] = 'Remote Access';
+$wb["server_id_txt"] = 'Server';
+$wb["database_user_txt"] = 'Database user';
+$wb["database_name_txt"] = 'Database name';
+$wb["add_new_record_txt"] = 'Add new Database';
+$wb["sys_groupid_txt"] = 'Client';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_user_quota_stats_list.lng b/interface/web/sites/lib/lang/en_user_quota_stats_list.lng
index 943c13babc..1d4290856c 100644
--- a/interface/web/sites/lib/lang/en_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/en_user_quota_stats_list.lng
@@ -1,8 +1,8 @@
-<?php
-$wb["list_head_txt"] = 'Website harddisk quota';
-$wb["domain_txt"] = 'Domain / Website';
-$wb["system_user_txt"] = 'Linux user';
-$wb["used_txt"] = 'Used space';
-$wb["hard_txt"] = 'Hard limit';
-$wb["soft_txt"] = 'Soft limit';
+<?php
+$wb["list_head_txt"] = 'Website harddisk quota';
+$wb["domain_txt"] = 'Domain / Website';
+$wb["system_user_txt"] = 'Linux user';
+$wb["used_txt"] = 'Used space';
+$wb["hard_txt"] = 'Hard limit';
+$wb["soft_txt"] = 'Soft limit';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index 3f166cf022..d709cc50fe 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -1,75 +1,75 @@
-<?php
-$wb["backup_interval_txt"] = 'Backup interval';
-$wb["backup_copies_txt"] = 'Number of backup copies';
-$wb["ssl_state_txt"] = 'State';
-$wb["ssl_locality_txt"] = 'Locality';
-$wb["ssl_organisation_txt"] = 'Organisation';
-$wb["ssl_organisation_unit_txt"] = 'Organisation Unit';
-$wb["ssl_country_txt"] = 'Country';
-$wb["ssl_request_txt"] = 'SSL Request';
-$wb["ssl_cert_txt"] = 'SSL Certificate';
-$wb["ssl_bundle_txt"] = 'SSL Bundle';
-$wb["ssl_action_txt"] = 'SSL Action';
-$wb["ssl_domain_txt"] = 'SSL Domain';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["type_txt"] = 'Type';
-$wb["parent_domain_id_txt"] = 'Parent Website';
-$wb["redirect_type_txt"] = 'Redirect Type';
-$wb["redirect_path_txt"] = 'Redirect Path';
-$wb["active_txt"] = 'Active';
-$wb["document_root_txt"] = 'Documentroot';
-$wb["system_user_txt"] = 'Linux User';
-$wb["system_group_txt"] = 'Linux Group';
-$wb["ip_address_txt"] = 'IP-Address';
-$wb["vhost_type_txt"] = 'VHost Type';
-$wb["hd_quota_txt"] = 'Harddisk Quota';
-$wb["traffic_quota_txt"] = 'Traffic Quota';
-$wb["cgi_txt"] = 'CGI';
-$wb["ssi_txt"] = 'SSI';
-$wb["errordocs_txt"] = 'Own Error-Documents';
-$wb["subdomain_txt"] = 'Auto-Subdomain';
-$wb["ssl_txt"] = 'SSL';
-$wb["suexec_txt"] = 'SuEXEC';
-$wb["php_txt"] = 'PHP';
-$wb["client_txt"] = 'Client';
-$wb["limit_web_domain_txt"] = 'The max. number of web domains for your account is reached.';
-$wb["limit_web_aliasdomain_txt"] = 'The max. number of aliasdomains for your account is reached.';
-$wb["limit_web_subdomain_txt"] = 'The max. number of web subdomains for your account is reached.';
-$wb["apache_directives_txt"] = 'Apache directives';
-$wb["domain_error_empty"] = 'Domain is empty.';
-$wb["domain_error_unique"] = 'There is already a website or sub / aliasdomain with this domain name.';
-$wb["domain_error_regex"] = 'Domain name invalid.';
-$wb["hd_quota_error_empty"] = 'Harddisk quota is 0 or empty.';
-$wb["traffic_quota_error_empty"] = 'Traffic quota is empty.';
-$wb["error_ssl_state_empty"] = 'SSL State is empty.';
-$wb["error_ssl_locality_empty"] = 'SSL Locality is empty.';
-$wb["error_ssl_organisation_empty"] = 'SSL Organisation is empty.';
-$wb["error_ssl_organisation_unit_empty"] = 'SSL Organisation Unit is empty.';
-$wb["error_ssl_country_empty"] = 'SSL Country is empty.';
-$wb["error_ssl_cert_empty"] = 'SSL Certificate field is empty';
-$wb["client_group_id_txt"] = 'Client';
-$wb["stats_password_txt"] = 'Webstatistics password';
-$wb["allow_override_txt"] = 'Apache AllowOverride';
-$wb["limit_web_quota_free_txt"] = 'Max. available Harddisk Quota';
-$wb["ssl_state_error_regex"] = 'Invalid SSL State. Valid characters are: a-z, 0-9 and .,-_';
-$wb["ssl_locality_error_regex"] = 'Invalid SSL Locality. Valid characters are: a-z, 0-9 and .,-_';
-$wb["ssl_organisation_error_regex"] = 'Invalid SSL Organisation. Valid characters are: a-z, 0-9 and .,-_';
-$wb["ssl_organistaion_unit_error_regex"] = 'Invalid SSL Organisation Unit. Valid characters are: a-z, 0-9 and .,-_';
-$wb["ssl_country_error_regex"] = 'Invalid SSL Country. Valid characters are: A-Z';
-$wb["limit_traffic_quota_free_txt"] = 'Max. available Traffic Quota';
-$wb["redirect_error_regex"] = 'Invalid redirect path. Valid redirects are for example: /test/ or http://www.domain.tld/test/';
-$wb["php_open_basedir_txt"] = 'PHP open_basedir';
-$wb["traffic_quota_exceeded_txt"] = 'Traffic quota exceeded';
-$wb["ruby_txt"] = 'Ruby';
-$wb["stats_user_txt"] = 'Webstatistics username';
-$wb["stats_type_txt"] = 'Webstatistics program';
-$wb["custom_php_ini_txt"] = 'Custom php.ini settings';
-$wb['none_txt'] = 'None';
-$wb['disabled_txt'] = 'Disabled';
-$wb['no_redirect_txt'] = 'No redirect';
-$wb['no_flag_txt'] = 'No flag';
-$wb['save_certificate_txt'] = 'Save certificate';
-$wb['create_certificate_txt'] = 'Create certificate';
-$wb['delete_certificate_txt'] = 'Delete certificate';
+<?php
+$wb["backup_interval_txt"] = 'Backup interval';
+$wb["backup_copies_txt"] = 'Number of backup copies';
+$wb["ssl_state_txt"] = 'State';
+$wb["ssl_locality_txt"] = 'Locality';
+$wb["ssl_organisation_txt"] = 'Organisation';
+$wb["ssl_organisation_unit_txt"] = 'Organisation Unit';
+$wb["ssl_country_txt"] = 'Country';
+$wb["ssl_request_txt"] = 'SSL Request';
+$wb["ssl_cert_txt"] = 'SSL Certificate';
+$wb["ssl_bundle_txt"] = 'SSL Bundle';
+$wb["ssl_action_txt"] = 'SSL Action';
+$wb["ssl_domain_txt"] = 'SSL Domain';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["type_txt"] = 'Type';
+$wb["parent_domain_id_txt"] = 'Parent Website';
+$wb["redirect_type_txt"] = 'Redirect Type';
+$wb["redirect_path_txt"] = 'Redirect Path';
+$wb["active_txt"] = 'Active';
+$wb["document_root_txt"] = 'Documentroot';
+$wb["system_user_txt"] = 'Linux User';
+$wb["system_group_txt"] = 'Linux Group';
+$wb["ip_address_txt"] = 'IP-Address';
+$wb["vhost_type_txt"] = 'VHost Type';
+$wb["hd_quota_txt"] = 'Harddisk Quota';
+$wb["traffic_quota_txt"] = 'Traffic Quota';
+$wb["cgi_txt"] = 'CGI';
+$wb["ssi_txt"] = 'SSI';
+$wb["errordocs_txt"] = 'Own Error-Documents';
+$wb["subdomain_txt"] = 'Auto-Subdomain';
+$wb["ssl_txt"] = 'SSL';
+$wb["suexec_txt"] = 'SuEXEC';
+$wb["php_txt"] = 'PHP';
+$wb["client_txt"] = 'Client';
+$wb["limit_web_domain_txt"] = 'The max. number of web domains for your account is reached.';
+$wb["limit_web_aliasdomain_txt"] = 'The max. number of aliasdomains for your account is reached.';
+$wb["limit_web_subdomain_txt"] = 'The max. number of web subdomains for your account is reached.';
+$wb["apache_directives_txt"] = 'Apache directives';
+$wb["domain_error_empty"] = 'Domain is empty.';
+$wb["domain_error_unique"] = 'There is already a website or sub / aliasdomain with this domain name.';
+$wb["domain_error_regex"] = 'Domain name invalid.';
+$wb["hd_quota_error_empty"] = 'Harddisk quota is 0 or empty.';
+$wb["traffic_quota_error_empty"] = 'Traffic quota is empty.';
+$wb["error_ssl_state_empty"] = 'SSL State is empty.';
+$wb["error_ssl_locality_empty"] = 'SSL Locality is empty.';
+$wb["error_ssl_organisation_empty"] = 'SSL Organisation is empty.';
+$wb["error_ssl_organisation_unit_empty"] = 'SSL Organisation Unit is empty.';
+$wb["error_ssl_country_empty"] = 'SSL Country is empty.';
+$wb["error_ssl_cert_empty"] = 'SSL Certificate field is empty';
+$wb["client_group_id_txt"] = 'Client';
+$wb["stats_password_txt"] = 'Webstatistics password';
+$wb["allow_override_txt"] = 'Apache AllowOverride';
+$wb["limit_web_quota_free_txt"] = 'Max. available Harddisk Quota';
+$wb["ssl_state_error_regex"] = 'Invalid SSL State. Valid characters are: a-z, 0-9 and .,-_';
+$wb["ssl_locality_error_regex"] = 'Invalid SSL Locality. Valid characters are: a-z, 0-9 and .,-_';
+$wb["ssl_organisation_error_regex"] = 'Invalid SSL Organisation. Valid characters are: a-z, 0-9 and .,-_';
+$wb["ssl_organistaion_unit_error_regex"] = 'Invalid SSL Organisation Unit. Valid characters are: a-z, 0-9 and .,-_';
+$wb["ssl_country_error_regex"] = 'Invalid SSL Country. Valid characters are: A-Z';
+$wb["limit_traffic_quota_free_txt"] = 'Max. available Traffic Quota';
+$wb["redirect_error_regex"] = 'Invalid redirect path. Valid redirects are for example: /test/ or http://www.domain.tld/test/';
+$wb["php_open_basedir_txt"] = 'PHP open_basedir';
+$wb["traffic_quota_exceeded_txt"] = 'Traffic quota exceeded';
+$wb["ruby_txt"] = 'Ruby';
+$wb["stats_user_txt"] = 'Webstatistics username';
+$wb["stats_type_txt"] = 'Webstatistics program';
+$wb["custom_php_ini_txt"] = 'Custom php.ini settings';
+$wb['none_txt'] = 'None';
+$wb['disabled_txt'] = 'Disabled';
+$wb['no_redirect_txt'] = 'No redirect';
+$wb['no_flag_txt'] = 'No flag';
+$wb['save_certificate_txt'] = 'Save certificate';
+$wb['create_certificate_txt'] = 'Create certificate';
+$wb['delete_certificate_txt'] = 'Delete certificate';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_domain_admin_list.lng b/interface/web/sites/lib/lang/en_web_domain_admin_list.lng
index f8b37f4f84..e8825ae321 100644
--- a/interface/web/sites/lib/lang/en_web_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/en_web_domain_admin_list.lng
@@ -1,9 +1,9 @@
-<?php
-$wb["sys_groupid_txt"] = 'Client';
-$wb["list_head_txt"] = 'Websites';
-$wb["domain_id_txt"] = 'ID';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["add_new_record_txt"] = 'Add new website';
+<?php
+$wb["sys_groupid_txt"] = 'Client';
+$wb["list_head_txt"] = 'Websites';
+$wb["domain_id_txt"] = 'ID';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["add_new_record_txt"] = 'Add new website';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/cron_edit.htm b/interface/web/sites/templates/cron_edit.htm
index 39f9bc6469..bebccbfef2 100644
--- a/interface/web/sites/templates/cron_edit.htm
+++ b/interface/web/sites/templates/cron_edit.htm
@@ -1,68 +1,68 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_cron">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Cron Job</legend>
-      <div class="ctrlHolder">
-        <tmpl_if name="edit_disabled">
-        <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-        <select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
-                    {tmpl_var name='parent_domain_id'}
-        </select>
-        <input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
-        <tmpl_else>
-        <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
-                    {tmpl_var name='parent_domain_id'}
-        </select>
-        </tmpl_if>
-      </div>
-      <div class="ctrlHolder">
-        <label for="run_min">{tmpl_var name='run_min_txt'}</label>
-        <input name="run_min" id="run_min" value="{tmpl_var name='run_min'}" size="10" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">e.g. *, */3, 10-20</p>
-            </div>
-      <div class="ctrlHolder">
-        <label for="run_hour">{tmpl_var name='run_hour_txt'}</label>
-        <input name="run_hour" id="run_hour" value="{tmpl_var name='run_hour'}" size="10" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">e.g. *, */2, 0, 10-12</p>
-            </div>
-      <div class="ctrlHolder">
-        <label for="run_mday">{tmpl_var name='run_mday_txt'}</label>
-        <input name="run_mday" id="run_mday" value="{tmpl_var name='run_mday'}" size="10" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">e.g. *, */4, 1-5</p>
-            </div>
-      <div class="ctrlHolder">
-        <label for="run_month">{tmpl_var name='run_month_txt'}</label>
-        <input name="run_month" id="run_month" value="{tmpl_var name='run_month'}" size="10" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">e.g. *, 1-6</p>
-            </div>
-      <div class="ctrlHolder">
-        <label for="run_wday">{tmpl_var name='run_wday_txt'}</label>
-        <input name="run_wday" id="run_wday" value="{tmpl_var name='run_wday'}" size="10" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">e.g. *, 0, 1-5</p>
-            </div>
-      <div class="ctrlHolder">
-      	<label for="command">{tmpl_var name='command_txt'}</label>
-        <input name="command" id="command" value="{tmpl_var name='command'}" size="30" maxlength="255" type="text" class="textInput" />
-				<p class="formHint">e.g. /var/www/clients/client1/myscript.sh or http://www.mydomain.com/path/script.php</p>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-    
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/cron_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/cron_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_cron">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>Cron Job</legend>
+      <div class="ctrlHolder">
+        <tmpl_if name="edit_disabled">
+        <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+        <select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
+                    {tmpl_var name='parent_domain_id'}
+        </select>
+        <input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
+        <tmpl_else>
+        <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
+                    {tmpl_var name='parent_domain_id'}
+        </select>
+        </tmpl_if>
+      </div>
+      <div class="ctrlHolder">
+        <label for="run_min">{tmpl_var name='run_min_txt'}</label>
+        <input name="run_min" id="run_min" value="{tmpl_var name='run_min'}" size="10" maxlength="255" type="text" class="textInput" />
+                <p class="formHint">e.g. *, */3, 10-20</p>
+            </div>
+      <div class="ctrlHolder">
+        <label for="run_hour">{tmpl_var name='run_hour_txt'}</label>
+        <input name="run_hour" id="run_hour" value="{tmpl_var name='run_hour'}" size="10" maxlength="255" type="text" class="textInput" />
+                <p class="formHint">e.g. *, */2, 0, 10-12</p>
+            </div>
+      <div class="ctrlHolder">
+        <label for="run_mday">{tmpl_var name='run_mday_txt'}</label>
+        <input name="run_mday" id="run_mday" value="{tmpl_var name='run_mday'}" size="10" maxlength="255" type="text" class="textInput" />
+                <p class="formHint">e.g. *, */4, 1-5</p>
+            </div>
+      <div class="ctrlHolder">
+        <label for="run_month">{tmpl_var name='run_month_txt'}</label>
+        <input name="run_month" id="run_month" value="{tmpl_var name='run_month'}" size="10" maxlength="255" type="text" class="textInput" />
+                <p class="formHint">e.g. *, 1-6</p>
+            </div>
+      <div class="ctrlHolder">
+        <label for="run_wday">{tmpl_var name='run_wday_txt'}</label>
+        <input name="run_wday" id="run_wday" value="{tmpl_var name='run_wday'}" size="10" maxlength="255" type="text" class="textInput" />
+                <p class="formHint">e.g. *, 0, 1-5</p>
+            </div>
+      <div class="ctrlHolder">
+      	<label for="command">{tmpl_var name='command_txt'}</label>
+        <input name="command" id="command" value="{tmpl_var name='command'}" size="30" maxlength="255" type="text" class="textInput" />
+				<p class="formHint">e.g. /var/www/clients/client1/myscript.sh or http://www.mydomain.com/path/script.php</p>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+    
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/cron_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/cron_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/database_admin_list.htm b/interface/web/sites/templates/database_admin_list.htm
index face8e4a00..7cb228d99f 100644
--- a/interface/web/sites/templates/database_admin_list.htm
+++ b/interface/web/sites/templates/database_admin_list.htm
@@ -17,33 +17,33 @@
       <table class="list">
         <thead>
           <tr>
-            <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-            <th class="tbl_col_remote_access" scope="col"><tmpl_var name="remote_access_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_database_user" scope="col"><tmpl_var name="database_user_txt"></th>
-            <th class="tbl_col_database_name" scope="col"><tmpl_var name="database_name_txt"></th>
+            <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+            <th class="tbl_col_remote_access" scope="col"><tmpl_var name="remote_access_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_database_user" scope="col"><tmpl_var name="database_user_txt"></th>
+            <th class="tbl_col_database_name" scope="col"><tmpl_var name="database_name_txt"></th>
             <th class="tbl_col_buttons" scope="col">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_active'}</select></td>
-            <td class="tbl_col_remote_access"><select name="search_remote_access" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_remote_access'}</select></td>
-            <td class="tbl_col_sys_groupid"><select name="search_sys_groupid" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_sys_groupid'}</select></td>
-            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_server_id'}</select></td>
-            <td class="tbl_col_database_user"><input type="text" name="search_database_user" value="{tmpl_var name='search_database_user'}" /></td>
-            <td class="tbl_col_database_name"><input type="text" name="search_database_name" value="{tmpl_var name='search_database_name'}" /></td>
+            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_active'}</select></td>
+            <td class="tbl_col_remote_access"><select name="search_remote_access" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_remote_access'}</select></td>
+            <td class="tbl_col_sys_groupid"><select name="search_sys_groupid" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_sys_groupid'}</select></td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/database_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_database_user"><input type="text" name="search_database_user" value="{tmpl_var name='search_database_user'}" /></td>
+            <td class="tbl_col_database_name"><input type="text" name="search_database_name" value="{tmpl_var name='search_database_name'}" /></td>
             <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','sites/database_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-            <td class="tbl_col_remote_access"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="remote_access"}</a></td>
-            <td class="tbl_col_sys_groupid"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
-            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-            <td class="tbl_col_database_user"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_user"}</a></td>
-            <td class="tbl_col_database_name"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_name"}</a></td>
+            <td class="tbl_col_active"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+            <td class="tbl_col_remote_access"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="remote_access"}</a></td>
+            <td class="tbl_col_sys_groupid"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+            <td class="tbl_col_database_user"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_user"}</a></td>
+            <td class="tbl_col_database_name"><a href="#" onClick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_name"}</a></td>
             <td class="tbl_col_buttons">
               <div class="buttons icons16">
 				<tmpl_if name="dblist_phpmyadmin_link"><a class="icons16 icoDbAdmin" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span>{tmpl_var name='admin_txt'}</span></a></tmpl_if>
diff --git a/interface/web/sites/templates/ftp_user_advanced.htm b/interface/web/sites/templates/ftp_user_advanced.htm
index 1520630b53..85e6c66ef3 100644
--- a/interface/web/sites/templates/ftp_user_advanced.htm
+++ b/interface/web/sites/templates/ftp_user_advanced.htm
@@ -1,50 +1,50 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_ftp_user">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="uid">{tmpl_var name='uid_txt'}</label>
-        <input name="uid" id="uid" value="{tmpl_var name='uid'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="gid">{tmpl_var name='gid_txt'}</label>
-        <input name="gid" id="gid" value="{tmpl_var name='gid'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="dir">{tmpl_var name='dir_txt'}</label>
-        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="quota_files">{tmpl_var name='quota_files_txt'}</label>
-        <input name="quota_files" id="quota_files" value="{tmpl_var name='quota_files'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;{tmpl_var name='quota_files_unity_txt'}</p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="ul_ratio">{tmpl_var name='ul_ratio_txt'}</label>
-        <input name="ul_ratio" id="ul_ratio" value="{tmpl_var name='ul_ratio'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="dl_ratio">{tmpl_var name='dl_ratio_txt'}</label>
-        <input name="dl_ratio" id="dl_ratio" value="{tmpl_var name='dl_ratio'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="ul_bandwidth">{tmpl_var name='ul_bandwidth_txt'}</label>
-        <input name="ul_bandwidth" id="ul_bandwidth" value="{tmpl_var name='ul_bandwidth'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;kb/s</p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="dl_bandwidth">{tmpl_var name='dl_bandwidth_txt'}</label>
-        <input name="dl_bandwidth" id="dl_bandwidth" value="{tmpl_var name='dl_bandwidth'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;kb/s</p>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_ftp_user">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="uid">{tmpl_var name='uid_txt'}</label>
+        <input name="uid" id="uid" value="{tmpl_var name='uid'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="gid">{tmpl_var name='gid_txt'}</label>
+        <input name="gid" id="gid" value="{tmpl_var name='gid'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="dir">{tmpl_var name='dir_txt'}</label>
+        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="quota_files">{tmpl_var name='quota_files_txt'}</label>
+        <input name="quota_files" id="quota_files" value="{tmpl_var name='quota_files'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;{tmpl_var name='quota_files_unity_txt'}</p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="ul_ratio">{tmpl_var name='ul_ratio_txt'}</label>
+        <input name="ul_ratio" id="ul_ratio" value="{tmpl_var name='ul_ratio'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="dl_ratio">{tmpl_var name='dl_ratio_txt'}</label>
+        <input name="dl_ratio" id="dl_ratio" value="{tmpl_var name='dl_ratio'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="ul_bandwidth">{tmpl_var name='ul_bandwidth_txt'}</label>
+        <input name="ul_bandwidth" id="ul_bandwidth" value="{tmpl_var name='ul_bandwidth'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;kb/s</p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="dl_bandwidth">{tmpl_var name='dl_bandwidth_txt'}</label>
+        <input name="dl_bandwidth" id="dl_bandwidth" value="{tmpl_var name='dl_bandwidth'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;kb/s</p>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/ftp_user_advanced_client.htm b/interface/web/sites/templates/ftp_user_advanced_client.htm
index fd8d617ced..5698bb00f6 100644
--- a/interface/web/sites/templates/ftp_user_advanced_client.htm
+++ b/interface/web/sites/templates/ftp_user_advanced_client.htm
@@ -1,22 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_ftp_user">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="dir">{tmpl_var name='dir_txt'}</label>
-        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_ftp_user">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="dir">{tmpl_var name='dir_txt'}</label>
+        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/ftp_user_edit.htm b/interface/web/sites/templates/ftp_user_edit.htm
index f7588b3318..d3c6d78963 100644
--- a/interface/web/sites/templates/ftp_user_edit.htm
+++ b/interface/web/sites/templates/ftp_user_edit.htm
@@ -1,48 +1,48 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_ftp_user">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
-					{tmpl_var name='parent_domain_id'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="username">{tmpl_var name='username_txt'}</label>
-				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
-        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="quota_size">{tmpl_var name='quota_size_txt'}</label>
-        <input name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_ftp_user">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
+					{tmpl_var name='parent_domain_id'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="username">{tmpl_var name='username_txt'}</label>
+				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
+        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="password">{tmpl_var name='password_txt'}</label>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="quota_size">{tmpl_var name='quota_size_txt'}</label>
+        <input name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/shell_user_advanced.htm b/interface/web/sites/templates/shell_user_advanced.htm
index eb7d8ceb11..870614c344 100644
--- a/interface/web/sites/templates/shell_user_advanced.htm
+++ b/interface/web/sites/templates/shell_user_advanced.htm
@@ -1,34 +1,34 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_shell_user">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="puser">{tmpl_var name='puser_txt'}</label>
-        <input name="puser" id="puser" value="{tmpl_var name='puser'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="pgroup">{tmpl_var name='pgroup_txt'}</label>
-        <input name="pgroup" id="pgroup" value="{tmpl_var name='pgroup'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="shell">{tmpl_var name='shell_txt'}</label>
-        <input name="shell" id="shell" value="{tmpl_var name='shell'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="dir">{tmpl_var name='dir_txt'}</label>
-        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/shell_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/shell_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_shell_user">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="puser">{tmpl_var name='puser_txt'}</label>
+        <input name="puser" id="puser" value="{tmpl_var name='puser'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="pgroup">{tmpl_var name='pgroup_txt'}</label>
+        <input name="pgroup" id="pgroup" value="{tmpl_var name='pgroup'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="shell">{tmpl_var name='shell_txt'}</label>
+        <input name="shell" id="shell" value="{tmpl_var name='shell'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="dir">{tmpl_var name='dir_txt'}</label>
+        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/shell_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/shell_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/shell_user_edit.htm b/interface/web/sites/templates/shell_user_edit.htm
index 6e2c3d9f81..45bdcc4087 100644
--- a/interface/web/sites/templates/shell_user_edit.htm
+++ b/interface/web/sites/templates/shell_user_edit.htm
@@ -1,66 +1,66 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_shell_user">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-	    <tmpl_if name="edit_disabled">
-		<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-        <select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
-					{tmpl_var name='parent_domain_id'}
-		</select>
-		<input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
-		<tmpl_else>
-		<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
-					{tmpl_var name='parent_domain_id'}
-		</select>
-		</tmpl_if>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="username">{tmpl_var name='username_txt'}</label>
-				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
-        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput formLengthFourth"/>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)"/>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="chroot">{tmpl_var name='chroot_txt'}</label>
-        <select name="chroot" id="chroot" class="selectInput formLengthHalf">
-					{tmpl_var name='chroot'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="quota_size">{tmpl_var name='quota_size_txt'}</label>
-        <input name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
-			</div>
-	<div class="ctrlHolder">
-      		<label for="ssh_rsa">ssh_rsa</label>
-        	<input name="ssh_rsa" id="ssh_rsa" value="" maxlength="600" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/shell_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/shell_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_shell_user">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+	    <tmpl_if name="edit_disabled">
+		<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+        <select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
+					{tmpl_var name='parent_domain_id'}
+		</select>
+		<input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
+		<tmpl_else>
+		<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
+					{tmpl_var name='parent_domain_id'}
+		</select>
+		</tmpl_if>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="username">{tmpl_var name='username_txt'}</label>
+				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
+        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput formLengthFourth"/>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="password">{tmpl_var name='password_txt'}</label>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)"/>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="chroot">{tmpl_var name='chroot_txt'}</label>
+        <select name="chroot" id="chroot" class="selectInput formLengthHalf">
+					{tmpl_var name='chroot'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="quota_size">{tmpl_var name='quota_size_txt'}</label>
+        <input name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
+			</div>
+	<div class="ctrlHolder">
+      		<label for="ssh_rsa">ssh_rsa</label>
+        	<input name="ssh_rsa" id="ssh_rsa" value="" maxlength="600" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/shell_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/shell_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/user_quota_stats_list.htm b/interface/web/sites/templates/user_quota_stats_list.htm
index f7b7eaa085..b005d60cd8 100644
--- a/interface/web/sites/templates/user_quota_stats_list.htm
+++ b/interface/web/sites/templates/user_quota_stats_list.htm
@@ -7,30 +7,30 @@
       <table class="list">
         <thead>
           <tr>
-            <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
+            <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
             <th class="tbl_col_system_user" scope="col"><tmpl_var name="system_user_txt"></th>
 			<th class="tbl_col_system_user" scope="col" style="text-align:right;"><tmpl_var name="used_txt"></th>
 			<th class="tbl_col_system_user" scope="col" style="text-align:right;"><tmpl_var name="soft_txt"></th>
-			<th class="tbl_col_system_user" scope="col" style="text-align:right;"><tmpl_var name="hard_txt"></th>
+			<th class="tbl_col_system_user" scope="col" style="text-align:right;"><tmpl_var name="hard_txt"></th>
             <th class="tbl_col_buttons" scope="col">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
             <td class="tbl_col_system_user"><input type="text" name="search_system_user" value="{tmpl_var name='search_system_user'}" /></td>
 			<td class="tbl_col_system_user">&nbsp;</td>
 			<td class="tbl_col_system_user">&nbsp;</td>
-			<td class="tbl_col_system_user">&nbsp;</td>
+			<td class="tbl_col_system_user">&nbsp;</td>
             <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','sites/user_quota_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_domain"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
+            <td class="tbl_col_domain"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
             <td class="tbl_col_system_user"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="system_user"}</a></td>
 			<td class="tbl_col_used" style="text-align:right;"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="used"}</a></td>
 			<td class="tbl_col_soft" style="text-align:right;"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="soft"}</a></td>
-			<td class="tbl_col_hard" style="text-align:right;"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="hard"}</a></td>
+			<td class="tbl_col_hard" style="text-align:right;"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="hard"}</a></td>
             <td class="tbl_col_buttons">
               <div class="buttons icons16">    
                 &nbsp;
diff --git a/interface/web/sites/templates/web_aliasdomain_edit.htm b/interface/web/sites/templates/web_aliasdomain_edit.htm
index 82773d1ccf..688ed520b3 100644
--- a/interface/web/sites/templates/web_aliasdomain_edit.htm
+++ b/interface/web/sites/templates/web_aliasdomain_edit.htm
@@ -1,56 +1,56 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_web_domain">
-
-	<div class="pnl_formsarea">
-		<fieldset class="inlineLabels">
-			<div class="ctrlHolder">
-				<label for="domain">{tmpl_var name='domain_txt'}</label>
-				<tmpl_if name="domain_option">
-					<select name="domain" id="domain" class="selectInput">
-					{tmpl_var name='domain_option'}
-					</select>
-					<tmpl_else>
-						<input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-				</tmpl_if>
-			</div>
-			<div class="ctrlHolder">
-				<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-				<select name="parent_domain_id" id="parent_domain_id" class="selectInput">
-					{tmpl_var name='parent_domain_id'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
-				<select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
-					{tmpl_var name='redirect_type'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<label for="redirect_path">{tmpl_var name='redirect_path_txt'}</label>
-				<input name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-			<div class="ctrlHolder">
-				<label for="subdomain">{tmpl_var name='subdomain_txt'}</label>
-				<select name="subdomain" id="subdomain" class="selectInput formLengthHalf">
-					{tmpl_var name='subdomain'}
-				</select>
-			</div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-				<div class="multiField">
-						{tmpl_var name='active'}
-				</div>
-			</div>
-		</fieldset>
-
-		<input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-		<div class="buttonHolder buttons">
-			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/web_aliasdomain_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/web_aliasdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-		</div>
-	</div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_web_domain">
+
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels">
+			<div class="ctrlHolder">
+				<label for="domain">{tmpl_var name='domain_txt'}</label>
+				<tmpl_if name="domain_option">
+					<select name="domain" id="domain" class="selectInput">
+					{tmpl_var name='domain_option'}
+					</select>
+					<tmpl_else>
+						<input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
+				</tmpl_if>
+			</div>
+			<div class="ctrlHolder">
+				<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+				<select name="parent_domain_id" id="parent_domain_id" class="selectInput">
+					{tmpl_var name='parent_domain_id'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
+				<select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
+					{tmpl_var name='redirect_type'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<label for="redirect_path">{tmpl_var name='redirect_path_txt'}</label>
+				<input name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+			<div class="ctrlHolder">
+				<label for="subdomain">{tmpl_var name='subdomain_txt'}</label>
+				<select name="subdomain" id="subdomain" class="selectInput formLengthHalf">
+					{tmpl_var name='subdomain'}
+				</select>
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+				<div class="multiField">
+						{tmpl_var name='active'}
+				</div>
+			</div>
+		</fieldset>
+
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/web_aliasdomain_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/web_aliasdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
+</div>
diff --git a/interface/web/sites/templates/web_domain_admin_list.htm b/interface/web/sites/templates/web_domain_admin_list.htm
index 7290f1f8e4..efb72862e2 100644
--- a/interface/web/sites/templates/web_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_domain_admin_list.htm
@@ -17,30 +17,30 @@
       <table class="list">
         <thead>
           <tr>
-            <th class="tbl_col_domain_id" scope="col"><tmpl_var name="domain_id_txt"></th>
-            <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_domain" scope="col"><tmpl_var name="domain_txt"></th>
+            <th class="tbl_col_domain_id" scope="col"><tmpl_var name="domain_id_txt"></th>
+            <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_domain" scope="col"><tmpl_var name="domain_txt"></th>
             <th class="tbl_col_buttons" scope="col">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_domain_id"><input type="text" name="search_domain_id" size="4" value="{tmpl_var name='search_domain_id'}" /></td>
-            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/web_domain_list.php');">{tmpl_var name='search_active'}</select></td>
-            <td class="tbl_col_sys_groupid"><select name="search_sys_groupid" onChange="submitForm('pageForm','sites/web_domain_list.php');">{tmpl_var name='search_sys_groupid'}</select></td>
-            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/web_domain_list.php');">{tmpl_var name='search_server_id'}</select></td>
-            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+            <td class="tbl_col_domain_id"><input type="text" name="search_domain_id" size="4" value="{tmpl_var name='search_domain_id'}" /></td>
+            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/web_domain_list.php');">{tmpl_var name='search_active'}</select></td>
+            <td class="tbl_col_sys_groupid"><select name="search_sys_groupid" onChange="submitForm('pageForm','sites/web_domain_list.php');">{tmpl_var name='search_sys_groupid'}</select></td>
+            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/web_domain_list.php');">{tmpl_var name='search_server_id'}</select></td>
+            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
             <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','sites/web_domain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></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_domain_id"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain_id"}</a></td>
-            <td class="tbl_col_active"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-            <td class="tbl_col_sys_groupid"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
-            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-            <td class="tbl_col_domain"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
+            <td class="tbl_col_domain_id"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain_id"}</a></td>
+            <td class="tbl_col_active"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+            <td class="tbl_col_sys_groupid"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+            <td class="tbl_col_domain"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
             <td class="tbl_col_buttons">
               <div class="buttons icons16">    
                 <a class="icons16 icoDelete" href="javascript: del_record('sites/web_domain_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>
diff --git a/interface/web/sites/templates/web_domain_redirect.htm b/interface/web/sites/templates/web_domain_redirect.htm
index 89e6fab80a..8f07bef02a 100644
--- a/interface/web/sites/templates/web_domain_redirect.htm
+++ b/interface/web/sites/templates/web_domain_redirect.htm
@@ -1,28 +1,28 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_web_domain">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
-        <select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
-					{tmpl_var name='redirect_type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="redirect_path">{tmpl_var name='redirect_path_txt'}</label>
-        <input name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/web_domain_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/web_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_web_domain">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
+        <select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
+					{tmpl_var name='redirect_type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="redirect_path">{tmpl_var name='redirect_path_txt'}</label>
+        <input name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/web_domain_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/web_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/web_subdomain_edit.htm b/interface/web/sites/templates/web_subdomain_edit.htm
index 2206cf7bd5..c0bc0f7ed2 100644
--- a/interface/web/sites/templates/web_subdomain_edit.htm
+++ b/interface/web/sites/templates/web_subdomain_edit.htm
@@ -1,42 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_web_subdomain">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-	  <div class="ctrlHolder">
-      	<label for="domain">{tmpl_var name='host_txt'}</label>
-        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-      </div>
-	  <div class="ctrlHolder">
-      	<label for="parent_domain_id">{tmpl_var name='domain_txt'}</label>
-        <select id="parent_domain_id" name="parent_domain_id" class="selectInput formLengthHalf">{tmpl_var name='parent_domain_id'}</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
-        <select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
-					{tmpl_var name='redirect_type'}
-				</select>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="redirect_path">{tmpl_var name='redirect_path_txt'}</label>
-        <input name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" size="30" maxlength="255" type="text" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-					<div class="multiField">
-						{tmpl_var name='active'}
-					</div>
-			</div>
-    </fieldset>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/web_subdomain_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/web_subdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_web_subdomain">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+	  <div class="ctrlHolder">
+      	<label for="domain">{tmpl_var name='host_txt'}</label>
+        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+      </div>
+	  <div class="ctrlHolder">
+      	<label for="parent_domain_id">{tmpl_var name='domain_txt'}</label>
+        <select id="parent_domain_id" name="parent_domain_id" class="selectInput formLengthHalf">{tmpl_var name='parent_domain_id'}</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
+        <select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
+					{tmpl_var name='redirect_type'}
+				</select>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="redirect_path">{tmpl_var name='redirect_path_txt'}</label>
+        <input name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" size="30" maxlength="255" type="text" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+					<div class="multiField">
+						{tmpl_var name='active'}
+					</div>
+			</div>
+    </fieldset>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/web_subdomain_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/web_subdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/interface/web/sites/templates/webdav_user_edit.htm b/interface/web/sites/templates/webdav_user_edit.htm
index 37d46a8ed9..4b6b4edfda 100644
--- a/interface/web/sites/templates/webdav_user_edit.htm
+++ b/interface/web/sites/templates/webdav_user_edit.htm
@@ -1,58 +1,58 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_webdav_user">
-
-	<div class="pnl_formsarea">
-		<fieldset class="inlineLabels">
-			<div class="ctrlHolder">
-				<tmpl_if name="edit_disabled">
-					<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-					<select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
-					{tmpl_var name='parent_domain_id'}
-					</select>
-					<input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
-					<tmpl_else>
-						<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-						<select name="parent_domain_id" id="parent_domain_id" class="selectInput">
-					{tmpl_var name='parent_domain_id'}
-						</select>
-				</tmpl_if>
-			</div>
-			<div class="ctrlHolder">
-				<label for="username">{tmpl_var name='username_txt'}</label>
-				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
-				<input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput formLengthFourth" <tmpl_if name="edit_disabled">disabled="disabled"</tmpl_if>/>
-			</div>
-			<div class="ctrlHolder">
-				<label for="password">{tmpl_var name='password_txt'}</label>
-				<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)"/>
-			</div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='active_txt'}</p>
-				<div class="multiField">
-						{tmpl_var name='active'}
-				</div>
-			</div>
-			<div class="ctrlHolder">
-				<label for="dir">{tmpl_var name='dir_txt'}</label>
-				<div style="float: left;">webdav/</div>
-				<input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" <tmpl_if name="edit_disabled">disabled="disabled"</tmpl_if>/>
-			</div>
-
-		</fieldset>
-
-		<input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-		<div class="buttonHolder buttons">
-			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/webdav_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/webdav_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-		</div>
-	</div>
-
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_webdav_user">
+
+	<div class="pnl_formsarea">
+		<fieldset class="inlineLabels">
+			<div class="ctrlHolder">
+				<tmpl_if name="edit_disabled">
+					<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+					<select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
+					{tmpl_var name='parent_domain_id'}
+					</select>
+					<input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
+					<tmpl_else>
+						<label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
+						<select name="parent_domain_id" id="parent_domain_id" class="selectInput">
+					{tmpl_var name='parent_domain_id'}
+						</select>
+				</tmpl_if>
+			</div>
+			<div class="ctrlHolder">
+				<label for="username">{tmpl_var name='username_txt'}</label>
+				<div style="float: left;">{tmpl_var name='username_prefix'} </div>
+				<input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput formLengthFourth" <tmpl_if name="edit_disabled">disabled="disabled"</tmpl_if>/>
+			</div>
+			<div class="ctrlHolder">
+				<label for="password">{tmpl_var name='password_txt'}</label>
+				<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)"/>
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+			<div class="ctrlHolder">
+				<p class="label">{tmpl_var name='active_txt'}</p>
+				<div class="multiField">
+						{tmpl_var name='active'}
+				</div>
+			</div>
+			<div class="ctrlHolder">
+				<label for="dir">{tmpl_var name='dir_txt'}</label>
+				<div style="float: left;">webdav/</div>
+				<input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" <tmpl_if name="edit_disabled">disabled="disabled"</tmpl_if>/>
+			</div>
+
+		</fieldset>
+
+		<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+		<div class="buttonHolder buttons">
+			<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/webdav_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+			<button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/webdav_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+		</div>
+	</div>
+
+</div>
diff --git a/interface/web/temp/en.lng b/interface/web/temp/en.lng
index 3ce72dc44a..ccb4786598 100644
--- a/interface/web/temp/en.lng
+++ b/interface/web/temp/en.lng
@@ -344,34 +344,34 @@ $wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
 
 ?>
 --|admin|en|en_users.lng
-<?php
-$wb["username_txt"] = 'Username';
-$wb["username_err"] = 'The username is too long or contains invalid characters.';
-$wb["username_empty"] = 'The username is empty.';
-$wb["username_unique"] = 'There is already a user with this username.';
-$wb["passwort_txt"] = 'Password';
-$wb["password_strength_txt"] = 'Password strength';
-$wb["modules_txt"] = 'Module';
-$wb["startmodule_txt"] = 'Startmodule';
-$wb["app_theme_txt"] = 'Design';
-$wb["typ_txt"] = 'Type';
-$wb["active_txt"] = 'Active';
-$wb["language_txt"] = 'Language';
-$wb["name_txt"] = 'Name';
-$wb["vorname_txt"] = 'Forename';
-$wb["unternehmen_txt"] = 'Company';
-$wb["strasse_txt"] = 'Street';
-$wb["ort_txt"] = 'City';
-$wb["plz_txt"] = 'ZIP';
-$wb["land_txt"] = 'Country';
-$wb["email_txt"] = 'Email';
-$wb["url_txt"] = 'Url';
-$wb["telefon_txt"] = 'Telephone';
-$wb["fax_txt"] = 'Fax';
-$wb["groups_txt"] = 'Groups';
-$wb["default_group_txt"] = 'Default Group';
-$wb["startmodule_err"] = 'Start module is not within modules.';
-?>
+<?php
+$wb["username_txt"] = 'Username';
+$wb["username_err"] = 'The username is too long or contains invalid characters.';
+$wb["username_empty"] = 'The username is empty.';
+$wb["username_unique"] = 'There is already a user with this username.';
+$wb["passwort_txt"] = 'Password';
+$wb["password_strength_txt"] = 'Password strength';
+$wb["modules_txt"] = 'Module';
+$wb["startmodule_txt"] = 'Startmodule';
+$wb["app_theme_txt"] = 'Design';
+$wb["typ_txt"] = 'Type';
+$wb["active_txt"] = 'Active';
+$wb["language_txt"] = 'Language';
+$wb["name_txt"] = 'Name';
+$wb["vorname_txt"] = 'Forename';
+$wb["unternehmen_txt"] = 'Company';
+$wb["strasse_txt"] = 'Street';
+$wb["ort_txt"] = 'City';
+$wb["plz_txt"] = 'ZIP';
+$wb["land_txt"] = 'Country';
+$wb["email_txt"] = 'Email';
+$wb["url_txt"] = 'Url';
+$wb["telefon_txt"] = 'Telephone';
+$wb["fax_txt"] = 'Fax';
+$wb["groups_txt"] = 'Groups';
+$wb["default_group_txt"] = 'Default Group';
+$wb["startmodule_err"] = 'Start module is not within modules.';
+?>
 
 --|admin|en|en_users_list.lng
 <?php
@@ -1223,13 +1223,13 @@ $wb["source_txt"] = 'Source';
 $wb["add_new_record_txt"] = 'Add new Domain alias';
 ?>
 --|mail|en|en_mail_alias_list.lng
-<?php
-$wb["list_head_txt"] = 'Email Alias';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Email alias';
+<?php
+$wb["list_head_txt"] = 'Email Alias';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Email alias';
 ?>
 --|mail|en|en_mail_blacklist.lng
 <?php
@@ -1242,15 +1242,15 @@ $wb["type_txt"] = 'Type';
 $wb["limit_mailfilter_txt"] = 'The max. number of email filters for your account is reached.';
 ?>
 --|mail|en|en_mail_blacklist_list.lng
-<?php
-$wb["list_head_txt"] = 'Email Blacklist';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["source_txt"] = 'Blacklisted address';
-$wb["type_txt"] = 'Type';
-$wb["recipient_txt"] = 'Recipient';
-$wb["add_new_record_txt"] = 'Add new Blacklist record';
-$wb["access_txt"] = 'access';
+<?php
+$wb["list_head_txt"] = 'Email Blacklist';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["source_txt"] = 'Blacklisted address';
+$wb["type_txt"] = 'Type';
+$wb["recipient_txt"] = 'Recipient';
+$wb["add_new_record_txt"] = 'Add new Blacklist record';
+$wb["access_txt"] = 'access';
 ?>
 --|mail|en|en_mail_content_filter.lng
 <?php
@@ -1296,14 +1296,14 @@ $wb["domain_error_regex"] = 'Invalid domain name od domain contains invalid char
 $wb["limit_mailcatchall_txt"] = 'The max. number of email catchall accounts for your account is reached.';
 ?>
 --|mail|en|en_mail_domain_catchall_list.lng
-<?php
-$wb["list_head_txt"] = 'Email Catchall';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination email address';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["add_new_record_txt"] = 'Add new Catchall';
+<?php
+$wb["list_head_txt"] = 'Email Catchall';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination email address';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["add_new_record_txt"] = 'Add new Catchall';
 ?>
 --|mail|en|en_mail_domain_list.lng
 <?php
@@ -1322,13 +1322,13 @@ $wb["limit_mailforward_txt"] = 'The max. number of email forwarders for your acc
 $wb["duplicate_mailbox_txt"] = 'There is already a mailbox with this email address';
 ?>
 --|mail|en|en_mail_forward_list.lng
-<?php
-$wb["list_head_txt"] = 'Mail Forward';
-$wb["active_txt"] = 'Active';
-$wb["source_txt"] = 'source';
-$wb["destination_txt"] = 'Destination';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Email forward';
+<?php
+$wb["list_head_txt"] = 'Mail Forward';
+$wb["active_txt"] = 'Active';
+$wb["source_txt"] = 'source';
+$wb["destination_txt"] = 'Destination';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Email forward';
 ?>
 --|mail|en|en_mail_get.lng
 <?php
@@ -1395,13 +1395,13 @@ $wb["spam_redirect_maildir_purge_txt"] = 'Purge Maildir after';
 $wb["days_txt"] = 'Days.';
 ?>
 --|mail|en|en_mail_spamfilter_list.lng
-<?php
-$wb["list_head_txt"] = 'Spamfilter';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["server_name_txt"] = 'server_name';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add new Spamfilter record';
+<?php
+$wb["list_head_txt"] = 'Spamfilter';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["server_name_txt"] = 'server_name';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add new Spamfilter record';
 ?>
 --|mail|en|en_mail_transport.lng
 <?php
@@ -1415,14 +1415,14 @@ $wb["active_txt"] = 'Active';
 $wb["limit_mailrouting_txt"] = 'The max. number of routes for your account is reached.';
 ?>
 --|mail|en|en_mail_transport_list.lng
-<?php
-$wb["list_head_txt"] = 'Advanced Email Routing';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["transport_txt"] = 'Transport';
-$wb["sort_order_txt"] = 'Sort by';
-$wb["add_new_record_txt"] = 'Add new transport';
+<?php
+$wb["list_head_txt"] = 'Advanced Email Routing';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["transport_txt"] = 'Transport';
+$wb["sort_order_txt"] = 'Sort by';
+$wb["add_new_record_txt"] = 'Add new transport';
 ?>
 --|mail|en|en_mail_user.lng
 <?php
@@ -1478,11 +1478,11 @@ $wb["page_of_txt"] = 'of';
 $wb["delete_confirmation"] = 'Do you really want to Delete the mailfilter?';
 ?>
 --|mail|en|en_mail_user_list.lng
-<?php
-$wb["list_head_txt"] = 'Mailbox';
-$wb["email_txt"] = 'Email';
-$wb["autoresponder_txt"] = 'Autoresponder';
-$wb["add_new_record_txt"] = 'Add new Mailbox';
+<?php
+$wb["list_head_txt"] = 'Mailbox';
+$wb["email_txt"] = 'Email';
+$wb["autoresponder_txt"] = 'Autoresponder';
+$wb["add_new_record_txt"] = 'Add new Mailbox';
 ?>
 --|mail|en|en_mail_user_stats_list.lng
 <?php
@@ -1504,15 +1504,15 @@ $wb["type_txt"] = 'Type';
 $wb["limit_mailfilter_txt"] = 'The max. number of email filters for your account is reached.';
 ?>
 --|mail|en|en_mail_whitelist_list.lng
-<?php
-$wb["list_head_txt"] = 'Email Whitelist';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["source_txt"] = 'Whitelisted address';
-$wb["type_txt"] = 'Type';
-$wb["recipient_txt"] = 'Recipient';
-$wb["add_new_record_txt"] = 'Add new Whitelist record';
-$wb["access_txt"] = 'access';
+<?php
+$wb["list_head_txt"] = 'Email Whitelist';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["source_txt"] = 'Whitelisted address';
+$wb["type_txt"] = 'Type';
+$wb["recipient_txt"] = 'Recipient';
+$wb["add_new_record_txt"] = 'Add new Whitelist record';
+$wb["access_txt"] = 'access';
 ?>
 --|mail|en|en_spamfilter_blacklist.lng
 <?php
@@ -1601,14 +1601,14 @@ $wb["message_size_limit_txt"] = 'Message size limit';
 $wb["banned_rulenames_txt"] = 'Banned rulenames';
 ?>
 --|mail|en|en_spamfilter_policy_list.lng
-<?php
-$wb["list_head_txt"] = 'Spamfilter Policy';
-$wb["policy_name_txt"] = 'Name';
-$wb["virus_lover_txt"] = 'Virus lover';
-$wb["spam_lover_txt"] = 'Spam lover';
-$wb["banned_files_lover_txt"] = 'Banned Files lover';
-$wb["bad_header_lover_txt"] = 'Bad Header lover';
-$wb["add_new_record_txt"] = 'Add Policy record';
+<?php
+$wb["list_head_txt"] = 'Spamfilter Policy';
+$wb["policy_name_txt"] = 'Name';
+$wb["virus_lover_txt"] = 'Virus lover';
+$wb["spam_lover_txt"] = 'Spam lover';
+$wb["banned_files_lover_txt"] = 'Banned Files lover';
+$wb["bad_header_lover_txt"] = 'Bad Header lover';
+$wb["add_new_record_txt"] = 'Add Policy record';
 ?>
 --|mail|en|en_spamfilter_users.lng
 <?php
@@ -1620,15 +1620,15 @@ $wb["fullname_txt"] = 'Name';
 $wb["local_txt"] = 'Local';
 ?>
 --|mail|en|en_spamfilter_users_list.lng
-<?php
-$wb["list_head_txt"] = 'Spamfilter Users';
-$wb["local_txt"] = 'Local';
-$wb["server_id_txt"] = 'Server';
-$wb["priority_txt"] = 'Priority';
-$wb["policy_id_txt"] = 'Policy';
-$wb["fullname_txt"] = 'Name';
-$wb["email_txt"] = 'Email';
-$wb["add_new_record_txt"] = 'Add Spamfilter User';
+<?php
+$wb["list_head_txt"] = 'Spamfilter Users';
+$wb["local_txt"] = 'Local';
+$wb["server_id_txt"] = 'Server';
+$wb["priority_txt"] = 'Priority';
+$wb["policy_id_txt"] = 'Policy';
+$wb["fullname_txt"] = 'Name';
+$wb["email_txt"] = 'Email';
+$wb["add_new_record_txt"] = 'Add Spamfilter User';
 ?>
 --|mail|en|en_spamfilter_whitelist.lng
 <?php
@@ -1641,14 +1641,14 @@ $wb["active_txt"] = 'Active';
 $wb["limit_spamfilter_wblist_txt"] = 'The max. number of White- or Blacklist records for your account is reached.';
 ?>
 --|mail|en|en_spamfilter_whitelist_list.lng
-<?php
-$wb["list_head_txt"] = 'Spamfilter Whitelist';
-$wb["active_txt"] = 'Active';
-$wb["server_id_txt"] = 'Server';
-$wb["priority_txt"] = 'Priority';
-$wb["rid_txt"] = 'User';
-$wb["email_txt"] = 'Whitelisted Email';
-$wb["add_new_record_txt"] = 'Add Whitelist record';
+<?php
+$wb["list_head_txt"] = 'Spamfilter Whitelist';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["priority_txt"] = 'Priority';
+$wb["rid_txt"] = 'User';
+$wb["email_txt"] = 'Whitelisted Email';
+$wb["add_new_record_txt"] = 'Add Whitelist record';
 ?>
 --|monitor|en|en.lng
 <?php
@@ -2053,44 +2053,44 @@ $wb["this_year_txt"] = 'This year';
 $wb["last_year_txt"] = 'Last year';
 ?>
 --|sites|en|en_web_subdomain.lng
-<?php
-$wb["ssl_state_txt"] = 'State';
-$wb["ssl_locality_txt"] = 'Locality';
-$wb["ssl_organisation_txt"] = 'Organisation';
-$wb["ssl_organisation_unit_txt"] = 'Organisation Unit';
-$wb["ssl_country_txt"] = 'Country';
-$wb["ssl_request_txt"] = 'SSL Request';
-$wb["ssl_cert_txt"] = 'SSL Certificate';
-$wb["ssl_bundle_txt"] = 'SSL Bundle';
-$wb["ssl_action_txt"] = 'SSL Action';
-$wb["server_id_txt"] = 'Server';
-$wb["domain_txt"] = 'Domain';
-$wb["type_txt"] = 'Type';
-$wb["parent_domain_id_txt"] = 'Parent Website';
-$wb["redirect_type_txt"] = 'Redirect Type';
-$wb["redirect_path_txt"] = 'Redirect Path';
-$wb["active_txt"] = 'Active';
-$wb["document_root_txt"] = 'Documentroot';
-$wb["system_user_txt"] = 'Linux User';
-$wb["system_group_txt"] = 'Linux Group';
-$wb["ip_address_txt"] = 'IP-Address';
-$wb["vhost_type_txt"] = 'VHost Type';
-$wb["hd_quota_txt"] = 'Harddisk Quota';
-$wb["traffic_quota_txt"] = 'Traffic Quaota';
-$wb["cgi_txt"] = 'CGI';
-$wb["ssi_txt"] = 'SSI';
-$wb["ssl_txt"] = 'SSL';
-$wb["suexec_txt"] = 'SuEXEC';
-$wb["php_txt"] = 'PHP';
-$wb["client_txt"] = 'Client';
-$wb["limit_web_domain_txt"] = 'The max. number of web domains for your account is reached.';
-$wb["limit_web_aliasdomain_txt"] = 'The max. number of aliasdomains for your account is reached.';
-$wb["limit_web_subdomain_txt"] = 'The max. number of web subdomains for your account is reached.';
-$wb["apache_directives_txt"] = 'Apache directives';
-$wb["domain_error_empty"] = 'Domain is empty.';
-$wb["domain_error_unique"] = 'There is already a website or sub / aliasdomain with this domain name.';
-$wb["domain_error_regex"] = 'Domain name invalid.';
-$wb["host_txt"] = 'Host';
+<?php
+$wb["ssl_state_txt"] = 'State';
+$wb["ssl_locality_txt"] = 'Locality';
+$wb["ssl_organisation_txt"] = 'Organisation';
+$wb["ssl_organisation_unit_txt"] = 'Organisation Unit';
+$wb["ssl_country_txt"] = 'Country';
+$wb["ssl_request_txt"] = 'SSL Request';
+$wb["ssl_cert_txt"] = 'SSL Certificate';
+$wb["ssl_bundle_txt"] = 'SSL Bundle';
+$wb["ssl_action_txt"] = 'SSL Action';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["type_txt"] = 'Type';
+$wb["parent_domain_id_txt"] = 'Parent Website';
+$wb["redirect_type_txt"] = 'Redirect Type';
+$wb["redirect_path_txt"] = 'Redirect Path';
+$wb["active_txt"] = 'Active';
+$wb["document_root_txt"] = 'Documentroot';
+$wb["system_user_txt"] = 'Linux User';
+$wb["system_group_txt"] = 'Linux Group';
+$wb["ip_address_txt"] = 'IP-Address';
+$wb["vhost_type_txt"] = 'VHost Type';
+$wb["hd_quota_txt"] = 'Harddisk Quota';
+$wb["traffic_quota_txt"] = 'Traffic Quaota';
+$wb["cgi_txt"] = 'CGI';
+$wb["ssi_txt"] = 'SSI';
+$wb["ssl_txt"] = 'SSL';
+$wb["suexec_txt"] = 'SuEXEC';
+$wb["php_txt"] = 'PHP';
+$wb["client_txt"] = 'Client';
+$wb["limit_web_domain_txt"] = 'The max. number of web domains for your account is reached.';
+$wb["limit_web_aliasdomain_txt"] = 'The max. number of aliasdomains for your account is reached.';
+$wb["limit_web_subdomain_txt"] = 'The max. number of web subdomains for your account is reached.';
+$wb["apache_directives_txt"] = 'Apache directives';
+$wb["domain_error_empty"] = 'Domain is empty.';
+$wb["domain_error_unique"] = 'There is already a website or sub / aliasdomain with this domain name.';
+$wb["domain_error_regex"] = 'Domain name invalid.';
+$wb["host_txt"] = 'Host';
 ?>
 --|sites|en|en_web_subdomain_list.lng
 <?php
diff --git a/interface/web/themes/default/css/central.css b/interface/web/themes/default/css/central.css
index e9268d5bff..0afb8c646b 100644
--- a/interface/web/themes/default/css/central.css
+++ b/interface/web/themes/default/css/central.css
@@ -1,32 +1,32 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) central stylesheet - ISPConfig 3: default theme
- * (de) Zentrales Stylesheet - ISPConfig 3: default theme
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import core styles | Basis-Stylesheets einbinden */
-@import url(../yaml/core/base.css);
-
-/* import screen layout | Screen-Layout einbinden */
-@import url(navigation/nav_top.css);
-@import url(navigation/nav_side.css);
-@import url(screen/basemod.css);
-@import url(screen/basemod_2col_left_seo.css);
-@import url(screen/content.css);
-@import url(screen/uni-form-generic.css);
-@import url(screen/uni-form.css);
-@import url(screen/content_ispc.css);
-
-/* import print layout | Druck-Layout einbinden */
-@import url(print/print_100.css);
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) central stylesheet - ISPConfig 3: default theme
+ * (de) Zentrales Stylesheet - ISPConfig 3: default theme
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import core styles | Basis-Stylesheets einbinden */
+@import url(../yaml/core/base.css);
+
+/* import screen layout | Screen-Layout einbinden */
+@import url(navigation/nav_top.css);
+@import url(navigation/nav_side.css);
+@import url(screen/basemod.css);
+@import url(screen/basemod_2col_left_seo.css);
+@import url(screen/content.css);
+@import url(screen/uni-form-generic.css);
+@import url(screen/uni-form.css);
+@import url(screen/content_ispc.css);
+
+/* import print layout | Druck-Layout einbinden */
+@import url(print/print_100.css);
diff --git a/interface/web/themes/default/css/patches/central.css b/interface/web/themes/default/css/patches/central.css
index 3ed00400bf..27dd462b75 100644
--- a/interface/web/themes/default/css/patches/central.css
+++ b/interface/web/themes/default/css/patches/central.css
@@ -1,37 +1,37 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) IE-Patch stylesheet - ISPConfig 3: default theme
- * (de) IE-Korrektur-Stylesheet - ISPConfig 3: default theme
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* Layout-independent adjustments | Layout-unabhängige Anpassungen ----------------------------------- */
-@import url(../yaml/core/iehacks.css);
-
-/* Layout-dependent adjustments | Layout-abhängige Anpassungen --------------------------------------- */
-@media screen, projection
-{
- /**
-  * min-width/max-width workaround for IE5.x & IE6
-  *
-  * @workaround
-  * @affected   IE 5.x/Win, IE6
-  * @css-for    IE 5.x/Win, IE6
-  * @valid      no
-  */
-
-  * html #page_margins {
-    /* Fallback if JavaScript is disabled */
-    width: 80%;
-  }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) IE-Patch stylesheet - ISPConfig 3: default theme
+ * (de) IE-Korrektur-Stylesheet - ISPConfig 3: default theme
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* Layout-independent adjustments | Layout-unabhängige Anpassungen ----------------------------------- */
+@import url(../yaml/core/iehacks.css);
+
+/* Layout-dependent adjustments | Layout-abhängige Anpassungen --------------------------------------- */
+@media screen, projection
+{
+ /**
+  * min-width/max-width workaround for IE5.x & IE6
+  *
+  * @workaround
+  * @affected   IE 5.x/Win, IE6
+  * @css-for    IE 5.x/Win, IE6
+  * @valid      no
+  */
+
+  * html #page_margins {
+    /* Fallback if JavaScript is disabled */
+    width: 80%;
+  }
+}
diff --git a/interface/web/themes/default/css/print/print_100.css b/interface/web/themes/default/css/print/print_100.css
index 94315a8af5..95e63e80ab 100644
--- a/interface/web/themes/default/css/print/print_100.css
+++ b/interface/web/themes/default/css/print/print_100.css
@@ -1,31 +1,31 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet - ISPConfig 3: default theme
- * (de) Druck-Stylesheet - ISPConfig 3: default theme
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../../yaml/core/print_base.css);
-
-/* #col1 - x
-** #col2 - 0
-** #col3 - 0
-*/
-@media print
-{
-  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-
-  #col2 { display:none; }
-  #col3 { display:none; }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet - ISPConfig 3: default theme
+ * (de) Druck-Stylesheet - ISPConfig 3: default theme
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../../yaml/core/print_base.css);
+
+/* #col1 - x
+** #col2 - 0
+** #col3 - 0
+*/
+@media print
+{
+  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+
+  #col2 { display:none; }
+  #col3 { display:none; }
+}
diff --git a/interface/web/themes/default/css/screen/basemod_2col_left_seo.css b/interface/web/themes/default/css/screen/basemod_2col_left_seo.css
index 525204b239..3914fc33b1 100644
--- a/interface/web/themes/default/css/screen/basemod_2col_left_seo.css
+++ b/interface/web/themes/default/css/screen/basemod_2col_left_seo.css
@@ -1,48 +1,48 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) Variation of screen layout (basemod.css) - ISPConfig 3: default theme
- * (de) Variation des Screenlayouts (basemod.css) - ISPConfig 3: default theme
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-@media screen, projection
-{
-  /**
-   * (en) Repositioning content container
-   * (de) Neupositionierung der Content Container
-   *
-   * |-------------------------------|
-   * | #header                       |
-   * |-------------------------------|
-   * | #col1   | #col3               |
-   * | 200px   | flexible            |
-   * |-------------------------------|
-   * | #footer                       |
-   * |-------------------------------|
-   */
-
-  /* #col1 becomes the fixed navigation column | #col1 wird zur Navigationsspalte mit fester Breite */
-  #col1 { width: 200px; float:left}
-  #col1_content { padding: 0 10px 0 0; }
-
-  /* #col2 is turned off | #col2 abschalten */
-  #col2 { display:none; }
-
-  /* #col3 becomes the main column | #col3 wird zur Hauptspalte */
-  #col3 { margin-left: 200px; margin-right: 0; }
-  #col3_content { padding: 0px 10px 10px 20px; }
-
-  /* Graphic-free column dividers between #col1 and #col3 | Grafikfreier Spaltentrenner zw. #col1 und #col3*/
-  #col3 {border-left: 1px #ddd solid;}
-  #main {padding: 1em 0}
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) Variation of screen layout (basemod.css) - ISPConfig 3: default theme
+ * (de) Variation des Screenlayouts (basemod.css) - ISPConfig 3: default theme
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+@media screen, projection
+{
+  /**
+   * (en) Repositioning content container
+   * (de) Neupositionierung der Content Container
+   *
+   * |-------------------------------|
+   * | #header                       |
+   * |-------------------------------|
+   * | #col1   | #col3               |
+   * | 200px   | flexible            |
+   * |-------------------------------|
+   * | #footer                       |
+   * |-------------------------------|
+   */
+
+  /* #col1 becomes the fixed navigation column | #col1 wird zur Navigationsspalte mit fester Breite */
+  #col1 { width: 200px; float:left}
+  #col1_content { padding: 0 10px 0 0; }
+
+  /* #col2 is turned off | #col2 abschalten */
+  #col2 { display:none; }
+
+  /* #col3 becomes the main column | #col3 wird zur Hauptspalte */
+  #col3 { margin-left: 200px; margin-right: 0; }
+  #col3_content { padding: 0px 10px 10px 20px; }
+
+  /* Graphic-free column dividers between #col1 and #col3 | Grafikfreier Spaltentrenner zw. #col1 und #col3*/
+  #col3 {border-left: 1px #ddd solid;}
+  #main {padding: 1em 0}
+}
diff --git a/interface/web/themes/default/css/screen/content.css b/interface/web/themes/default/css/screen/content.css
index ad5a0d2b6b..daf1310029 100644
--- a/interface/web/themes/default/css/screen/content.css
+++ b/interface/web/themes/default/css/screen/content.css
@@ -1,188 +1,188 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) Uniform design of standard content elements - ISPConfig 3: default theme
- * (de) Einheitliche Standardformatierungen für die wichtigten Inhalts-Elemente - ISPConfig 3: default theme
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- * @appdef yaml
- */
-
-@media all
-{
-	/**
-	* Fonts
-	* (en) font-family and font-size selection for headings and standard text elements
-	* (de) Zeichensatz und Schriftgrößen für Überschriften und übliche Text-Elemente
-	*
-	* @section content-fonts
-	*/
-	
-	/* (en) reset font size for all elements to standard (16 Pixel) */
-	/* (de) Alle Schriftgrößen auf Standardgröße (16 Pixel) zurücksetzen */
-	html * { font-size: 100.01% }
-	
-	/* (en) reset monospaced elements to font size 16px in Gecko browsers */
-	/* (de) Schriftgröße von monospaced Elemente auf 16 Pixel setzen */
-	textarea, pre, tt, code {
-	font-family: Consolas,"Lucida Console","Courier New",monospace;
-    font-size: 0.9em;	
-	}
-	
-	/* (en) base layout gets standard font size 12px */
-	/* (de) Basis-Layout erhält Standardschriftgröße von 12 Pixeln */
-	body {
-	  font-family: 'Trebuchet MS', sans-serif;
-	  font-size: 75.00%; 
-	  color: #444;  
-	}
-	
-	h1,h2,h3,h4,h5,h6 { 
-		font-family: 'Trebuchet MS', sans-serif;
-		font-weight:bold; 
-		color:#666;
-		margin: 0 0 0.25em 0; 
-	}
-	
-	h1 { font-size: 200% }                        /* 24px */
-	h2 { font-size: 200% }          /* 24px */
-	h3 { font-size: 150% }                        /* 18px */
-	h4 { font-size: 133.33% }                     /* 16px */
-	h5 { font-size: 116.67% }                     /* 14px */
-	h6 { font-size: 116.67%; font-style:italic }  /* 14px */
-	
-	#header h1 {
-	  font-size:2.5em;
-	  letter-spacing:-2px;
-	  line-height:65%;
-	  color: silver;
-	}
-	
-	#header span {
-	  color:#333333;
-	}
-	
-	p { line-height: 1.5em; margin: 0 0 1em 0; }
-	
-	/* ### Lists | Listen  #### */
-	
-	ul, ol, dl { line-height: 1.5em; margin: 0 0 1em 1em }
-	li { margin-left: 1.5em; line-height: 1.5em }
-	
-	dt { font-weight: bold }
-	dd { margin: 0 0 1em 2em }
-	
-	/* ### text formatting | Textauszeichnung ### */
-	
-	cite, blockquote { font-style:italic }
-	blockquote { margin: 0 0 1em 1.5em }
-	
-	strong,b { font-weight: bold }
-	em,i { font-style:italic }
-	
-	pre, code { font-family: monospace; font-size: 1.1em; }
-	
-	acronym, abbr {
-	  letter-spacing: .07em;
-	  border-bottom: .1em dashed #c00;
-	  cursor: help;
-	}
-	
-	/**
-	 * Generic Content Classes
-	 * (en) standard classes for positioning and highlighting
-	 * (de) Standardklassen zur Positionierung und Hervorhebung
-	 *
-	 * @section content-generic-classes
-	 */
-	
-	.note {background: #dfd; padding: 1em; border-top: 1px #bdb dotted; border-bottom: 1px #bdb dotted;}
-	.important {background: #ffd; padding: 1em; border-top: 1px #ddb dotted; border-bottom: 1px #ddb dotted;}
-	.warning {background: #fdd; padding: 1em; border-top: 1px #dbb dotted; border-bottom: 1px #dbb dotted;}
-	
-	.float_left { float: left; display:inline; margin-right: 1em; margin-bottom: 0.15em;  }
-	.float_right { float: right; display:inline; margin-left: 1em; margin-bottom: 0.15em;  }
-	.center { text-align:center; margin: 0.5em auto }
-	
-	/**
-	 * External Links
-	 *
-	 * (en) Formatting of hyperlinks
-	 * (de) Gestaltung von Hyperlinks
-	 *
-	 */
-	
-	a {color: #4D87C7; text-decoration:none;}
-	a:focus,
-	a:hover,
-	a:active {color:#182E7A; text-decoration:underline;}
-	
-	#topsubnav a { color: #f0f8ff; font-weight: normal; background:transparent; text-decoration:none; }
-	#topsubnav a:focus, 
-	#topsubnav a:hover,
-	#topsubnav a:active { text-decoration:underline; background-color: transparent;}
-	
-	#footer a { color: #999; background:transparent; font-weight: bold;}
-	#footer a:focus, 
-	#footer a:hover,
-	#footer a:active {color: #4D87C7; background-color: transparent; text-decoration:underline;}
-	
-	/**
-	 * (en) Emphasizing external Hyperlinks via CSS
-	 * (de) Hervorhebung externer Hyperlinks mit CSS
-	 *
-	 * @section             content-external-links
-	 * @app-yaml-default    disabled
-	 */
-	
-	/*
-	#main a[href^="http://www.my-domain.com"],
-	#main a[href^="https://www.my-domain.com"]
-	{
-	  padding-left: 12px;
-	  background-image: url('your_image.gif');
-	  background-repeat: no-repeat;
-	  background-position: 0 0.45em;
-	}
-	*/
-	
-	/**
-	 * Tables | Tabellen
-	 * (en) Generic classes for table-width and design definition
-	 * (de) Generische Klassen für die Tabellenbreite und Gestaltungsvorschriften für Tabellen
-	 *
-	 * @section content-tables
-	 */
-	
-	table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
-	table.full { width: 100%; }
-	table.fixed { table-layout:fixed }
-	
-	th,td { padding: 0.5em; }
-	thead th { background: #444 url(../../images/lists_thead_bg.png) repeat-x; color: #fff }
-	tbody th { background: #ccc; color: #333 }
-	tbody th.sub { background: #ddd; color: #333 }
-	
-	/**
-	 * Miscellaneous | Sonstiges
-	 *
-	 * @section content-misc
-	 */
-	
-	hr {
-	  color: #fff;
-	  background:transparent;
-	  margin: 0 0 0.5em 0;
-	  padding: 0 0 0.5em 0;
-	  border:0;
-	  border-bottom: 1px #eee solid;
-	}
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) Uniform design of standard content elements - ISPConfig 3: default theme
+ * (de) Einheitliche Standardformatierungen für die wichtigten Inhalts-Elemente - ISPConfig 3: default theme
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ * @appdef yaml
+ */
+
+@media all
+{
+	/**
+	* Fonts
+	* (en) font-family and font-size selection for headings and standard text elements
+	* (de) Zeichensatz und Schriftgrößen für Überschriften und übliche Text-Elemente
+	*
+	* @section content-fonts
+	*/
+	
+	/* (en) reset font size for all elements to standard (16 Pixel) */
+	/* (de) Alle Schriftgrößen auf Standardgröße (16 Pixel) zurücksetzen */
+	html * { font-size: 100.01% }
+	
+	/* (en) reset monospaced elements to font size 16px in Gecko browsers */
+	/* (de) Schriftgröße von monospaced Elemente auf 16 Pixel setzen */
+	textarea, pre, tt, code {
+	font-family: Consolas,"Lucida Console","Courier New",monospace;
+    font-size: 0.9em;	
+	}
+	
+	/* (en) base layout gets standard font size 12px */
+	/* (de) Basis-Layout erhält Standardschriftgröße von 12 Pixeln */
+	body {
+	  font-family: 'Trebuchet MS', sans-serif;
+	  font-size: 75.00%; 
+	  color: #444;  
+	}
+	
+	h1,h2,h3,h4,h5,h6 { 
+		font-family: 'Trebuchet MS', sans-serif;
+		font-weight:bold; 
+		color:#666;
+		margin: 0 0 0.25em 0; 
+	}
+	
+	h1 { font-size: 200% }                        /* 24px */
+	h2 { font-size: 200% }          /* 24px */
+	h3 { font-size: 150% }                        /* 18px */
+	h4 { font-size: 133.33% }                     /* 16px */
+	h5 { font-size: 116.67% }                     /* 14px */
+	h6 { font-size: 116.67%; font-style:italic }  /* 14px */
+	
+	#header h1 {
+	  font-size:2.5em;
+	  letter-spacing:-2px;
+	  line-height:65%;
+	  color: silver;
+	}
+	
+	#header span {
+	  color:#333333;
+	}
+	
+	p { line-height: 1.5em; margin: 0 0 1em 0; }
+	
+	/* ### Lists | Listen  #### */
+	
+	ul, ol, dl { line-height: 1.5em; margin: 0 0 1em 1em }
+	li { margin-left: 1.5em; line-height: 1.5em }
+	
+	dt { font-weight: bold }
+	dd { margin: 0 0 1em 2em }
+	
+	/* ### text formatting | Textauszeichnung ### */
+	
+	cite, blockquote { font-style:italic }
+	blockquote { margin: 0 0 1em 1.5em }
+	
+	strong,b { font-weight: bold }
+	em,i { font-style:italic }
+	
+	pre, code { font-family: monospace; font-size: 1.1em; }
+	
+	acronym, abbr {
+	  letter-spacing: .07em;
+	  border-bottom: .1em dashed #c00;
+	  cursor: help;
+	}
+	
+	/**
+	 * Generic Content Classes
+	 * (en) standard classes for positioning and highlighting
+	 * (de) Standardklassen zur Positionierung und Hervorhebung
+	 *
+	 * @section content-generic-classes
+	 */
+	
+	.note {background: #dfd; padding: 1em; border-top: 1px #bdb dotted; border-bottom: 1px #bdb dotted;}
+	.important {background: #ffd; padding: 1em; border-top: 1px #ddb dotted; border-bottom: 1px #ddb dotted;}
+	.warning {background: #fdd; padding: 1em; border-top: 1px #dbb dotted; border-bottom: 1px #dbb dotted;}
+	
+	.float_left { float: left; display:inline; margin-right: 1em; margin-bottom: 0.15em;  }
+	.float_right { float: right; display:inline; margin-left: 1em; margin-bottom: 0.15em;  }
+	.center { text-align:center; margin: 0.5em auto }
+	
+	/**
+	 * External Links
+	 *
+	 * (en) Formatting of hyperlinks
+	 * (de) Gestaltung von Hyperlinks
+	 *
+	 */
+	
+	a {color: #4D87C7; text-decoration:none;}
+	a:focus,
+	a:hover,
+	a:active {color:#182E7A; text-decoration:underline;}
+	
+	#topsubnav a { color: #f0f8ff; font-weight: normal; background:transparent; text-decoration:none; }
+	#topsubnav a:focus, 
+	#topsubnav a:hover,
+	#topsubnav a:active { text-decoration:underline; background-color: transparent;}
+	
+	#footer a { color: #999; background:transparent; font-weight: bold;}
+	#footer a:focus, 
+	#footer a:hover,
+	#footer a:active {color: #4D87C7; background-color: transparent; text-decoration:underline;}
+	
+	/**
+	 * (en) Emphasizing external Hyperlinks via CSS
+	 * (de) Hervorhebung externer Hyperlinks mit CSS
+	 *
+	 * @section             content-external-links
+	 * @app-yaml-default    disabled
+	 */
+	
+	/*
+	#main a[href^="http://www.my-domain.com"],
+	#main a[href^="https://www.my-domain.com"]
+	{
+	  padding-left: 12px;
+	  background-image: url('your_image.gif');
+	  background-repeat: no-repeat;
+	  background-position: 0 0.45em;
+	}
+	*/
+	
+	/**
+	 * Tables | Tabellen
+	 * (en) Generic classes for table-width and design definition
+	 * (de) Generische Klassen für die Tabellenbreite und Gestaltungsvorschriften für Tabellen
+	 *
+	 * @section content-tables
+	 */
+	
+	table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
+	table.full { width: 100%; }
+	table.fixed { table-layout:fixed }
+	
+	th,td { padding: 0.5em; }
+	thead th { background: #444 url(../../images/lists_thead_bg.png) repeat-x; color: #fff }
+	tbody th { background: #ccc; color: #333 }
+	tbody th.sub { background: #ddd; color: #333 }
+	
+	/**
+	 * Miscellaneous | Sonstiges
+	 *
+	 * @section content-misc
+	 */
+	
+	hr {
+	  color: #fff;
+	  background:transparent;
+	  margin: 0 0 0.5em 0;
+	  padding: 0 0 0.5em 0;
+	  border:0;
+	  border-bottom: 1px #eee solid;
+	}
+}
diff --git a/interface/web/themes/default/css/screen/uni-form-generic.css b/interface/web/themes/default/css/screen/uni-form-generic.css
index f9e0f390cc..8daf43953a 100644
--- a/interface/web/themes/default/css/screen/uni-form-generic.css
+++ b/interface/web/themes/default/css/screen/uni-form-generic.css
@@ -1,136 +1,136 @@
-/* Uni-Form by Dragan Babic [Superawesome Industries]  - http: //sprawsm.com/uni-form/ */ 
-/* Some rights reserved - http: //creativecommons.org/licenses/by-sa/2.5/ */
-/* Do not edit this file directly, make your changes to uni-form.css in the same folder */
-
-/* ------------------------------------------------------------------------------ */
-
-.uniForm{ margin: 0; padding: 0; position: relative; z-index: 1; } /* reset stuff */
-
-  /* Some generals and more resets */
-  .uniForm fieldset{ border: none; margin: 0; padding: 0; }
-    .uniForm fieldset legend{ margin: 0; padding: 0; }
-
-    /* This is the main unit that contains our form elements */
-    .uniForm .ctrlHolder,
-    .uniForm .buttonHolder{ margin: 0; padding: 0; clear: both; }
-
-    /* Clear all floats */ 
-    .uniForm:after,
-      .uniForm .buttonHolder:after, 
-      .uniForm .ctrlHolder:after, 
-        .uniForm .ctrlHolder .multiField:after,
-          .uniForm .inlineLabel:after{ content: "."; display: block; height: 0; line-height: 0; font-size: 0; clear: both; min-height: 0; visibility: hidden; }
-
-    /* A class to be used on a label that contains a checkbox or a radio button */
-    .uniForm .inlineLabel,
-    .uniForm .inlineLabels .inlineLabel,
-    .uniForm .blockLabels .inlineLabel{ width: auto; float: none; margin: 0; display: block; }
-      /* IE shows borders & padding on checkboxes and radio buttons if they are declared on an input element, remove them */
-      /* Legacy/Inheritance fix */
-      .uniForm .inlineLabel input,
-      .uniForm .inlineLabels .inlineLabel input,
-      .uniForm .blockLabels .inlineLabel input{ border: none; padding: 0; margin: 0; }
-
-/* ------------------------------------------------------------------------------ */
-
-    /* Styles for form controls where labels are above the input elements */
-    /* Set the class of the parent (preferably to a fieldset) to .blockLabels */
-
-      .uniForm label,
-      .uniForm .label,
-      .uniForm .blockLabels label,
-      .uniForm .blockLabels .label{ display: block; float: none; padding: 0; line-height: 100%; width: auto; }
-
-      /* Float the input elements */
-      .uniForm .textInput,
-      .uniForm .blockLabels .textInput,
-      .uniForm .blockLabels .fileUpload,
-      .uniForm .selectInput,
-      .uniForm .blockLabels .selectInput,
-      .uniForm .blockLabels select,
-      .uniForm textarea,
-      .uniForm .blockLabels textarea{ float: left; }
-      
-      /* Postition the hints */
-      .uniForm .formHint,
-      .uniForm .blockLabels .formHint{ float: right; margin: 0; clear: none; }
-      
-      /* Position the elements inside combo boxes (multiple selects/checkboxes/radio buttons per unit) */
-      .uniForm .multiField,
-      .uniForm .blockLabels .multiField{ width: auto; float: left; }
-        .uniForm .multiField .inlineLabel,
-        .uniForm .blockLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
-        .uniForm .multiField .blockLabel,
-        .uniForm .blockLabels .multiField .blockLabel{ float: left; width: auto; margin: 0; }
-        .uniForm .multiField .blockLabel .textInput,
-        .uniForm .multiField .blockLabel .selectInput,
-        .uniForm .multiField .blockLabel select,
-        .uniForm .blockLabels .multiField .blockLabel .textInput,
-        .uniForm .blockLabels .multiField .blockLabel .selectInput,
-        .uniForm .blockLabels .multiField .blockLabel select{ width: 100%; margin: 0; }
-
-/* ------------------------------------------------------------------------------ */
-
-    /* Styles for form controls where labels are in line with the input elements */
-    /* Set the class of the parent (preferably to a fieldset) to .inlineLabels */
-        .uniForm .inlineLabels label,
-        .uniForm .inlineLabels .label{ float: left; margin: 0; padding: 0; line-height: 100%; position: relative; }
-        
-        /* Float the input elements */
-        .uniForm .inlineLabels .textInput,
-        .uniForm .inlineLabels .fileUpload,        
-        .uniForm .inlineLabels .selectInput,
-        .uniForm .inlineLabels select,
-        .uniForm .inlineLabels textarea{ float: left; }
-
-      /* Postition the hints */
-      .uniForm .inlineLabels .formHint{ clear: both; float: none; }
-      .uniForm .inlineLabels .multiField{ float: left; }
-      .uniForm .inlineLabels .multiField .inlineLabel{}
-      .uniForm .inlineLabels .multiField .blockLabel{}
-        .uniForm .inlineLabels .multiField .blockLabel .textInput,
-        .uniForm .inlineLabels .multiField .blockLabel .selectInput,
-        .uniForm .inlineLabels .multiField .blockLabel select{ display: block; width: 100%; float: none; }
-        .uniForm .inlineLabels .multiField select{ float: left; }
-      
-/* ------------------------------------------------------------------------------ */
-
-    /* Required fields asterisk styling for .blockLabels */
-    .uniForm label em,
-    .uniForm .label em,
-    .uniForm .blockLabels label em,
-    .uniForm .blockLabels .label em{ position: absolute; left: -7px; }
-    
-    /* Required fields asterisk styling for .inlineLabels */
-    .uniForm .inlineLabels label em,
-    .uniForm .inlineLabels .label em{ display: block; position: absolute; left: auto; right: 0; font-style: normal; font-weight: bold; }
-    .uniForm .inlineLabel em{ position: absolute; left: 7px; }
-
-/* ------------------------------------------------------------------------------ */
-
-    /* Messages */
-    .uniForm #errorMsg,
-    .uniForm .error{
-    }
-      .uniForm #errorMsg dt,
-      .uniForm #errorMsg h3{
-      }
-      .uniForm #errorMsg dd{
-      }
-        .uniForm #errorMsg ol{
-        }
-          .uniForm #errorMsg ol li{
-          }
-      .uniForm .errorField{
-      }
-    
-    .uniForm #OKMsg{
-    }
-
-/* ------------------------------------------------------------------------------ */
-
-    /* Columns */
-    
-    .uniForm .col{ float: left; }
-    .uniForm .col.first{}
+/* Uni-Form by Dragan Babic [Superawesome Industries]  - http: //sprawsm.com/uni-form/ */ 
+/* Some rights reserved - http: //creativecommons.org/licenses/by-sa/2.5/ */
+/* Do not edit this file directly, make your changes to uni-form.css in the same folder */
+
+/* ------------------------------------------------------------------------------ */
+
+.uniForm{ margin: 0; padding: 0; position: relative; z-index: 1; } /* reset stuff */
+
+  /* Some generals and more resets */
+  .uniForm fieldset{ border: none; margin: 0; padding: 0; }
+    .uniForm fieldset legend{ margin: 0; padding: 0; }
+
+    /* This is the main unit that contains our form elements */
+    .uniForm .ctrlHolder,
+    .uniForm .buttonHolder{ margin: 0; padding: 0; clear: both; }
+
+    /* Clear all floats */ 
+    .uniForm:after,
+      .uniForm .buttonHolder:after, 
+      .uniForm .ctrlHolder:after, 
+        .uniForm .ctrlHolder .multiField:after,
+          .uniForm .inlineLabel:after{ content: "."; display: block; height: 0; line-height: 0; font-size: 0; clear: both; min-height: 0; visibility: hidden; }
+
+    /* A class to be used on a label that contains a checkbox or a radio button */
+    .uniForm .inlineLabel,
+    .uniForm .inlineLabels .inlineLabel,
+    .uniForm .blockLabels .inlineLabel{ width: auto; float: none; margin: 0; display: block; }
+      /* IE shows borders & padding on checkboxes and radio buttons if they are declared on an input element, remove them */
+      /* Legacy/Inheritance fix */
+      .uniForm .inlineLabel input,
+      .uniForm .inlineLabels .inlineLabel input,
+      .uniForm .blockLabels .inlineLabel input{ border: none; padding: 0; margin: 0; }
+
+/* ------------------------------------------------------------------------------ */
+
+    /* Styles for form controls where labels are above the input elements */
+    /* Set the class of the parent (preferably to a fieldset) to .blockLabels */
+
+      .uniForm label,
+      .uniForm .label,
+      .uniForm .blockLabels label,
+      .uniForm .blockLabels .label{ display: block; float: none; padding: 0; line-height: 100%; width: auto; }
+
+      /* Float the input elements */
+      .uniForm .textInput,
+      .uniForm .blockLabels .textInput,
+      .uniForm .blockLabels .fileUpload,
+      .uniForm .selectInput,
+      .uniForm .blockLabels .selectInput,
+      .uniForm .blockLabels select,
+      .uniForm textarea,
+      .uniForm .blockLabels textarea{ float: left; }
+      
+      /* Postition the hints */
+      .uniForm .formHint,
+      .uniForm .blockLabels .formHint{ float: right; margin: 0; clear: none; }
+      
+      /* Position the elements inside combo boxes (multiple selects/checkboxes/radio buttons per unit) */
+      .uniForm .multiField,
+      .uniForm .blockLabels .multiField{ width: auto; float: left; }
+        .uniForm .multiField .inlineLabel,
+        .uniForm .blockLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
+        .uniForm .multiField .blockLabel,
+        .uniForm .blockLabels .multiField .blockLabel{ float: left; width: auto; margin: 0; }
+        .uniForm .multiField .blockLabel .textInput,
+        .uniForm .multiField .blockLabel .selectInput,
+        .uniForm .multiField .blockLabel select,
+        .uniForm .blockLabels .multiField .blockLabel .textInput,
+        .uniForm .blockLabels .multiField .blockLabel .selectInput,
+        .uniForm .blockLabels .multiField .blockLabel select{ width: 100%; margin: 0; }
+
+/* ------------------------------------------------------------------------------ */
+
+    /* Styles for form controls where labels are in line with the input elements */
+    /* Set the class of the parent (preferably to a fieldset) to .inlineLabels */
+        .uniForm .inlineLabels label,
+        .uniForm .inlineLabels .label{ float: left; margin: 0; padding: 0; line-height: 100%; position: relative; }
+        
+        /* Float the input elements */
+        .uniForm .inlineLabels .textInput,
+        .uniForm .inlineLabels .fileUpload,        
+        .uniForm .inlineLabels .selectInput,
+        .uniForm .inlineLabels select,
+        .uniForm .inlineLabels textarea{ float: left; }
+
+      /* Postition the hints */
+      .uniForm .inlineLabels .formHint{ clear: both; float: none; }
+      .uniForm .inlineLabels .multiField{ float: left; }
+      .uniForm .inlineLabels .multiField .inlineLabel{}
+      .uniForm .inlineLabels .multiField .blockLabel{}
+        .uniForm .inlineLabels .multiField .blockLabel .textInput,
+        .uniForm .inlineLabels .multiField .blockLabel .selectInput,
+        .uniForm .inlineLabels .multiField .blockLabel select{ display: block; width: 100%; float: none; }
+        .uniForm .inlineLabels .multiField select{ float: left; }
+      
+/* ------------------------------------------------------------------------------ */
+
+    /* Required fields asterisk styling for .blockLabels */
+    .uniForm label em,
+    .uniForm .label em,
+    .uniForm .blockLabels label em,
+    .uniForm .blockLabels .label em{ position: absolute; left: -7px; }
+    
+    /* Required fields asterisk styling for .inlineLabels */
+    .uniForm .inlineLabels label em,
+    .uniForm .inlineLabels .label em{ display: block; position: absolute; left: auto; right: 0; font-style: normal; font-weight: bold; }
+    .uniForm .inlineLabel em{ position: absolute; left: 7px; }
+
+/* ------------------------------------------------------------------------------ */
+
+    /* Messages */
+    .uniForm #errorMsg,
+    .uniForm .error{
+    }
+      .uniForm #errorMsg dt,
+      .uniForm #errorMsg h3{
+      }
+      .uniForm #errorMsg dd{
+      }
+        .uniForm #errorMsg ol{
+        }
+          .uniForm #errorMsg ol li{
+          }
+      .uniForm .errorField{
+      }
+    
+    .uniForm #OKMsg{
+    }
+
+/* ------------------------------------------------------------------------------ */
+
+    /* Columns */
+    
+    .uniForm .col{ float: left; }
+    .uniForm .col.first{}
     .uniForm .col.last{}
\ No newline at end of file
diff --git a/interface/web/themes/default/licences.txt b/interface/web/themes/default/licences.txt
index 5a50cbb39e..9b810056fd 100644
--- a/interface/web/themes/default/licences.txt
+++ b/interface/web/themes/default/licences.txt
@@ -1,8 +1,8 @@
-Theme created by Martin Henne (red-ray.de)
-
-based on:
-
-Templates: http://www.yaml.de
-Web-Forms: http://www.sprawsm.com/uni-form/
-Icons: http://www.pinvoke.com and http://www.randomjabber.com/static/sizcons
-Know-How: http://particletree.com/features/rediscovering-the-button-element
+Theme created by Martin Henne (red-ray.de)
+
+based on:
+
+Templates: http://www.yaml.de
+Web-Forms: http://www.sprawsm.com/uni-form/
+Icons: http://www.pinvoke.com and http://www.randomjabber.com/static/sizcons
+Know-How: http://particletree.com/features/rediscovering-the-button-element
diff --git a/interface/web/themes/default/templates/module.tpl.htm b/interface/web/themes/default/templates/module.tpl.htm
index 36cdd09c73..5192c43814 100644
--- a/interface/web/themes/default/templates/module.tpl.htm
+++ b/interface/web/themes/default/templates/module.tpl.htm
@@ -1,37 +1,37 @@
-  <tr>
-    <td width="128" height="26" background="themes/{tmpl_var name="theme"}/images/nav_top_bg.gif">&nbsp;</td>
-    <td rowspan="3" class="mainContent">
-		<table width="100%" height="100%" border="0" cellpadding="20" cellspacing="0">
-			<tr>
-				<td><iframe height="100%" width="100%" frameborder="0" name="content" src="{tmpl_var name="startpage"}"></iframe></td>
-      		</tr>
-    	</table>
-	</td>
-  </tr>
-  <tr>
-    <td width="128" align="right" valign="top" bgcolor="#DEE4F2"><table width="128" border="0" cellspacing="0" cellpadding="2">
-      <tr>
-        <td height="10">&nbsp;</td>
-      </tr>
-	  <tr><td align="center">
-	  <tmpl_loop name="nav_left">
-	  <table bgcolor="#F4F6FB" width="115">
-      <tr>
-        <td class="navLeftHead"><tmpl_var name="title"></td>
-        </tr>
-      <tr>
-        <td>
-		  <tmpl_loop name="items">
-		  <a href="<tmpl_var name='link'>" class="navLeftItem" target="<tmpl_var name='target'>"><tmpl_var name="title"></a><br>
-		  </tmpl_loop>
-		</td>
-      </tr>
-	  </table>
-	  <br />
-	  </tmpl_loop>
-	  </td></tr>
-    </table></td>
-  </tr>
-  <tr>
-    <td align="left" valign="bottom" bgcolor="#DEE4F2">&nbsp;</td>
+  <tr>
+    <td width="128" height="26" background="themes/{tmpl_var name="theme"}/images/nav_top_bg.gif">&nbsp;</td>
+    <td rowspan="3" class="mainContent">
+		<table width="100%" height="100%" border="0" cellpadding="20" cellspacing="0">
+			<tr>
+				<td><iframe height="100%" width="100%" frameborder="0" name="content" src="{tmpl_var name="startpage"}"></iframe></td>
+      		</tr>
+    	</table>
+	</td>
+  </tr>
+  <tr>
+    <td width="128" align="right" valign="top" bgcolor="#DEE4F2"><table width="128" border="0" cellspacing="0" cellpadding="2">
+      <tr>
+        <td height="10">&nbsp;</td>
+      </tr>
+	  <tr><td align="center">
+	  <tmpl_loop name="nav_left">
+	  <table bgcolor="#F4F6FB" width="115">
+      <tr>
+        <td class="navLeftHead"><tmpl_var name="title"></td>
+        </tr>
+      <tr>
+        <td>
+		  <tmpl_loop name="items">
+		  <a href="<tmpl_var name='link'>" class="navLeftItem" target="<tmpl_var name='target'>"><tmpl_var name="title"></a><br>
+		  </tmpl_loop>
+		</td>
+      </tr>
+	  </table>
+	  <br />
+	  </tmpl_loop>
+	  </td></tr>
+    </table></td>
+  </tr>
+  <tr>
+    <td align="left" valign="bottom" bgcolor="#DEE4F2">&nbsp;</td>
   </tr>
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/module_tree.tpl.htm b/interface/web/themes/default/templates/module_tree.tpl.htm
index b0895789ab..bb6242d0b6 100644
--- a/interface/web/themes/default/templates/module_tree.tpl.htm
+++ b/interface/web/themes/default/templates/module_tree.tpl.htm
@@ -1,38 +1,38 @@
-  <tr>
-    <td width="128" height="26" background="themes/{tmpl_var name="theme"}/images/nav_top_bg.gif">&nbsp;</td>
-    <td rowspan="3" class="mainContent">
-		<table width="100%" height="100%" border="0" cellpadding="20" cellspacing="0">
-			<tr>
-        		<td width="200"><iframe height="100%" width="100%" frameborder="0" name="navframe" src="{tmpl_var name="navframe_page"}"></iframe></td>
-				<td><iframe height="100%" width="100%" frameborder="0" name="content" src="{tmpl_var name="startpage"}"></iframe></td>
-      		</tr>
-    	</table>
-	</td>
-  </tr>
-  <tr>
-    <td width="128" align="right" valign="top" bgcolor="#DEE4F2"><table width="128" border="0" cellspacing="0" cellpadding="2">
-      <tr>
-        <td height="10">&nbsp;</td>
-      </tr>
-	  <tr><td align="center">
-	  <tmpl_loop name="nav_left">
-	  <table bgcolor="#F4F6FB" width="115">
-      <tr>
-        <td class="navLeftHead"><tmpl_var name="title"></td>
-        </tr>
-      <tr>
-        <td>
-		  <tmpl_loop name="items">
-		  <a href="<tmpl_var name='link'>" class="navLeftItem" target="<tmpl_var name='target'>"><tmpl_var name="title"></a><br>
-		  </tmpl_loop>
-		</td>
-      </tr>
-	  </table>
-	  <br />
-	  </tmpl_loop>
-	  </td></tr>
-    </table></td>
-  </tr>
-  <tr>
-    <td align="left" valign="bottom" bgcolor="#DEE4F2">&nbsp;</td>
+  <tr>
+    <td width="128" height="26" background="themes/{tmpl_var name="theme"}/images/nav_top_bg.gif">&nbsp;</td>
+    <td rowspan="3" class="mainContent">
+		<table width="100%" height="100%" border="0" cellpadding="20" cellspacing="0">
+			<tr>
+        		<td width="200"><iframe height="100%" width="100%" frameborder="0" name="navframe" src="{tmpl_var name="navframe_page"}"></iframe></td>
+				<td><iframe height="100%" width="100%" frameborder="0" name="content" src="{tmpl_var name="startpage"}"></iframe></td>
+      		</tr>
+    	</table>
+	</td>
+  </tr>
+  <tr>
+    <td width="128" align="right" valign="top" bgcolor="#DEE4F2"><table width="128" border="0" cellspacing="0" cellpadding="2">
+      <tr>
+        <td height="10">&nbsp;</td>
+      </tr>
+	  <tr><td align="center">
+	  <tmpl_loop name="nav_left">
+	  <table bgcolor="#F4F6FB" width="115">
+      <tr>
+        <td class="navLeftHead"><tmpl_var name="title"></td>
+        </tr>
+      <tr>
+        <td>
+		  <tmpl_loop name="items">
+		  <a href="<tmpl_var name='link'>" class="navLeftItem" target="<tmpl_var name='target'>"><tmpl_var name="title"></a><br>
+		  </tmpl_loop>
+		</td>
+      </tr>
+	  </table>
+	  <br />
+	  </tmpl_loop>
+	  </td></tr>
+    </table></td>
+  </tr>
+  <tr>
+    <td align="left" valign="bottom" bgcolor="#DEE4F2">&nbsp;</td>
   </tr>
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/sidenav.tpl.htm b/interface/web/themes/default/templates/sidenav.tpl.htm
index 71cb9bb017..c71361c2bd 100644
--- a/interface/web/themes/default/templates/sidenav.tpl.htm
+++ b/interface/web/themes/default/templates/sidenav.tpl.htm
@@ -1,24 +1,24 @@
-<ul id="submenu">
-<tmpl_loop name="nav_left">
-  <li class="title">
-    <tmpl_if name="startpage">
-      <a href="#" onClick="loadContent('<tmpl_var name='startpage'>')">
-    </tmpl_if>
-    <tmpl_var name="title">
-    <tmpl_if name="startpage">
-      </a>
-    </tmpl_if>
-  </li>
-  <tmpl_loop name="items">
-    <li <tmpl_if name="html_id"> id='<tmpl_var name="html_id">' </tmpl_if>>
-      <tmpl_if name="link">
-        <a href="#" onClick="loadContent('<tmpl_var name='link'>')">
-      </tmpl_if>
-      <tmpl_var name="title">
-      <tmpl_if name="link">
-        </a>
-      </tmpl_if>
-    </li>
-  </tmpl_loop>
-</tmpl_loop>
-</ul>
+<ul id="submenu">
+<tmpl_loop name="nav_left">
+  <li class="title">
+    <tmpl_if name="startpage">
+      <a href="#" onClick="loadContent('<tmpl_var name='startpage'>')">
+    </tmpl_if>
+    <tmpl_var name="title">
+    <tmpl_if name="startpage">
+      </a>
+    </tmpl_if>
+  </li>
+  <tmpl_loop name="items">
+    <li <tmpl_if name="html_id"> id='<tmpl_var name="html_id">' </tmpl_if>>
+      <tmpl_if name="link">
+        <a href="#" onClick="loadContent('<tmpl_var name='link'>')">
+      </tmpl_if>
+      <tmpl_var name="title">
+      <tmpl_if name="link">
+        </a>
+      </tmpl_if>
+    </li>
+  </tmpl_loop>
+</tmpl_loop>
+</ul>
diff --git a/interface/web/themes/default/templates/tabbed_form.tpl.htm b/interface/web/themes/default/templates/tabbed_form.tpl.htm
index 0e31bc0565..c4e618da4e 100644
--- a/interface/web/themes/default/templates/tabbed_form.tpl.htm
+++ b/interface/web/themes/default/templates/tabbed_form.tpl.htm
@@ -1,28 +1,28 @@
-<tmpl_if name="form_hint">
-<h2><tmpl_var name="form_hint"></h2>
-</tmpl_if>
-<div class="tabbox_tabs">
-	<ul>
-<tmpl_loop name="formTab">
-<tmpl_if name="active">
-    <li class="active"><a href="javascript:changeTab('<tmpl_var name='name'>','<tmpl_var name='app_module'>/<tmpl_var name='form_action'>')"><tmpl_var name='title'></a></li>
-<tmpl_else>
-    <li><a href="javascript:changeTab('<tmpl_var name='name'>','<tmpl_var name='app_module'>/<tmpl_var name='form_action'>')"><tmpl_var name='title'></a></li>
-</tmpl_if>
-</tmpl_loop>
-	</ul>
-</div>
-<div id="tabbox_content">
-
-	<tmpl_if name="msg">
-	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
-  </tmpl_if>
-  <tmpl_if name="error">
-	<div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
-  </tmpl_if>
-  
-  <tmpl_dyninclude name="content_tpl">
-</div>
-
-<input type="hidden" name="next_tab" value="">
-<input type="hidden" name="phpsessid" value="{tmpl_var name='phpsessid'}">
+<tmpl_if name="form_hint">
+<h2><tmpl_var name="form_hint"></h2>
+</tmpl_if>
+<div class="tabbox_tabs">
+	<ul>
+<tmpl_loop name="formTab">
+<tmpl_if name="active">
+    <li class="active"><a href="javascript:changeTab('<tmpl_var name='name'>','<tmpl_var name='app_module'>/<tmpl_var name='form_action'>')"><tmpl_var name='title'></a></li>
+<tmpl_else>
+    <li><a href="javascript:changeTab('<tmpl_var name='name'>','<tmpl_var name='app_module'>/<tmpl_var name='form_action'>')"><tmpl_var name='title'></a></li>
+</tmpl_if>
+</tmpl_loop>
+	</ul>
+</div>
+<div id="tabbox_content">
+
+	<tmpl_if name="msg">
+	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+  </tmpl_if>
+  <tmpl_if name="error">
+	<div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
+  </tmpl_if>
+  
+  <tmpl_dyninclude name="content_tpl">
+</div>
+
+<input type="hidden" name="next_tab" value="">
+<input type="hidden" name="phpsessid" value="{tmpl_var name='phpsessid'}">
diff --git a/interface/web/themes/default/templates/topnav.tpl.htm b/interface/web/themes/default/templates/topnav.tpl.htm
index 668df7ba37..562f4a0f07 100644
--- a/interface/web/themes/default/templates/topnav.tpl.htm
+++ b/interface/web/themes/default/templates/topnav.tpl.htm
@@ -1,9 +1,9 @@
-<ul id="topmenu">
-<tmpl_loop name="nav_top">
-<tmpl_if name="active">
-  <li id="topNav_current"><a href="#" class="topnav topnav-<tmpl_var name='module'>"><tmpl_var name="title"></a></li>
-<tmpl_else>
-  <li><a href="#" onClick="capp('<tmpl_var name='module'>')" class="topnav topnav-<tmpl_var name='module'>"><tmpl_var name="title"></a></li>
-</tmpl_if>
-</tmpl_loop>
-</ul>
+<ul id="topmenu">
+<tmpl_loop name="nav_top">
+<tmpl_if name="active">
+  <li id="topNav_current"><a href="#" class="topnav topnav-<tmpl_var name='module'>"><tmpl_var name="title"></a></li>
+<tmpl_else>
+  <li><a href="#" onClick="capp('<tmpl_var name='module'>')" class="topnav topnav-<tmpl_var name='module'>"><tmpl_var name="title"></a></li>
+</tmpl_if>
+</tmpl_loop>
+</ul>
diff --git a/interface/web/themes/default/yaml/!important.txt b/interface/web/themes/default/yaml/!important.txt
index dfdf80ddac..ce2cc2df1b 100644
--- a/interface/web/themes/default/yaml/!important.txt
+++ b/interface/web/themes/default/yaml/!important.txt
@@ -1,4 +1,4 @@
-DON'T EDIT ANYTHING INSIDE THIS DIRECTORY!
-
-This theme is based on YAML V3.0.6, Build: 080609 (http://www.yaml.de/)
-CSS-Styles can be changed in the /themes/default/css/ directory
+DON'T EDIT ANYTHING INSIDE THIS DIRECTORY!
+
+This theme is based on YAML V3.0.6, Build: 080609 (http://www.yaml.de/)
+CSS-Styles can be changed in the /themes/default/css/ directory
diff --git a/interface/web/themes/default/yaml/core/base.css b/interface/web/themes/default/yaml/core/base.css
index 632248e2f5..bc24d1550e 100644
--- a/interface/web/themes/default/yaml/core/base.css
+++ b/interface/web/themes/default/yaml/core/base.css
@@ -1,229 +1,229 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) YAML core stylesheet
- * (de) YAML Basis-Stylesheet
- *
- * Don't make any changes in this file!
- * Your changes should be placed in any css-file in your own stylesheet folder.
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-@media all
-{
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * @section browser reset
-  * @see     http://www.yaml.de/en/documentation/css-components/base-stylesheet.html
-  */
-
-  /* (en) Global reset of paddings and margins for all HTML elements */
-  /* (de) Globales Zurücksetzen der Innen- und Außenabstände für alle HTML-Elemente */
-  * { margin:0; padding: 0; }
-
-  /* (en) Correction: margin/padding reset caused too small select boxes. */
-  /* (de) Korrektur: Das Zurücksetzen der Abstände verursacht zu kleine Selectboxen. */
-  option { padding-left: 0.4em; }
-
- /**
-  * (en) Global fix of the Italics bugs in IE 5.x and IE 6
-  * (de) Globale Korrektur des Italics Bugs des IE 5.x und IE 6
-  *
-  * @bugfix
-  * @affected   IE 5.x/Win, IE6
-  * @css-for    IE 5.x/Win, IE6
-  * @valid      yes
-  */
-  * html body * { overflow:visible; }
-  * html iframe, * html frame { overflow:auto; }
-  * html frameset { overflow:hidden; }
-
-  /* (en) Forcing vertical scrollbars in Netscape, Firefox and Safari browsers */
-  /* (de) Erzwingen vertikaler Scrollbalken in Netscape, Firefox und Safari Browsern */
-  html { height: 100%; margin-bottom: 1px; }
-  body {
-    /* (en) Fix for rounding errors when scaling font sizes in older versions of Opera browser */
-    /* (de) Beseitigung von Rundungsfehler beim Skalieren von Schriftgrößen in älteren Opera Versionen */
-    font-size: 100.01%;
-
-    /* (en) Standard values for colors and text alignment */
-    /* (de) Vorgabe der Standardfarben und Textausrichtung */
-    color: #000;
-    background: #fff;
-    text-align: left;
-  }
-
-  /* (en) Clear borders for <fieldset> and <img> elements */
-  /* (de) Rahmen für <fieldset> und <img> Elemente löschen */
-  fieldset, img { border: 0 solid; }
-
-  /* (en) new standard values for lists, blockquote and cite */
-  /* (de) Neue Standardwerte für Listen & Zitate */
-  ul, ol, dl { margin: 0 0 1em 1em }
-  li { margin-left: 1.5em; line-height: 1.5em; }
-
-  dt { font-weight: bold; }
-  dd { margin: 0 0 1em 2em; }
-
-  blockquote { margin: 0 0 1em 1.5em; }
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * @section base layout | Basis Layout
-  * @see     http://www.yaml.de/en/documentation/css-components/base-stylesheet.html
-  *
-  * |-------------------------------|
-  * | #header                       |
-  * |-------------------------------|
-  * | #col1   | #col3     | #col2   |
-  * | 200 px  | flexible  | 200px   |
-  * |-------------------------------|
-  * | #footer                       |
-  * |-------------------------------|
-  */
-
-  #header { position:relative; }
-
-  /* (en) Text Alignment for #topnav content */
-  /* (de) Textausrichtung für #topnav Inhalte */
-  #topnav { text-align: right; } 
-
-  /* (en) Absolute positioning only within #header */
-  /* (de) Absolute Positionierung erfolgt nur innerhalb von #header */
-  #header #topnav {
-    position:absolute;
-    top: 10px;
-    right: 10px;
-  }
-
-  /* (en) Backup for correct positioning */
-  /* (de) Absicherung korrekte Positionierung */
-  #header, #nav, #main, #footer { clear:both; }
-
-  /* (en/de) Standard: 200 Pixel */
-  #col1 { float: left; width: 200px }
-  /* (en/de) Standard: 200 Pixel */
-  #col2 { float:right; width: 200px }
-  /* (en) Standard: center column with flexible width */
-  /* (de) Standard: Flexible mittlere Spalte */
-  #col3 { width:auto; margin: 0 200px }
-
-  /* (en) Preparation for absolute positioning within content columns */
-  /* (de) Vorbereitung für absolute Positionierungen innerhalb der Inhaltsspalten */
-  #col1_content, #col2_content, #col3_content { position:relative; }
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * @section generic classes for layout switching | Generische Klassen zur Layoutumschaltung
-  * @see     http://www.yaml.de/en/documentation/css-components/base-stylesheet.html
-  *
-  * .hidecol1 -> 2-column-layout (using #col2 and #col3)
-  * .hidecol2 -> 2-column-layout (using #col1 and #col3)
-  * .hideboth -> single-column-layout (using #col3)
-  */
-
-  .hideboth #col3 { margin-left: 0; margin-right: 0; }
-  .hidecol1 #col3 { margin-left: 0; margin-right: 200px; }
-  .hidecol2 #col3 { margin-left: 200px; margin-right: 0; }
-
-  .hideboth #col1, .hideboth #col2, .hidecol1 #col1, .hidecol2 #col2 { display:none; }
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * @section clearing methods
-  * @see     http://yaml.de/en/documentation/basics/general.html
-  */
-
-  /* (en) clearfix method for clearing floats */
-  /* (de) Clearfix-Methode zum Clearen der Float-Umgebungen */
-   .clearfix:after {
-    content: ".";
-    display: block;
-    height: 0;
-    clear: both;
-    visibility: hidden;
-  }
-
-  /* (en) essential for Safari browser !! */
-  /* (de) Diese Angabe benötigt der Safari-Browser zwingend !! */
-  .clearfix { display: block; }
-
-  /* (en) overflow method for clearing floats */
-  /* (de) Overflow-Methode zum Clearen der Float-Umgebungen */
-  .floatbox { overflow:hidden; }
-
-  /* (en) IE-Clearing: Only used in Internet Explorer, switched on in iehacks.css */
-  /* (de) IE-Clearing: Benötigt nur der Internet Explorer und über iehacks.css zugeschaltet */
-  #ie_clearing { display: none; }
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * @section subtemplates
-  * @see     http://www.yaml.de/en/documentation/practice/subtemplates.html
-  */
-
-  .subcolumns { width: 100%; overflow:hidden; }
-
-  /* (en) alternative class for optional support of old Mozilla/Netscape browers */
-  /* (de) Alternative Klasse zur optionalen Unterstützung alter Mozilla/Netscape-Brower */
-  .subcolumns_oldgecko { width: 100%; float:left; }
-
-  .c50l, .c25l, .c33l, .c38l, .c66l, .c75l, .c62l {float: left; }
-  .c50r, .c25r, .c33r, .c38r, .c66r, .c75r, .c62r {float: right; margin-left: -5px; }
-
-  .c25l, .c25r { width: 25%; }
-  .c33l, .c33r { width: 33.333%; }
-  .c50l, .c50r { width: 50%; }
-  .c66l, .c66r { width: 66.666%; }
-  .c75l, .c75r { width: 75%; }
-  .c38l, .c38r { width: 38.2%; }
-  .c62l, .c62r { width: 61.8%; }
-
-  .subc  { padding: 0 0.5em; }
-  .subcl { padding: 0 1em 0 0; }
-  .subcr { padding: 0 0 0 1em; }
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * @section hidden elements | Versteckte Elemente
-  * @see     http://www.yaml.de/en/documentation/basics/skip-links.html
-  *
-  * (en) skip links and hidden content
-  * (de) Skip-Links und versteckte Inhalte
-  */
-
-  /* (en) classes for invisible elements in the base layout */
-  /* (de) Klassen für unsichtbare Elemente im Basislayout */
-  .skip, .hideme, .print {
-    position: absolute;
-    top: -1000em;
-    left: -1000em;
-    height: 1px;
-    width: 1px;
-  }
-
-  /* (en) make skip links visible when using tab navigation */
-  /* (de) Skip-Links für Tab-Navigation sichtbar schalten */
-  .skip:focus, .skip:active {
-    position: static;
-    top: 0;
-    left: 0;
-    height: auto;
-    width: auto;
-  }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) YAML core stylesheet
+ * (de) YAML Basis-Stylesheet
+ *
+ * Don't make any changes in this file!
+ * Your changes should be placed in any css-file in your own stylesheet folder.
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+@media all
+{
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * @section browser reset
+  * @see     http://www.yaml.de/en/documentation/css-components/base-stylesheet.html
+  */
+
+  /* (en) Global reset of paddings and margins for all HTML elements */
+  /* (de) Globales Zurücksetzen der Innen- und Außenabstände für alle HTML-Elemente */
+  * { margin:0; padding: 0; }
+
+  /* (en) Correction: margin/padding reset caused too small select boxes. */
+  /* (de) Korrektur: Das Zurücksetzen der Abstände verursacht zu kleine Selectboxen. */
+  option { padding-left: 0.4em; }
+
+ /**
+  * (en) Global fix of the Italics bugs in IE 5.x and IE 6
+  * (de) Globale Korrektur des Italics Bugs des IE 5.x und IE 6
+  *
+  * @bugfix
+  * @affected   IE 5.x/Win, IE6
+  * @css-for    IE 5.x/Win, IE6
+  * @valid      yes
+  */
+  * html body * { overflow:visible; }
+  * html iframe, * html frame { overflow:auto; }
+  * html frameset { overflow:hidden; }
+
+  /* (en) Forcing vertical scrollbars in Netscape, Firefox and Safari browsers */
+  /* (de) Erzwingen vertikaler Scrollbalken in Netscape, Firefox und Safari Browsern */
+  html { height: 100%; margin-bottom: 1px; }
+  body {
+    /* (en) Fix for rounding errors when scaling font sizes in older versions of Opera browser */
+    /* (de) Beseitigung von Rundungsfehler beim Skalieren von Schriftgrößen in älteren Opera Versionen */
+    font-size: 100.01%;
+
+    /* (en) Standard values for colors and text alignment */
+    /* (de) Vorgabe der Standardfarben und Textausrichtung */
+    color: #000;
+    background: #fff;
+    text-align: left;
+  }
+
+  /* (en) Clear borders for <fieldset> and <img> elements */
+  /* (de) Rahmen für <fieldset> und <img> Elemente löschen */
+  fieldset, img { border: 0 solid; }
+
+  /* (en) new standard values for lists, blockquote and cite */
+  /* (de) Neue Standardwerte für Listen & Zitate */
+  ul, ol, dl { margin: 0 0 1em 1em }
+  li { margin-left: 1.5em; line-height: 1.5em; }
+
+  dt { font-weight: bold; }
+  dd { margin: 0 0 1em 2em; }
+
+  blockquote { margin: 0 0 1em 1.5em; }
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * @section base layout | Basis Layout
+  * @see     http://www.yaml.de/en/documentation/css-components/base-stylesheet.html
+  *
+  * |-------------------------------|
+  * | #header                       |
+  * |-------------------------------|
+  * | #col1   | #col3     | #col2   |
+  * | 200 px  | flexible  | 200px   |
+  * |-------------------------------|
+  * | #footer                       |
+  * |-------------------------------|
+  */
+
+  #header { position:relative; }
+
+  /* (en) Text Alignment for #topnav content */
+  /* (de) Textausrichtung für #topnav Inhalte */
+  #topnav { text-align: right; } 
+
+  /* (en) Absolute positioning only within #header */
+  /* (de) Absolute Positionierung erfolgt nur innerhalb von #header */
+  #header #topnav {
+    position:absolute;
+    top: 10px;
+    right: 10px;
+  }
+
+  /* (en) Backup for correct positioning */
+  /* (de) Absicherung korrekte Positionierung */
+  #header, #nav, #main, #footer { clear:both; }
+
+  /* (en/de) Standard: 200 Pixel */
+  #col1 { float: left; width: 200px }
+  /* (en/de) Standard: 200 Pixel */
+  #col2 { float:right; width: 200px }
+  /* (en) Standard: center column with flexible width */
+  /* (de) Standard: Flexible mittlere Spalte */
+  #col3 { width:auto; margin: 0 200px }
+
+  /* (en) Preparation for absolute positioning within content columns */
+  /* (de) Vorbereitung für absolute Positionierungen innerhalb der Inhaltsspalten */
+  #col1_content, #col2_content, #col3_content { position:relative; }
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * @section generic classes for layout switching | Generische Klassen zur Layoutumschaltung
+  * @see     http://www.yaml.de/en/documentation/css-components/base-stylesheet.html
+  *
+  * .hidecol1 -> 2-column-layout (using #col2 and #col3)
+  * .hidecol2 -> 2-column-layout (using #col1 and #col3)
+  * .hideboth -> single-column-layout (using #col3)
+  */
+
+  .hideboth #col3 { margin-left: 0; margin-right: 0; }
+  .hidecol1 #col3 { margin-left: 0; margin-right: 200px; }
+  .hidecol2 #col3 { margin-left: 200px; margin-right: 0; }
+
+  .hideboth #col1, .hideboth #col2, .hidecol1 #col1, .hidecol2 #col2 { display:none; }
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * @section clearing methods
+  * @see     http://yaml.de/en/documentation/basics/general.html
+  */
+
+  /* (en) clearfix method for clearing floats */
+  /* (de) Clearfix-Methode zum Clearen der Float-Umgebungen */
+   .clearfix:after {
+    content: ".";
+    display: block;
+    height: 0;
+    clear: both;
+    visibility: hidden;
+  }
+
+  /* (en) essential for Safari browser !! */
+  /* (de) Diese Angabe benötigt der Safari-Browser zwingend !! */
+  .clearfix { display: block; }
+
+  /* (en) overflow method for clearing floats */
+  /* (de) Overflow-Methode zum Clearen der Float-Umgebungen */
+  .floatbox { overflow:hidden; }
+
+  /* (en) IE-Clearing: Only used in Internet Explorer, switched on in iehacks.css */
+  /* (de) IE-Clearing: Benötigt nur der Internet Explorer und über iehacks.css zugeschaltet */
+  #ie_clearing { display: none; }
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * @section subtemplates
+  * @see     http://www.yaml.de/en/documentation/practice/subtemplates.html
+  */
+
+  .subcolumns { width: 100%; overflow:hidden; }
+
+  /* (en) alternative class for optional support of old Mozilla/Netscape browers */
+  /* (de) Alternative Klasse zur optionalen Unterstützung alter Mozilla/Netscape-Brower */
+  .subcolumns_oldgecko { width: 100%; float:left; }
+
+  .c50l, .c25l, .c33l, .c38l, .c66l, .c75l, .c62l {float: left; }
+  .c50r, .c25r, .c33r, .c38r, .c66r, .c75r, .c62r {float: right; margin-left: -5px; }
+
+  .c25l, .c25r { width: 25%; }
+  .c33l, .c33r { width: 33.333%; }
+  .c50l, .c50r { width: 50%; }
+  .c66l, .c66r { width: 66.666%; }
+  .c75l, .c75r { width: 75%; }
+  .c38l, .c38r { width: 38.2%; }
+  .c62l, .c62r { width: 61.8%; }
+
+  .subc  { padding: 0 0.5em; }
+  .subcl { padding: 0 1em 0 0; }
+  .subcr { padding: 0 0 0 1em; }
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * @section hidden elements | Versteckte Elemente
+  * @see     http://www.yaml.de/en/documentation/basics/skip-links.html
+  *
+  * (en) skip links and hidden content
+  * (de) Skip-Links und versteckte Inhalte
+  */
+
+  /* (en) classes for invisible elements in the base layout */
+  /* (de) Klassen für unsichtbare Elemente im Basislayout */
+  .skip, .hideme, .print {
+    position: absolute;
+    top: -1000em;
+    left: -1000em;
+    height: 1px;
+    width: 1px;
+  }
+
+  /* (en) make skip links visible when using tab navigation */
+  /* (de) Skip-Links für Tab-Navigation sichtbar schalten */
+  .skip:focus, .skip:active {
+    position: static;
+    top: 0;
+    left: 0;
+    height: auto;
+    width: auto;
+  }
+}
diff --git a/interface/web/themes/default/yaml/core/iehacks.css b/interface/web/themes/default/yaml/core/iehacks.css
index 85445964d7..41c3ee4202 100644
--- a/interface/web/themes/default/yaml/core/iehacks.css
+++ b/interface/web/themes/default/yaml/core/iehacks.css
@@ -1,310 +1,310 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) YAML core stylesheet - structure-independent bugfixes of IE/Win CSS-bugs
- * (de) YAML Basis-Stylesheet - Strukturunabhängige Bugfixes von CSS-Bugs des IE/Win
- *
- * Don't make any changes in this file!
- * Your changes should be added to a separate patch-file.
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- * @appdef yaml
- */
-
-@media all
-{
-  /**
-   * (en) Debugging: When you see a green background, IE is getting this stylesheet
-   * (de) Fehlersuche: Hintergrund leuchtet grün, wenn das Stylesheet korrekt geladen wurde
-   *
-   * @debug
-   * @app-yaml-default disabled
-   */
-
-  /* body { background: #0f0; background-image: none; }  */
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Forcing vertical scrollbars is not needed in IE (only for Firefox/Netscape/Safari)
-   * (de) Erzwingen vertikaler Scrollbalken im IE nicht benötigt (nur im Firefox/Netscape/Safari)
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6, IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      yes
-   */
-
-  html { height: auto; margin-bottom:0; }
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Fixes IE5.x and IE6 overflow behavior of textarea and input elements elements
-   * (de) Korrigiert das fehlerhafte overflow-Verhalten von textarea und input-Elementen
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      no
-   */
-
-  * html textarea { overflow:scroll; overflow-x: hidden; }
-  * html input { overflow: hidden; }
-  
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Stability fixes with 'position:relative' 
-   * (de) Stabilitätsverbesserungen durch 'position:relative'
-   *
-   * @bugfix
-   * @affected   IE 5.x/Win, IE6, IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      yes
-   */
-
-  body { position:relative; }  /* Essential in IE7 for correct layout scaling ... */
-  * html body { position:static; }  /* ... but not for IE5.x and IE6 */
-  #main { position: relative; } /* helpful for several problems in older IE versions*/
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Clearfix Method for containing floats in IE
-   * (de) Clearfix-Anpassung für diverse IE-Versionen
-   *
-   * @workaround
-   * @see        http://www.456bereastreet.com/archive/200603/new_clearing_method_needed_for_ie7/#comment28
-   * @affected   IE 5.x/Win, IE6, IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      yes
-   */
-
-
-  .clearfix { display: inline-block; }  /* ... especial for IE7 */
-  .clearfix { display: block; }      /* ... für IE5,IE6,IE7 */
-  * html .clearfix { height: 1%; }   /* ... für IE5 + IE6/Win | hasLayout aktivieren */
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Adjustment of .floatbox class for IE
-   * (de) Anpassung der .floatbox-Klasse für IE
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      yes
-   */
-
-  * html .floatbox { width:100%; }
-  
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Special class for oversized content element
-   * (de) Spezielle Klasse für übergroße Inhaltselemente
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      yes
-   */
-  
-  .slidebox {
-    position:relative;
-    margin-right: -1000px;
-    height: 1%;
-  }
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en): Bugfix for partially displayed column separators
-   * (de): Bugfix für unvollständige Darstellung der Spalteninhalte / Spaltentrenner
-   *
-   * @bugfix
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      yes
-   */
-
-  * html #col1,
-  * html #col2, 
-  * html #col3 { position:relative; } 
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Preventing several css bugs by forcing "hasLayout"
-   * (de) Vermeidung verschiedenster Bugs durch Erzwingen von "hasLayout"
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6, IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      no
-   */
-   
-  body { height: 1%; }
-  #page_margins, #page, #header, #nav, #main, #footer { zoom:1; }             /* IE6 & IE7    */
-  #page_margins, #page { height: 1%; }                                        /* IE 5.x       */
-  * html #header, * html #nav, * html #main, * html #footer { width: 100%; }  /* IE 5.x & IE6 */
-  * html #header, * html #nav, * html #main, * html #footer { wid\th: auto; } /* IE 6         */
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * Disappearing List-Background Bug
-   * @see        http://www.positioniseverything.net/explorer/ie-listbug.html
-   *
-   * @bugfix
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      yes
-   */
-  * html ul, * html ol, * html dl { position: relative; }
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * List-Numbering Bug
-   *
-   * @bugfix
-   * @affected   IE 5.x/Win, IE6, IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      yes
-   */
-  body ol li { display:list-item; }
-  
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * (en) Workaround for 'collapsing margin at #col3' when using CSS-property clear
-   *      Left margin of #col3 collapses when using clear:both in 1-3-2 (or 2-3-1) layout and right column is the
-   *      longest and left column is the shortest one. For IE6 and IE7 a special workaround was developed
-   *      in YAML.
-   *
-   * (de) Workaround für 'kollabierenden Margin an #col3' bei Verwendung der CSS-Eigenschaft clear
-   *      Der linke Margin von #col3 kollabiert bei der Verwendung von clear:both im 1-3-2 (oder 2-3-1) Layout
-   *      wenn gleichzeitig die rechte Spalte die kürzeste und die rechte die Längste ist. Im IE6 und IE7 lässt
-   *      sich der Bug durch eine speziell für YAML entwickelten Workaround umgehen.
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6, IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      no
-   */
-
-  #ie_clearing {
-    /* (en) Only a small help for debugging */
-    /* (de) Nur eine kleine Hilfe zur Fehlersuche */
-    position:static;
-
-    /* (en) Make container visible in IE */
-    /* (de) Container sichtbar machen im IE */
-    display:block;
-
-    /* (en) No fix possible in IE5.x, normal clearing used instead */
-    /* (de) Kein Fix im IE5.x möglich, daher normales Clearing */
-    \clear:both;
-
-    /* (en) forcing clearing-like behavior with a simple oversized container in IE6 & IE7*/
-    /* (de) IE-Clearing mit 100%-DIV für IE6 bzw. übergroßem Container im IE7 */
-    width: 100%;
-    font-size:0px;
-    margin: -2px 0 -1em 1px;
-  }
-
-  * html #ie_clearing { margin: -2px 0 -1em 0; }
-  #col3_content {margin-bottom:-2px; }
-
-  /* (en) avoid horizontal scrollbars in IE7 in borderless layouts because of negative margins */
-  /* (de) Vermeidung horizontaler Scrollbalken bei randabfallenden Layouts im IE7 */
-  html { margin-right: 1px; }
-  * html { margin-right: 0 }
-
-
-  /* (en) Bugfix: Essential for IE7 */
-  /* (de) Bugfix: Notwendig im IE7 */
-  #col3 { position:relative; z-index: -1; }
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * IE/Win Guillotine Bug
-   * @see        http://www.positioniseverything.net/explorer/guillotine.html
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      yes
-   */
-
-  * html body a, * html body a:hover { background-color: transparent; }
-
-}
-
-@media screen, projection
-{
-  /**
-   * (en) IE-Adjustments for content columns and subtemplates
-   * (de) IE-Anpassung für Spaltencontainer und Subtemplates
-   *
-   * Doubled Float-Margin Bug
-   * @see        http://positioniseverything.net/explorer/doubled-margin.html
-   *
-   * @bugfix
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      yes
-   */
-
-  #col1,  #col2 { display:inline; }
-
-  .c50l, .c25l, .c33l, .c38l, .c66l, .c75l, .c62l,
-  .c50r, .c25r, .c33r, .c38r, .c66r, .c75r, .c62r { display:inline; }
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * Internet Explorer and the Expanding Box Problem
-   * @see http://www.positioniseverything.net/explorer/expandingboxbug.html
-   *
-   * @workaround
-   * @affected   IE 5.x/Win, IE6
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      yes
-   */
-
-  * html #col1_content, 
-  * html #col2_content, 
-  * html #col3_content { word-wrap: break-word; }
-
-  * html .subcolumns .subc,
-  * html .subcolumns .subcl,
-  * html .subcolumns .subcr { word-wrap: break-word; overflow:hidden; }
-}
-
-@media print
-{
-  /**
-   * (en) Avoid unneeded page breaks of #col3 content in print layout.
-   * (de) Vermeiden von unnötigen Seitenumbrüchen beim Ausdruck der Spalte #col3.
-   *
-   * @bugfix
-   * @affected   IE7
-   * @css-for    IE 5.x/Win, IE6, IE7
-   * @valid      yes
-   */
-
-  #col3 { height: 1%; }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) YAML core stylesheet - structure-independent bugfixes of IE/Win CSS-bugs
+ * (de) YAML Basis-Stylesheet - Strukturunabhängige Bugfixes von CSS-Bugs des IE/Win
+ *
+ * Don't make any changes in this file!
+ * Your changes should be added to a separate patch-file.
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ * @appdef yaml
+ */
+
+@media all
+{
+  /**
+   * (en) Debugging: When you see a green background, IE is getting this stylesheet
+   * (de) Fehlersuche: Hintergrund leuchtet grün, wenn das Stylesheet korrekt geladen wurde
+   *
+   * @debug
+   * @app-yaml-default disabled
+   */
+
+  /* body { background: #0f0; background-image: none; }  */
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Forcing vertical scrollbars is not needed in IE (only for Firefox/Netscape/Safari)
+   * (de) Erzwingen vertikaler Scrollbalken im IE nicht benötigt (nur im Firefox/Netscape/Safari)
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6, IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      yes
+   */
+
+  html { height: auto; margin-bottom:0; }
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Fixes IE5.x and IE6 overflow behavior of textarea and input elements elements
+   * (de) Korrigiert das fehlerhafte overflow-Verhalten von textarea und input-Elementen
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      no
+   */
+
+  * html textarea { overflow:scroll; overflow-x: hidden; }
+  * html input { overflow: hidden; }
+  
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Stability fixes with 'position:relative' 
+   * (de) Stabilitätsverbesserungen durch 'position:relative'
+   *
+   * @bugfix
+   * @affected   IE 5.x/Win, IE6, IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      yes
+   */
+
+  body { position:relative; }  /* Essential in IE7 for correct layout scaling ... */
+  * html body { position:static; }  /* ... but not for IE5.x and IE6 */
+  #main { position: relative; } /* helpful for several problems in older IE versions*/
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Clearfix Method for containing floats in IE
+   * (de) Clearfix-Anpassung für diverse IE-Versionen
+   *
+   * @workaround
+   * @see        http://www.456bereastreet.com/archive/200603/new_clearing_method_needed_for_ie7/#comment28
+   * @affected   IE 5.x/Win, IE6, IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      yes
+   */
+
+
+  .clearfix { display: inline-block; }  /* ... especial for IE7 */
+  .clearfix { display: block; }      /* ... für IE5,IE6,IE7 */
+  * html .clearfix { height: 1%; }   /* ... für IE5 + IE6/Win | hasLayout aktivieren */
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Adjustment of .floatbox class for IE
+   * (de) Anpassung der .floatbox-Klasse für IE
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      yes
+   */
+
+  * html .floatbox { width:100%; }
+  
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Special class for oversized content element
+   * (de) Spezielle Klasse für übergroße Inhaltselemente
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      yes
+   */
+  
+  .slidebox {
+    position:relative;
+    margin-right: -1000px;
+    height: 1%;
+  }
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en): Bugfix for partially displayed column separators
+   * (de): Bugfix für unvollständige Darstellung der Spalteninhalte / Spaltentrenner
+   *
+   * @bugfix
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      yes
+   */
+
+  * html #col1,
+  * html #col2, 
+  * html #col3 { position:relative; } 
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Preventing several css bugs by forcing "hasLayout"
+   * (de) Vermeidung verschiedenster Bugs durch Erzwingen von "hasLayout"
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6, IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      no
+   */
+   
+  body { height: 1%; }
+  #page_margins, #page, #header, #nav, #main, #footer { zoom:1; }             /* IE6 & IE7    */
+  #page_margins, #page { height: 1%; }                                        /* IE 5.x       */
+  * html #header, * html #nav, * html #main, * html #footer { width: 100%; }  /* IE 5.x & IE6 */
+  * html #header, * html #nav, * html #main, * html #footer { wid\th: auto; } /* IE 6         */
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * Disappearing List-Background Bug
+   * @see        http://www.positioniseverything.net/explorer/ie-listbug.html
+   *
+   * @bugfix
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      yes
+   */
+  * html ul, * html ol, * html dl { position: relative; }
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * List-Numbering Bug
+   *
+   * @bugfix
+   * @affected   IE 5.x/Win, IE6, IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      yes
+   */
+  body ol li { display:list-item; }
+  
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * (en) Workaround for 'collapsing margin at #col3' when using CSS-property clear
+   *      Left margin of #col3 collapses when using clear:both in 1-3-2 (or 2-3-1) layout and right column is the
+   *      longest and left column is the shortest one. For IE6 and IE7 a special workaround was developed
+   *      in YAML.
+   *
+   * (de) Workaround für 'kollabierenden Margin an #col3' bei Verwendung der CSS-Eigenschaft clear
+   *      Der linke Margin von #col3 kollabiert bei der Verwendung von clear:both im 1-3-2 (oder 2-3-1) Layout
+   *      wenn gleichzeitig die rechte Spalte die kürzeste und die rechte die Längste ist. Im IE6 und IE7 lässt
+   *      sich der Bug durch eine speziell für YAML entwickelten Workaround umgehen.
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6, IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      no
+   */
+
+  #ie_clearing {
+    /* (en) Only a small help for debugging */
+    /* (de) Nur eine kleine Hilfe zur Fehlersuche */
+    position:static;
+
+    /* (en) Make container visible in IE */
+    /* (de) Container sichtbar machen im IE */
+    display:block;
+
+    /* (en) No fix possible in IE5.x, normal clearing used instead */
+    /* (de) Kein Fix im IE5.x möglich, daher normales Clearing */
+    \clear:both;
+
+    /* (en) forcing clearing-like behavior with a simple oversized container in IE6 & IE7*/
+    /* (de) IE-Clearing mit 100%-DIV für IE6 bzw. übergroßem Container im IE7 */
+    width: 100%;
+    font-size:0px;
+    margin: -2px 0 -1em 1px;
+  }
+
+  * html #ie_clearing { margin: -2px 0 -1em 0; }
+  #col3_content {margin-bottom:-2px; }
+
+  /* (en) avoid horizontal scrollbars in IE7 in borderless layouts because of negative margins */
+  /* (de) Vermeidung horizontaler Scrollbalken bei randabfallenden Layouts im IE7 */
+  html { margin-right: 1px; }
+  * html { margin-right: 0 }
+
+
+  /* (en) Bugfix: Essential for IE7 */
+  /* (de) Bugfix: Notwendig im IE7 */
+  #col3 { position:relative; z-index: -1; }
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * IE/Win Guillotine Bug
+   * @see        http://www.positioniseverything.net/explorer/guillotine.html
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      yes
+   */
+
+  * html body a, * html body a:hover { background-color: transparent; }
+
+}
+
+@media screen, projection
+{
+  /**
+   * (en) IE-Adjustments for content columns and subtemplates
+   * (de) IE-Anpassung für Spaltencontainer und Subtemplates
+   *
+   * Doubled Float-Margin Bug
+   * @see        http://positioniseverything.net/explorer/doubled-margin.html
+   *
+   * @bugfix
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      yes
+   */
+
+  #col1,  #col2 { display:inline; }
+
+  .c50l, .c25l, .c33l, .c38l, .c66l, .c75l, .c62l,
+  .c50r, .c25r, .c33r, .c38r, .c66r, .c75r, .c62r { display:inline; }
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * Internet Explorer and the Expanding Box Problem
+   * @see http://www.positioniseverything.net/explorer/expandingboxbug.html
+   *
+   * @workaround
+   * @affected   IE 5.x/Win, IE6
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      yes
+   */
+
+  * html #col1_content, 
+  * html #col2_content, 
+  * html #col3_content { word-wrap: break-word; }
+
+  * html .subcolumns .subc,
+  * html .subcolumns .subcl,
+  * html .subcolumns .subcr { word-wrap: break-word; overflow:hidden; }
+}
+
+@media print
+{
+  /**
+   * (en) Avoid unneeded page breaks of #col3 content in print layout.
+   * (de) Vermeiden von unnötigen Seitenumbrüchen beim Ausdruck der Spalte #col3.
+   *
+   * @bugfix
+   * @affected   IE7
+   * @css-for    IE 5.x/Win, IE6, IE7
+   * @valid      yes
+   */
+
+  #col3 { height: 1%; }
+}
diff --git a/interface/web/themes/default/yaml/core/print_base.css b/interface/web/themes/default/yaml/core/print_base.css
index 54c6a39690..4418795dc4 100644
--- a/interface/web/themes/default/yaml/core/print_base.css
+++ b/interface/web/themes/default/yaml/core/print_base.css
@@ -1,120 +1,120 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) YAML core stylesheet - print layout
- * (de) YAML Core-Stylesheet - Druck Layout
- *
- * Don't make any changes in this file!
- * Your changes should be added to 'print_xyz_draft.css' drafts from 'yaml/print/' folder.
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-@media print
-{
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * @section layout preparation
-   * @see     http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
-   */
-
-  /* (en) Preparing base layout for print */
-  /* (de) Basislayout für Druck aufbereiten */
-  body, #page_margins, #page, #main { margin:0; padding: 0; border: 0; }
-  #page_margins, #page { width: 100% !important; min-width:0; max-width: none; }
-  #header { height: auto; }
-
-  /* (en) Hide unneeded container of the screenlayout in print layout */
-  /* (de) Für den Druck nicht benötigte Container des Layouts abschalten */
-  #topnav, #nav, #search, #footer { display: none; }
-
-  /* (en) Linearising subtemplates */
-  /* (de) Linearisierung der Subtemplates */
-  .c25l, .c33l, .c38l, .c50l, .c62l, .c66l, .c75l,
-  .c25r, .c33r, .c38r, .c50r, .c62r, .c66r, .c75r {
-    width: 100%; margin:0; float:none; overflow:visible; display:table;
-  }
-  .subc, .subcl, .subcr  { margin: 0; padding: 0; }
-
-  /* (en) make .print class visible */
-  /* (de) .print-Klasse sichtbar schalten */
-  .print { position: static; top: 0; left: 0; height: auto; width: auto; }
-  
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * @section content preparation
-   * @see     http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
-   */
-
-  /* (en) Change font to serif */
-  /* (de) Zeichensatz auf Serifen umstellen */
-  body * { font-family: "Times New Roman", Times, serif; }
-  code, pre { font-family:"Courier New", Courier, mono; }
-  body { font-size: 12pt; }
-
-  /* (en) Avoid page breaks right after headings */
-  /* (de) Vermeidung von Seitenumbrüchen direkt nach einer Überschrift */
-  h1,h2,h3,h4,h5,h6 { page-break-after:avoid; }
-
-  /* (en) Format acronyms and abbreviations for print*/
-  /* (de) Auszeichnung von Abkürzungen */
-  abbr[title]:after, 
-  acronym[title]:after { content: '(' attr(title) ')'; }
-
-  /* (en) Disable background graphics of links  */
-  /* (de) Abschalten evlt. vorhandener Hintergrundgrafiken zur Linkkennzeichnung */
-  #page a[href^="http:"], 
-  #page a[href^="https:"] { padding-left: 0; background-image: none; }
-
-  /* (en) Enable URL output in print layout */
-  /* (de) Sichtbare Auszeichnung der URLs von Links */
-  a[href]:after {
-    content:" <URL: "attr(href)">";
-    color:#444;
-    background:inherit;
-    font-style:italic;
-  }
-
-  /* (en) Preparation for optional column labels */
-  /* (de) Vorbereitung für optionale Spaltenauszeichnung */
-  #col1_content:before, #col2_content:before, #col3_content:before {
-    content: "";
-    color:#888;
-    background:inherit;
-    display:block;
-    font-weight:bold;
-    font-size:1.5em;
-  }
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * @section browser fixes for print layouts
-   * @see     http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
-   */
-
-  /**
-   * (en) overflow:hidden Bug in print layouts
-   * (de) overflow:hidden Bug in Drucklayouts
-   *
-   * @bugfix
-   * @since     3.0
-   * @affected  FF2.0, IE7
-   * @css-for   all browsers
-   * @valid     yes
-   */
-  
-  .floatbox,
-  .subcolumns, 
-  .subcolums_oldgecko { overflow:visible; display: table; }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) YAML core stylesheet - print layout
+ * (de) YAML Core-Stylesheet - Druck Layout
+ *
+ * Don't make any changes in this file!
+ * Your changes should be added to 'print_xyz_draft.css' drafts from 'yaml/print/' folder.
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+@media print
+{
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * @section layout preparation
+   * @see     http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
+   */
+
+  /* (en) Preparing base layout for print */
+  /* (de) Basislayout für Druck aufbereiten */
+  body, #page_margins, #page, #main { margin:0; padding: 0; border: 0; }
+  #page_margins, #page { width: 100% !important; min-width:0; max-width: none; }
+  #header { height: auto; }
+
+  /* (en) Hide unneeded container of the screenlayout in print layout */
+  /* (de) Für den Druck nicht benötigte Container des Layouts abschalten */
+  #topnav, #nav, #search, #footer { display: none; }
+
+  /* (en) Linearising subtemplates */
+  /* (de) Linearisierung der Subtemplates */
+  .c25l, .c33l, .c38l, .c50l, .c62l, .c66l, .c75l,
+  .c25r, .c33r, .c38r, .c50r, .c62r, .c66r, .c75r {
+    width: 100%; margin:0; float:none; overflow:visible; display:table;
+  }
+  .subc, .subcl, .subcr  { margin: 0; padding: 0; }
+
+  /* (en) make .print class visible */
+  /* (de) .print-Klasse sichtbar schalten */
+  .print { position: static; top: 0; left: 0; height: auto; width: auto; }
+  
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * @section content preparation
+   * @see     http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
+   */
+
+  /* (en) Change font to serif */
+  /* (de) Zeichensatz auf Serifen umstellen */
+  body * { font-family: "Times New Roman", Times, serif; }
+  code, pre { font-family:"Courier New", Courier, mono; }
+  body { font-size: 12pt; }
+
+  /* (en) Avoid page breaks right after headings */
+  /* (de) Vermeidung von Seitenumbrüchen direkt nach einer Überschrift */
+  h1,h2,h3,h4,h5,h6 { page-break-after:avoid; }
+
+  /* (en) Format acronyms and abbreviations for print*/
+  /* (de) Auszeichnung von Abkürzungen */
+  abbr[title]:after, 
+  acronym[title]:after { content: '(' attr(title) ')'; }
+
+  /* (en) Disable background graphics of links  */
+  /* (de) Abschalten evlt. vorhandener Hintergrundgrafiken zur Linkkennzeichnung */
+  #page a[href^="http:"], 
+  #page a[href^="https:"] { padding-left: 0; background-image: none; }
+
+  /* (en) Enable URL output in print layout */
+  /* (de) Sichtbare Auszeichnung der URLs von Links */
+  a[href]:after {
+    content:" <URL: "attr(href)">";
+    color:#444;
+    background:inherit;
+    font-style:italic;
+  }
+
+  /* (en) Preparation for optional column labels */
+  /* (de) Vorbereitung für optionale Spaltenauszeichnung */
+  #col1_content:before, #col2_content:before, #col3_content:before {
+    content: "";
+    color:#888;
+    background:inherit;
+    display:block;
+    font-weight:bold;
+    font-size:1.5em;
+  }
+
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * @section browser fixes for print layouts
+   * @see     http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
+   */
+
+  /**
+   * (en) overflow:hidden Bug in print layouts
+   * (de) overflow:hidden Bug in Drucklayouts
+   *
+   * @bugfix
+   * @since     3.0
+   * @affected  FF2.0, IE7
+   * @css-for   all browsers
+   * @valid     yes
+   */
+  
+  .floatbox,
+  .subcolumns, 
+  .subcolums_oldgecko { overflow:visible; display: table; }
+}
diff --git a/interface/web/themes/default/yaml/core/slim_base.css b/interface/web/themes/default/yaml/core/slim_base.css
index ef205e1d78..75596ca9fe 100644
--- a/interface/web/themes/default/yaml/core/slim_base.css
+++ b/interface/web/themes/default/yaml/core/slim_base.css
@@ -1,50 +1,50 @@
-@charset "UTF-8";
-/* "Yet Another Multicolumn Layout" v3.0.6 (c) by Dirk Jesse (http://www.yaml.de)
-* $Revision: 202 $ $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $ */
-@media all {
-*{margin:0;padding:0}
-option{padding-left:.4em}
-* html body *{overflow:visible}
-* html iframe,* html frame{overflow:auto}
-* html frameset{overflow:hidden}
-html{height:100%;margin-bottom:1px}
-body{font-size:100.01%;color:#000;background:#fff;text-align:left}
-fieldset,img{border:0 solid}
-ul,ol,dl{margin:0 0 1em 1em}
-li{margin-left:1.5em;line-height:1.5em}
-dt{font-weight:700}
-dd{margin:0 0 1em 2em}
-blockquote{margin:0 0 1em 1.5em}
-#header{position:relative}
-#topnav{text-align:right}
-#header #topnav{position:absolute;top:10px;right:10px}
-#header,#nav,#main,#footer{clear:both}
-#col1{float:left;width:200px}
-#col2{float:right;width:200px}
-#col3{width:auto;margin:0 200px}
-#col1_content,#col2_content,#col3_content{position:relative}
-.hideboth #col3{margin-left:0;margin-right:0}
-.hidecol1 #col3{margin-left:0;margin-right:200px}
-.hidecol2 #col3{margin-left:200px;margin-right:0}
-.hideboth #col1,.hideboth #col2,.hidecol1 #col1,.hidecol2 #col2{display:none}
-.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
-.clearfix{display:block}
-.floatbox{overflow:hidden}
-#ie_clearing{display:none}
-.subcolumns{width:100%;overflow:hidden}
-.subcolumns_oldgecko{width:100%;float:left}
-.c50l,.c25l,.c33l,.c38l,.c66l,.c75l,.c62l{float:left}
-.c50r,.c25r,.c33r,.c38r,.c66r,.c75r,.c62r{float:right;margin-left:-5px}
-.c25l,.c25r{width:25%}
-.c33l,.c33r{width:33.333%}
-.c50l,.c50r{width:50%}
-.c66l,.c66r{width:66.666%}
-.c75l,.c75r{width:75%}
-.c38l,.c38r{width:38.2%}
-.c62l,.c62r{width:61.8%}
-.subc{padding:0 .5em}
-.subcl{padding:0 1em 0 0}
-.subcr{padding:0 0 0 1em}
-.skip,.hideme,.print{position:absolute;top:-1000em;left:-1000em;height:1px;width:1px}
-.skip:focus,.skip:active{position:static;top:0;left:0;height:auto;width:auto}
+@charset "UTF-8";
+/* "Yet Another Multicolumn Layout" v3.0.6 (c) by Dirk Jesse (http://www.yaml.de)
+* $Revision: 202 $ $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $ */
+@media all {
+*{margin:0;padding:0}
+option{padding-left:.4em}
+* html body *{overflow:visible}
+* html iframe,* html frame{overflow:auto}
+* html frameset{overflow:hidden}
+html{height:100%;margin-bottom:1px}
+body{font-size:100.01%;color:#000;background:#fff;text-align:left}
+fieldset,img{border:0 solid}
+ul,ol,dl{margin:0 0 1em 1em}
+li{margin-left:1.5em;line-height:1.5em}
+dt{font-weight:700}
+dd{margin:0 0 1em 2em}
+blockquote{margin:0 0 1em 1.5em}
+#header{position:relative}
+#topnav{text-align:right}
+#header #topnav{position:absolute;top:10px;right:10px}
+#header,#nav,#main,#footer{clear:both}
+#col1{float:left;width:200px}
+#col2{float:right;width:200px}
+#col3{width:auto;margin:0 200px}
+#col1_content,#col2_content,#col3_content{position:relative}
+.hideboth #col3{margin-left:0;margin-right:0}
+.hidecol1 #col3{margin-left:0;margin-right:200px}
+.hidecol2 #col3{margin-left:200px;margin-right:0}
+.hideboth #col1,.hideboth #col2,.hidecol1 #col1,.hidecol2 #col2{display:none}
+.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
+.clearfix{display:block}
+.floatbox{overflow:hidden}
+#ie_clearing{display:none}
+.subcolumns{width:100%;overflow:hidden}
+.subcolumns_oldgecko{width:100%;float:left}
+.c50l,.c25l,.c33l,.c38l,.c66l,.c75l,.c62l{float:left}
+.c50r,.c25r,.c33r,.c38r,.c66r,.c75r,.c62r{float:right;margin-left:-5px}
+.c25l,.c25r{width:25%}
+.c33l,.c33r{width:33.333%}
+.c50l,.c50r{width:50%}
+.c66l,.c66r{width:66.666%}
+.c75l,.c75r{width:75%}
+.c38l,.c38r{width:38.2%}
+.c62l,.c62r{width:61.8%}
+.subc{padding:0 .5em}
+.subcl{padding:0 1em 0 0}
+.subcr{padding:0 0 0 1em}
+.skip,.hideme,.print{position:absolute;top:-1000em;left:-1000em;height:1px;width:1px}
+.skip:focus,.skip:active{position:static;top:0;left:0;height:auto;width:auto}
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/core/slim_iehacks.css b/interface/web/themes/default/yaml/core/slim_iehacks.css
index 0b46deb4e7..a201c14796 100644
--- a/interface/web/themes/default/yaml/core/slim_iehacks.css
+++ b/interface/web/themes/default/yaml/core/slim_iehacks.css
@@ -1,36 +1,36 @@
-@charset UTF-8;
-/* "Yet Another Multicolumn Layout" v3.0.6 (c) by Dirk Jesse (http://www.yaml.de)
-* $Revision: 202 $ $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $ */
-@media all {
-html{height:auto;margin-bottom:0;margin-right:1px}
-* html textarea{overflow:scroll;overflow-x:hidden}
-* html input{overflow:hidden}
-body{position:relative;height:1%}
-* html body{position:static}
-#main{position:relative}
-.clearfix{display:inline-block}
-.clearfix{display:block}
-* html .clearfix{height:1%}
-* html .floatbox{width:100%}
-.slidebox{position:relative;margin-right:-1000px;height:1%}
-* html #col1,* html #col2,* html #col3{position:relative}
-#page_margins,#page,#header,#nav,#main,#footer{zoom:1}
-#page_margins,#page{height:1%}
-* html #header,* html #nav,* html #main,* html #footer{width:100%;wid\th:auto}
-* html ul,* html ol,* html dl{position:relative}
-body ol li{display:list-item}
-#ie_clearing{position:static;display:block;\clear:both;width:100%;font-size:0;margin:-2px 0 -1em 1px}
-* html #ie_clearing{margin:-2px 0 -1em}
-#col3_content{margin-bottom:-2px}
-* html{margin-right:0}
-#col3{position:relative;z-index:-1}
-* html body a,* html body a:hover{background-color:transparent}
-}
-@media screen,projection {
-#col1,#col2,.c50l,.c25l,.c33l,.c38l,.c66l,.c75l,.c62l,.c50r,.c25r,.c33r,.c38r,.c66r,.c75r,.c62r{display:inline}
-* html #col1_content,* html #col2_content,* html #col3_content{word-wrap:break-word}
-* html .subcolumns .subc,* html .subcolumns .subcl,* html .subcolumns .subcr{word-wrap:break-word;overflow:hidden}
-}
-@media print {
-#col3{height:1%}
+@charset UTF-8;
+/* "Yet Another Multicolumn Layout" v3.0.6 (c) by Dirk Jesse (http://www.yaml.de)
+* $Revision: 202 $ $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $ */
+@media all {
+html{height:auto;margin-bottom:0;margin-right:1px}
+* html textarea{overflow:scroll;overflow-x:hidden}
+* html input{overflow:hidden}
+body{position:relative;height:1%}
+* html body{position:static}
+#main{position:relative}
+.clearfix{display:inline-block}
+.clearfix{display:block}
+* html .clearfix{height:1%}
+* html .floatbox{width:100%}
+.slidebox{position:relative;margin-right:-1000px;height:1%}
+* html #col1,* html #col2,* html #col3{position:relative}
+#page_margins,#page,#header,#nav,#main,#footer{zoom:1}
+#page_margins,#page{height:1%}
+* html #header,* html #nav,* html #main,* html #footer{width:100%;wid\th:auto}
+* html ul,* html ol,* html dl{position:relative}
+body ol li{display:list-item}
+#ie_clearing{position:static;display:block;\clear:both;width:100%;font-size:0;margin:-2px 0 -1em 1px}
+* html #ie_clearing{margin:-2px 0 -1em}
+#col3_content{margin-bottom:-2px}
+* html{margin-right:0}
+#col3{position:relative;z-index:-1}
+* html body a,* html body a:hover{background-color:transparent}
+}
+@media screen,projection {
+#col1,#col2,.c50l,.c25l,.c33l,.c38l,.c66l,.c75l,.c62l,.c50r,.c25r,.c33r,.c38r,.c66r,.c75r,.c62r{display:inline}
+* html #col1_content,* html #col2_content,* html #col3_content{word-wrap:break-word}
+* html .subcolumns .subc,* html .subcolumns .subcl,* html .subcolumns .subcr{word-wrap:break-word;overflow:hidden}
+}
+@media print {
+#col3{height:1%}
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/core/slim_print_base.css b/interface/web/themes/default/yaml/core/slim_print_base.css
index 42a5d5b069..f371b158c3 100644
--- a/interface/web/themes/default/yaml/core/slim_print_base.css
+++ b/interface/web/themes/default/yaml/core/slim_print_base.css
@@ -1,21 +1,21 @@
-@charset "UTF-8";
-/* "Yet Another Multicolumn Layout" v3.0.6 (c) by Dirk Jesse (http://www.yaml.de)
-* $Revision: 202 $ $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $ */
-@media print {
-body,#page_margins,#page,#main{border:0;margin:0;padding:0}
-#page_margins,#page{width:100%!important;min-width:0;max-width:none}
-#header{height:auto}
-#topnav,#nav,#search,#footer{display:none}
-.c25l,.c33l,.c38l,.c50l,.c62l,.c66l,.c75l,.c25r,.c33r,.c38r,.c50r,.c62r,.c66r,.c75r{width:100%;float:none;overflow:visible;display:table;margin:0}
-.subc,.subcl,.subcr{margin:0;padding:0}
-.print{position:static;top:0;left:0;height:auto;width:auto}
-body *{font-family:"Times New Roman", Times, serif}
-code,pre{font-family:"Courier New", Courier, mono}
-body{font-size:12pt}
-h1,h2,h3,h4,h5,h6{page-break-after:avoid}
-abbr[title]:after,acronym[title]:after{content:'(' attr(title) ')'}
-#page a[href^="http:"],#page a[href^="https:"]{padding-left:0;background-image:none}
-a[href]:after{content:" <URL: "attr(href)">";color:#444;background:inherit;font-style:italic}
-#col1_content:before,#col2_content:before,#col3_content:before{content:"";color:#888;background:inherit;display:block;font-weight:700;font-size:1.5em}
-.floatbox,.subcolumns,.subcolums_oldgecko{overflow:visible;display:table}
+@charset "UTF-8";
+/* "Yet Another Multicolumn Layout" v3.0.6 (c) by Dirk Jesse (http://www.yaml.de)
+* $Revision: 202 $ $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $ */
+@media print {
+body,#page_margins,#page,#main{border:0;margin:0;padding:0}
+#page_margins,#page{width:100%!important;min-width:0;max-width:none}
+#header{height:auto}
+#topnav,#nav,#search,#footer{display:none}
+.c25l,.c33l,.c38l,.c50l,.c62l,.c66l,.c75l,.c25r,.c33r,.c38r,.c50r,.c62r,.c66r,.c75r{width:100%;float:none;overflow:visible;display:table;margin:0}
+.subc,.subcl,.subcr{margin:0;padding:0}
+.print{position:static;top:0;left:0;height:auto;width:auto}
+body *{font-family:"Times New Roman", Times, serif}
+code,pre{font-family:"Courier New", Courier, mono}
+body{font-size:12pt}
+h1,h2,h3,h4,h5,h6{page-break-after:avoid}
+abbr[title]:after,acronym[title]:after{content:'(' attr(title) ')'}
+#page a[href^="http:"],#page a[href^="https:"]{padding-left:0;background-image:none}
+a[href]:after{content:" <URL: "attr(href)">";color:#444;background:inherit;font-style:italic}
+#col1_content:before,#col2_content:before,#col3_content:before{content:"";color:#888;background:inherit;display:block;font-weight:700;font-size:1.5em}
+.floatbox,.subcolumns,.subcolums_oldgecko{overflow:visible;display:table}
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/debug/debug.css b/interface/web/themes/default/yaml/debug/debug.css
index 0c4269b133..f0a1304f77 100644
--- a/interface/web/themes/default/yaml/debug/debug.css
+++ b/interface/web/themes/default/yaml/debug/debug.css
@@ -1,157 +1,157 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) YAML debugging stylesheet
- * (de) YAML Stylesheet zur Fehlersuche
- *
- * Don't make any changes in this file!
- * Your changes should be placed in any css-file in your own stylesheet folder.
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 43 $
- * @lastmodified    $Date: 2007-06-11 16:09:28 +0200 (Mo, 11 Jun 2007) $
- */
-
-@media all
-{
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * @section layout preparation for debugging
-   * @see http://www.yaml.de/en/documentation/practice/drafting-and-debugging.html
-   */
-
-  /* Adding debugging background */
-  body { background: transparent url(images/grid_pattern.png) top left no-repeat !important; }
-
-  /* CSS-Warning, if core stylesheet 'iehacks.css' is missing in the layout */
-  *:first-child+html #ie_clearing { display:block; }
-  * html #ie_clearing { display:block; }
-
-  #ie_clearing {
-    width: 500px;
-    font-size: 25px;
-    position:absolute;
-    top: -2px;
-    left:0px;
-    background: url("images/warning_iehacks.gif") top left no-repeat;
-  }
-
-  /**
-   * @section pixel grid
-   */
-
-  .bg_grid {
-    background-image:url(images/grid_pattern.png) !important;
-    background-repeat:no-repeat;
-    background-position:top left !important;
-  }
-
-  /**
-   * @section transparency
-   */
-
-  .transOFF { -moz-opacity: 1.0; opacity: 1.0; filter: alpha(Opacity=100);}
-  .trans50,
-  .transON { -moz-opacity: 0.5; opacity: 0.5; filter: alpha(Opacity=50);}
-  .trans25 { -moz-opacity: 0.25; opacity: 0.25; filter: alpha(Opacity=25);}
-  .trans75 { -moz-opacity: 0.75; opacity: 0.75; filter: alpha(Opacity=75);}
-
-  /**
-   * @section colors
-   */
-
-  .bg_red { background-color: #f00 !important;}
-  .bg_blue { background-color: #00f !important;}
-  .bg_green { background-color: #0f0 !important;}
-  
-  /**
-   * @visualize semantic structure
-   * 
-   * Many thanks to Tomas Caspers for some ideas
-   */
-   
-  div[id] { padding: 0 !important; margin: 2px; border: 1px #000 solid !important; }
-  div[id]:before {
-	display:block;
-	color: #fff;
-	background:	#800;
-	padding: 2px;
-	font: bold .8em "Lucida console", monospace;
-	content: "[div #"attr(id)"]";
-  }
-
-  div[class="floatbox"] { background: #f4f4f4; }
-  div[class="floatbox"]:before {
-	display:block;
-	color: #fff;
-	background:	#66a;
-	padding: 2px;
-	font: bold .8em "Lucida console", monospace;
-	content: "[div ."attr(class)"]";
-  }
-
-  div[class="subcolumns"] { background: #f8f8f8; }
-  div[class="subcolumns"]:before {
-	display:block;
-	color: #fff;
-	background:	#444;
-	padding: 2px;
-	font: bold .8em "Lucida console", monospace;
-	content: "[div ."attr(class)"]";
-  }
-
-  div[class="subcolumns"] > div:before {
-	display:block;
-	color: #fff;
-	background:	#080;
-	padding: 2px;
-	font: bold .8em "Lucida console", monospace;
-	content: "[div ."attr(class)"]";
-  }
-
-  div[class="subc"], div[class="subcl"], div[class="subcr"] { background: #eee; }
-  div[class="subc"]:before, div[class="subcl"]:before, div[class="subcr"]:before {
-	display:block;
-	color: #fff;
-	background: #6a6;
-	padding: 2px;
-	font: bold .8em "Lucida console", monospace;
-	content: "[div ."attr(class)"]";
-  }
-
-  h1:before	{ content: "[h1] "; }
-  h2:before	{ content: "[h2] "; }
-  h3:before	{ content: "[h3] "; }
-  h4:before	{ content: "[h4] "; }
-  h5:before	{ content: "[h5] "; }
-  h6:before	{ content: "[h6] "; }
-  
-  a:hover:before { content:	" ( href='" attr(href) "' ) "; }
-  a:hover:after { content: " [ title='"attr(title)"' ] "; }
-
-  img:after	{ content:" ( alt='" attr(alt)"' ) "; }
-  
-  address, blockquote, dl, fieldset, form, h1, h2, h3, h4, ol, p, pre, ul	{
-	border:	1px dotted #888;
-	margin: 2px;
-	padding: 2px;
-	display: block;
-  }
-
-  /**
-   * @visualize inline elements
-   * 
-   * Many thanks to Tomas Caspers for some ideas
-   */
-
-  abbr, acronym	{ background: #d9eaff; }
-  q, cite, dfn, kbd	{ background: #ffe3f6; }
-  /* :lang(de), :lang(en), :lang(fr), :lang(es) { background: #d9efaa !important; } */
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) YAML debugging stylesheet
+ * (de) YAML Stylesheet zur Fehlersuche
+ *
+ * Don't make any changes in this file!
+ * Your changes should be placed in any css-file in your own stylesheet folder.
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 43 $
+ * @lastmodified    $Date: 2007-06-11 16:09:28 +0200 (Mo, 11 Jun 2007) $
+ */
+
+@media all
+{
+  /*------------------------------------------------------------------------------------------------------*/
+
+  /**
+   * @section layout preparation for debugging
+   * @see http://www.yaml.de/en/documentation/practice/drafting-and-debugging.html
+   */
+
+  /* Adding debugging background */
+  body { background: transparent url(images/grid_pattern.png) top left no-repeat !important; }
+
+  /* CSS-Warning, if core stylesheet 'iehacks.css' is missing in the layout */
+  *:first-child+html #ie_clearing { display:block; }
+  * html #ie_clearing { display:block; }
+
+  #ie_clearing {
+    width: 500px;
+    font-size: 25px;
+    position:absolute;
+    top: -2px;
+    left:0px;
+    background: url("images/warning_iehacks.gif") top left no-repeat;
+  }
+
+  /**
+   * @section pixel grid
+   */
+
+  .bg_grid {
+    background-image:url(images/grid_pattern.png) !important;
+    background-repeat:no-repeat;
+    background-position:top left !important;
+  }
+
+  /**
+   * @section transparency
+   */
+
+  .transOFF { -moz-opacity: 1.0; opacity: 1.0; filter: alpha(Opacity=100);}
+  .trans50,
+  .transON { -moz-opacity: 0.5; opacity: 0.5; filter: alpha(Opacity=50);}
+  .trans25 { -moz-opacity: 0.25; opacity: 0.25; filter: alpha(Opacity=25);}
+  .trans75 { -moz-opacity: 0.75; opacity: 0.75; filter: alpha(Opacity=75);}
+
+  /**
+   * @section colors
+   */
+
+  .bg_red { background-color: #f00 !important;}
+  .bg_blue { background-color: #00f !important;}
+  .bg_green { background-color: #0f0 !important;}
+  
+  /**
+   * @visualize semantic structure
+   * 
+   * Many thanks to Tomas Caspers for some ideas
+   */
+   
+  div[id] { padding: 0 !important; margin: 2px; border: 1px #000 solid !important; }
+  div[id]:before {
+	display:block;
+	color: #fff;
+	background:	#800;
+	padding: 2px;
+	font: bold .8em "Lucida console", monospace;
+	content: "[div #"attr(id)"]";
+  }
+
+  div[class="floatbox"] { background: #f4f4f4; }
+  div[class="floatbox"]:before {
+	display:block;
+	color: #fff;
+	background:	#66a;
+	padding: 2px;
+	font: bold .8em "Lucida console", monospace;
+	content: "[div ."attr(class)"]";
+  }
+
+  div[class="subcolumns"] { background: #f8f8f8; }
+  div[class="subcolumns"]:before {
+	display:block;
+	color: #fff;
+	background:	#444;
+	padding: 2px;
+	font: bold .8em "Lucida console", monospace;
+	content: "[div ."attr(class)"]";
+  }
+
+  div[class="subcolumns"] > div:before {
+	display:block;
+	color: #fff;
+	background:	#080;
+	padding: 2px;
+	font: bold .8em "Lucida console", monospace;
+	content: "[div ."attr(class)"]";
+  }
+
+  div[class="subc"], div[class="subcl"], div[class="subcr"] { background: #eee; }
+  div[class="subc"]:before, div[class="subcl"]:before, div[class="subcr"]:before {
+	display:block;
+	color: #fff;
+	background: #6a6;
+	padding: 2px;
+	font: bold .8em "Lucida console", monospace;
+	content: "[div ."attr(class)"]";
+  }
+
+  h1:before	{ content: "[h1] "; }
+  h2:before	{ content: "[h2] "; }
+  h3:before	{ content: "[h3] "; }
+  h4:before	{ content: "[h4] "; }
+  h5:before	{ content: "[h5] "; }
+  h6:before	{ content: "[h6] "; }
+  
+  a:hover:before { content:	" ( href='" attr(href) "' ) "; }
+  a:hover:after { content: " [ title='"attr(title)"' ] "; }
+
+  img:after	{ content:" ( alt='" attr(alt)"' ) "; }
+  
+  address, blockquote, dl, fieldset, form, h1, h2, h3, h4, ol, p, pre, ul	{
+	border:	1px dotted #888;
+	margin: 2px;
+	padding: 2px;
+	display: block;
+  }
+
+  /**
+   * @visualize inline elements
+   * 
+   * Many thanks to Tomas Caspers for some ideas
+   */
+
+  abbr, acronym	{ background: #d9eaff; }
+  q, cite, dfn, kbd	{ background: #ffe3f6; }
+  /* :lang(de), :lang(en), :lang(fr), :lang(es) { background: #d9efaa !important; } */
+}
diff --git a/interface/web/themes/default/yaml/navigation/nav_vlist.css b/interface/web/themes/default/yaml/navigation/nav_vlist.css
index af2f7e890c..7f1a5b9335 100644
--- a/interface/web/themes/default/yaml/navigation/nav_vlist.css
+++ b/interface/web/themes/default/yaml/navigation/nav_vlist.css
@@ -1,109 +1,109 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) Vertical list navigation "vlist"
- * (de) Vertikale Navigationsliste "vlist"
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-@media all
-{
-  #submenu {
-    width: 100%;
-    overflow: hidden;
-    margin: 2.4em 0 1.5em 0;
-    list-style-type: none;
-    border-top: 2px #ddd solid;
-    border-bottom: 2px #ddd solid;
-  }
-
-  #submenu ul { list-style-type: none; margin:0; padding: 0; }
-  #submenu li { float:left; width: 100%; margin:0; padding: 0; }
-
-  #submenu a,
-  #submenu strong {
-    display:block;
-    width: 90%;
-    padding: 3px 0px 3px 10%;
-    text-decoration: none;
-    background-color:#fff;
-    color: #444;
-    border-bottom: 1px #eee solid;
-  }
-
-  /* Menu Title */
-  #submenu li#title {
-    width: 90%;
-    padding: 3px 0px 3px 10%;
-    font-weight: bold;
-    color: #444;
-    background-color: #fff;
-    border-bottom: 4px #888 solid;
-  }
-
-  #submenu li span {
-    display:block;
-    width: 90%;
-    padding: 3px 0px 3px 10%;
-    font-weight: bold;
-    border-bottom: 1px #ddd solid;
-  }
-
-  /* Level 1 */
-  #submenu li#active,
-  #submenu li strong {
-    width: 90%;
-    padding: 3px 0px 3px 10%;
-    font-weight: bold;
-    color: #fff;
-    background-color:#aab;
-    border-bottom: 1px #eee solid;
-  }
-
-  #submenu li a { width: 90%; padding-left: 10%; background-color:#fff; color: #444; }
-  #submenu li a:focus,
-  #submenu li a:hover,
-  #submenu li a:active { background-color:#f63; color: #fff; }
-
-  /* Level 2 */
-  #submenu li ul li a,
-  #submenu li ul li#active,
-  #submenu li ul li strong,
-  #submenu li ul li span { width: 80%; padding-left: 20%; }
-
-  #submenu li ul li a { background-color:#f8f8f8; color: #666; }
-  #submenu li ul li a:focus,
-  #submenu li ul li a:hover,
-  #submenu li ul li a:active { background-color:#f63; color: #fff; }
-
-  /* Level 3 */
-  #submenu li ul li ul li a,
-  #submenu li ul li ul li#active,
-  #submenu li ul li ul li strong,
-  #submenu li ul li ul li span { width: 70%; padding-left: 30%; }
-
-  #submenu li ul li ul li a { background-color:#fcfcfc; color: #888; }
-  #submenu li ul li ul li a:focus,
-  #submenu li ul li ul li a:hover,
-  #submenu li ul li ul li a:active { background-color:#f63; color: #fff; }
-
-  /* Level 4 */
-  #submenu li ul li ul li ul li a,
-  #submenu li ul li ul li ul li#active,
-  #submenu li ul li ul li ul li strong,
-  #submenu li ul li ul li ul li span { width: 60%; padding-left: 40%; }
-
-  #submenu li ul li ul li ul li a { background-color:#ffffff; color: #aaa; }
-  #submenu li ul li ul li ul li a:focus,
-  #submenu li ul li ul li ul li a:hover,
-  #submenu li ul li ul li ul li a:active { background-color:#f63; color: #fff; }
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) Vertical list navigation "vlist"
+ * (de) Vertikale Navigationsliste "vlist"
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+@media all
+{
+  #submenu {
+    width: 100%;
+    overflow: hidden;
+    margin: 2.4em 0 1.5em 0;
+    list-style-type: none;
+    border-top: 2px #ddd solid;
+    border-bottom: 2px #ddd solid;
+  }
+
+  #submenu ul { list-style-type: none; margin:0; padding: 0; }
+  #submenu li { float:left; width: 100%; margin:0; padding: 0; }
+
+  #submenu a,
+  #submenu strong {
+    display:block;
+    width: 90%;
+    padding: 3px 0px 3px 10%;
+    text-decoration: none;
+    background-color:#fff;
+    color: #444;
+    border-bottom: 1px #eee solid;
+  }
+
+  /* Menu Title */
+  #submenu li#title {
+    width: 90%;
+    padding: 3px 0px 3px 10%;
+    font-weight: bold;
+    color: #444;
+    background-color: #fff;
+    border-bottom: 4px #888 solid;
+  }
+
+  #submenu li span {
+    display:block;
+    width: 90%;
+    padding: 3px 0px 3px 10%;
+    font-weight: bold;
+    border-bottom: 1px #ddd solid;
+  }
+
+  /* Level 1 */
+  #submenu li#active,
+  #submenu li strong {
+    width: 90%;
+    padding: 3px 0px 3px 10%;
+    font-weight: bold;
+    color: #fff;
+    background-color:#aab;
+    border-bottom: 1px #eee solid;
+  }
+
+  #submenu li a { width: 90%; padding-left: 10%; background-color:#fff; color: #444; }
+  #submenu li a:focus,
+  #submenu li a:hover,
+  #submenu li a:active { background-color:#f63; color: #fff; }
+
+  /* Level 2 */
+  #submenu li ul li a,
+  #submenu li ul li#active,
+  #submenu li ul li strong,
+  #submenu li ul li span { width: 80%; padding-left: 20%; }
+
+  #submenu li ul li a { background-color:#f8f8f8; color: #666; }
+  #submenu li ul li a:focus,
+  #submenu li ul li a:hover,
+  #submenu li ul li a:active { background-color:#f63; color: #fff; }
+
+  /* Level 3 */
+  #submenu li ul li ul li a,
+  #submenu li ul li ul li#active,
+  #submenu li ul li ul li strong,
+  #submenu li ul li ul li span { width: 70%; padding-left: 30%; }
+
+  #submenu li ul li ul li a { background-color:#fcfcfc; color: #888; }
+  #submenu li ul li ul li a:focus,
+  #submenu li ul li ul li a:hover,
+  #submenu li ul li ul li a:active { background-color:#f63; color: #fff; }
+
+  /* Level 4 */
+  #submenu li ul li ul li ul li a,
+  #submenu li ul li ul li ul li#active,
+  #submenu li ul li ul li ul li strong,
+  #submenu li ul li ul li ul li span { width: 60%; padding-left: 40%; }
+
+  #submenu li ul li ul li ul li a { background-color:#ffffff; color: #aaa; }
+  #submenu li ul li ul li ul li a:focus,
+  #submenu li ul li ul li ul li a:hover,
+  #submenu li ul li ul li ul li a:active { background-color:#f63; color: #fff; }
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/patches/patch_layout_draft.css b/interface/web/themes/default/yaml/patches/patch_layout_draft.css
index 83e835357b..4490d7f1fb 100644
--- a/interface/web/themes/default/yaml/patches/patch_layout_draft.css
+++ b/interface/web/themes/default/yaml/patches/patch_layout_draft.css
@@ -1,29 +1,29 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) Example of a patch stylesheet for the Internet Explorer
- * (de) Beispiel für ein Anpassungs-Stylesheet für den Internet Explorer
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* Layout independent adjustments | Layout-unabhängige Anpassungen ----------------------------------- */
-@import url(/yaml/core/iehacks.css);
-
-/* Box model adjustments for vlist navigation | Box-Modell-Anpassungen für vlist-Navigation */
-/* @import url(/yaml/patches/patch_nav_vlist.css); */
-
-/* Layout-dependent adjustments | Layout-abhängige Anpassungen --------------------------------------- */
-@media screen, projection
-{
-  /* add your adjustments here | Fügen Sie Ihre Anpassungen hier ein */
-
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) Example of a patch stylesheet for the Internet Explorer
+ * (de) Beispiel für ein Anpassungs-Stylesheet für den Internet Explorer
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* Layout independent adjustments | Layout-unabhängige Anpassungen ----------------------------------- */
+@import url(/yaml/core/iehacks.css);
+
+/* Box model adjustments for vlist navigation | Box-Modell-Anpassungen für vlist-Navigation */
+/* @import url(/yaml/patches/patch_nav_vlist.css); */
+
+/* Layout-dependent adjustments | Layout-abhängige Anpassungen --------------------------------------- */
+@media screen, projection
+{
+  /* add your adjustments here | Fügen Sie Ihre Anpassungen hier ein */
+
+}
diff --git a/interface/web/themes/default/yaml/patches/patch_nav_vlist.css b/interface/web/themes/default/yaml/patches/patch_nav_vlist.css
index 21041be294..cbf29487f9 100644
--- a/interface/web/themes/default/yaml/patches/patch_nav_vlist.css
+++ b/interface/web/themes/default/yaml/patches/patch_nav_vlist.css
@@ -1,61 +1,61 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) IE adjustment stylesheet for YAML vlist navigation
- *      Import this file within the IE-patch-file if needed in your layout
- *
- * (de) IE Anpassungs-Stylesheet für YAML vlist-Navigation
- *      Einbindung ins Layout erfolgt über den Import innerhalb des IE-Anspassungs-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-@media screen, projection
-{
-  /**
-   * Box Model Bug
-   * (en) Adjustment of width values for list elements of the menu in IE 5.x/Win.
-   *      Note: If IE6 is running in quirks mode, it also needs 100% values!
-   *
-   * (de) Korrektur der Breitenangaben der Listenelemente des Submenüs im IE 5.x/Win.
-   *      Hinweis: Befindet sich der IE6 im Quirks Mode, so benötigt er ebenfalls 100%-Werte !
-   *
-   * @bugfix
-   * @affected   IE 5.x/Win (IE6 in Quirks-Mode)
-   * @css-for    IE 5.x/Win, IE6
-   * @valid      no
-   */
-
-  /* level 1 */
-  * html #submenu li a,
-  * html #submenu li strong,
-  * html #submenu li span,
-  * html #submenu li#title,
-  * html #submenu li#active { width: 100%; w\idth: 90%; }
-
-  /* level 2 */
-  * html #submenu li ul li a,
-  * html #submenu li ul li strong,
-  * html #submenu li ul li span,
-  * html #submenu li ul li#active { width: 100%; w\idth: 80%; }
-
-  /* level 3 */
-  * html #submenu li ul li ul li a,
-  * html #submenu li ul li ul li strong,
-  * html #submenu li ul li ul li span,
-  * html #submenu li ul li ul li#active { width: 100%; w\idth: 70%; }
-
-  /* level 4 */
-  * html #submenu li ul li ul li ul li a,
-  * html #submenu li ul li ul li ul li strong,
-  * html #submenu li ul li ul li ul li span,
-  * html #submenu li ul li ul li ul li#active { width: 100%; w\idth: 60%; }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) IE adjustment stylesheet for YAML vlist navigation
+ *      Import this file within the IE-patch-file if needed in your layout
+ *
+ * (de) IE Anpassungs-Stylesheet für YAML vlist-Navigation
+ *      Einbindung ins Layout erfolgt über den Import innerhalb des IE-Anspassungs-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+@media screen, projection
+{
+  /**
+   * Box Model Bug
+   * (en) Adjustment of width values for list elements of the menu in IE 5.x/Win.
+   *      Note: If IE6 is running in quirks mode, it also needs 100% values!
+   *
+   * (de) Korrektur der Breitenangaben der Listenelemente des Submenüs im IE 5.x/Win.
+   *      Hinweis: Befindet sich der IE6 im Quirks Mode, so benötigt er ebenfalls 100%-Werte !
+   *
+   * @bugfix
+   * @affected   IE 5.x/Win (IE6 in Quirks-Mode)
+   * @css-for    IE 5.x/Win, IE6
+   * @valid      no
+   */
+
+  /* level 1 */
+  * html #submenu li a,
+  * html #submenu li strong,
+  * html #submenu li span,
+  * html #submenu li#title,
+  * html #submenu li#active { width: 100%; w\idth: 90%; }
+
+  /* level 2 */
+  * html #submenu li ul li a,
+  * html #submenu li ul li strong,
+  * html #submenu li ul li span,
+  * html #submenu li ul li#active { width: 100%; w\idth: 80%; }
+
+  /* level 3 */
+  * html #submenu li ul li ul li a,
+  * html #submenu li ul li ul li strong,
+  * html #submenu li ul li ul li span,
+  * html #submenu li ul li ul li#active { width: 100%; w\idth: 70%; }
+
+  /* level 4 */
+  * html #submenu li ul li ul li ul li a,
+  * html #submenu li ul li ul li ul li strong,
+  * html #submenu li ul li ul li ul li span,
+  * html #submenu li ul li ul li ul li#active { width: 100%; w\idth: 60%; }
+}
diff --git a/interface/web/themes/default/yaml/print/print_003_draft.css b/interface/web/themes/default/yaml/print/print_003_draft.css
index 29c6df6291..0363b4ee82 100644
--- a/interface/web/themes/default/yaml/print/print_003_draft.css
+++ b/interface/web/themes/default/yaml/print/print_003_draft.css
@@ -1,32 +1,32 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - 0
-** #col2 - 0
-** #col3 - x
-*/
-
-@media print
-{
-  #col1 { display:none; }
-  #col2 { display:none; }
-  
-  #col3, #col3_content { width: 100%; margin:0; padding: 0; border:0; }
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - 0
+** #col2 - 0
+** #col3 - x
+*/
+
+@media print
+{
+  #col1 { display:none; }
+  #col2 { display:none; }
+  
+  #col3, #col3_content { width: 100%; margin:0; padding: 0; border:0; }
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/print/print_020_draft.css b/interface/web/themes/default/yaml/print/print_020_draft.css
index 885b0b9915..2ded4f1143 100644
--- a/interface/web/themes/default/yaml/print/print_020_draft.css
+++ b/interface/web/themes/default/yaml/print/print_020_draft.css
@@ -1,31 +1,31 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - 0
-** #col2 - x
-** #col3 - 0
-*/
-@media print
-{
-  #col1 { display:none; }
-  #col3 { display:none; }
-
-  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - 0
+** #col2 - x
+** #col3 - 0
+*/
+@media print
+{
+  #col1 { display:none; }
+  #col3 { display:none; }
+
+  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/print/print_023_draft.css b/interface/web/themes/default/yaml/print/print_023_draft.css
index a80bb08753..e005a588ae 100644
--- a/interface/web/themes/default/yaml/print/print_023_draft.css
+++ b/interface/web/themes/default/yaml/print/print_023_draft.css
@@ -1,40 +1,40 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - 0
-** #col2 - x
-** #col3 - x
-*/
-
-@media print
-{
-  #col1 { display:none; }
-
-  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-  #col2_content { page-break-after:always; }
-
-  #col3, #col3_content {width: 100%; margin:0; padding: 0; border:0; }
-
-  /* Optional Column Labels | Optionale Spaltenauszeichnung
-  #col2_content:before { content:" [ left | middle | right column ]"; }
-  #col3_content:before { content:" [ left | middle | right column ]"; }
-  */
-}
-
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - 0
+** #col2 - x
+** #col3 - x
+*/
+
+@media print
+{
+  #col1 { display:none; }
+
+  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+  #col2_content { page-break-after:always; }
+
+  #col3, #col3_content {width: 100%; margin:0; padding: 0; border:0; }
+
+  /* Optional Column Labels | Optionale Spaltenauszeichnung
+  #col2_content:before { content:" [ left | middle | right column ]"; }
+  #col3_content:before { content:" [ left | middle | right column ]"; }
+  */
+}
+
diff --git a/interface/web/themes/default/yaml/print/print_100_draft.css b/interface/web/themes/default/yaml/print/print_100_draft.css
index 99f29b4f12..2a6c71b197 100644
--- a/interface/web/themes/default/yaml/print/print_100_draft.css
+++ b/interface/web/themes/default/yaml/print/print_100_draft.css
@@ -1,31 +1,31 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - x
-** #col2 - 0
-** #col3 - 0
-*/
-@media print
-{
-  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-
-  #col2 { display:none; }
-  #col3 { display:none; }
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - x
+** #col2 - 0
+** #col3 - 0
+*/
+@media print
+{
+  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+
+  #col2 { display:none; }
+  #col3 { display:none; }
+}
diff --git a/interface/web/themes/default/yaml/print/print_103_draft.css b/interface/web/themes/default/yaml/print/print_103_draft.css
index 983e61a4ad..a436374703 100644
--- a/interface/web/themes/default/yaml/print/print_103_draft.css
+++ b/interface/web/themes/default/yaml/print/print_103_draft.css
@@ -1,38 +1,38 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - x
-** #col2 - 0
-** #col3 - x
-*/
-@media print
-{
-  #col1, #col1_content {float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-  #col1_content {page-break-after:always; }
-
-  #col2 { display:none; }
-
-  #col3, #col3_content { width: 100%; margin:0; padding: 0; border:0; }
-
-  /* Optional Column Labels | Optionale Spaltenauszeichnung
-  #col1_content:before { content:" [ left | middle | right column ]"; }
-  #col3_content:before { content:" [ left | middle | right column ]"; }
-  */
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - x
+** #col2 - 0
+** #col3 - x
+*/
+@media print
+{
+  #col1, #col1_content {float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+  #col1_content {page-break-after:always; }
+
+  #col2 { display:none; }
+
+  #col3, #col3_content { width: 100%; margin:0; padding: 0; border:0; }
+
+  /* Optional Column Labels | Optionale Spaltenauszeichnung
+  #col1_content:before { content:" [ left | middle | right column ]"; }
+  #col3_content:before { content:" [ left | middle | right column ]"; }
+  */
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/print/print_120_draft.css b/interface/web/themes/default/yaml/print/print_120_draft.css
index 43f0950601..50ee571497 100644
--- a/interface/web/themes/default/yaml/print/print_120_draft.css
+++ b/interface/web/themes/default/yaml/print/print_120_draft.css
@@ -1,39 +1,39 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - x
-** #col2 - x
-** #col3 - 0
-*/
-@media print
-{
-  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-  #col1_content { page-break-after:always; }
-
-  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-  #col2_content { page-break-after:always; }
-
-  #col3 { display:none; }
-
-  /* Optional Column Labels | Optionale Spaltenauszeichnung
-  #col1_content:before { content:" [ left | middle | right column ]"; }
-  #col2_content:before { content:" [ left | middle | right column ]"; }
-  */
-}
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - x
+** #col2 - x
+** #col3 - 0
+*/
+@media print
+{
+  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+  #col1_content { page-break-after:always; }
+
+  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+  #col2_content { page-break-after:always; }
+
+  #col3 { display:none; }
+
+  /* Optional Column Labels | Optionale Spaltenauszeichnung
+  #col1_content:before { content:" [ left | middle | right column ]"; }
+  #col2_content:before { content:" [ left | middle | right column ]"; }
+  */
+}
diff --git a/interface/web/themes/default/yaml/print/print_123_draft.css b/interface/web/themes/default/yaml/print/print_123_draft.css
index d2586db76c..42a7de1d5a 100644
--- a/interface/web/themes/default/yaml/print/print_123_draft.css
+++ b/interface/web/themes/default/yaml/print/print_123_draft.css
@@ -1,40 +1,40 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) print stylesheet
- * (de) Druck-Stylesheet
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-/* import print base styles | Basisformatierung für Drucklayout einbinden */
-@import url(../core/print_base.css);
-
-/* #col1 - x
-** #col2 - x
-** #col3 - x
-*/
-@media print
-{
-  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-  #col1_content { page-break-after:always; }
-
-  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-  #col2_content { page-break-after:always; }
-
-  #col3, #col3_content { width: 100%; margin:0; padding: 0; border:0; }
-
-  /* Optional Column Labels | Optionale Spaltenauszeichnung
-  #col1_content:before { content:" [ left | middle | right column ]"; }
-  #col2_content:before { content:" [ left | middle | right column ]"; }
-  #col3_content:before { content:" [ left | middle | right column ]"; }
-  */
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) print stylesheet
+ * (de) Druck-Stylesheet
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+/* import print base styles | Basisformatierung für Drucklayout einbinden */
+@import url(../core/print_base.css);
+
+/* #col1 - x
+** #col2 - x
+** #col3 - x
+*/
+@media print
+{
+  #col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+  #col1_content { page-break-after:always; }
+
+  #col2, #col2_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
+  #col2_content { page-break-after:always; }
+
+  #col3, #col3_content { width: 100%; margin:0; padding: 0; border:0; }
+
+  /* Optional Column Labels | Optionale Spaltenauszeichnung
+  #col1_content:before { content:" [ left | middle | right column ]"; }
+  #col2_content:before { content:" [ left | middle | right column ]"; }
+  #col3_content:before { content:" [ left | middle | right column ]"; }
+  */
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/screen/basemod_draft.css b/interface/web/themes/default/yaml/screen/basemod_draft.css
index c738ee0ed8..6d33ff8dda 100644
--- a/interface/web/themes/default/yaml/screen/basemod_draft.css
+++ b/interface/web/themes/default/yaml/screen/basemod_draft.css
@@ -1,70 +1,70 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) Template for designing a screen layout
- * (de) Gestaltungsvorlage für die Erstellung eines Screenlayouts
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- */
-
-@media screen, projection
-{
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * Design of the Basic Layout | Gestaltung des YAML Basis-Layouts
-  *
-  * @section layout-basics
-  */
-
-  /* Page margins and background | Randbereiche & Seitenhintergrund */
-  body {  }
-
-  /* Layout: Width, Background, Border | Layout: Breite, Hintergrund, Rahmen */
-  #page_margins {  }
-  #page{  }
-
-  /* Design of the Main Layout Elements | Gestaltung der Hauptelemente des Layouts */
-  #header {  }
-  #topnav {  }
-
-  #main {  }
-
-  #footer {  }
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * Formatting of the Content Area | Formatierung der Inhaltsbereichs
-  *
-  * @section layout-main
-  */
-
-  #col1 {  }
-  #col1_content {  }
-
-  #col2 {  }
-  #col2_content {  }
-
-  #col3 {  }
-  #col3_content {  }
-
-
- /*------------------------------------------------------------------------------------------------------*/
-
- /**
-  * Design of Additional Layout Elements | Gestaltung weiterer Layoutelemente
-  *
-  * @section layout-misc
-  */
-
-
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) Template for designing a screen layout
+ * (de) Gestaltungsvorlage für die Erstellung eines Screenlayouts
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ */
+
+@media screen, projection
+{
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * Design of the Basic Layout | Gestaltung des YAML Basis-Layouts
+  *
+  * @section layout-basics
+  */
+
+  /* Page margins and background | Randbereiche & Seitenhintergrund */
+  body {  }
+
+  /* Layout: Width, Background, Border | Layout: Breite, Hintergrund, Rahmen */
+  #page_margins {  }
+  #page{  }
+
+  /* Design of the Main Layout Elements | Gestaltung der Hauptelemente des Layouts */
+  #header {  }
+  #topnav {  }
+
+  #main {  }
+
+  #footer {  }
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * Formatting of the Content Area | Formatierung der Inhaltsbereichs
+  *
+  * @section layout-main
+  */
+
+  #col1 {  }
+  #col1_content {  }
+
+  #col2 {  }
+  #col2_content {  }
+
+  #col3 {  }
+  #col3_content {  }
+
+
+ /*------------------------------------------------------------------------------------------------------*/
+
+ /**
+  * Design of Additional Layout Elements | Gestaltung weiterer Layoutelemente
+  *
+  * @section layout-misc
+  */
+
+
 }
\ No newline at end of file
diff --git a/interface/web/themes/default/yaml/screen/content_default.css b/interface/web/themes/default/yaml/screen/content_default.css
index 5742599df1..1852ac1169 100644
--- a/interface/web/themes/default/yaml/screen/content_default.css
+++ b/interface/web/themes/default/yaml/screen/content_default.css
@@ -1,170 +1,170 @@
-@charset "UTF-8";
-/**
- * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
- *
- * (en) Uniform design of standard content elements
- * (de) Einheitliche Standardformatierungen für die wichtigten Inhalts-Elemente
- *
- * @copyright       Copyright 2005-2008, Dirk Jesse
- * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
- *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
- * @link            http://www.yaml.de
- * @package         yaml
- * @version         3.0.6
- * @revision        $Revision: 202 $
- * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
- * @appdef yaml
- */
-
-@media all
-{
-  /**
-   * Fonts
-   * (en) font-family and font-size selection for headings and standard text elements
-   * (de) Zeichensatz und Schriftgrößen für Überschriften und übliche Text-Elemente
-   *
-   * @section content-fonts
-   */
-
-  /* (en) reset font size for all elements to standard (16 Pixel) */
-  /* (de) Alle Schriftgrößen auf Standardgröße (16 Pixel) zurücksetzen */
-  html * { font-size: 100.01%; }
-
-  /* (en) reset monospaced elements to font size 16px in Gecko browsers */
-  /* (de) Schriftgröße von monospaced Elemente auf 16 Pixel setzen */
-  textarea, pre, tt, code {
-	font-family:"Courier New", Courier, monospace;  	
-  }
-
-  /* (en) base layout gets standard font size 12px */
-  /* (de) Basis-Layout erhält Standardschriftgröße von 12 Pixeln */
-  body {
-    font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif;
-    font-size: 75.00%; 
-  }
-
-  h1,h2,h3,h4,h5,h6 { font-weight:bold; margin: 0 0 0.25em 0; }
-  h1 { font-size: 200% }                        /* 24px */
-  h2 { font-size: 166.67% }                     /* 20px */
-  h3 { font-size: 150% }                        /* 18px */
-  h4 { font-size: 133.33% }                     /* 16px */
-  h5 { font-size: 116.67% }                     /* 14px */
-  h6 { font-size: 116.67%; font-style:italic; } /* 14px */
-
-  p { line-height: 1.5em; margin: 0 0 1em 0; }
-
-  /* ### Lists | Listen  #### */
-
-  ul, ol, dl { line-height: 1.5em; margin: 0 0 1em 1em; }
-  li { margin-left: 1.5em; line-height: 1.5em; }
-
-  dt { font-weight: bold; }
-  dd { margin: 0 0 1em 2em; }
-
-  /* ### text formatting | Textauszeichnung ### */
-
-  cite, blockquote { font-style:italic; }
-  blockquote { margin: 0 0 1em 1.5em; }
-
-  strong,b { font-weight: bold; }
-  em,i { font-style:italic; }
-
-  pre, code { font-family: monospace; font-size: 1.1em; }
-
-  acronym, abbr {
-    letter-spacing: .07em;
-    border-bottom: .1em dashed #c00;
-    cursor: help;
-  }
-
-  /**
-   * Generic Content Classes
-   * (en) standard classes for positioning and highlighting
-   * (de) Standardklassen zur Positionierung und Hervorhebung
-   *
-   * @section content-generic-classes
-   */
-
-  .note { background: #dfd; padding: 1em; border-top: 1px #bdb dotted; border-bottom: 1px #bdb dotted; }
-  .important { background: #ffd; padding: 1em; border-top: 1px #ddb dotted; border-bottom: 1px #ddb dotted; }
-  .warning { background: #fdd; padding: 1em; border-top: 1px #dbb dotted; border-bottom: 1px #dbb dotted; }
-
-  .float_left { float: left; display:inline; margin-right: 1em; margin-bottom: 0.15em; }
-  .float_right { float: right; display:inline; margin-left: 1em; margin-bottom: 0.15em; }
-  .center { text-align:center; margin: 0.5em auto; }
-
-  /**
-   * External Links
-   *
-   * (en) Formatting of hyperlinks
-   * (de) Gestaltung von Hyperlinks
-   *
-   */
-
-  a { color: #900; text-decoration:none; }
-  a:focus,
-  a:hover,
-  a:active { background-color: #fee; text-decoration:underline; }
-  
-  #topnav a { color: #aac; font-weight: bold; background:transparent; text-decoration:none; }
-  #topnav a:focus,
-  #topnav a:hover,
-  #topnav a:active{ text-decoration:underline; background-color: transparent; }
-  
-  #footer a { color: #aac; background:transparent; font-weight: bold; }
-  #footer a:focus,
-  #footer a:hover,
-  #footer a:active { color: #fff; background-color: transparent; text-decoration:underline; }
-
-  /**
-   * (en) Emphasizing external Hyperlinks via CSS
-   * (de) Hervorhebung externer Hyperlinks mit CSS
-   *
-   * @section             content-external-links
-   * @app-yaml-default    disabled
-   */
-
-  /*
-  #main a[href^="http://www.my-domain.com"],
-  #main a[href^="https://www.my-domain.com"]
-  {
-    padding-left: 12px;
-    background-image: url('your_image.gif');
-    background-repeat: no-repeat;
-    background-position: 0 0.45em;
-  }
-  */
-
-  /**
-   * Tables | Tabellen
-   * (en) Generic classes for table-width and design definition
-   * (de) Generische Klassen für die Tabellenbreite und Gestaltungsvorschriften für Tabellen
-   *
-   * @section content-tables
-   */
-
-  table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
-  table.full { width: 100%; }
-  table.fixed { table-layout:fixed; }
-
-  th,td { padding: 0.5em; }
-  thead th { background: #444; color: #fff; }
-  tbody th { background: #ccc; color: #333; }
-  tbody th.sub { background: #ddd; color: #333; }
-
-  /**
-   * Miscellaneous | Sonstiges
-   *
-   * @section content-misc
-   */
-
-  hr {
-    color: #fff;
-    background:transparent;
-    margin: 0 0 0.5em 0;
-    padding: 0 0 0.5em 0;
-    border:0;
-    border-bottom: 1px #000 solid;
-  }
-}
-
+@charset "UTF-8";
+/**
+ * "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework
+ *
+ * (en) Uniform design of standard content elements
+ * (de) Einheitliche Standardformatierungen für die wichtigten Inhalts-Elemente
+ *
+ * @copyright       Copyright 2005-2008, Dirk Jesse
+ * @license         CC-A 2.0 (http://creativecommons.org/licenses/by/2.0/),
+ *                  YAML-C (http://www.yaml.de/en/license/license-conditions.html)
+ * @link            http://www.yaml.de
+ * @package         yaml
+ * @version         3.0.6
+ * @revision        $Revision: 202 $
+ * @lastmodified    $Date: 2008-06-07 14:29:18 +0200 (Sa, 07 Jun 2008) $
+ * @appdef yaml
+ */
+
+@media all
+{
+  /**
+   * Fonts
+   * (en) font-family and font-size selection for headings and standard text elements
+   * (de) Zeichensatz und Schriftgrößen für Überschriften und übliche Text-Elemente
+   *
+   * @section content-fonts
+   */
+
+  /* (en) reset font size for all elements to standard (16 Pixel) */
+  /* (de) Alle Schriftgrößen auf Standardgröße (16 Pixel) zurücksetzen */
+  html * { font-size: 100.01%; }
+
+  /* (en) reset monospaced elements to font size 16px in Gecko browsers */
+  /* (de) Schriftgröße von monospaced Elemente auf 16 Pixel setzen */
+  textarea, pre, tt, code {
+	font-family:"Courier New", Courier, monospace;  	
+  }
+
+  /* (en) base layout gets standard font size 12px */
+  /* (de) Basis-Layout erhält Standardschriftgröße von 12 Pixeln */
+  body {
+    font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif;
+    font-size: 75.00%; 
+  }
+
+  h1,h2,h3,h4,h5,h6 { font-weight:bold; margin: 0 0 0.25em 0; }
+  h1 { font-size: 200% }                        /* 24px */
+  h2 { font-size: 166.67% }                     /* 20px */
+  h3 { font-size: 150% }                        /* 18px */
+  h4 { font-size: 133.33% }                     /* 16px */
+  h5 { font-size: 116.67% }                     /* 14px */
+  h6 { font-size: 116.67%; font-style:italic; } /* 14px */
+
+  p { line-height: 1.5em; margin: 0 0 1em 0; }
+
+  /* ### Lists | Listen  #### */
+
+  ul, ol, dl { line-height: 1.5em; margin: 0 0 1em 1em; }
+  li { margin-left: 1.5em; line-height: 1.5em; }
+
+  dt { font-weight: bold; }
+  dd { margin: 0 0 1em 2em; }
+
+  /* ### text formatting | Textauszeichnung ### */
+
+  cite, blockquote { font-style:italic; }
+  blockquote { margin: 0 0 1em 1.5em; }
+
+  strong,b { font-weight: bold; }
+  em,i { font-style:italic; }
+
+  pre, code { font-family: monospace; font-size: 1.1em; }
+
+  acronym, abbr {
+    letter-spacing: .07em;
+    border-bottom: .1em dashed #c00;
+    cursor: help;
+  }
+
+  /**
+   * Generic Content Classes
+   * (en) standard classes for positioning and highlighting
+   * (de) Standardklassen zur Positionierung und Hervorhebung
+   *
+   * @section content-generic-classes
+   */
+
+  .note { background: #dfd; padding: 1em; border-top: 1px #bdb dotted; border-bottom: 1px #bdb dotted; }
+  .important { background: #ffd; padding: 1em; border-top: 1px #ddb dotted; border-bottom: 1px #ddb dotted; }
+  .warning { background: #fdd; padding: 1em; border-top: 1px #dbb dotted; border-bottom: 1px #dbb dotted; }
+
+  .float_left { float: left; display:inline; margin-right: 1em; margin-bottom: 0.15em; }
+  .float_right { float: right; display:inline; margin-left: 1em; margin-bottom: 0.15em; }
+  .center { text-align:center; margin: 0.5em auto; }
+
+  /**
+   * External Links
+   *
+   * (en) Formatting of hyperlinks
+   * (de) Gestaltung von Hyperlinks
+   *
+   */
+
+  a { color: #900; text-decoration:none; }
+  a:focus,
+  a:hover,
+  a:active { background-color: #fee; text-decoration:underline; }
+  
+  #topnav a { color: #aac; font-weight: bold; background:transparent; text-decoration:none; }
+  #topnav a:focus,
+  #topnav a:hover,
+  #topnav a:active{ text-decoration:underline; background-color: transparent; }
+  
+  #footer a { color: #aac; background:transparent; font-weight: bold; }
+  #footer a:focus,
+  #footer a:hover,
+  #footer a:active { color: #fff; background-color: transparent; text-decoration:underline; }
+
+  /**
+   * (en) Emphasizing external Hyperlinks via CSS
+   * (de) Hervorhebung externer Hyperlinks mit CSS
+   *
+   * @section             content-external-links
+   * @app-yaml-default    disabled
+   */
+
+  /*
+  #main a[href^="http://www.my-domain.com"],
+  #main a[href^="https://www.my-domain.com"]
+  {
+    padding-left: 12px;
+    background-image: url('your_image.gif');
+    background-repeat: no-repeat;
+    background-position: 0 0.45em;
+  }
+  */
+
+  /**
+   * Tables | Tabellen
+   * (en) Generic classes for table-width and design definition
+   * (de) Generische Klassen für die Tabellenbreite und Gestaltungsvorschriften für Tabellen
+   *
+   * @section content-tables
+   */
+
+  table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
+  table.full { width: 100%; }
+  table.fixed { table-layout:fixed; }
+
+  th,td { padding: 0.5em; }
+  thead th { background: #444; color: #fff; }
+  tbody th { background: #ccc; color: #333; }
+  tbody th.sub { background: #ddd; color: #333; }
+
+  /**
+   * Miscellaneous | Sonstiges
+   *
+   * @section content-misc
+   */
+
+  hr {
+    color: #fff;
+    background:transparent;
+    margin: 0 0 0.5em 0;
+    padding: 0 0 0.5em 0;
+    border:0;
+    border-bottom: 1px #000 solid;
+  }
+}
+
diff --git a/interface/web/themes/default_64_navimg/css/additional.css b/interface/web/themes/default_64_navimg/css/additional.css
index 61bed3f859..465f042d38 100644
--- a/interface/web/themes/default_64_navimg/css/additional.css
+++ b/interface/web/themes/default_64_navimg/css/additional.css
@@ -1,60 +1,60 @@
-@media all
-{
-	#topNav a {
-		background-color: #D3D3D3;
-		background-position: center top;
-		background-repeat: no-repeat;
-		color:black;
-		display:inline-block;
-		height:20px;
-		padding-top:68px;
-		text-align:center;
-		text-decoration:none;
-		width:97px;
-	}
-
-	.topnav-admin {
-		background-image: url('/themes/default/icons/x64/system.png') !important;
-	}
-
-	.topnav-client {
-		background-image: url('/themes/default/icons/x64/client.png') !important;
-	}
-
-	.topnav-mail {
-		background-image: url('/themes/default/icons/x64/email.png') !important;
-	}
-
-	.topnav-monitor {
-		background-image: url('/themes/default/icons/x64/monitor.png') !important;
-	}
-
-	.topnav-sites {
-		background-image: url('/themes/default/icons/x64/sites.png') !important;
-	}
-
-	.topnav-dns {
-		background-image: url('/themes/default/icons/x64/dns.png') !important;
-	}
-
-	.topnav-tools {
-		background-image: url('/themes/default/icons/x64/tools.png') !important;
-	}
-
-	.topnav-help {
-		background-image: url('/themes/default/icons/x64/help.png') !important;
-	}
-
-	.topnav- {
-		background-image: url('/themes/default/icons/x64/login.png') !important;
-	}
-
-	.topnav-domain {
-		background-image: url('/themes/default/icons/x64/domain.png') !important;
-	}
-
-	.topnav-dashboard {
-		background-image: url('/themes/default/icons/x64/dashboard.png') !important;
-	}
-
+@media all
+{
+	#topNav a {
+		background-color: #D3D3D3;
+		background-position: center top;
+		background-repeat: no-repeat;
+		color:black;
+		display:inline-block;
+		height:20px;
+		padding-top:68px;
+		text-align:center;
+		text-decoration:none;
+		width:97px;
+	}
+
+	.topnav-admin {
+		background-image: url('/themes/default/icons/x64/system.png') !important;
+	}
+
+	.topnav-client {
+		background-image: url('/themes/default/icons/x64/client.png') !important;
+	}
+
+	.topnav-mail {
+		background-image: url('/themes/default/icons/x64/email.png') !important;
+	}
+
+	.topnav-monitor {
+		background-image: url('/themes/default/icons/x64/monitor.png') !important;
+	}
+
+	.topnav-sites {
+		background-image: url('/themes/default/icons/x64/sites.png') !important;
+	}
+
+	.topnav-dns {
+		background-image: url('/themes/default/icons/x64/dns.png') !important;
+	}
+
+	.topnav-tools {
+		background-image: url('/themes/default/icons/x64/tools.png') !important;
+	}
+
+	.topnav-help {
+		background-image: url('/themes/default/icons/x64/help.png') !important;
+	}
+
+	.topnav- {
+		background-image: url('/themes/default/icons/x64/login.png') !important;
+	}
+
+	.topnav-domain {
+		background-image: url('/themes/default/icons/x64/domain.png') !important;
+	}
+
+	.topnav-dashboard {
+		background-image: url('/themes/default/icons/x64/dashboard.png') !important;
+	}
+
 }
\ No newline at end of file
diff --git a/interface/web/themes/default_no_navimg/css/additional.css b/interface/web/themes/default_no_navimg/css/additional.css
index c5ceae2498..01ca51f3fa 100644
--- a/interface/web/themes/default_no_navimg/css/additional.css
+++ b/interface/web/themes/default_no_navimg/css/additional.css
@@ -1,60 +1,60 @@
-@media all
-{
-	#topNav a {
-		background-color: #D3D3D3;
-		background-position: center top;
-		background-repeat: no-repeat;
-		color:black;
-		display:inline-block;
-		height:20px;
-		padding-top:5px;
-		text-align:center;
-		text-decoration:none;
-		width:97px;
-	}
-
-	.topnav-admin {
-		background-image: none !important;
-	}
-
-	.topnav-client {
-		background-image: none !important;
-	}
-
-	.topnav-mail {
-		background-image: none !important;
-	}
-
-	.topnav-monitor {
-		background-image: none !important;
-	}
-
-	.topnav-sites {
-		background-image: none !important;
-	}
-
-	.topnav-dns {
-		background-image: none !important;
-	}
-
-	.topnav-tools {
-		background-image: none !important;
-	}
-
-	.topnav-help {
-		background-image: none !important;
-	}
-
-	.topnav- {
-		background-image: none !important;
-	}
-
-	.topnav-domain {
-		background-image: none !important;
-	}
-	
-	.topnav-dashboard {
-		background-image: none !important;
-	}
-	
+@media all
+{
+	#topNav a {
+		background-color: #D3D3D3;
+		background-position: center top;
+		background-repeat: no-repeat;
+		color:black;
+		display:inline-block;
+		height:20px;
+		padding-top:5px;
+		text-align:center;
+		text-decoration:none;
+		width:97px;
+	}
+
+	.topnav-admin {
+		background-image: none !important;
+	}
+
+	.topnav-client {
+		background-image: none !important;
+	}
+
+	.topnav-mail {
+		background-image: none !important;
+	}
+
+	.topnav-monitor {
+		background-image: none !important;
+	}
+
+	.topnav-sites {
+		background-image: none !important;
+	}
+
+	.topnav-dns {
+		background-image: none !important;
+	}
+
+	.topnav-tools {
+		background-image: none !important;
+	}
+
+	.topnav-help {
+		background-image: none !important;
+	}
+
+	.topnav- {
+		background-image: none !important;
+	}
+
+	.topnav-domain {
+		background-image: none !important;
+	}
+	
+	.topnav-dashboard {
+		background-image: none !important;
+	}
+	
 }
\ No newline at end of file
diff --git a/interface/web/tools/form/user_settings.tform.php b/interface/web/tools/form/user_settings.tform.php
index f261b1150c..65316114d7 100644
--- a/interface/web/tools/form/user_settings.tform.php
+++ b/interface/web/tools/form/user_settings.tform.php
@@ -1,164 +1,164 @@
-<?php
-
-/*
-Copyright (c) 2005, 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.
-*/
-
-/*
-	Form Definition
-
-	Tabellendefinition
-
-	Datentypen:
-	- INTEGER (Wandelt Ausdr�cke in Int um)
-	- DOUBLE
-	- CURRENCY (Formatiert Zahlen nach W�hrungsnotation)
-	- VARCHAR (kein weiterer Format Check)
-	- TEXT (kein weiterer Format Check)
-	- DATE (Datumsformat, Timestamp Umwandlung)
-
-	Formtype:
-	- TEXT (normales Textfeld)
-	- TEXTAREA (normales Textfeld)
-	- PASSWORD (Feldinhalt wird nicht angezeigt)
-	- SELECT (Gibt Werte als option Feld aus)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hinweis:
-	Das ID-Feld ist nicht bei den Table Values einzuf�gen.
-
-
-*/
-
-$form['title'] 			= 'User Settings';
-$form['description'] 	= 'Form to edit the user password and language.';
-$form['name'] 			= 'usersettings';
-$form['action']			= 'user_settings.php';
-$form['db_table']		= 'sys_user';
-$form['db_table_idx']	= 'userid';
-$form["db_history"]		= "no";
-$form['tab_default']	= 'users';
-$form['list_default']	= 'index.php';
-$form['auth']			= 'no';
-
-//* 0 = id of the user, > 0 id must match with id of current user
-$form['auth_preset']['userid']  = 0; 
-//* 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form['auth_preset']['groupid'] = 0; 
-
-//** Permissions are: r = read, i = insert, u = update, d = delete
-$form['auth_preset']['perm_user']  = 'riud';
-$form['auth_preset']['perm_group'] = 'riud';
-$form['auth_preset']['perm_other'] = '';
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang'); 
-while ($file = @readdir ($handle)) { 
-    if ($file != '.' && $file != '..') {
-        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-        }
-	}
-} 
-
-$form['tabs']['users'] = array (
-	'title' 	=> 'Settings',
-	'width' 	=> 80,
-	'template' 	=> 'templates/user_settings.htm',
-	'fields' 	=> array (
-	##################################
-	# Beginn Datenbankfelder
-	##################################
-		'passwort' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'PASSWORD',
-			'encryption'=> 'CRYPT',
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> '',
-			'separator'	=> '',
-			'width'		=> '15',
-			'maxlength'	=> '100',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'language' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'SELECT',
-			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
-														'errmsg'=> 'language_is_empty'),
-										1 => array (	'type'	=> 'REGEX',
-														'regex' => '/^[a-z]{2}$/i',
-														'errmsg'=> 'language_regex_mismatch'),
-									),
-			'regex'		=> '',
-			'errmsg'	=> '',
-			'default'	=> '',
-			'value'		=> $language_list,
-			'separator'	=> '',
-			'width'		=> '30',
-			'maxlength'	=> '2',
-			'rows'		=> '',
-			'cols'		=> ''
-		),
-		'id_rsa' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT id_rsa FROM client WHERE {AUTHSQL}',
-										'valuefield'=> 'id_rsa'
-									 ),
-			'value'		=> ''
-		),
-		'ssh_rsa' => array (
-			'datatype'	=> 'VARCHAR',
-			'formtype'	=> 'TEXT',
-			'default'	=> '',
-			'datasource'	=> array ( 	'type'	=> 'SQL',
-										'querystring' => 'SELECT ssh_rsa FROM client WHERE {AUTHSQL}',
-										'valuefield'=> 'ssh_rsa'
-									 ),
-			'value'		=> ''
-		)
-	##################################
-	# ENDE Datenbankfelder
-	##################################
-	)
-);
-
-
-?>
+<?php
+
+/*
+Copyright (c) 2005, 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.
+*/
+
+/*
+	Form Definition
+
+	Tabellendefinition
+
+	Datentypen:
+	- INTEGER (Wandelt Ausdr�cke in Int um)
+	- DOUBLE
+	- CURRENCY (Formatiert Zahlen nach W�hrungsnotation)
+	- VARCHAR (kein weiterer Format Check)
+	- TEXT (kein weiterer Format Check)
+	- DATE (Datumsformat, Timestamp Umwandlung)
+
+	Formtype:
+	- TEXT (normales Textfeld)
+	- TEXTAREA (normales Textfeld)
+	- PASSWORD (Feldinhalt wird nicht angezeigt)
+	- SELECT (Gibt Werte als option Feld aus)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hinweis:
+	Das ID-Feld ist nicht bei den Table Values einzuf�gen.
+
+
+*/
+
+$form['title'] 			= 'User Settings';
+$form['description'] 	= 'Form to edit the user password and language.';
+$form['name'] 			= 'usersettings';
+$form['action']			= 'user_settings.php';
+$form['db_table']		= 'sys_user';
+$form['db_table_idx']	= 'userid';
+$form["db_history"]		= "no";
+$form['tab_default']	= 'users';
+$form['list_default']	= 'index.php';
+$form['auth']			= 'no';
+
+//* 0 = id of the user, > 0 id must match with id of current user
+$form['auth_preset']['userid']  = 0; 
+//* 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form['auth_preset']['groupid'] = 0; 
+
+//** Permissions are: r = read, i = insert, u = update, d = delete
+$form['auth_preset']['perm_user']  = 'riud';
+$form['auth_preset']['perm_group'] = 'riud';
+$form['auth_preset']['perm_other'] = '';
+
+//* Languages
+$language_list = array();
+$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang'); 
+while ($file = @readdir ($handle)) { 
+    if ($file != '.' && $file != '..') {
+        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
+			$tmp = substr($file, 0, 2);
+			$language_list[$tmp] = $tmp;
+        }
+	}
+} 
+
+$form['tabs']['users'] = array (
+	'title' 	=> 'Settings',
+	'width' 	=> 80,
+	'template' 	=> 'templates/user_settings.htm',
+	'fields' 	=> array (
+	##################################
+	# Beginn Datenbankfelder
+	##################################
+		'passwort' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'PASSWORD',
+			'encryption'=> 'CRYPT',
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '15',
+			'maxlength'	=> '100',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'language' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'SELECT',
+			'validators'	=> array ( 	0 => array (	'type'	=> 'NOTEMPTY',
+														'errmsg'=> 'language_is_empty'),
+										1 => array (	'type'	=> 'REGEX',
+														'regex' => '/^[a-z]{2}$/i',
+														'errmsg'=> 'language_regex_mismatch'),
+									),
+			'regex'		=> '',
+			'errmsg'	=> '',
+			'default'	=> '',
+			'value'		=> $language_list,
+			'separator'	=> '',
+			'width'		=> '30',
+			'maxlength'	=> '2',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'id_rsa' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT id_rsa FROM client WHERE {AUTHSQL}',
+										'valuefield'=> 'id_rsa'
+									 ),
+			'value'		=> ''
+		),
+		'ssh_rsa' => array (
+			'datatype'	=> 'VARCHAR',
+			'formtype'	=> 'TEXT',
+			'default'	=> '',
+			'datasource'	=> array ( 	'type'	=> 'SQL',
+										'querystring' => 'SELECT ssh_rsa FROM client WHERE {AUTHSQL}',
+										'valuefield'=> 'ssh_rsa'
+									 ),
+			'value'		=> ''
+		)
+	##################################
+	# ENDE Datenbankfelder
+	##################################
+	)
+);
+
+
+?>
diff --git a/interface/web/tools/templates/user_settings.htm b/interface/web/tools/templates/user_settings.htm
index a3202adb77..b257fcc9dd 100644
--- a/interface/web/tools/templates/user_settings.htm
+++ b/interface/web/tools/templates/user_settings.htm
@@ -1,44 +1,44 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_usersettings">
-
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-      <div class="ctrlHolder">
-      	<label for="passwort">{tmpl_var name='passwort_txt'}</label>
-        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput" onkeyup="pass_check(this.value)"/>
-			</div>
-      <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='password_strength_txt'}</p>
-				<div id="passBar"></div>
-				<p class="formHint"><span id="passText">&nbsp;</span></p>
-			</div>
-      <div class="ctrlHolder">
-      	<label for="passwort2">{tmpl_var name='passwort_txt'}</label>
-        <input name="passwort2" id="passwort2" value="" size="15" maxlength="100" type="password" class="textInput" />
-			</div>
-      <div class="ctrlHolder">
-      	<label for="language">{tmpl_var name='language_txt'}</label>
-        <select name="language" id="language" class="selectInput withicons">
-					{tmpl_var name='language'}
-				</select>
-      </div>
-     <div class="ctrlHolder">
-      	<label for="id_rsa">id_rsa</label>
-        <textarea name="id_rsa" id="id_rsa" readonly rows='10' cols='30'>{tmpl_var name='id_rsa'}</textarea>
-      </div>
-      <div class="ctrlHolder">
-      	<label for="ssh_rsa">ssh_rsa</label>
-        <input name="ssh_rsa" id="ssh_rsa" value="{tmpl_var name='ssh_rsa'}" size="30" maxlength="600" type="text" class="textInput" />
-      </div>
-
-    <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-    <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','tools/user_settings.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('tools/index.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_usersettings">
+
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels">
+      <div class="ctrlHolder">
+      	<label for="passwort">{tmpl_var name='passwort_txt'}</label>
+        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput" onkeyup="pass_check(this.value)"/>
+			</div>
+      <div class="ctrlHolder">
+				<p class="label">{tmpl_var name='password_strength_txt'}</p>
+				<div id="passBar"></div>
+				<p class="formHint"><span id="passText">&nbsp;</span></p>
+			</div>
+      <div class="ctrlHolder">
+      	<label for="passwort2">{tmpl_var name='passwort_txt'}</label>
+        <input name="passwort2" id="passwort2" value="" size="15" maxlength="100" type="password" class="textInput" />
+			</div>
+      <div class="ctrlHolder">
+      	<label for="language">{tmpl_var name='language_txt'}</label>
+        <select name="language" id="language" class="selectInput withicons">
+					{tmpl_var name='language'}
+				</select>
+      </div>
+     <div class="ctrlHolder">
+      	<label for="id_rsa">id_rsa</label>
+        <textarea name="id_rsa" id="id_rsa" readonly rows='10' cols='30'>{tmpl_var name='id_rsa'}</textarea>
+      </div>
+      <div class="ctrlHolder">
+      	<label for="ssh_rsa">ssh_rsa</label>
+        <input name="ssh_rsa" id="ssh_rsa" value="{tmpl_var name='ssh_rsa'}" size="30" maxlength="600" type="text" class="textInput" />
+      </div>
+
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','tools/user_settings.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('tools/index.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>
diff --git a/server/lib/classes/tpl_cache.inc.php b/server/lib/classes/tpl_cache.inc.php
index 18e7d385f9..a3999466a7 100644
--- a/server/lib/classes/tpl_cache.inc.php
+++ b/server/lib/classes/tpl_cache.inc.php
@@ -1,186 +1,186 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP version 4.0                                                      |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 2002 Active Fish Group                                 |
-// +----------------------------------------------------------------------+
-// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
-// +----------------------------------------------------------------------+
-//
-// $Id: cache.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
-
-/**
- * Class uses all of vlibTemplate's functionality but caches the template files.
- * It creates an identical tree structure to your filesystem but with cached files.
- *
- * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
- * @since 22/02/2002
- * @package vLIB
- * @access public
- */
-
-class tplc extends tpl {
-
-/*-----------------------------------------------------------------------------\
-|     DO NOT TOUCH ANYTHING IN THIS CLASS, IT MAY NOT WORK OTHERWISE           |
-\-----------------------------------------------------------------------------*/
-
-    var $_cache = 1;     // tells vlibTemplate that we're caching
-    var $_cachefile;     // full path to current cache file (even if it doesn't yet exist)
-    var $_cacheexists;   // has this file been cached before
-    var $_cachefilelocked; // is this file currently locked whilst writing
-    var $_cachefiledir;  // dir of current cache file
-    var $_clearcache = 0;
-
-
-    /**
-     * FUNCTION: clearCache
-     * will unset a file, and set $this->_cacheexists to 0.
-     *
-     * @access public
-     * @return boolean
-     */
-    function clearCache() {
-        $this->_clearcache = 1;
-        return true;
-    }
-
-    /**
-     * FUNCTION: recache
-     * alias for clearCache().
-     *
-     * @access public
-     * @return boolean
-     */
-    function recache() {
-        return $this->clearCache();
-    }
-
-    /**
-     * FUNCTION: setCacheLifeTime
-     * sets the lifetime of the cached file
-     *
-     * @param int $int number of seconds to set lifetime to
-     * @access public
-     * @return boolean
-     */
-    function setCacheLifeTime($int = null) {
-        if ($int == null || !is_int($int)) return false;
-        if ($int == 0) $int = 60;
-        if ($int == -1) $int = 157680000; // set to 5 yrs time
-        $this->OPTIONS['CACHE_LIFETIME'] = $int;
-        return true;
-    }
-
-    /**
-     * FUNCTION: setCacheExtension
-     * sets the extention of the cache file
-     *
-     * @param str $str name of new cache extention
-     * @access public
-     * @return boolean
-     */
-    function setCacheExtension($str = null) {
-        if ($str == null || !preg_match('/^[a-z0-9]+$/', strtolower($str))) return false;
-        $this->OPTIONS['CACHE_EXTENSION'] = strtolower($str);
-        return true;
-    }
-
-
-/*----------------------------------------\
-          Private Functions
------------------------------------------*/
-
-    /**
-     * FUNCTION: _checkCache
-     * checks if there's a cache, if there is then it will read the cache file as the template.
-     */
-    function _checkCache ($tmplfile) {
-        $this->_cachefile = $this->_getFilename($tmplfile);
-        if ($this->_clearcache) {
-            if (file_exists($this->_cachefile)) unlink($this->_cachefile);
-            return false;
-        }
-
-        if (file_exists($this->_cachefile)) {
-            $this->_cacheexists = 1;
-
-            // if it's expired
-            if ((filemtime($this->_cachefile) + $this->OPTIONS['CACHE_LIFETIME']) < date ('U')
-                  || filectime($this->_cachefile) < filemtime($tmplfile)) {
-                $this->_cacheexists = 0;
-                return false; // so that we know to recache
-            }
-            else {
-                return true;
-            }
-
-        } else {
-            $this->_cacheexists = 0;
-            return false;
-        }
-    }
-
-
-    /**
-     * FUNCTION: _getFilename
-     * gets the full pathname for the cached file
-     *
-     */
-    function _getFilename($tmplfile) {
-        return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
-    }
-
-    /**
-     * FUNCTION: _createCache
-     * creates the cached file
-     *
-     */
-    function _createCache($data) {
-        $cache_file = $this->_cachefile;
-        if(!$this->_prepareDirs($cache_file)) return false; // prepare all of the directories
-
-        $f = fopen ($cache_file, "w");
-        flock($f, 2); // set an EXclusive lock
-        if (!$f) vlibTemplateError::raiseError('VT_ERROR_NO_CACHE_WRITE',KILL,$cache_file);
-        fputs ($f, $data); // write the parsed string from vlibTemplate
-        flock($f, 3); // UNlock file
-        fclose ($f);
-        touch ($cache_file);
-        return true;
-    }
-
-    /**
-     * FUNCTION: _prepareDirs
-     * prepares the directory structure
-     *
-     */
-    function _prepareDirs($file) {
-        if (empty($file)) die('no filename'); //do error in future
-        $filepath = dirname($file);
-        if (is_dir($filepath)) return true;
-
-        $dirs = preg_split('/[\\/]/', $filepath);
-        $currpath;
-        foreach ($dirs as $dir) {
-            $currpath .= $dir .'/';
-            $type = @filetype($currpath);
-
-            ($type=='link') and $type = 'dir';
-            if ($type != 'dir' && $type != false && !empty($type)) {
-                vlibTemplateError::raiseError('VT_ERROR_WRONG_CACHE_TYPE',KILL,'directory: '.$currpath.', type: '.$type);
-            }
-            if ($type == 'dir') {
-                continue;
-            }
-            else {
-                $s = @mkdir($currpath, 0775);
-                if (!$s) vlibTemplateError::raiseError('VT_ERROR_CACHE_MKDIR_FAILURE',KILL,'directory: '.$currpath);
-            }
-        }
-        return true;
-    }
-
-} // -- end vlibTemplateCache class
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP version 4.0                                                      |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 2002 Active Fish Group                                 |
+// +----------------------------------------------------------------------+
+// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
+// +----------------------------------------------------------------------+
+//
+// $Id: cache.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
+
+/**
+ * Class uses all of vlibTemplate's functionality but caches the template files.
+ * It creates an identical tree structure to your filesystem but with cached files.
+ *
+ * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
+ * @since 22/02/2002
+ * @package vLIB
+ * @access public
+ */
+
+class tplc extends tpl {
+
+/*-----------------------------------------------------------------------------\
+|     DO NOT TOUCH ANYTHING IN THIS CLASS, IT MAY NOT WORK OTHERWISE           |
+\-----------------------------------------------------------------------------*/
+
+    var $_cache = 1;     // tells vlibTemplate that we're caching
+    var $_cachefile;     // full path to current cache file (even if it doesn't yet exist)
+    var $_cacheexists;   // has this file been cached before
+    var $_cachefilelocked; // is this file currently locked whilst writing
+    var $_cachefiledir;  // dir of current cache file
+    var $_clearcache = 0;
+
+
+    /**
+     * FUNCTION: clearCache
+     * will unset a file, and set $this->_cacheexists to 0.
+     *
+     * @access public
+     * @return boolean
+     */
+    function clearCache() {
+        $this->_clearcache = 1;
+        return true;
+    }
+
+    /**
+     * FUNCTION: recache
+     * alias for clearCache().
+     *
+     * @access public
+     * @return boolean
+     */
+    function recache() {
+        return $this->clearCache();
+    }
+
+    /**
+     * FUNCTION: setCacheLifeTime
+     * sets the lifetime of the cached file
+     *
+     * @param int $int number of seconds to set lifetime to
+     * @access public
+     * @return boolean
+     */
+    function setCacheLifeTime($int = null) {
+        if ($int == null || !is_int($int)) return false;
+        if ($int == 0) $int = 60;
+        if ($int == -1) $int = 157680000; // set to 5 yrs time
+        $this->OPTIONS['CACHE_LIFETIME'] = $int;
+        return true;
+    }
+
+    /**
+     * FUNCTION: setCacheExtension
+     * sets the extention of the cache file
+     *
+     * @param str $str name of new cache extention
+     * @access public
+     * @return boolean
+     */
+    function setCacheExtension($str = null) {
+        if ($str == null || !preg_match('/^[a-z0-9]+$/', strtolower($str))) return false;
+        $this->OPTIONS['CACHE_EXTENSION'] = strtolower($str);
+        return true;
+    }
+
+
+/*----------------------------------------\
+          Private Functions
+-----------------------------------------*/
+
+    /**
+     * FUNCTION: _checkCache
+     * checks if there's a cache, if there is then it will read the cache file as the template.
+     */
+    function _checkCache ($tmplfile) {
+        $this->_cachefile = $this->_getFilename($tmplfile);
+        if ($this->_clearcache) {
+            if (file_exists($this->_cachefile)) unlink($this->_cachefile);
+            return false;
+        }
+
+        if (file_exists($this->_cachefile)) {
+            $this->_cacheexists = 1;
+
+            // if it's expired
+            if ((filemtime($this->_cachefile) + $this->OPTIONS['CACHE_LIFETIME']) < date ('U')
+                  || filectime($this->_cachefile) < filemtime($tmplfile)) {
+                $this->_cacheexists = 0;
+                return false; // so that we know to recache
+            }
+            else {
+                return true;
+            }
+
+        } else {
+            $this->_cacheexists = 0;
+            return false;
+        }
+    }
+
+
+    /**
+     * FUNCTION: _getFilename
+     * gets the full pathname for the cached file
+     *
+     */
+    function _getFilename($tmplfile) {
+        return $this->OPTIONS['CACHE_DIRECTORY'].'/'.md5('vlibCachestaR'.realpath($tmplfile)).'.'.$this->OPTIONS['CACHE_EXTENSION'];
+    }
+
+    /**
+     * FUNCTION: _createCache
+     * creates the cached file
+     *
+     */
+    function _createCache($data) {
+        $cache_file = $this->_cachefile;
+        if(!$this->_prepareDirs($cache_file)) return false; // prepare all of the directories
+
+        $f = fopen ($cache_file, "w");
+        flock($f, 2); // set an EXclusive lock
+        if (!$f) vlibTemplateError::raiseError('VT_ERROR_NO_CACHE_WRITE',KILL,$cache_file);
+        fputs ($f, $data); // write the parsed string from vlibTemplate
+        flock($f, 3); // UNlock file
+        fclose ($f);
+        touch ($cache_file);
+        return true;
+    }
+
+    /**
+     * FUNCTION: _prepareDirs
+     * prepares the directory structure
+     *
+     */
+    function _prepareDirs($file) {
+        if (empty($file)) die('no filename'); //do error in future
+        $filepath = dirname($file);
+        if (is_dir($filepath)) return true;
+
+        $dirs = preg_split('/[\\/]/', $filepath);
+        $currpath;
+        foreach ($dirs as $dir) {
+            $currpath .= $dir .'/';
+            $type = @filetype($currpath);
+
+            ($type=='link') and $type = 'dir';
+            if ($type != 'dir' && $type != false && !empty($type)) {
+                vlibTemplateError::raiseError('VT_ERROR_WRONG_CACHE_TYPE',KILL,'directory: '.$currpath.', type: '.$type);
+            }
+            if ($type == 'dir') {
+                continue;
+            }
+            else {
+                $s = @mkdir($currpath, 0775);
+                if (!$s) vlibTemplateError::raiseError('VT_ERROR_CACHE_MKDIR_FAILURE',KILL,'directory: '.$currpath);
+            }
+        }
+        return true;
+    }
+
+} // -- end vlibTemplateCache class
 ?>
\ No newline at end of file
diff --git a/server/lib/classes/tpl_error.inc.php b/server/lib/classes/tpl_error.inc.php
index 2f139882b9..d15b80a2ca 100644
--- a/server/lib/classes/tpl_error.inc.php
+++ b/server/lib/classes/tpl_error.inc.php
@@ -1,92 +1,92 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP version 4.0                                                      |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 2002 Active Fish Group                                 |
-// +----------------------------------------------------------------------+
-// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
-// +----------------------------------------------------------------------+
-//
-// $Id: error.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
-
-define('FATAL', E_USER_ERROR);
-define('WARNING', E_USER_WARNING);
-define('NOTICE', E_USER_NOTICE);
-define('KILL',   -1); // used for killing inside parsing.
-
-/**
- * Class is used by vlibTemplate.
- * It handles all of the error reporting for vlibTemplate.
- *
- * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
- * @since 06/03/2002
- * @package vLIB
- * @access private
- */
-
-class vlibTemplateError {
-
-/*-----------------------------------------------------------------------------\
-|     DO NOT TOUCH ANYTHING IN THIS CLASS IT MAY NOT WORK OTHERWISE            |
-\-----------------------------------------------------------------------------*/
-
-    function raiseError ($code, $level = null, $extra=null) {
-        if (!($level & error_reporting())&& $level != KILL) return; // binary AND checks for reporting level
-
-        $error_codes = array(
-                        'VT_ERROR_NOFILE'               => 'vlibTemplate Error: Template ('.$extra.') file not found.',
-                        'VT_ERROR_PARSE'                => 'vlibTemplate Error: Parse error!<br>To debug this file, use vlibTemplateDebug instead of vlibTemplate in the class instantiation(i.e. new vlibTemplateDebug).',
-                        'VT_NOTICE_INVALID_TAG'         => 'vlibTemplate Notice: Invalid tag ('.$extra.').',
-                        'VT_ERROR_INVALID_TAG'          => 'vlibTemplate Error: Invalid tag ('.$extra.'). To disable this you must turn of the STRICT option.',
-                        'VT_NOTICE_INVALID_ATT'         => 'vlibTemplate Notice: Invalid attribute ('.$extra.').',
-                        'VT_WARNING_INVALID_ARR'        => 'vlibTemplate Warning: Invalid loop structure passed to vlibTemplate::setLoop() (loop name: '.$extra.').',
-                        'VT_ERROR_INVALID_ERROR_CODE'   => 'vlibTemplate Error: Invalid error raised.',
-                        'VT_ERROR_WRONG_NO_PARAMS'      => 'vlibTemplate Warning: Wrond parameter count passed to '.$extra.'.',
-                        'VT_ERROR_UNKNOWN_VAR'          => 'vlibTemplate Error: template var not found.',
-                        'VT_ERROR_NO_CACHE_WRITE'       => 'vlibTemplate Error: unable to write to cache file ('.$extra.').',
-                        'VT_ERROR_WRONG_CACHE_TYPE'     => 'vlibTemplate Error: non-directory file found in cache root with same name as directory ('.$extra.').',
-                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => 'vlibTemplate Error: failed to create directory in cache root ('.$extra.').',
-                        'VT_WARNING_NOT_CACHE_OBJ'      => 'vlibTemplate Warning: called a vlibTemplateCache function ('.$extra.') without instantiating the vlibTemplateCache class.',
-                        'VT_WARNING_LOOP_NOT_SET'       => 'vlibTemplate Warning: called vlibTemplate::addRow() or vlibTemplate::addLoop() with an invalid loop name.',
-                        'VT_WARNING_INVALID_RESOURCE'   => 'vlibTemplate Warning: Invalid resource type passed to vlibTemplate::setDbLoop() for Db "'.$extra.'".',
-                        'VT_WARNING_INVALID_LOOP_DB'    => 'vlibTemplate Warning: Invalid Db type passed to vlibTemplate::setDbLoop(), "'.$extra.'" not currently available.',
-                        'VT_WARNING_INVALID_IF_OP'      => 'vlibTemplate Warning: The Operator "'.$extra.'" is not supported by vlibTemplate.'
-                            );
-
-        $error_levels = array(
-                        'VT_ERROR_NOFILE'               => FATAL,
-                        'VT_ERROR_PARSE'                => FATAL,
-                        'VT_NOTICE_INVALID_TAG'         => NOTICE,
-                        'VT_ERROR_INVALID_TAG'          => FATAL,
-                        'VT_NOTICE_INVALID_ATT'         => NOTICE,
-                        'VT_WARNING_INVALID_ARR'        => WARNING,
-                        'VT_ERROR_INVALID_ERROR_CODE'   => FATAL,
-                        'VT_ERROR_WRONG_NO_PARAMS'      => WARNING,
-                        'VT_ERROR_UNKNOWN_VAR'          => WARNING,
-                        'VT_ERROR_NO_CACHE_WRITE'       => KILL,
-                        'VT_ERROR_WRONG_CACHE_TYPE'     => KILL,
-                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => KILL,
-                        'VT_WARNING_NOT_CACHE_OBJ'      => WARNING,
-                        'VT_WARNING_LOOP_NOT_SET'       => WARNING,
-                        'VT_WARNING_INVALID_RESOURCE'   => WARNING,
-                        'VT_WARNING_INVALID_LOOP_DB'    => WARNING,
-                        'VT_WARNING_INVALID_IF_OP'      => WARNING
-                            );
-
-        ($level === null) and $level = $error_levels[$code];
-        if ($level == KILL) {
-            die ($error_codes[$code]);
-        }
-
-        if ($msg = $error_codes[$code]) {
-            trigger_error($msg, $level);
-        } else {
-            $level = $error_levels['VT_ERROR_INVALID_ERROR_CODE'];
-            $msg = $error_codes['VT_ERROR_INVALID_ERROR_CODE'];
-            trigger_error($msg, $level);
-        }
-        return;
-    }
-}
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP version 4.0                                                      |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 2002 Active Fish Group                                 |
+// +----------------------------------------------------------------------+
+// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
+// +----------------------------------------------------------------------+
+//
+// $Id: error.php,v 1.1 2003/07/08 12:32:06 platinum Exp $
+
+define('FATAL', E_USER_ERROR);
+define('WARNING', E_USER_WARNING);
+define('NOTICE', E_USER_NOTICE);
+define('KILL',   -1); // used for killing inside parsing.
+
+/**
+ * Class is used by vlibTemplate.
+ * It handles all of the error reporting for vlibTemplate.
+ *
+ * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
+ * @since 06/03/2002
+ * @package vLIB
+ * @access private
+ */
+
+class vlibTemplateError {
+
+/*-----------------------------------------------------------------------------\
+|     DO NOT TOUCH ANYTHING IN THIS CLASS IT MAY NOT WORK OTHERWISE            |
+\-----------------------------------------------------------------------------*/
+
+    function raiseError ($code, $level = null, $extra=null) {
+        if (!($level & error_reporting())&& $level != KILL) return; // binary AND checks for reporting level
+
+        $error_codes = array(
+                        'VT_ERROR_NOFILE'               => 'vlibTemplate Error: Template ('.$extra.') file not found.',
+                        'VT_ERROR_PARSE'                => 'vlibTemplate Error: Parse error!<br>To debug this file, use vlibTemplateDebug instead of vlibTemplate in the class instantiation(i.e. new vlibTemplateDebug).',
+                        'VT_NOTICE_INVALID_TAG'         => 'vlibTemplate Notice: Invalid tag ('.$extra.').',
+                        'VT_ERROR_INVALID_TAG'          => 'vlibTemplate Error: Invalid tag ('.$extra.'). To disable this you must turn of the STRICT option.',
+                        'VT_NOTICE_INVALID_ATT'         => 'vlibTemplate Notice: Invalid attribute ('.$extra.').',
+                        'VT_WARNING_INVALID_ARR'        => 'vlibTemplate Warning: Invalid loop structure passed to vlibTemplate::setLoop() (loop name: '.$extra.').',
+                        'VT_ERROR_INVALID_ERROR_CODE'   => 'vlibTemplate Error: Invalid error raised.',
+                        'VT_ERROR_WRONG_NO_PARAMS'      => 'vlibTemplate Warning: Wrond parameter count passed to '.$extra.'.',
+                        'VT_ERROR_UNKNOWN_VAR'          => 'vlibTemplate Error: template var not found.',
+                        'VT_ERROR_NO_CACHE_WRITE'       => 'vlibTemplate Error: unable to write to cache file ('.$extra.').',
+                        'VT_ERROR_WRONG_CACHE_TYPE'     => 'vlibTemplate Error: non-directory file found in cache root with same name as directory ('.$extra.').',
+                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => 'vlibTemplate Error: failed to create directory in cache root ('.$extra.').',
+                        'VT_WARNING_NOT_CACHE_OBJ'      => 'vlibTemplate Warning: called a vlibTemplateCache function ('.$extra.') without instantiating the vlibTemplateCache class.',
+                        'VT_WARNING_LOOP_NOT_SET'       => 'vlibTemplate Warning: called vlibTemplate::addRow() or vlibTemplate::addLoop() with an invalid loop name.',
+                        'VT_WARNING_INVALID_RESOURCE'   => 'vlibTemplate Warning: Invalid resource type passed to vlibTemplate::setDbLoop() for Db "'.$extra.'".',
+                        'VT_WARNING_INVALID_LOOP_DB'    => 'vlibTemplate Warning: Invalid Db type passed to vlibTemplate::setDbLoop(), "'.$extra.'" not currently available.',
+                        'VT_WARNING_INVALID_IF_OP'      => 'vlibTemplate Warning: The Operator "'.$extra.'" is not supported by vlibTemplate.'
+                            );
+
+        $error_levels = array(
+                        'VT_ERROR_NOFILE'               => FATAL,
+                        'VT_ERROR_PARSE'                => FATAL,
+                        'VT_NOTICE_INVALID_TAG'         => NOTICE,
+                        'VT_ERROR_INVALID_TAG'          => FATAL,
+                        'VT_NOTICE_INVALID_ATT'         => NOTICE,
+                        'VT_WARNING_INVALID_ARR'        => WARNING,
+                        'VT_ERROR_INVALID_ERROR_CODE'   => FATAL,
+                        'VT_ERROR_WRONG_NO_PARAMS'      => WARNING,
+                        'VT_ERROR_UNKNOWN_VAR'          => WARNING,
+                        'VT_ERROR_NO_CACHE_WRITE'       => KILL,
+                        'VT_ERROR_WRONG_CACHE_TYPE'     => KILL,
+                        'VT_ERROR_CACHE_MKDIR_FAILURE'  => KILL,
+                        'VT_WARNING_NOT_CACHE_OBJ'      => WARNING,
+                        'VT_WARNING_LOOP_NOT_SET'       => WARNING,
+                        'VT_WARNING_INVALID_RESOURCE'   => WARNING,
+                        'VT_WARNING_INVALID_LOOP_DB'    => WARNING,
+                        'VT_WARNING_INVALID_IF_OP'      => WARNING
+                            );
+
+        ($level === null) and $level = $error_levels[$code];
+        if ($level == KILL) {
+            die ($error_codes[$code]);
+        }
+
+        if ($msg = $error_codes[$code]) {
+            trigger_error($msg, $level);
+        } else {
+            $level = $error_levels['VT_ERROR_INVALID_ERROR_CODE'];
+            $msg = $error_codes['VT_ERROR_INVALID_ERROR_CODE'];
+            trigger_error($msg, $level);
+        }
+        return;
+    }
+}
 ?>
\ No newline at end of file
diff --git a/server/mods-available/mail_module.inc.php b/server/mods-available/mail_module.inc.php
index 1b7f9575ba..23e0b8d7df 100644
--- a/server/mods-available/mail_module.inc.php
+++ b/server/mods-available/mail_module.inc.php
@@ -1,162 +1,162 @@
-<?php
-
-/*
-Copyright (c) 2007, 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 mail_module {
-	
-	var $module_name = 'mail_module';
-	var $class_name = 'mail_module';
-	var $actions_available = array(	'mail_domain_insert',
-									'mail_domain_update',
-									'mail_domain_delete',
-									'mail_user_insert',
-									'mail_user_update',
-									'mail_user_delete',
-									'mail_access_insert',
-									'mail_access_update',
-									'mail_access_delete',
-									'mail_forwarding_insert',
-									'mail_forwarding_update',
-									'mail_forwarding_delete',
-									'mail_transport_insert',
-									'mail_transport_update',
-									'mail_transport_delete',
-									'mail_get_insert',
-									'mail_get_update',
-									'mail_get_delete',
-									'mail_content_filter_insert',
-									'mail_content_filter_update',
-									'mail_content_filter_delete',
-									'mail_mailinglist_insert',
-									'mail_mailinglist_update',
-									'mail_mailinglist_delete');
-	
-	//* This function is called during ispconfig installation to determine
-	//  if a symlink shall be created for this plugin.
-	function onInstall() {
-		global $conf;
-		
-		if($conf['services']['mail'] == true) {
-			return true;
-		} else {
-			return false;
-		}
-		
-	}
-	
-	/*
-	 	This function is called when the module is loaded
-	*/
-	
-	function onLoad() {
-		global $app;
-		
-		/*
-		Annonce the actions that where provided by this module, so plugins 
-		can register on them.
-		*/
-		
-		$app->plugins->announceEvents($this->module_name,$this->actions_available);
-		
-		/*
-		As we want to get notified of any changes on several database tables,
-		we register for them.
-		
-		The following function registers the function "functionname"
- 		to be executed when a record for the table "dbtable" is 
- 		processed in the sys_datalog. "classname" is the name of the
- 		class that contains the function functionname.
-		*/
-		
-		$app->modules->registerTableHook('mail_access','mail_module','process');
-		$app->modules->registerTableHook('mail_domain','mail_module','process');
-		$app->modules->registerTableHook('mail_forwarding','mail_module','process');
-		$app->modules->registerTableHook('mail_transport','mail_module','process');
-		$app->modules->registerTableHook('mail_user','mail_module','process');
-		$app->modules->registerTableHook('mail_get','mail_module','process');
-		$app->modules->registerTableHook('mail_content_filter','mail_module','process');
-		$app->modules->registerTableHook('mail_mailinglist','mail_module','process');
-		
-	}
-	
-	/*
-	 This function is called when a change in one of the registered tables is detected.
-	 The function then raises the events for the plugins.
-	*/
-
-	function process($tablename,$action,$data) {
-		global $app;
-		
-		switch ($tablename) {
-			case 'mail_access':
-				if($action == 'i') $app->plugins->raiseEvent('mail_access_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_access_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_access_delete',$data);
-			break;
-			case 'mail_domain':
-				if($action == 'i') $app->plugins->raiseEvent('mail_domain_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_domain_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_domain_delete',$data);
-			break;
-			case 'mail_forwarding':
-				if($action == 'i') $app->plugins->raiseEvent('mail_forwarding_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_forwarding_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_forwarding_delete',$data);
-			break;
-			case 'mail_transport':
-				if($action == 'i') $app->plugins->raiseEvent('mail_transport_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_transport_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_transport_delete',$data);
-			break;
-			case 'mail_user':
-				if($action == 'i') $app->plugins->raiseEvent('mail_user_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_user_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_user_delete',$data);
-			break;
-			case 'mail_get':
-				if($action == 'i') $app->plugins->raiseEvent('mail_get_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_get_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_get_delete',$data);
-			break;
-			case 'mail_content_filter':
-				if($action == 'i') $app->plugins->raiseEvent('mail_content_filter_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_content_filter_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_content_filter_delete',$data);
-			break;
-			case 'mail_mailinglist':
-				if($action == 'i') $app->plugins->raiseEvent('mail_mailinglist_insert',$data);
-				if($action == 'u') $app->plugins->raiseEvent('mail_mailinglist_update',$data);
-				if($action == 'd') $app->plugins->raiseEvent('mail_mailinglist_delete',$data);
-			break;
-		} // end switch
-	} // end function
-
-} // end class
-
+<?php
+
+/*
+Copyright (c) 2007, 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 mail_module {
+	
+	var $module_name = 'mail_module';
+	var $class_name = 'mail_module';
+	var $actions_available = array(	'mail_domain_insert',
+									'mail_domain_update',
+									'mail_domain_delete',
+									'mail_user_insert',
+									'mail_user_update',
+									'mail_user_delete',
+									'mail_access_insert',
+									'mail_access_update',
+									'mail_access_delete',
+									'mail_forwarding_insert',
+									'mail_forwarding_update',
+									'mail_forwarding_delete',
+									'mail_transport_insert',
+									'mail_transport_update',
+									'mail_transport_delete',
+									'mail_get_insert',
+									'mail_get_update',
+									'mail_get_delete',
+									'mail_content_filter_insert',
+									'mail_content_filter_update',
+									'mail_content_filter_delete',
+									'mail_mailinglist_insert',
+									'mail_mailinglist_update',
+									'mail_mailinglist_delete');
+	
+	//* This function is called during ispconfig installation to determine
+	//  if a symlink shall be created for this plugin.
+	function onInstall() {
+		global $conf;
+		
+		if($conf['services']['mail'] == true) {
+			return true;
+		} else {
+			return false;
+		}
+		
+	}
+	
+	/*
+	 	This function is called when the module is loaded
+	*/
+	
+	function onLoad() {
+		global $app;
+		
+		/*
+		Annonce the actions that where provided by this module, so plugins 
+		can register on them.
+		*/
+		
+		$app->plugins->announceEvents($this->module_name,$this->actions_available);
+		
+		/*
+		As we want to get notified of any changes on several database tables,
+		we register for them.
+		
+		The following function registers the function "functionname"
+ 		to be executed when a record for the table "dbtable" is 
+ 		processed in the sys_datalog. "classname" is the name of the
+ 		class that contains the function functionname.
+		*/
+		
+		$app->modules->registerTableHook('mail_access','mail_module','process');
+		$app->modules->registerTableHook('mail_domain','mail_module','process');
+		$app->modules->registerTableHook('mail_forwarding','mail_module','process');
+		$app->modules->registerTableHook('mail_transport','mail_module','process');
+		$app->modules->registerTableHook('mail_user','mail_module','process');
+		$app->modules->registerTableHook('mail_get','mail_module','process');
+		$app->modules->registerTableHook('mail_content_filter','mail_module','process');
+		$app->modules->registerTableHook('mail_mailinglist','mail_module','process');
+		
+	}
+	
+	/*
+	 This function is called when a change in one of the registered tables is detected.
+	 The function then raises the events for the plugins.
+	*/
+
+	function process($tablename,$action,$data) {
+		global $app;
+		
+		switch ($tablename) {
+			case 'mail_access':
+				if($action == 'i') $app->plugins->raiseEvent('mail_access_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_access_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_access_delete',$data);
+			break;
+			case 'mail_domain':
+				if($action == 'i') $app->plugins->raiseEvent('mail_domain_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_domain_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_domain_delete',$data);
+			break;
+			case 'mail_forwarding':
+				if($action == 'i') $app->plugins->raiseEvent('mail_forwarding_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_forwarding_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_forwarding_delete',$data);
+			break;
+			case 'mail_transport':
+				if($action == 'i') $app->plugins->raiseEvent('mail_transport_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_transport_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_transport_delete',$data);
+			break;
+			case 'mail_user':
+				if($action == 'i') $app->plugins->raiseEvent('mail_user_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_user_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_user_delete',$data);
+			break;
+			case 'mail_get':
+				if($action == 'i') $app->plugins->raiseEvent('mail_get_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_get_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_get_delete',$data);
+			break;
+			case 'mail_content_filter':
+				if($action == 'i') $app->plugins->raiseEvent('mail_content_filter_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_content_filter_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_content_filter_delete',$data);
+			break;
+			case 'mail_mailinglist':
+				if($action == 'i') $app->plugins->raiseEvent('mail_mailinglist_insert',$data);
+				if($action == 'u') $app->plugins->raiseEvent('mail_mailinglist_update',$data);
+				if($action == 'd') $app->plugins->raiseEvent('mail_mailinglist_delete',$data);
+			break;
+		} // end switch
+	} // end function
+
+} // end class
+
 ?>
\ No newline at end of file
diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php
index 9375233440..f24fadde5e 100644
--- a/server/mods-available/remoteaction_core_module.inc.php
+++ b/server/mods-available/remoteaction_core_module.inc.php
@@ -1,204 +1,204 @@
-<?php
-/*
-Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
-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 remoteaction_core_module {
-	var $module_name = 'remoteaction_core_module';
-	var $class_name = 'remoteaction_core_module';
-	/* No actions at this time. maybe later... */
-	var $actions_available = array();
-	//* This function is called during ispconfig installation to determine
-	//  if a symlink shall be created for this plugin.
-	function onInstall() {
-		return true;
-	}
-
-	/*
-        This function is called when the module is loaded
-	*/
-	function onLoad() {
-		/*
-       	 * Check for actions to execute
-		*/
-		$this->_execActions();
-	}
-
-	/*
-     This function is called when a change in one of the registered tables is detected.
-     The function then raises the events for the plugins.
-	*/
-	function process($tablename, $action, $data) {
-		// not needed
-	} // end function
-
-	private function _actionDone($id, $state) {
-		/*
-		 * First set the state
-		 */
-		global $app;
-		$sql = "UPDATE sys_remoteaction " .
-				"SET action_state = '" . $app->dbmaster->quote($state) . "' " .
-				"WHERE action_id = " . intval($id);
-		$app->dbmaster->query($sql);
-
-		/*
-		 * Then save the maxid for the next time...
-		 */
-		$fp = fopen(dirname(__FILE__) .  "/../lib/remote_action.inc.php", 'wb');
-		$content = '<?php' . "\n" . '$maxid_remote_action = ' . $id . ';' . "\n?>";
-		fwrite($fp, $content);
-		fclose($fp);
-	}
-
-
-	/**
-	 * This method searches for scheduled actions and exec then
-	 */
-	private function _execActions() {
-		global $app;
-		global $conf;
-
-		/* the id of the server as int */
-		$server_id = intval($conf["server_id"]);
-
-		/*
-		 * First we (till and i, oliver) thought, it was enough to write
-		 * "select from where action_status = 'pending'" and then execute this actions.
-		 * But it is not!
-		 * If a hacker can hack into a server, she can change the valus of action_status
-		 * and so re-exec a action, executed some days bevore. So she can (for example)
-		 * stop a service, a admin stopped some days before! To avoid this, we ignore
-		 * the status (it is only for the interface to show) and use our own maxid
-		*/
-		include_once (dirname(__FILE__) .  "/../lib/remote_action.inc.php");
-
-		/*
-		 * Get all actions this server should execute
-		*/
-		$sql = "SELECT action_id, action_type, action_param " .
-				"FROM sys_remoteaction " .
-				"WHERE server_id = " . $server_id . " ".
-				" AND  action_id > " . intval($maxid_remote_action) . " ".
-				"ORDER BY action_id";
-		$actions = $app->dbmaster->queryAllRecords($sql);
-
-		/*
-		 * process all actions
-		*/
-		if(is_array($actions)) {
-			foreach ($actions as $action) {
-				if ($action['action_type'] == 'os_update') {
-					/* do the update */
-					$this->_doOsUpdate($action);
-					/* this action takes so much time,
-					* we stop executing the actions not to waste more time */
-					return;
-				}
-				if ($action['action_type'] == 'ispc_update') {
-					/* do the update */
-					$this->_doIspCUpdate($action);
-					/* this action takes so much time,
-					* we stop executing the actions not to waste more time */
-					return;
-				}
-			}
-		}
-	}
-
-	private function _doOsUpdate($action) {
-		/*
-		 * Do the update
-		 */
-		//TODO : change this when distribution information has been integrated into server record
-		if(file_exists('/etc/gentoo-release')) {
-			exec("glsa-check -f --nocolor affected");
-		}
-		else {
-			exec("aptitude update");
-			exec("aptitude upgrade -y");
-		}
-		
-		/*
-		 * All well done!
-		 */
-		$this->_actionDone($action['action_id'], 'ok');
-	}
-
-	private function _doIspCUpdate($action) {
-		
-		// Ensure that this code is not executed twice as this would cause a loop in case of a failure
-		$this->_actionDone($action['action_id'], 'ok');
-		
-		/*
-		 * Get the version-number of the newest version 
-		 */
-		$new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt');
-		$new_version = trim($new_version);
-
-		/*
-		 * Do the update
-		 */
-
-		/* jump into the temporary dir */
-		$oldDir = getcwd();
-		chdir("/tmp");
-
-		/* delete the old files (if there are any...) */
-		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
-		exec("rm /tmp/ispconfig3_install -R");
-		
-		/* get the newest version */
-		exec("wget http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz");
-		
-		/* extract the files */
-		exec("tar xvfz ISPConfig-" . $new_version . ".tar.gz");
-
-		/*
-		 * Initialize the automated update
-		 * (the update is then done next start of server.sh
-		 */
-		chdir("/tmp/ispconfig3_install/install");
-		exec("touch autoupdate");
-		
-		/*
-		 * do some clean-up
-		 */
-		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
-
-		/*
-		 * go back to the "old path"
-		 */
-		chdir($oldDir);
-
-		/*
-		 * All well done!
-		 */
-		//$this->_actionDone($action['action_id'], 'ok');
-	}
-}
+<?php
+/*
+Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+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 remoteaction_core_module {
+	var $module_name = 'remoteaction_core_module';
+	var $class_name = 'remoteaction_core_module';
+	/* No actions at this time. maybe later... */
+	var $actions_available = array();
+	//* This function is called during ispconfig installation to determine
+	//  if a symlink shall be created for this plugin.
+	function onInstall() {
+		return true;
+	}
+
+	/*
+        This function is called when the module is loaded
+	*/
+	function onLoad() {
+		/*
+       	 * Check for actions to execute
+		*/
+		$this->_execActions();
+	}
+
+	/*
+     This function is called when a change in one of the registered tables is detected.
+     The function then raises the events for the plugins.
+	*/
+	function process($tablename, $action, $data) {
+		// not needed
+	} // end function
+
+	private function _actionDone($id, $state) {
+		/*
+		 * First set the state
+		 */
+		global $app;
+		$sql = "UPDATE sys_remoteaction " .
+				"SET action_state = '" . $app->dbmaster->quote($state) . "' " .
+				"WHERE action_id = " . intval($id);
+		$app->dbmaster->query($sql);
+
+		/*
+		 * Then save the maxid for the next time...
+		 */
+		$fp = fopen(dirname(__FILE__) .  "/../lib/remote_action.inc.php", 'wb');
+		$content = '<?php' . "\n" . '$maxid_remote_action = ' . $id . ';' . "\n?>";
+		fwrite($fp, $content);
+		fclose($fp);
+	}
+
+
+	/**
+	 * This method searches for scheduled actions and exec then
+	 */
+	private function _execActions() {
+		global $app;
+		global $conf;
+
+		/* the id of the server as int */
+		$server_id = intval($conf["server_id"]);
+
+		/*
+		 * First we (till and i, oliver) thought, it was enough to write
+		 * "select from where action_status = 'pending'" and then execute this actions.
+		 * But it is not!
+		 * If a hacker can hack into a server, she can change the valus of action_status
+		 * and so re-exec a action, executed some days bevore. So she can (for example)
+		 * stop a service, a admin stopped some days before! To avoid this, we ignore
+		 * the status (it is only for the interface to show) and use our own maxid
+		*/
+		include_once (dirname(__FILE__) .  "/../lib/remote_action.inc.php");
+
+		/*
+		 * Get all actions this server should execute
+		*/
+		$sql = "SELECT action_id, action_type, action_param " .
+				"FROM sys_remoteaction " .
+				"WHERE server_id = " . $server_id . " ".
+				" AND  action_id > " . intval($maxid_remote_action) . " ".
+				"ORDER BY action_id";
+		$actions = $app->dbmaster->queryAllRecords($sql);
+
+		/*
+		 * process all actions
+		*/
+		if(is_array($actions)) {
+			foreach ($actions as $action) {
+				if ($action['action_type'] == 'os_update') {
+					/* do the update */
+					$this->_doOsUpdate($action);
+					/* this action takes so much time,
+					* we stop executing the actions not to waste more time */
+					return;
+				}
+				if ($action['action_type'] == 'ispc_update') {
+					/* do the update */
+					$this->_doIspCUpdate($action);
+					/* this action takes so much time,
+					* we stop executing the actions not to waste more time */
+					return;
+				}
+			}
+		}
+	}
+
+	private function _doOsUpdate($action) {
+		/*
+		 * Do the update
+		 */
+		//TODO : change this when distribution information has been integrated into server record
+		if(file_exists('/etc/gentoo-release')) {
+			exec("glsa-check -f --nocolor affected");
+		}
+		else {
+			exec("aptitude update");
+			exec("aptitude upgrade -y");
+		}
+		
+		/*
+		 * All well done!
+		 */
+		$this->_actionDone($action['action_id'], 'ok');
+	}
+
+	private function _doIspCUpdate($action) {
+		
+		// Ensure that this code is not executed twice as this would cause a loop in case of a failure
+		$this->_actionDone($action['action_id'], 'ok');
+		
+		/*
+		 * Get the version-number of the newest version 
+		 */
+		$new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt');
+		$new_version = trim($new_version);
+
+		/*
+		 * Do the update
+		 */
+
+		/* jump into the temporary dir */
+		$oldDir = getcwd();
+		chdir("/tmp");
+
+		/* delete the old files (if there are any...) */
+		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
+		exec("rm /tmp/ispconfig3_install -R");
+		
+		/* get the newest version */
+		exec("wget http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz");
+		
+		/* extract the files */
+		exec("tar xvfz ISPConfig-" . $new_version . ".tar.gz");
+
+		/*
+		 * Initialize the automated update
+		 * (the update is then done next start of server.sh
+		 */
+		chdir("/tmp/ispconfig3_install/install");
+		exec("touch autoupdate");
+		
+		/*
+		 * do some clean-up
+		 */
+		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
+
+		/*
+		 * go back to the "old path"
+		 */
+		chdir($oldDir);
+
+		/*
+		 * All well done!
+		 */
+		//$this->_actionDone($action['action_id'], 'ok');
+	}
+}
 ?>
\ No newline at end of file
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index 5e13ba3bfb..823bf85d5e 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -1,155 +1,155 @@
-<?php
-
-/*
-Copyright (c) 2007, 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 mailman_plugin {
-	
-	var $plugin_name = 'mailman_plugin';
-	var $class_name = 'mailman_plugin';
-	
-	
-	var $mailman_config_dir = '/etc/mailman/';
-	
-	//* This function is called during ispconfig installation to determine
-	//  if a symlink shall be created for this plugin.
-	function onInstall() {
-		global $conf;
-		
-		if($conf['services']['mail'] == true) {
-			return true;
-		} else {
-			return false;
-		}
-		
-	}
-	
-	/*
-	 	This function is called when the plugin is loaded
-	*/
-	
-	function onLoad() {
-		global $app;
-		
-		/*
-		Register for the events
-		*/
-		
-		$app->plugins->registerEvent('mail_mailinglist_insert','mailman_plugin','insert');
-		$app->plugins->registerEvent('mail_mailinglist_update','mailman_plugin','update');
-		$app->plugins->registerEvent('mail_mailinglist_delete','mailman_plugin','delete');
-		
-		
-		
-	}
-	
-	function insert($event_name,$data) {
-		global $app, $conf;
-		
-		$this->update_config();
-		
-		exec("/usr/lib/mailman/bin/newlist -u ".$data["new"]["domain"]." -e ".$data["new"]["domain"]." ".$data["new"]["listname"]." ".$data["new"]["email"]." ".$data["new"]["password"]."");
-		
-		exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null');
-		
-		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$data["new"]['mailinglist_id']);
-		
-	}
-	
-	// The purpose of this plugin is to rewrite the main.cf file
-	function update($event_name,$data) {
-		global $app, $conf;
-		
-		exec("/usr/lib/mailman/bin/change_pw -l ".$data["new"]["listname"]." -p ".$data["new"]["password"]."");
-		
-		exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null');
-		
-		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$data["new"]['mailinglist_id']);
-		
-	}
-	
-	function delete($event_name,$data) {
-		global $app, $conf;
-		
-		$this->update_config();
-		
-		exec("/usr/lib/mailman/bin/rmlist -a ".$data["old"]["listname"]);
-		
-		exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null');
-		
-	}
-	
-	function update_config() {
-		global $app, $conf;
-		
-		copy($this->mailman_config_dir.'mm_cfg.py',$this->mailman_config_dir.'mm_cfg.py');
-		
-		// load the server configuration options
-		$app->uses('getconf');
-		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		
-		// load files
-		$content = file_get_contents($conf["rootpath"]."/conf/mm_cfg.py.master");
-		$old_file = file_get_contents($this->mailman_config_dir."/mm_cfg.py");
-		
-		$old_options = array();
-		$lines = explode("\n", $old_file); 
-		foreach ($lines as $line)
-		{
-			if (strlen($line) && substr($line, 0, 1) != '#')
-			{
-				list($key, $value) = explode("=", $line);
-				if (!empty($value))
-				{
-					$key = rtrim($key);
-					$old_options[$key] = trim($value);
-				}
-			}
-		}
-		
-		// create virtual_domains list
-		$domainAll = $app->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
-		$virtual_domains = '';
-		foreach($domainAll as $domain)
-		{
-			if ($domainAll[0]['domain'] == $domain['domain'])
-				$virtual_domains .= "'".$domain['domain']."'";
-			else
-				$virtual_domains .= ", '".$domain['domain']."'";
-		}
-		
-		$content = str_replace('{hostname}', $server_config['hostname'], $content);
-		$content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
-		$content = str_replace('{virtual_domains}', $virtual_domains, $content);
-		
-		file_put_contents($this->mailman_config_dir."/mm_cfg.py", $content);
-	}
-
-} // end class
-
-?>
+<?php
+
+/*
+Copyright (c) 2007, 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 mailman_plugin {
+	
+	var $plugin_name = 'mailman_plugin';
+	var $class_name = 'mailman_plugin';
+	
+	
+	var $mailman_config_dir = '/etc/mailman/';
+	
+	//* This function is called during ispconfig installation to determine
+	//  if a symlink shall be created for this plugin.
+	function onInstall() {
+		global $conf;
+		
+		if($conf['services']['mail'] == true) {
+			return true;
+		} else {
+			return false;
+		}
+		
+	}
+	
+	/*
+	 	This function is called when the plugin is loaded
+	*/
+	
+	function onLoad() {
+		global $app;
+		
+		/*
+		Register for the events
+		*/
+		
+		$app->plugins->registerEvent('mail_mailinglist_insert','mailman_plugin','insert');
+		$app->plugins->registerEvent('mail_mailinglist_update','mailman_plugin','update');
+		$app->plugins->registerEvent('mail_mailinglist_delete','mailman_plugin','delete');
+		
+		
+		
+	}
+	
+	function insert($event_name,$data) {
+		global $app, $conf;
+		
+		$this->update_config();
+		
+		exec("/usr/lib/mailman/bin/newlist -u ".$data["new"]["domain"]." -e ".$data["new"]["domain"]." ".$data["new"]["listname"]." ".$data["new"]["email"]." ".$data["new"]["password"]."");
+		
+		exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null');
+		
+		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$data["new"]['mailinglist_id']);
+		
+	}
+	
+	// The purpose of this plugin is to rewrite the main.cf file
+	function update($event_name,$data) {
+		global $app, $conf;
+		
+		exec("/usr/lib/mailman/bin/change_pw -l ".$data["new"]["listname"]." -p ".$data["new"]["password"]."");
+		
+		exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null');
+		
+		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$data["new"]['mailinglist_id']);
+		
+	}
+	
+	function delete($event_name,$data) {
+		global $app, $conf;
+		
+		$this->update_config();
+		
+		exec("/usr/lib/mailman/bin/rmlist -a ".$data["old"]["listname"]);
+		
+		exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null');
+		
+	}
+	
+	function update_config() {
+		global $app, $conf;
+		
+		copy($this->mailman_config_dir.'mm_cfg.py',$this->mailman_config_dir.'mm_cfg.py');
+		
+		// load the server configuration options
+		$app->uses('getconf');
+		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+		
+		// load files
+		$content = file_get_contents($conf["rootpath"]."/conf/mm_cfg.py.master");
+		$old_file = file_get_contents($this->mailman_config_dir."/mm_cfg.py");
+		
+		$old_options = array();
+		$lines = explode("\n", $old_file); 
+		foreach ($lines as $line)
+		{
+			if (strlen($line) && substr($line, 0, 1) != '#')
+			{
+				list($key, $value) = explode("=", $line);
+				if (!empty($value))
+				{
+					$key = rtrim($key);
+					$old_options[$key] = trim($value);
+				}
+			}
+		}
+		
+		// create virtual_domains list
+		$domainAll = $app->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
+		$virtual_domains = '';
+		foreach($domainAll as $domain)
+		{
+			if ($domainAll[0]['domain'] == $domain['domain'])
+				$virtual_domains .= "'".$domain['domain']."'";
+			else
+				$virtual_domains .= ", '".$domain['domain']."'";
+		}
+		
+		$content = str_replace('{hostname}', $server_config['hostname'], $content);
+		$content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
+		$content = str_replace('{virtual_domains}', $virtual_domains, $content);
+		
+		file_put_contents($this->mailman_config_dir."/mm_cfg.py", $content);
+	}
+
+} // end class
+
+?>
-- 
GitLab