From 6b1fde7e9a450ae8e4835f7e8c2ba1f398e78c1f Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Thu, 21 May 2015 04:14:10 -0400
Subject: [PATCH] Merge remote-tracking branch 'ispc/master'

---
 interface/web/mail/lib/lang/ar_backup_stats_list.lng                             |    9 
 interface/web/mail/mail_aliasdomain_edit.php                                     |   15 
 interface/web/sites/lib/lang/cz_database_quota_stats_list.lng                    |    1 
 interface/web/sites/templates/database_edit.htm                                  |  134 
 server/scripts/update_from_dev.sh                                                |    6 
 interface/web/admin/templates/server_config_list.htm                             |   42 
 interface/web/themes/default/assets/images/logo.png                              |    0 
 interface/web/themes/default/assets/stylesheets/select2.png                      |    0 
 install/tpl/opensuse_dovecot.conf.master                                         |    4 
 install/tpl/debian6_dovecot2.conf.master                                         |    7 
 interface/web/sites/lib/lang/ar_backup_stats_list.lng                            |   10 
 interface/web/sites/cron_edit.php                                                |   18 
 interface/web/mail/templates/mail_transport_edit.htm                             |   73 
 interface/web/monitor/lib/module.conf.php                                        |    3 
 interface/web/help/templates/help_faq_sections_list.htm                          |   57 
 remoting_client/API-docs/sites_aps_update_package_list.html                      |   29 
 interface/web/mail/lib/lang/ro_mail_forward.lng                                  |    1 
 interface/web/sites/list/webdav_user.list.php                                    |    2 
 server/mods-available/remoteaction_core_module.inc.php                           |   14 
 interface/lib/classes/plugin_backuplist.inc.php                                  |   58 
 interface/web/login/lib/lang/de.lng                                              |    1 
 interface/lib/classes/listform_actions.inc.php                                   |    1 
 interface/web/admin/list/users.list.php                                          |    2 
 interface/web/sites/web_vhost_domain_edit.php                                    |  226 
 interface/web/mail/backup_stats.php                                              |   42 
 interface/web/sites/templates/web_vhost_domain_advanced.htm                      |  144 
 interface/web/themes/default/assets/stylesheets/themes/default/theme.css         |  172 
 server/plugins-available/webserver_plugin.inc.php                                |    2 
 interface/web/admin/templates/system_config_domains_edit.htm                     |   37 
 interface/web/dns/dns_rr_del.php                                                 |    4 
 interface/web/mail/lib/lang/en_mail_alias.lng                                    |    1 
 install/tpl/metronome_conf_main.master                                           |    3 
 interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng                    |    7 
 interface/web/mail/form/xmpp_domain.tform.php                                    |  432 
 interface/web/dns/lib/lang/es_dns_txt.lng                                        |    3 
 interface/web/client/templates/client_template_list.htm                          |   71 
 interface/web/sites/lib/lang/tr_database_quota_stats_list.lng                    |    1 
 interface/web/admin/templates/language_import.htm                                |   46 
 interface/web/sites/lib/lang/pt_database_quota_stats_list.lng                    |    1 
 interface/web/themes/default/assets/stylesheets/ispconfig.css                    |  660 
 server/server.php                                                                |    9 
 interface/web/sites/templates/web_vhost_domain_ssl.htm                           |  139 
 interface/web/help/templates/support_message_list.htm                            |   71 
 interface/web/dns/form/dns_soa.tform.php                                         |    2 
 install/tpl/system.ini.master                                                    |    7 
 interface/web/sites/web_vhost_domain_list.php                                    |    2 
 server/lib/classes/cron.d/100-monitor_mem_usage.inc.php                          |   10 
 interface/web/client/reseller_list.php                                           |    2 
 interface/web/mail/templates/mail_user_list.htm                                  |  105 
 interface/web/tools/templates/import_vpopmail.htm                                |   58 
 interface/web/dns/lib/lang/id_dns_dmarc.lng                                      |   50 
 interface/web/client/domain_del.php                                              |   16 
 interface/web/admin/templates/server_config_server_edit.htm                      |  168 
 interface/web/sites/lib/lang/tr_aps_instances_list.lng                           |    2 
 interface/web/sites/lib/lang/se_backup_stats_list.lng                            |   10 
 interface/web/dashboard/lib/lang/de_dashlet_databasequota.lng                    |    7 
 interface/web/sites/lib/lang/ar_aps_instances_list.lng                           |    2 
 interface/web/dns/form/dns_ptr.tform.php                                         |    2 
 install/lib/install.lib.php                                                      |    9 
 server/lib/classes/cron.d/100-monitor_raid.inc.php                               |   10 
 interface/web/mail/lib/lang/fi_mail_alias.lng                                    |    1 
 interface/lib/plugins/vm_openvz_plugin.inc.php                                   |   91 
 interface/web/dns/lib/lang/nl_dns_spf.lng                                        |   25 
 install/apps/metronome_libs/mod_webpresence/mod_webpresence.lua                  |  118 
 interface/web/mail/lib/lang/se_backup_stats_list.lng                             |    9 
 server/lib/classes/aps_installer.inc.php                                         |  108 
 interface/web/sites/templates/database_list.htm                                  |   99 
 server/conf/hhvm_starter.master                                                  |   26 
 interface/lib/classes/remote.d/dns.inc.php                                       |   92 
 interface/web/dns/lib/lang/el_dns_txt.lng                                        |    3 
 interface/web/dns/lib/lang/en_dns_txt.lng                                        |    5 
 interface/web/sites/templates/aps_packagedetails_show.htm                        |   54 
 interface/web/sites/templates/shell_user_advanced.htm                            |   49 
 server/plugins-available/cron_jailkit_plugin.inc.php                             |    6 
 interface/web/admin/lib/lang/en_server_config.lng                                |   22 
 interface/web/monitor/templates/show_munin.htm                                   |    4 
 interface/web/sites/templates/web_childdomain_advanced.htm                       |   27 
 interface/web/tools/templates/dns_import_tupa.htm                                |   53 
 server/cron.sh                                                                   |    6 
 interface/web/vm/lib/lang/ru_openvz_vm.lng                                       |    2 
 interface/web/themes/default/assets/stylesheets/select2.css                      |  704 
 interface/web/tools/lib/menu.d/resync.menu.php                                   |    3 
 interface/web/sites/lib/lang/es_database_quota_stats_list.lng                    |    1 
 interface/web/mail/templates/spamfilter_config_server_edit.htm                   |   38 
 server/lib/classes/cron.d/100-monitor_mongodb.inc.php                            |   10 
 interface/web/monitor/templates/datalog_list.htm                                 |   62 
 interface/web/vm/templates/openvz.conf.tpl                                       |    2 
 interface/web/sites/backup_stats.php                                             |   43 
 interface/web/sites/list/web_folder_user.list.php                                |    2 
 interface/web/mail/lib/lang/el_mail_user.lng                                     |    1 
 interface/web/mail/templates/spamfilter_whitelist_list.htm                       |   83 
 interface/web/admin/firewall_edit.php                                            |    2 
 interface/web/mail/lib/lang/hu_mail_user.lng                                     |    1 
 interface/web/sites/lib/lang/el_database_quota_stats_list.lng                    |    1 
 interface/web/sites/templates/web_folder_edit.htm                                |   42 
 interface/web/admin/lib/lang/hu_server_config.lng                                |    2 
 interface/web/sites/webdav_user_edit.php                                         |   57 
 interface/web/admin/lib/lang/el_server_config.lng                                |    2 
 interface/web/dns/lib/lang/fr_dns_txt.lng                                        |    3 
 server/lib/classes/cron.d/100-monitor_disk_usage.inc.php                         |   10 
 interface/web/mail/lib/lang/pl_backup_stats_list.lng                             |    9 
 interface/web/vm/lib/lang/cz_openvz_template.lng                                 |    2 
 interface/web/dns/list/dns_a.list.php                                            |    4 
 server/plugins-available/webmail_symlink_plugin.inc.php                          |    4 
 interface/web/dns/dns_txt_edit.php                                               |   90 
 interface/web/admin/templates/server_edit_services.htm                           |   88 
 interface/web/mail/lib/lang/nl_mail_alias.lng                                    |    1 
 interface/web/dns/form/dns_aaaa.tform.php                                        |    2 
 interface/web/mail/templates/mail_whitelist_edit.htm                             |   50 
 interface/web/dns/dns_spf_edit.php                                               |  269 
 interface/web/dns/templates/dns_ptr_edit.htm                                     |   48 
 interface/web/mail/lib/lang/cz_mail_forward.lng                                  |    1 
 interface/web/mail/lib/lang/hu_mail_forward.lng                                  |    1 
 interface/web/themes/default/assets/stylesheets/themes/default/theme.sass        |  187 
 interface/web/sites/lib/lang/pl_backup_stats_list.lng                            |   10 
 interface/lib/config.inc.php                                                     |    3 
 interface/web/admin/templates/directive_snippets_edit.htm                        |   77 
 interface/lib/classes/remote.d/client.inc.php                                    |  110 
 interface/web/dns/lib/lang/br_dns_txt.lng                                        |    3 
 interface/lib/classes/custom_datasource.inc.php                                  |   29 
 interface/web/mail/lib/lang/el_mail_alias.lng                                    |    1 
 interface/web/mail/lib/lang/hr_mail_forward.lng                                  |    1 
 interface/web/mail/templates/mail_domain_catchall_edit.htm                       |   44 
 interface/web/admin/lib/lang/en_server_list.lng                                  |    2 
 interface/web/sites/lib/lang/sk_database_quota_stats_list.lng                    |    1 
 server/lib/classes/cronjob.inc.php                                               |    8 
 interface/web/sites/database_edit.php                                            |   36 
 interface/web/themes/default/assets/javascripts/jquery-2.1.0.min.js              |    4 
 interface/web/mail/list/mail_spamfilter.list.php                                 |    2 
 interface/web/dns/lib/lang/cz_dns_txt.lng                                        |    4 
 interface/web/index.php                                                          |   24 
 install/tpl/opensuse_dovecot-sql.conf.master                                     |    7 
 interface/web/mail/list/mail_aliasdomain.list.php                                |    2 
 interface/web/vm/lib/lang/pt_openvz_template.lng                                 |    2 
 interface/web/dns/dns_cname_edit.php                                             |   96 
 remoting_client/examples/dns_ns_add.php                                          |    2 
 interface/web/admin/templates/language_list.htm                                  |   57 
 interface/web/dns/lib/lang/it_dns_spf.lng                                        |   25 
 interface/web/admin/lib/lang/en_directive_snippets.lng                           |    1 
 remoting_client/examples/dns_aaaa_add.php                                        |    2 
 interface/web/dns/templates/dns_txt_edit.htm                                     |   48 
 interface/web/themes/default/assets/stylesheets/themes/dark/colors.sass          |   33 
 interface/web/dns/form/dns_hinfo.tform.php                                       |    2 
 server/plugins-available/cron_plugin.inc.php                                     |   12 
 interface/web/client/templates/clients_list.htm                                  |   99 
 interface/web/themes/default/assets/stylesheets/themes/dark/theme.css            |  169 
 install/tpl/gentoo_postfix.conf.master                                           |   11 
 interface/web/help/templates/support_message_edit.htm                            |   42 
 interface/web/admin/templates/remote_user_list.htm                               |   65 
 interface/web/vm/lib/lang/fi_openvz_vm.lng                                       |    2 
 interface/web/dns/lib/lang/br_dns_dmarc.lng                                      |   50 
 interface/web/js/select2/select2_locale_nl.js                                    |   17 
 install/tpl/authmysqlrc.master                                                   |    2 
 interface/web/dns/lib/lang/de_dns_txt.lng                                        |    3 
 interface/web/themes/default/assets/images/flags_sprite.png                      |    0 
 interface/web/dns/dns_slave_del.php                                              |    2 
 interface/web/dns/templates/dns_spf_edit.htm                                     |   62 
 server/plugins-available/xmpp_plugin.inc.php                                     |  397 
 interface/web/sites/aps_installedpackages_list.php                               |    6 
 remoting_client/examples/dns_a_add.php                                           |    2 
 interface/web/sites/aps_install_package.php                                      |    7 
 interface/web/tools/lib/lang/it_resync.lng                                       |   52 
 interface/lib/classes/validate_domain.inc.php                                    |   30 
 interface/web/mail/lib/lang/es_mail_forward.lng                                  |    1 
 remoting_client/examples/dns_mx_add.php                                          |    2 
 interface/web/dashboard/lib/lang/hu_dashlet_databasequota.lng                    |    7 
 interface/web/client/templates/client_circle_edit.htm                            |   49 
 interface/web/mail/lib/lang/br_mail_alias.lng                                    |    1 
 interface/web/sites/lib/lang/pt_backup_stats_list.lng                            |   10 
 interface/web/vm/lib/lang/pt_openvz_vm.lng                                       |    2 
 interface/web/mail/mail_forward_edit.php                                         |   12 
 interface/web/client/lib/lang/en_client_template.lng                             |   17 
 interface/web/admin/lib/lang/en_directive_snippets_list.lng                      |    1 
 interface/web/dns/lib/lang/id_dns_txt.lng                                        |    3 
 interface/web/tools/lib/lang/en_resync.lng                                       |   52 
 interface/web/mail/lib/lang/nl_mail_forward.lng                                  |    1 
 interface/web/mail/lib/lang/bg_mail_user.lng                                     |    1 
 interface/web/sites/lib/lang/br_aps_instances_list.lng                           |    2 
 interface/web/js/select2/select2_locale_is.js                                    |   17 
 interface/web/dns/dns_a_edit.php                                                 |   97 
 interface/web/admin/lib/lang/se_server_config.lng                                |    2 
 interface/web/vm/lib/lang/nl_openvz_template.lng                                 |    2 
 interface/web/admin/tpl_default.php                                              |   15 
 interface/web/dns/lib/lang/de_dns_dkim.lng                                       |    6 
 interface/web/mail/lib/lang/pt_backup_stats_list.lng                             |    9 
 interface/web/dns/templates/dns_alias_edit.htm                                   |   48 
 interface/web/dashboard/lib/lang/id_dashlet_databasequota.lng                    |    7 
 interface/web/mail/mail_spamfilter_edit.php                                      |   10 
 interface/web/themes/default/assets/stylesheets/responsive.min.css               |    1 
 interface/web/dns/dns_import.php                                                 |   76 
 interface/web/admin/form/system_config.tform.php                                 |    6 
 interface/web/js/xmpp_domain_muc.js                                              |   26 
 interface/web/mail/lib/lang/de_mail_user.lng                                     |    1 
 interface/web/mail/lib/lang/en_mail_user.lng                                     |    1 
 interface/web/mail/templates/mail_alias_list.htm                                 |   71 
 interface/web/client/templates/domain_edit.htm                                   |   35 
 interface/web/admin/lib/lang/fr_system_config.lng                                |    1 
 interface/web/mail/lib/lang/en_xmpp_user_list.lng                                |    8 
 interface/web/dns/lib/lang/ja_dns_spf.lng                                        |   25 
 interface/web/themes/default/assets/stylesheets/themes/default/mixins.sass       |   13 
 interface/web/admin/lib/module.conf.php                                          |    1 
 interface/web/vm/lib/lang/tr_openvz_template.lng                                 |    2 
 server/conf/php_fpm_pool.conf.master                                             |    4 
 interface/web/sites/lib/lang/bg_database_quota_stats_list.lng                    |    1 
 server/conf/nginx_vhost.conf.master                                              |   54 
 interface/web/admin/form/server.tform.php                                        |    6 
 install/dist/conf/debian40.conf.php                                              |    2 
 interface/web/vm/templates/openvz_action.htm                                     |   57 
 interface/web/dashboard/dashboard.php                                            |    8 
 interface/web/js/select2/select2_locale_ug-CN.js                                 |   16 
 server/lib/classes/cron.d/200-logfiles.inc.php                                   |   43 
 interface/web/admin/templates/server_config_getmail_edit.htm                     |   30 
 interface/web/dns/lib/lang/pl_dns_spf.lng                                        |   25 
 interface/web/dashboard/lib/lang/sk_dashlet_databasequota.lng                    |    7 
 interface/web/js/select2/select2_locale_sv.js                                    |   19 
 interface/web/sites/lib/lang/ru_aps_instances_list.lng                           |    2 
 interface/web/vm/form/openvz_template.tform.php                                  |   16 
 interface/web/sites/templates/ftp_user_advanced_client.htm                       |   34 
 interface/web/mail/lib/lang/fr_mail_user.lng                                     |    1 
 interface/web/mail/templates/mail_domain_list.htm                                |   71 
 install/tpl/opensuse_dovecot2.conf.master                                        |    3 
 interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php                      |  128 
 interface/web/admin/templates/remote_user_edit.htm                               |   53 
 interface/web/monitor/list/log.list.php                                          |    8 
 server/lib/classes/cron.d/100-monitor_clamav_log.inc.php                         |   20 
 server/lib/classes/cron.d/300-quota_notify.inc.php                               |   51 
 interface/web/admin/list/firewall.list.php                                       |    2 
 interface/web/dns/dns_ptr_edit.php                                               |   90 
 interface/web/dns/lib/lang/it_dns_txt.lng                                        |    3 
 interface/web/sites/lib/lang/en_database_quota_stats_list.lng                    |    1 
 interface/web/tools/lib/lang/hu_resync.lng                                       |   52 
 server/lib/classes/cron.d/500-backup.inc.php                                     |  175 
 interface/web/dashboard/lib/custom_menu.inc.php                                  |    2 
 install/tpl/fedora_dovecot-sql.conf.master                                       |    7 
 interface/web/client/templates/client_template_edit_limits.htm                   |  476 
 interface/web/mail/lib/lang/en_backup_stats_list.lng                             |    9 
 interface/web/dns/form/dns_cname.tform.php                                       |    4 
 interface/web/dns/lib/lang/hu_dns_spf.lng                                        |   25 
 interface/web/mail/lib/lang/ro_mail_user.lng                                     |    1 
 interface/web/mail/list/mail_relay_recipient.list.php                            |    2 
 interface/web/client/templates/client_edit_limits.htm                            |  515 
 interface/web/monitor/templates/show_monit.htm                                   |    4 
 interface/web/mail/templates/mail_user_mailfilter_edit.htm                       |   27 
 interface/web/dns/dns_edit_base.php                                              |  131 
 interface/lib/plugins/mail_user_filter_plugin.inc.php                            |   92 
 interface/web/dns/lib/lang/pt_dns_spf.lng                                        |   25 
 interface/web/dns/lib/lang/ru_dns_spf.lng                                        |   25 
 interface/web/mail/lib/lang/it_mail_forward.lng                                  |    1 
 install/apps/metronome-init                                                      |   75 
 interface/lib/plugins/dns_dns_slave_plugin.inc.php                               |    8 
 interface/web/mail/mail_alias_edit.php                                           |   18 
 interface/web/sites/lib/lang/ja_aps_instances_list.lng                           |    2 
 interface/web/js/select2/select2_locale_sk.js                                    |   50 
 interface/lib/classes/plugin_listview.inc.php                                    |   54 
 interface/web/admin/templates/software_package_install.htm                       |   23 
 interface/web/sites/templates/web_folder_user_list.htm                           |   71 
 interface/web/vm/lib/lang/it_openvz_vm.lng                                       |    2 
 interface/web/mail/lib/lang/ja_mail_user.lng                                     |    1 
 interface/lib/app.inc.php                                                        |   22 
 interface/web/mail/templates/mail_user_stats_list.htm                            |   64 
 interface/web/admin/lib/lang/de_directive_snippets_list.lng                      |    1 
 interface/web/admin/templates/server_php_fastcgi_edit.htm                        |   35 
 interface/web/mail/lib/lang/ja_mail_forward.lng                                  |    1 
 interface/web/mail/lib/lang/fr_mail_forward.lng                                  |    1 
 interface/web/vm/lib/lang/ja_openvz_template.lng                                 |    2 
 interface/web/themes/default/templates/sidenav.tpl.htm                           |   50 
 interface/web/themes/default/assets/images/logo@2x.png                           |    0 
 interface/web/mailuser/mail_user_spamfilter_edit.php                             |   23 
 interface/web/js/select2/select2_locale_uk.js                                    |   25 
 interface/web/vm/templates/openvz_template_edit.htm                              |  117 
 interface/web/vm/lib/lang/hu_openvz_template.lng                                 |    2 
 interface/web/themes/default/assets/fonts/ispconfig.ttf                          |    0 
 interface/web/js/select2/select2_locale_zh-CN.js                                 |   16 
 interface/web/themes/default/assets/stylesheets/select2-spinner.gif              |    0 
 interface/web/mail/list/mail_content_filter.list.php                             |    2 
 interface/web/themes/default/assets/javascripts/ispconfig.js                     |  733 
 interface/web/mailuser/templates/mail_user_cc_edit.htm                           |   33 
 interface/web/sites/form/web_vhost_domain.tform.php                              |   33 
 interface/web/client/client_del.php                                              |   22 
 interface/web/dns/form/dns_rp.tform.php                                          |    2 
 interface/web/js/select2/select2_locale_ka.js                                    |   19 
 interface/web/sites/lib/lang/bg_aps_instances_list.lng                           |    2 
 interface/web/sites/lib/lang/hu_aps_instances_list.lng                           |    2 
 interface/web/mail/lib/lang/ro_mail_alias.lng                                    |    1 
 interface/web/dns/dns_slave_edit.php                                             |   16 
 interface/web/admin/list/directive_snippets.list.php                             |   11 
 install/sql/incremental/upd_0080.sql                                             |    1 
 interface/web/admin/lib/lang/tr_system_config.lng                                |    1 
 interface/web/mail/xmpp_domain_del.php                                           |   93 
 interface/web/admin/lib/lang/hr_system_config.lng                                |    1 
 interface/web/mail/form/mail_user.tform.php                                      |    6 
 interface/web/monitor/list/datalog.list.php                                      |    8 
 interface/web/tools/import_ispconfig.php                                         |   14 
 interface/web/admin/lib/lang/br_system_config.lng                                |    1 
 interface/web/admin/remote_action_ispcupdate.php                                 |   11 
 interface/web/admin/templates/system_config_misc_edit.htm                        |  258 
 interface/web/mail/lib/lang/tr_mail_forward.lng                                  |    1 
 interface/web/dns/lib/lang/ja_dns_txt.lng                                        |    3 
 interface/web/admin/form/users.tform.php                                         |   13 
 interface/web/mail/templates/spamfilter_whitelist_edit.htm                       |   58 
 interface/web/sites/lib/lang/id_aps_instances_list.lng                           |    2 
 remoting_client/API-docs/sites_aps_get_package_details.html                      |   29 
 install/apps/metronome_libs/mod_webpresence/icons/status_away.png                |    0 
 interface/web/mail/lib/lang/tr_mail_alias.lng                                    |    1 
 interface/web/dns/templates/dns_dkim_edit.htm                                    |   52 
 server/lib/classes/cron.d/600-cleanup.inc.php                                    |    4 
 interface/web/mail/templates/mail_get_edit.htm                                   |   76 
 interface/web/dns/dns_ns_edit.php                                                |   90 
 interface/web/admin/lib/lang/en_users.lng                                        |    1 
 interface/web/client/templates/client_template_edit_template.htm                 |   40 
 interface/web/admin/templates/directive_snippets_list.htm                        |   75 
 interface/web/dns/dns_hinfo_edit.php                                             |   90 
 interface/web/admin/templates/system_config_sites_edit.htm                       |  122 
 interface/web/dashboard/lib/lang/en_dashlet_databasequota.lng                    |    7 
 interface/web/sites/templates/database_quota_stats_list.htm                      |   66 
 remoting_client/examples/dns_zone_add.php                                        |    4 
 interface/web/dns/lib/lang/es_dns_spf.lng                                        |   25 
 interface/web/sites/templates/web_folder_list.htm                                |   77 
 interface/web/login/login_as.php                                                 |   10 
 interface/web/mail/lib/lang/hr_mail_alias.lng                                    |    1 
 interface/web/sites/lib/lang/en_aps_instances_list.lng                           |    2 
 interface/web/client/form/client.tform.php                                       |  116 
 interface/web/mail/mail_domain_edit.php                                          |  264 
 interface/web/sites/lib/lang/cz_aps_instances_list.lng                           |    2 
 interface/web/sites/lib/lang/en_backup_stats_list.lng                            |   10 
 interface/web/mail/templates/mail_whitelist_list.htm                             |   77 
 server/lib/classes/cron.d/100-monitor_cpu.inc.php                                |   10 
 install/tpl/fedora_postfix.conf.master                                           |   11 
 interface/web/mail/lib/lang/cz_backup_stats_list.lng                             |    9 
 server/plugins-available/maildeliver_plugin.inc.php                              |   24 
 interface/web/admin/templates/users_groups_edit.htm                              |   37 
 interface/web/login/lib/lang/en.lng                                              |    3 
 interface/web/sites/lib/lang/it_database_quota_stats_list.lng                    |    1 
 remoting_client/API-docs/mail_user_backup.html                                   |   26 
 interface/web/dns/list/dns_slave.list.php                                        |    5 
 interface/web/mail/lib/remote.conf.php                                           |    1 
 interface/web/mail/spamfilter_users_edit.php                                     |    6 
 server/lib/classes/cron.d/100-monitor_os_version.inc.php                         |   10 
 install/apps/metronome_libs/mod_auth_external/db_isuser.php                      |   37 
 interface/web/client/templates/client_edit_address.htm                           |  270 
 interface/lib/classes/searchform.inc.php                                         |   10 
 interface/web/monitor/log_del.php                                                |    2 
 server/plugins-available/mysql_clientdb_plugin.inc.php                           |    2 
 server/lib/classes/cron.d/100-monitor_rkhunter.inc.php                           |   10 
 interface/web/mail/templates/xmpp_domain_list.htm                                |   74 
 interface/web/help/templates/faq_manage_questions_list.htm                       |   55 
 interface/web/mail/lib/lang/pl_mail_alias.lng                                    |    1 
 interface/web/mail/templates/mail_user_filter_list.htm                           |   50 
 interface/web/admin/templates/server_php_list.htm                                |   71 
 interface/web/dashboard/lib/lang/ro_dashlet_databasequota.lng                    |    7 
 interface/web/mail/lib/lang/bg_mail_forward.lng                                  |    1 
 server/conf/bastille-firewall.cfg.master                                         |    2 
 interface/web/dashboard/lib/lang/pt_dashlet_databasequota.lng                    |    7 
 interface/web/dns/templates/dns_soa_list.htm                                     |   83 
 interface/web/js/xmpp_domain_registration.js                                     |   29 
 interface/web/mail/templates/spamfilter_config_list.htm                          |   59 
 interface/web/dashboard/dashlets/modules.php                                     |   17 
 interface/web/dns/templates/dns_soa_edit.htm                                     |  161 
 interface/web/mail/templates/mail_user_filter_edit.htm                           |   53 
 interface/web/mail/lib/lang/el_mail_forward.lng                                  |    1 
 interface/web/tools/lib/lang/id_resync.lng                                       |   52 
 interface/web/sites/templates/ftp_user_edit.htm                                  |   67 
 interface/web/mail/list/spamfilter_whitelist.list.php                            |    2 
 interface/web/sites/lib/lang/ja_database_quota_stats_list.lng                    |    1 
 interface/web/admin/templates/language_complete.htm                              |   24 
 interface/web/js/select2/select2_locale_ja.js                                    |   17 
 server/conf/hhvm_monit.master                                                    |    3 
 interface/web/dns/lib/lang/el_dns_dmarc.lng                                      |   50 
 interface/web/js/select2/select2_locale_ca.js                                    |   19 
 server/lib/classes/cron.d/100-monitor_fail2ban.inc.php                           |   10 
 install/tpl/debian_dovecot-sql.conf.master                                       |    7 
 interface/lib/plugins/dns_dns_soa_plugin.inc.php                                 |   18 
 interface/web/mail/mailinglist.php                                               |    4 
 interface/web/vm/templates/openvz_ostemplate_list.htm                            |   83 
 interface/web/vm/lib/lang/en_openvz_template.lng                                 |    5 
 interface/web/sites/database_phpmyadmin.php                                      |    6 
 interface/web/dns/lib/lang/ru_dns_dmarc.lng                                      |   50 
 interface/web/dns/lib/lang/fi_dns_spf.lng                                        |   25 
 interface/web/mail/templates/mail_forward_edit.htm                               |   50 
 interface/web/mail/spamfilter_config_edit.php                                    |    4 
 server/scripts/ispconfig_update.sh                                               |    6 
 interface/web/themes/default/assets/javascripts/bootstrap-datetimepicker.min.js  |    1 
 install/tpl/debian_dovecot2.conf.master                                          |    7 
 server/lib/classes/cron.d/100-monitor_iptables.inc.php                           |   10 
 interface/web/admin/lib/lang/it_system_config.lng                                |    1 
 interface/web/admin/templates/tpl_default_basic.htm                              |   29 
 interface/web/sites/lib/lang/ru_backup_stats_list.lng                            |   10 
 server/lib/classes/cron.d/100-monitor_ispconfig_log.inc.php                      |   20 
 interface/web/sites/ajax_get_ip.php                                              |    6 
 interface/web/client/client_template_edit.php                                    |    9 
 interface/lib/classes/remote.d/mail.inc.php                                      |   84 
 server/lib/classes/getconf.inc.php                                               |    2 
 interface/web/mail/lib/lang/sk_mail_forward.lng                                  |    1 
 interface/web/mail/xmpp_domain_edit.php                                          |  543 
 interface/web/help/faq_list.php                                                  |    2 
 interface/web/admin/lib/lang/ro_system_config.lng                                |    1 
 interface/web/mail/templates/spamfilter_other_edit.htm                           |  123 
 interface/web/sites/form/web_childdomain.tform.php                               |    2 
 interface/web/mail/lib/lang/id_mail_forward.lng                                  |    1 
 interface/web/mail/mail_content_filter_edit.php                                  |    2 
 interface/web/sites/lib/lang/ru_database_quota_stats_list.lng                    |    1 
 interface/web/vm/lib/lang/fr_openvz_template.lng                                 |    2 
 interface/web/dns/lib/lang/sk_dns_spf.lng                                        |   25 
 interface/web/dns/lib/lang/se_dns_spf.lng                                        |   25 
 interface/web/mail/lib/lang/tr_backup_stats_list.lng                             |    9 
 interface/web/mail/lib/lang/fr_mail_alias.lng                                    |    1 
 server/cron.php                                                                  |    2 
 interface/lib/classes/tform_actions.inc.php                                      |   29 
 interface/web/admin/lib/lang/es_system_config.lng                                |    1 
 interface/web/mail/lib/lang/se_mail_user.lng                                     |    1 
 interface/web/dns/lib/lang/it_dns_dmarc.lng                                      |   50 
 interface/web/themes/default/assets/stylesheets/themes/default/theme.min.css     |    1 
 interface/web/admin/form/directive_snippets.tform.php                            |   17 
 interface/web/mail/lib/lang/es_mail_alias.lng                                    |    1 
 interface/web/mail/form/mail_alias.tform.php                                     |    6 
 interface/web/js/scrigo.js.php                                                   |  655 
 interface/web/themes/default/assets/stylesheets/pushy.min.css                    |    4 
 server/conf/php-cgi-starter.master                                               |    4 
 server/conf/apache_apps.vhost.master                                             |   10 
 interface/web/tools/templates/interface_settings.htm                             |   37 
 interface/web/admin/templates/server_config_rescue_edit.htm                      |   51 
 interface/web/sites/lib/lang/fi_aps_instances_list.lng                           |    2 
 interface/web/admin/lib/lang/de_system_config.lng                                |    1 
 interface/web/login/templates/index.htm                                          |   38 
 interface/web/client/domain_edit.php                                             |   26 
 interface/web/mail/list/mail_user.list.php                                       |   10 
 interface/web/admin/lib/lang/sk_server_config.lng                                |    2 
 interface/web/mail/templates/mail_user_backup.htm                                |   37 
 interface/web/mailuser/templates/mail_user_filter_list.htm                       |   59 
 interface/web/dashboard/dashlets/limits.php                                      |   13 
 interface/web/admin/lib/lang/nl_system_config.lng                                |    1 
 install/tpl/mydns.conf.master                                                    |    1 
 interface/web/help/templates/faq_sections_edit.htm                               |   24 
 interface/web/admin/lib/lang/id_server_config.lng                                |    2 
 interface/web/themes/default/assets/fonts/ispconfig.eot                          |    0 
 interface/web/themes/default/templates/error.tpl.htm                             |   17 
 interface/web/mail/lib/lang/hu_backup_stats_list.lng                             |    9 
 interface/web/dns/templates/dns_srv_edit.htm                                     |   69 
 interface/web/client/lib/lang/en_reseller.lng                                    |   19 
 interface/web/admin/templates/iptables_list.htm                                  |  100 
 interface/web/mail/mail_domain_dkim_create.php                                   |   94 
 interface/web/mail/templates/spamfilter_blacklist_list.htm                       |   83 
 interface/web/admin/form/server_config.tform.php                                 |  123 
 interface/web/tools/lib/lang/ar_resync.lng                                       |   52 
 interface/web/sites/database_user_del.php                                        |   10 
 interface/web/mailuser/templates/mail_user_autoresponder_edit.htm                |   51 
 interface/web/client/client_edit.php                                             |  128 
 interface/web/dashboard/dashlets/templates/databasequota.htm                     |   28 
 interface/web/admin/lib/lang/cz_system_config.lng                                |    1 
 server/lib/classes/modules.inc.php                                               |   79 
 remoting_client/API-docs/sites_aps_get_package_file.html                         |   29 
 interface/web/mail/templates/mail_get_list.htm                                   |   83 
 interface/web/admin/list/server_php.list.php                                     |   16 
 interface/web/tools/lib/module.conf.php                                          |    1 
 interface/web/admin/templates/server_config_cron_edit.htm                        |   44 
 install/tpl/mysql-virtual_sender_login_maps.cf.master                            |    5 
 interface/web/js/jquery.min.js                                                   |    4 
 interface/web/mail/spamfilter_whitelist_edit.php                                 |   24 
 interface/web/mail/templates/mail_domain_edit.htm                                |  124 
 interface/web/js/select2/select2_locale_hu.js                                    |   17 
 interface/web/dns/lib/lang/nl_dns_txt.lng                                        |    3 
 interface/web/mail/lib/lang/fr_backup_stats_list.lng                             |    9 
 interface/web/monitor/templates/show_sys_state.htm                               |   31 
 server/lib/classes/cron.d/600-purge_mailboxes.inc.php                            |   77 
 interface/lib/classes/validate_dns.inc.php                                       |    2 
 interface/web/dns/lib/lang/tr_dns_dmarc.lng                                      |   50 
 interface/web/client/form/client_template.tform.php                              |   99 
 install/uninstall.php                                                            |    8 
 interface/lib/classes/plugin_backuplist_mail.inc.php                             |   47 
 interface/web/client/templates/client_message.htm                                |   53 
 interface/web/admin/lib/lang/ar_server_config.lng                                |    2 
 interface/web/dns/lib/lang/en_dns_dmarc.lng                                      |   50 
 interface/web/dns/lib/lang/id_dns_spf.lng                                        |   25 
 server/plugins-available/pma_symlink_plugin.inc.php                              |    4 
 interface/web/js/select2/select2_locale_th.js                                    |   19 
 interface/web/mail/lib/lang/cz_mail_user.lng                                     |    1 
 interface/web/admin/templates/server_ip_list.htm                                 |   89 
 interface/web/vm/lib/lang/pl_openvz_template.lng                                 |    2 
 interface/web/themes/default/assets/stylesheets/themes/dark/mixins.sass          |   13 
 interface/web/admin/templates/firewall_list.htm                                  |   77 
 interface/web/dns/lib/lang/hu_dns_txt.lng                                        |    3 
 interface/web/dns/list/dns_template.list.php                                     |    2 
 interface/web/dns/lib/lang/hr_dns_txt.lng                                        |    5 
 interface/web/mail/list/mail_blacklist.list.php                                  |    2 
 server/lib/classes/cron.d/150-awstats.inc.php                                    |   10 
 install/dist/lib/centos52.lib.php                                                |    1 
 interface/web/mail/list/mail_whitelist.list.php                                  |    2 
 interface/web/dns/lib/lang/fr_dns_dmarc.lng                                      |   50 
 interface/web/dns/templates/dns_wizard.htm                                       |  115 
 helper_scripts/recreate_webalizer_stats.php                                      |    4 
 install/tpl/mysql-virtual_outgoing_bcc.cf.master                                 |    8 
 interface/web/sites/aps_do_operation.php                                         |   37 
 interface/web/sites/list/web_folder.list.php                                     |    2 
 remoting_client/examples/dns_srv_add.php                                         |    2 
 interface/web/mail/lib/lang/ar_mail_forward.lng                                  |    1 
 interface/web/dns/lib/lang/ar_dns_txt.lng                                        |   29 
 interface/web/mail/templates/spamfilter_config_mail_edit.htm                     |   74 
 interface/web/vm/templates/openvz_ip_list.htm                                    |   77 
 server/plugins-available/mongo_clientdb_plugin.inc.php                           |   12 
 interface/web/mail/lib/lang/br_mail_forward.lng                                  |    1 
 interface/web/sites/lib/lang/br_backup_stats_list.lng                            |   10 
 interface/lib/classes/tform_base.inc.php                                         |   46 
 interface/web/mail/list/mail_domain_catchall.list.php                            |    2 
 install/tpl/debian6_dovecot-sql.conf.master                                      |    7 
 interface/web/vm/lib/lang/id_openvz_template.lng                                 |    2 
 interface/web/remote/monitor.php                                                 |    4 
 interface/web/dashboard/dashlets/templates/modules.htm                           |   20 
 interface/web/dns/lib/lang/bg_dns_spf.lng                                        |   25 
 interface/web/mail/lib/lang/ar_mail_user.lng                                     |    1 
 remoting_client/examples/dns_cname_add.php                                       |    2 
 interface/web/mail/lib/lang/pl_mail_user.lng                                     |    1 
 interface/web/js/select2/select2_locale_ro.js                                    |   17 
 interface/web/client/client_list.php                                             |    2 
 interface/web/js/select2/select2_locale_es.js                                    |   19 
 server/plugins-available/mail_plugin.inc.php                                     |  372 
 interface/web/dns/lib/lang/ro_dns_spf.lng                                        |   25 
 interface/web/admin/lib/lang/ja_system_config.lng                                |    1 
 interface/web/themes/default/assets/stylesheets/themes/dark/theme.min.css        |    1 
 interface/web/admin/lib/lang/pt_system_config.lng                                |    1 
 interface/web/mail/lib/lang/fi_mail_user.lng                                     |    1 
 interface/lib/classes/tform.inc.php                                              |   36 
 interface/web/themes/default/templates/module.tpl.htm                            |    2 
 interface/web/vm/templates/openvz_ip_edit.htm                                    |   50 
 interface/web/dns/templates/dns_template_edit.htm                                |   46 
 interface/web/sites/list/cron.list.php                                           |    2 
 interface/web/themes/default/assets/stylesheets/select2-bootstrap.css            |   87 
 interface/web/mailuser/templates/mail_user_filter_edit.htm                       |   52 
 interface/web/mail/lib/lang/nl_mail_user.lng                                     |    1 
 interface/web/mail/lib/lang/el_backup_stats_list.lng                             |    9 
 interface/web/mailuser/templates/index.htm                                       |   32 
 server/plugins-available/bind_dlz_plugin.inc.php                                 |   38 
 interface/web/mail/lib/lang/pt_mail_user.lng                                     |    1 
 install/tpl/config.inc.php.master                                                |    3 
 interface/web/dashboard/lib/lang/pl_dashlet_databasequota.lng                    |    7 
 interface/web/mail/templates/mail_forward_list.htm                               |   71 
 interface/web/monitor/templates/syslog_list.htm                                  |   64 
 interface/web/client/templates/message_template.htm                              |   47 
 interface/web/mail/lib/lang/br_mail_user.lng                                     |    1 
 interface/web/sites/lib/module.conf.php                                          |   30 
 interface/web/admin/templates/system_config_branding_edit.html                   |    4 
 server/lib/classes/cron.d/100-monitor_mail_log.inc.php                           |   30 
 interface/web/login/index.php                                                    |   54 
 interface/web/mail/mail_domain_del.php                                           |   10 
 interface/web/dns/lib/lang/hr_dns_dmarc.lng                                      |   50 
 interface/web/mailuser/mail_user_filter_edit.php                                 |    6 
 interface/web/sites/lib/lang/ro_database_quota_stats_list.lng                    |    1 
 interface/web/admin/templates/iptables_edit.htm                                  |   98 
 interface/web/vm/lib/lang/el_openvz_vm.lng                                       |    2 
 interface/web/mail/lib/lang/en_xmpp_domain_admin_list.lng                        |    8 
 interface/web/mail/lib/lang/es_backup_stats_list.lng                             |    9 
 interface/web/admin/templates/users_user_edit.htm                                |   93 
 interface/web/vm/lib/lang/tr_openvz_vm.lng                                       |    2 
 interface/web/dns/dns_dkim_edit.php                                              |   38 
 interface/web/dns/form/dns_srv.tform.php                                         |    2 
 interface/web/sites/lib/lang/el_aps_instances_list.lng                           |    2 
 interface/web/dashboard/lib/lang/ja_dashlet_databasequota.lng                    |    7 
 remoting_client/API-docs/sites_aps_install_package.html                          |   29 
 interface/web/admin/templates/server_config_fastcgi_edit.htm                     |   80 
 interface/web/tools/lib/lang/es_resync.lng                                       |   60 
 interface/lib/classes/sites_database_plugin.inc.php                              |    8 
 interface/web/mail/templates/mail_mailinglist_list.htm                           |   67 
 interface/web/sites/lib/lang/ro_aps_instances_list.lng                           |    2 
 interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng                    |    7 
 interface/web/dns/dns_rp_edit.php                                                |   90 
 server/conf/metronome_conf_status.master                                         |   12 
 interface/lib/classes/auth.inc.php                                               |   88 
 server/conf/metronome_conf_host.master                                           |  135 
 server/lib/classes/cron.d/100-mailbox_stats.inc.php                              |   91 
 interface/web/dns/form/dns_dmarc.tform.php                                       |  164 
 interface/web/mail/mail_user_del.php                                             |    4 
 interface/web/admin/lib/lang/ar_system_config.lng                                |    1 
 interface/lib/classes/functions.inc.php                                          |   44 
 interface/lib/classes/remote.d/sites.inc.php                                     |   71 
 interface/web/themes/default/assets/stylesheets/themes/default/colors.sass       |   33 
 interface/web/admin/lib/lang/de_users.lng                                        |    1 
 server/plugins-available/postfix_filter_plugin.inc.php                           |    8 
 install/tpl/metronome_conf_ssl.master                                            |   48 
 interface/web/vm/lib/lang/fr_openvz_vm.lng                                       |    2 
 interface/web/vm/lib/lang/ja_openvz_vm.lng                                       |    2 
 interface/web/vm/openvz_action.php                                               |   53 
 install/tpl/pdns.local.master                                                    |    1 
 interface/web/dns/dns_aaaa_edit.php                                              |   90 
 interface/web/help/templates/support_message_view.htm                            |   31 
 interface/web/mail/lib/lang/ja_backup_stats_list.lng                             |    9 
 interface/web/mail/lib/lang/de_mail_forward.lng                                  |    2 
 interface/web/admin/lib/lang/id_system_config.lng                                |    1 
 interface/web/mail/lib/lang/cz_mail_alias.lng                                    |    1 
 interface/web/dns/ajax_get_json.php                                              |  103 
 interface/web/mail/xmpp_domain_list.php                                          |   28 
 interface/web/sites/lib/lang/nl_database_quota_stats_list.lng                    |    1 
 interface/web/themes/default/assets/javascripts/modernizr.custom.min.js          |    1 
 interface/web/js/select2/select2_locale_gl.js                                    |   45 
 interface/web/tools/lib/lang/fr_resync.lng                                       |   61 
 interface/web/admin/server_config_edit.php                                       |    2 
 interface/web/sites/lib/lang/de_backup_stats_list.lng                            |   10 
 interface/web/admin/lib/lang/sk_system_config.lng                                |    1 
 interface/web/sites/lib/lang/fi_database_quota_stats_list.lng                    |    1 
 interface/web/sites/templates/aps_instances_list.htm                             |   69 
 interface/web/mail/templates/spamfilter_blacklist_edit.htm                       |   58 
 interface/web/sites/lib/lang/sk_backup_stats_list.lng                            |   10 
 install/dist/lib/gentoo.lib.php                                                  |   73 
 interface/lib/classes/validate_client.inc.php                                    |   96 
 interface/web/dashboard/lib/lang/fi_dashlet_databasequota.lng                    |    7 
 interface/web/monitor/show_sys_state.php                                         |   90 
 interface/web/themes/default/assets/stylesheets/login.css                        |    9 
 interface/web/mail/templates/mail_domain_catchall_list.htm                       |   71 
 interface/web/dns/templates/dns_rp_edit.htm                                      |   48 
 interface/web/mail/lib/lang/pl_mail_forward.lng                                  |    1 
 interface/web/themes/default/assets/javascripts/responsive.min.js                |    1 
 interface/web/vm/lib/lang/en_openvz_vm.lng                                       |    4 
 interface/web/js/mail_domain_dkim.js                                             |   26 
 interface/web/sites/web_folder_edit.php                                          |   18 
 interface/web/sites/lib/lang/pl_database_quota_stats_list.lng                    |    1 
 interface/web/admin/lib/lang/hu_system_config.lng                                |    1 
 install/dist/lib/debian60.lib.php                                                |    3 
 interface/web/mail/lib/lang/fi_backup_stats_list.lng                             |    9 
 interface/web/admin/system_config_edit.php                                       |   45 
 interface/web/admin/lib/lang/pt_server_config.lng                                |    2 
 interface/web/js/select2/select2_locale_az.js                                    |   20 
 interface/web/client/templates/client_message_template_list.htm                  |   57 
 interface/web/mail/templates/mail_transport_list.htm                             |   83 
 interface/web/dns/dns_mx_edit.php                                                |   95 
 interface/web/js/select2/select2_locale_pt-PT.js                                 |   17 
 interface/web/mail/templates/user_quota_stats_list.htm                           |   64 
 server/plugins-available/openvz_plugin.inc.php                                   |    2 
 interface/web/mail/mail_user_filter_edit.php                                     |    6 
 interface/web/vm/lib/lang/ro_openvz_template.lng                                 |    2 
 interface/web/admin/lib/lang/es_server_config.lng                                |    2 
 interface/web/admin/templates/system_config_mail_edit.htm                        |  136 
 interface/web/mail/templates/spamfilter_policy_list.htm                          |   83 
 interface/web/admin/software_update_list.php                                     |   64 
 interface/web/admin/lib/lang/de_server_config.lng                                |    9 
 interface/web/dns/dns_soa_del.php                                                |    2 
 interface/web/admin/lib/lang/nl_server_config.lng                                |    2 
 interface/web/mail/lib/lang/id_backup_stats_list.lng                             |    9 
 interface/web/sites/lib/lang/id_backup_stats_list.lng                            |   10 
 interface/web/mail/spamfilter_blacklist_edit.php                                 |   24 
 interface/web/mail/templates/spamfilter_users_list.htm                           |   83 
 interface/web/themes/default/assets/fonts/ispconfig.svg                          |   32 
 install/apps/metronome_libs/mod_auth_external/authenticate_isp.sh                |   38 
 interface/web/js/select2/select2_locale_mk.js                                    |   19 
 remoting_client/examples/dns_hinfo_add.php                                       |    2 
 interface/web/js/select2/select2_locale_eu.js                                    |   45 
 interface/web/mail/list/spamfilter_blacklist.list.php                            |    2 
 interface/lib/classes/plugin_dbhistory.inc.php                                   |    7 
 interface/web/vm/lib/lang/hr_openvz_vm.lng                                       |    2 
 interface/web/client/lib/module.conf.php                                         |    1 
 interface/web/monitor/templates/show_log.htm                                     |   31 
 interface/web/tools/lib/lang/de_resync.lng                                       |   51 
 interface/web/dns/form/dns_mx.tform.php                                          |    2 
 interface/web/sites/templates/database_user_list.htm                             |   59 
 interface/web/sites/templates/cron_list.htm                                      |  107 
 interface/web/vm/lib/lang/pl_openvz_vm.lng                                       |    2 
 interface/web/admin/templates/server_config_mail_edit.htm                        |  205 
 interface/web/vm/form/openvz_vm.tform.php                                        |   16 
 server/lib/classes/cron.d/100-monitor_services.inc.php                           |   10 
 interface/web/js/select2/select2_locale_nb.js                                    |   22 
 interface/web/mail/lib/lang/de_mail_domain.lng                                   |    8 
 server/plugins-available/powerdns_plugin.inc.php                                 |   52 
 interface/web/mail/lib/lang/hr_backup_stats_list.lng                             |    9 
 interface/web/admin/lib/lang/pl_system_config.lng                                |    1 
 interface/web/themes/default/assets/stylesheets/pushy.css                        |   98 
 interface/lib/plugins/sites_web_database_user_plugin.inc.php                     |    5 
 interface/web/client/templates/reseller_edit_address.htm                         |  270 
 interface/web/tools/user_settings.php                                            |    2 
 interface/web/tools/lib/lang/se_resync.lng                                       |   52 
 interface/web/dns/form/dns_ns.tform.php                                          |    2 
 interface/web/dns/form/dns_a.tform.php                                           |    2 
 install/tpl/opensuse_postfix.conf.master                                         |   11 
 interface/web/mail/list/spamfilter_policy.list.php                               |    8 
 server/plugins-available/software_update_plugin.inc.php                          |    8 
 interface/web/mail/list/mail_alias.list.php                                      |    2 
 interface/web/themes/default/assets/stylesheets/bootstrap-datetimepicker.min.css |    9 
 install/apps/metronome_libs/mod_webpresence/icons/status_chat.png                |    0 
 remoting_client/API-docs/sites_aps_available_packages_list.html                  |   29 
 interface/web/admin/templates/server_config_xmpp_edit.htm                        |   73 
 interface/web/admin/lib/lang/ru_server_config.lng                                |    2 
 interface/web/admin/list/server.list.php                                         |   21 
 interface/web/mail/templates/spamfilter_policy_edit.htm                          |   84 
 interface/web/client/client_message.php                                          |    6 
 interface/web/admin/lib/lang/se_system_config.lng                                |    1 
 interface/web/dns/templates/dns_slave_list.htm                                   |   75 
 interface/web/sites/lib/lang/fr_database_quota_stats_list.lng                    |    1 
 interface/web/mail/list/xmpp_domain.list.php                                     |  109 
 interface/web/mail/templates/backup_stats_list.htm                               |   42 
 remoting_client/API-docs/sites_aps_instance_get.html                             |   29 
 server/plugins-available/shelluser_jailkit_plugin.inc.php                        |   22 
 interface/web/sites/lib/lang/hr_database_quota_stats_list.lng                    |    1 
 interface/web/js/select2/select2_locale_fa.js                                    |   21 
 interface/web/sites/web_childdomain_edit.php                                     |    8 
 server/mods-available/xmpp_module.inc.php                                        |  130 
 interface/web/mail/lib/lang/sk_mail_user.lng                                     |    1 
 interface/web/monitor/templates/show_data.htm                                    |    8 
 interface/web/js/jquery.tipsy.js                                                 |  696 
 interface/web/mail/lib/lang/se_mail_alias.lng                                    |    1 
 interface/web/sites/lib/lang/hr_backup_stats_list.lng                            |   10 
 interface/web/vm/lib/lang/el_openvz_template.lng                                 |    2 
 interface/web/mail/lib/lang/de_mail_alias.lng                                    |    1 
 interface/web/dns/templates/dns_hinfo_edit.htm                                   |   48 
 interface/web/sites/templates/cron_edit.htm                                      |   89 
 interface/web/js/select2/select2_locale_cs.js                                    |   51 
 interface/web/dns/lib/lang/se_dns_txt.lng                                        |    3 
 interface/web/mail/lib/lang/ru_mail_user.lng                                     |    1 
 interface/web/mail/lib/lang/pt_mail_forward.lng                                  |    1 
 interface/web/login/templates/password_reset.htm                                 |   32 
 interface/web/sites/lib/lang/ro_backup_stats_list.lng                            |   10 
 interface/web/sites/web_folder_del.php                                           |    2 
 interface/web/js/select2/select2_locale_he.js                                    |   19 
 install/tpl/bastille-firewall.cfg.master                                         |    2 
 interface/web/mail/xmpp_user_del.php                                             |   72 
 interface/web/vm/lib/lang/sk_openvz_template.lng                                 |    2 
 interface/lib/classes/listform_tpl_generator.inc.php                             |    8 
 interface/web/mail/lib/lang/ru_mail_alias.lng                                    |    1 
 server/plugins-available/apache2_plugin.inc.php                                  |  242 
 interface/web/dns/templates/dns_a_edit.htm                                       |   50 
 interface/web/tools/lib/lang/ro_resync.lng                                       |   52 
 server/lib/classes/cron.d/150-webalizer.inc.php                                  |    6 
 interface/web/dns/lib/lang/sk_dns_txt.lng                                        |    3 
 interface/web/sites/lib/lang/fr_aps_instances_list.lng                           |    2 
 interface/web/mail/templates/mail_user_backup_list.htm                           |   42 
 interface/web/sites/templates/web_vhost_domain_list.htm                          |   84 
 interface/web/mail/lib/lang/se_mail_forward.lng                                  |    1 
 interface/web/vm/lib/lang/it_openvz_template.lng                                 |    2 
 interface/web/mail/webmailer.php                                                 |    4 
 interface/web/mail/spamfilter_policy_edit.php                                    |    4 
 server/plugins-available/mail_plugin_dkim.inc.php                                |   81 
 interface/lib/classes/session.inc.php                                            |   38 
 interface/web/sites/lib/lang/pl_aps_instances_list.lng                           |    2 
 remoting_client/API-docs/sites_aps_instance_delete.html                          |   29 
 interface/web/dns/lib/lang/ja_dns_dmarc.lng                                      |   50 
 interface/web/sites/lib/remote.conf.php                                          |    3 
 interface/web/mail/lib/lang/ro_backup_stats_list.lng                             |    9 
 interface/web/tools/lib/lang/el_resync.lng                                       |   52 
 interface/web/admin/lib/lang/en_server.lng                                       |    2 
 interface/web/mail/lib/lang/ar_mail_alias.lng                                    |    1 
 interface/web/help/templates/faq_edit.htm                                        |   38 
 interface/lib/classes/tform_tpl_generator.inc.php                                |    4 
 interface/web/js/select2/select2_locale_el.js                                    |   19 
 interface/web/admin/templates/server_php_name_edit.htm                           |   44 
 server/plugins-available/mailman_plugin.inc.php                                  |    4 
 server/plugins-available/postfix_server_plugin.inc.php                           |   19 
 interface/web/vm/lib/lang/nl_openvz_vm.lng                                       |    2 
 interface/web/admin/server_ip_edit.php                                           |    2 
 install/dist/lib/centos53.lib.php                                                |    1 
 interface/web/themes/default/assets/stylesheets/fonts.min.css                    |    1 
 interface/web/themes/default/assets/stylesheets/ispconfig.sass                   |  293 
 interface/web/client/templates/reseller_edit_limits.htm                          |  529 
 interface/web/vm/form/openvz_ip.tform.php                                        |    7 
 interface/web/dns/templates/dns_template_list.htm                                |   65 
 interface/web/admin/lib/lang/ro_server_config.lng                                |    2 
 server/plugins-available/nginx_plugin.inc.php                                    |  202 
 interface/lib/classes/db_mysql.inc.php                                           |  124 
 interface/web/admin/lib/lang/br_server_config.lng                                |    2 
 interface/lib/classes/validate_dkim.inc.php                                      |    6 
 interface/web/admin/lib/lang/hr_server_config.lng                                |    2 
 interface/web/mail/list/mail_domain.list.php                                     |    5 
 interface/web/themes/default/assets/stylesheets/responsive.css                   |   96 
 interface/web/vm/openvz_vm_edit.php                                              |   23 
 interface/web/mail/templates/spamfilter_taglevel_edit.htm                        |   78 
 interface/web/js/select2/select2_locale_lt.js                                    |   26 
 interface/web/admin/users_edit.php                                               |   37 
 interface/web/themes/default/assets/stylesheets/ispconfig.min.css                |    1 
 interface/lib/classes/quota_lib.inc.php                                          |  142 
 server/server.sh                                                                 |   13 
 server/plugins-available/shelluser_base_plugin.inc.php                           |  138 
 install/tpl/metronome_conf_global.master                                         |   65 
 remoting_client/examples/dns_ptr_add.php                                         |    2 
 interface/web/admin/lib/lang/fi_system_config.lng                                |    1 
 interface/web/mail/form/spamfilter_users.tform.php                               |    4 
 interface/web/mail/templates/mail_mailinglist_edit.htm                           |   98 
 interface/web/mail/mail_get_edit.php                                             |   12 
 interface/web/dns/dns_dmarc_edit.php                                             |  377 
 interface/web/admin/lib/lang/ja_server_config.lng                                |    2 
 interface/web/client/templates/message_template_list.htm                         |   57 
 interface/web/vm/templates/openvz_template_advanced_edit.htm                     |  188 
 interface/web/sites/templates/webdav_user_edit.htm                               |   70 
 interface/web/dashboard/dashlets/databasequota.php                               |   41 
 install/tpl/mysql-virtual_policy_greylist.cf.master                              |    5 
 install/apps/metronome_libs/mod_webpresence/icons/status_offline.png             |    0 
 interface/web/admin/software_package_list.php                                    |   98 
 interface/web/sites/lib/lang/en_web_vhost_domain.lng                             |    6 
 interface/web/admin/lib/lang/tr_server_config.lng                                |    2 
 install/dist/conf/debian60.conf.php                                              |    6 
 install/tpl/apache_apps_fcgi_starter.master                                      |    6 
 interface/web/mail/mail_user_filter_del.php                                      |   27 
 interface/web/mail/lib/lang/it_backup_stats_list.lng                             |    9 
 interface/web/themes/default/assets/stylesheets/responsive.sass                  |  108 
 interface/web/admin/templates/language_export.htm                                |   32 
 server/conf/vhost.conf.master                                                    |   19 
 interface/web/admin/templates/firewall_edit.htm                                  |   51 
 interface/web/dns/dns_alias_edit.php                                             |   90 
 interface/web/mail/user_quota_stats.php                                          |    2 
 interface/web/js/select2/select2_locale_pt-BR.js                                 |   18 
 interface/web/tools/lib/lang/cz_resync.lng                                       |   61 
 interface/web/js/select2/select2_locale_ru.js                                    |   23 
 interface/web/client/lib/remote.conf.php                                         |    4 
 interface/web/mail/lib/lang/nl_backup_stats_list.lng                             |    9 
 interface/web/mail/list/mail_forward.list.php                                    |    2 
 interface/web/admin/templates/server_ip_edit.htm                                 |   65 
 interface/web/dns/templates/dns_aaaa_edit.htm                                    |   50 
 interface/web/mail/lib/lang/tr_mail_user.lng                                     |    1 
 interface/web/mail/mail_blacklist_edit.php                                       |    6 
 server/lib/classes/cron.d/500-backup_mail.inc.php                                |  136 
 interface/web/sites/templates/shell_user_edit.htm                                |   87 
 interface/web/mail/xmpp_user_edit.php                                            |  172 
 interface/web/mail/templates/xmpp_domain_edit_muc.htm                            |   91 
 interface/web/sites/lib/lang/bg_backup_stats_list.lng                            |   10 
 interface/web/mail/lib/lang/es_mail_user.lng                                     |    1 
 interface/web/mail/templates/spamfilter_quarantine_edit.htm                      |   63 
 interface/web/client/form/reseller.tform.php                                     |  116 
 interface/web/sites/templates/web_childdomain_list.htm                           |   77 
 interface/web/sites/templates/database_admin_list.htm                            |  107 
 interface/web/sites/web_folder_user_edit.php                                     |   18 
 interface/web/sites/lib/lang/it_backup_stats_list.lng                            |   10 
 interface/web/js/select2/select2_locale_da.js                                    |   19 
 interface/web/vm/templates/openvz_vm_edit.htm                                    |  125 
 interface/web/nav.php                                                            |   18 
 interface/web/admin/templates/remote_action_osupdate.htm                         |   29 
 interface/web/mail/templates/xmpp_user_edit.htm                                  |   47 
 interface/web/tools/templates/import_ispconfig.htm                               |  120 
 interface/web/sites/templates/aps_update_packagelist.htm                         |   26 
 remoting_client/examples/dns_rp_add.php                                          |    2 
 interface/web/admin/software_package_install.php                                 |   34 
 interface/web/sites/templates/aps_install_package.htm                            |   45 
 interface/web/sites/templates/web_vhost_domain_edit.htm                          |  336 
 interface/web/dashboard/lib/lang/ar_dashlet_databasequota.lng                    |    7 
 install/apps/metronome_libs/mod_webpresence/icons/status_dnd.png                 |    0 
 interface/web/mail/lib/lang/bg_backup_stats_list.lng                             |    9 
 interface/web/monitor/show_log.php                                               |    2 
 interface/web/sites/templates/web_backup_list.htm                                |   48 
 interface/web/dns/lib/lang/br_dns_spf.lng                                        |   25 
 install/dist/lib/opensuse.lib.php                                                |   63 
 install/tpl/apache_ispconfig_fcgi_starter.master                                 |    7 
 interface/web/admin/templates/server_config_vlogger_edit.htm                     |   30 
 interface/web/vm/lib/lang/bg_openvz_template.lng                                 |    2 
 server/lib/classes/cron.d/100-monitor_email_quota.inc.php                        |   12 
 interface/web/js/select2/select2_locale_zh-TW.js                                 |   16 
 interface/web/admin/lib/lang/cz_server_config.lng                                |    2 
 interface/web/capp.php                                                           |    1 
 interface/web/dns/lib/lang/es_dns_dmarc.lng                                      |   50 
 server/plugins-available/firewall_plugin.inc.php                                 |    2 
 interface/web/mail/mail_domain_catchall_edit.php                                 |   10 
 interface/web/sites/lib/lang/id_database_quota_stats_list.lng                    |    1 
 interface/web/mail/templates/mail_blacklist_edit.htm                             |   50 
 interface/web/js/select2/select2_locale_it.js                                    |   17 
 install/dist/lib/fedora.lib.php                                                  |   64 
 interface/web/dns/templates/dns_a_list.htm                                       |   95 
 interface/web/dns/templates/dns_ns_edit.htm                                      |   48 
 interface/web/mail/mail_user_stats.php                                           |    8 
 interface/web/mail/lib/lang/pt_mail_alias.lng                                    |    1 
 interface/web/help/support_message_edit.php                                      |   12 
 install/lib/installer_base.lib.php                                               |  412 
 interface/web/themes/default/assets/stylesheets/bootstrap.min.css                |    5 
 server/lib/classes/cron.d/100-monitor_mail_queue.inc.php                         |   10 
 remoting_client/API-docs/sites_aps_get_package_settings.html                     |   29 
 interface/lib/classes/remoting.inc.php                                           |   51 
 interface/web/js/select2/select2_locale_lv.js                                    |   19 
 interface/web/tools/lib/lang/nl_resync.lng                                       |   52 
 interface/web/dashboard/dashlets/templates/mailquota.htm                         |   57 
 install/tpl/fedora_dovecot.conf.master                                           |    4 
 interface/web/sites/lib/lang/br_database_quota_stats_list.lng                    |    1 
 interface/web/tools/lib/lang/tr_resync.lng                                       |   52 
 interface/web/admin/lib/lang/de_directive_snippets.lng                           |    1 
 server/plugins-available/bind_plugin.inc.php                                     |   24 
 interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng                    |    7 
 interface/web/tools/resync.php                                                   |  561 
 interface/web/vm/lib/lang/fi_openvz_template.lng                                 |    2 
 interface/web/client/lib/lang/de_client.lng                                      |   28 
 interface/web/tools/lib/lang/hr_resync.lng                                       |   57 
 interface/web/mail/lib/lang/fi_mail_forward.lng                                  |    1 
 interface/web/vm/lib/lang/es_openvz_template.lng                                 |    2 
 interface/web/dns/lib/lang/ro_dns_dmarc.lng                                      |   50 
 install/tpl/nginx_apps.vhost.master                                              |    2 
 interface/web/dns/lib/lang/cz_dns_spf.lng                                        |   25 
 interface/web/dns/templates/dns_cname_edit.htm                                   |   48 
 interface/web/admin/server_edit.php                                              |    4 
 interface/web/dns/form/dns_dkim.tform.php                                        |    2 
 remoting_client/examples/dns_txt_add.php                                         |    2 
 interface/web/themes/default/assets/javascripts/pushy.min.js                     |    4 
 interface/web/help/form/support_message.tform.php                                |    2 
 interface/web/admin/templates/remote_action_ispcupdate.htm                       |   26 
 interface/web/sites/user_quota_stats.php                                         |    6 
 interface/web/client/list/client_circle.list.php                                 |    2 
 interface/web/themes/default/assets/stylesheets/themes/dark/theme.sass           |  185 
 interface/web/sites/templates/web_vhost_domain_stats.htm                         |   50 
 interface/web/tools/lib/lang/sk_resync.lng                                       |   52 
 interface/web/dns/lib/lang/bg_dns_dmarc.lng                                      |   50 
 interface/web/js/select2/select2_locale_hr.js                                    |   24 
 interface/web/js/select2/select2_locale_rs.js                                    |   19 
 interface/web/tools/templates/tpl_default.htm                                    |   23 
 interface/lib/classes/getconf.inc.php                                            |    2 
 interface/web/dashboard/dashlets/templates/quota.htm                             |   55 
 interface/web/admin/templates/server_config_jailkit_edit.htm                     |   51 
 interface/web/admin/lib/lang/en_system_config.lng                                |    1 
 interface/web/dns/lib/lang/ru_dns_txt.lng                                        |    3 
 interface/web/tools/lib/lang/ja_resync.lng                                       |   52 
 interface/lib/classes/remote.d/domains.inc.php                                   |    4 
 interface/web/mail/templates/spamfilter_users_edit.htm                           |   67 
 interface/web/sites/lib/lang/ar_database_quota_stats_list.lng                    |    1 
 interface/web/dns/lib/lang/pl_dns_txt.lng                                        |    3 
 interface/web/dns/lib/lang/pt_dns_txt.lng                                        |    3 
 interface/web/sites/lib/lang/sk_aps_instances_list.lng                           |    2 
 interface/web/mail/list/mail_get.list.php                                        |    2 
 interface/web/vm/lib/module.conf.php                                             |    1 
 interface/web/sites/lib/lang/hu_database_quota_stats_list.lng                    |    1 
 interface/web/admin/lib/lang/it_server_config.lng                                |    2 
 interface/web/dns/lib/lang/tr_dns_txt.lng                                        |    3 
 interface/web/dashboard/lib/lang/el_dashlet_databasequota.lng                    |    7 
 interface/web/admin/templates/server_config_web_edit.htm                         |  424 
 interface/web/client/templates/resellers_list.htm                                |   97 
 interface/web/admin/templates/server_config_ufw_edit.htm                         |   79 
 interface/web/login/password_reset.php                                           |   82 
 interface/web/mail/lib/lang/es_mail_get.lng                                      |    2 
 server/conf/metronome_conf_main.master                                           |    3 
 server/conf/metronome_conf_ssl.master                                            |   72 
 interface/web/sites/templates/ftp_user_list.htm                                  |   79 
 remoting_client/API-docs/navigation.html                                         |   13 
 interface/web/mail/mail_user_edit.php                                            |   90 
 interface/web/mail/templates/spamfilter_config_getmail_edit.htm                  |   20 
 interface/web/mail/templates/mail_aliasdomain_list.htm                           |   71 
 install/tpl/debian_dovecot.conf.master                                           |    4 
 interface/web/admin/templates/server_list.htm                                    |   85 
 interface/web/mail/lib/lang/id_mail_user.lng                                     |    1 
 interface/web/dashboard/lib/lang/se_dashlet_databasequota.lng                    |    7 
 server/plugins-available/backup_plugin.inc.php                                   |  216 
 interface/web/mail/templates/mail_domain_admin_list.htm                          |   77 
 interface/web/admin/lib/lang/fi_server_config.lng                                |    2 
 server/lib/classes/cron.d/100-monitor_syslog.inc.php                             |   22 
 install/dist/conf/centos70.conf.php                                              |    6 
 interface/web/mail/lib/lang/sk_backup_stats_list.lng                             |    9 
 interface/web/mail/templates/xmpp_domain_admin_list.htm                          |   60 
 interface/web/vm/lib/lang/br_openvz_vm.lng                                       |    2 
 interface/web/admin/lib/lang/el_system_config.lng                                |    1 
 interface/web/vm/lib/lang/se_openvz_vm.lng                                       |    2 
 interface/web/dns/lib/lang/sk_dns_dmarc.lng                                      |   50 
 interface/web/vm/lib/lang/ar_openvz_vm.lng                                       |    2 
 interface/web/mail/lib/lang/hu_mail_alias.lng                                    |    1 
 interface/web/themes/default/templates/tabbed_form.tpl.htm                       |   66 
 interface/web/mail/templates/mail_relay_recipient_edit.htm                       |   42 
 install/tpl/debian_postfix.conf.master                                           |   11 
 interface/lib/classes/tools_sites.inc.php                                        |   13 
 server/lib/classes/monitor_tools.inc.php                                         |   18 
 install/lib/update.lib.php                                                       |   54 
 interface/web/mail/lib/lang/id_mail_alias.lng                                    |    1 
 interface/web/admin/templates/server_edit_config.htm                             |   29 
 interface/web/vm/templates/openvz_vm_advanced_edit.htm                           |  114 
 interface/web/sites/lib/lang/se_aps_instances_list.lng                           |    2 
 interface/web/themes/default/templates/module_tree.tpl.htm                       |    2 
 server/plugins-available/nginx_reverseproxy_plugin.inc.php                       |    8 
 interface/web/sites/lib/lang/pt_aps_instances_list.lng                           |    2 
 interface/web/sites/templates/web_directive_snippets.htm                         |   14 
 interface/web/sites/lib/lang/cz_backup_stats_list.lng                            |   10 
 interface/web/sites/templates/web_vhost_domain_admin_list.htm                    |   90 
 interface/web/mail/templates/mail_user_custom_rules_edit.htm                     |   27 
 interface/web/js/select2/select2_locale_vi.js                                    |   20 
 interface/web/mail/templates/xmpp_domain_edit.htm                                |  130 
 interface/web/dns/dns_soa_edit.php                                               |   37 
 interface/web/sites/lib/lang/ja_backup_stats_list.lng                            |   10 
 interface/web/dns/lib/lang/tr_dns_spf.lng                                        |   25 
 interface/web/dns/lib/lang/de_dns_spf.lng                                        |   25 
 interface/web/mail/templates/xmpp_domain_edit_modules.htm                        |   59 
 server/lib/classes/system.inc.php                                                |   30 
 interface/web/dns/lib/lang/fr_dns_spf.lng                                        |   25 
 interface/web/dns/templates/dns_soa_admin_list.htm                               |   91 
 server/lib/classes/cron.d/100-monitor_database_size.inc.php                      |   12 
 interface/web/dns/lib/lang/fr_dns_wizard.lng                                     |    2 
 server/lib/app.inc.php                                                           |   15 
 interface/web/help/templates/help_faq_list.htm                                   |    4 
 interface/web/vm/templates/openvz_ostemplate_edit.htm                            |   61 
 interface/web/dashboard/dashlets/templates/limits.htm                            |   37 
 interface/web/sites/database_quota_stats.php                                     |   29 
 interface/web/dns/templates/dns_records_edit.htm                                 |    4 
 interface/web/themes/default/assets/javascripts/responsive.js                    |   48 
 install/install.php                                                              |  584 
 interface/web/vm/templates/openvz_template_list.htm                              |   65 
 interface/web/vm/lib/lang/hr_openvz_template.lng                                 |    2 
 interface/lib/classes/plugin_directive_snippets.inc.php                          |   72 
 interface/web/dashboard/lib/lang/es_dashlet_databasequota.lng                    |    7 
 interface/web/vm/lib/lang/cz_openvz_vm.lng                                       |    2 
 interface/web/admin/templates/software_repo_edit.htm                             |   57 
 interface/web/js/jquery.ispconfigsearch.js                                       |   11 
 interface/web/dns/lib/lang/pl_dns_dmarc.lng                                      |   50 
 interface/web/sites/lib/lang/es_backup_stats_list.lng                            |   10 
 interface/web/admin/list/software_repo.list.php                                  |    2 
 interface/web/sites/lib/lang/de_aps_instances_list.lng                           |    2 
 interface/web/admin/list/server_ip.list.php                                      |   18 
 interface/web/sites/web_vhost_domain_del.php                                     |   20 
 interface/web/dashboard/lib/lang/bg_dashlet_databasequota.lng                    |    7 
 interface/web/sites/templates/backup_stats_list.htm                              |   42 
 interface/web/sites/templates/web_folder_user_edit.htm                           |   59 
 interface/web/client/lib/lang/en_client.lng                                      |   44 
 interface/web/dashboard/lib/lang/ru_dashlet_databasequota.lng                    |    7 
 interface/web/tools/lib/lang/fi_resync.lng                                       |   52 
 interface/web/dns/dns_srv_edit.php                                               |   90 
 interface/web/sites/lib/lang/de_database_quota_stats_list.lng                    |    1 
 interface/web/vm/ajax_get_ip.php                                                 |    4 
 install/sql/ispconfig3.sql                                                       |  128 
 interface/web/admin/lib/lang/pl_server_config.lng                                |    2 
 interface/web/dashboard/lib/lang/fr_dashlet_databasequota.lng                    |    7 
 interface/web/dns/dns_wizard.php                                                 |   92 
 interface/web/mail/templates/mail_content_filter_edit.htm                        |   65 
 interface/web/sites/templates/user_quota_stats_list.htm                          |   72 
 interface/web/sites/templates/ftp_user_advanced.htm                              |   78 
 interface/web/dashboard/lib/lang/cz_dashlet_databasequota.lng                    |    7 
 interface/web/sites/database_user_edit.php                                       |   30 
 interface/web/mail/templates/mail_content_filter_list.htm                        |   77 
 server/conf/metronome_conf_global.master                                         |   48 
 server/lib/classes/cron.d/100-monitor_system_update.inc.php                      |   10 
 interface/web/mailuser/templates/mail_user_password_edit.htm                     |   42 
 interface/web/mail/lib/lang/en_xmpp_domain.lng                                   |   62 
 interface/web/mail/list/spamfilter_users.list.php                                |    2 
 install/apps/metronome_libs/mod_auth_external/db_conf.inc.php                    |    6 
 server/lib/classes/db_mysql.inc.php                                              |  106 
 interface/web/mail/templates/mail_relay_recipient_list.htm                       |   71 
 interface/web/tools/templates/user_settings.htm                                  |   46 
 interface/web/vm/lib/lang/id_openvz_vm.lng                                       |    2 
 interface/web/sites/list/ftp_user.list.php                                       |    2 
 interface/web/sites/lib/lang/en_web_directive_snippets.lng                       |    3 
 interface/web/js/select2/select2_locale_fr.js                                    |   18 
 interface/web/mail/mail_transport_edit.php                                       |    4 
 interface/web/admin/templates/software_repo_list.htm                             |   71 
 interface/web/mail/list/mail_transport.list.php                                  |    2 
 interface/web/sites/lib/lang/fr_backup_stats_list.lng                            |   10 
 remoting_client/examples/dns_alias_add.php                                       |    2 
 interface/lib/classes/aps_crawler.inc.php                                        |  323 
 interface/web/themes/default/assets/javascripts/modernizr.custom.js              |    4 
 interface/web/vm/lib/lang/ru_openvz_template.lng                                 |    2 
 interface/web/mail/form/mail_forward.tform.php                                   |    6 
 interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng                    |    7 
 interface/web/admin/templates/groups_list.htm                                    |   65 
 interface/web/mail/lib/lang/ja_mail_alias.lng                                    |    1 
 interface/web/tools/form/interface_settings.tform.php                            |    2 
 install/lib/mysql.lib.php                                                        | 1096 
 interface/lib/classes/validate_ftpuser.inc.php                                   |    4 
 interface/web/mail/lib/lang/sk_mail_alias.lng                                    |    1 
 interface/web/sites/templates/database_user_admin_list.htm                       |   59 
 interface/web/mail/lib/lang/ru_mail_forward.lng                                  |    1 
 interface/web/js/select2/select2_locale_de.js                                    |   18 
 interface/web/dns/templates/dns_mx_edit.htm                                      |   55 
 interface/web/sites/lib/lang/hu_backup_stats_list.lng                            |   10 
 interface/web/login/logout.php                                                   |    6 
 interface/web/themes/default/assets/stylesheets/fonts.css                        |   94 
 interface/web/tools/form/resync.tform.php                                        |   94 
 server/lib/classes/cron.d/100-monitor_hd_quota.inc.php                           |   10 
 interface/web/mail/lib/lang/en_xmpp_user.lng                                     |   15 
 interface/lib/plugins/mail_mail_domain_plugin.inc.php                            |   51 
 interface/web/sites/shell_user_edit.php                                          |   18 
 interface/web/vm/lib/lang/ro_openvz_vm.lng                                       |    2 
 interface/web/sites/lib/lang/nl_aps_instances_list.lng                           |    2 
 interface/web/dashboard/ajax_get_json.php                                        |   48 
 interface/web/dns/lib/lang/ar_dns_spf.lng                                        |   25 
 interface/web/admin/lib/lang/fr_server_config.lng                                |    2 
 server/scripts/ispconfig_patch                                                   |    1 
 interface/web/themes/default/templates/main.tpl.htm                              |  309 
 interface/web/mail/list/xmpp_user.list.php                                       |   62 
 interface/web/sites/lib/lang/nl_backup_stats_list.lng                            |   10 
 interface/web/dashboard/lib/lang/hr_dashlet_databasequota.lng                    |    7 
 interface/web/js/select2/select2_locale_ar.js                                    |   19 
 interface/web/dns/lib/lang/el_dns_spf.lng                                        |   25 
 interface/web/vm/lib/lang/bg_openvz_vm.lng                                       |    2 
 interface/web/mail/xmpp_user_list.php                                            |   39 
 interface/web/sites/templates/web_childdomain_edit.htm                           |  106 
 interface/web/themes/default/assets/fonts/ispconfig.woff                         |    0 
 remoting_client/API-docs/mail_user_backup_list.html                              |   26 
 interface/web/mail/templates/xmpp_domain_edit_ssl.htm                            |  100 
 interface/web/dns/lib/lang/en_dns_spf.lng                                        |   25 
 interface/web/sites/lib/lang/tr_backup_stats_list.lng                            |   10 
 interface/web/client/message_template_edit.php                                   |    7 
 interface/web/sites/lib/lang/hr_aps_instances_list.lng                           |    2 
 interface/web/mail/lib/lang/en_xmpp_domain_list.lng                              |    7 
 interface/web/sites/list/database_quota_stats.list.php                           |    1 
 server/lib/classes/cron.d/100-monitor_ispconfig_version.inc.php                  |   10 
 interface/web/mailuser/index.php                                                 |    8 
 interface/web/sites/templates/shell_user_list.htm                                |   77 
 interface/web/vm/lib/lang/se_openvz_template.lng                                 |    2 
 interface/web/dns/lib/module.conf.php                                            |    1 
 interface/web/dns/list/dns_soa.list.php                                          |    5 
 server/lib/classes/functions.inc.php                                             |    2 
 install/apps/metronome_libs/mod_discoitems.lua                                   |   24 
 interface/lib/classes/aps_guicontroller.inc.php                                  |  326 
 interface/web/mail/list/backup_stats.list.php                                    |   54 
 interface/web/vm/lib/lang/ar_openvz_template.lng                                 |    2 
 interface/web/admin/templates/software_update_list.htm                           |   57 
 interface/web/admin/remote_action_osupdate.php                                   |   11 
 interface/web/client/templates/domain_list.htm                                   |   59 
 interface/web/vm/lib/lang/hu_openvz_vm.lng                                       |    2 
 interface/lib/classes/validate_systemuser.inc.php                                |    4 
 interface/web/sites/templates/aps_packages_list.htm                              |   56 
 interface/web/dns/templates/dns_slave_admin_list.htm                             |   81 
 interface/web/admin/templates/server_config_dns_edit.htm                         |   58 
 interface/web/sites/lib/lang/el_backup_stats_list.lng                            |   10 
 interface/lib/classes/remoting_lib.inc.php                                       |   79 
 interface/web/js/select2/select2_locale_ms.js                                    |   19 
 server/lib/classes/cron.d/100-monitor_openvz.inc.php                             |   20 
 interface/web/client/reseller_del.php                                            |   10 
 interface/web/dns/templates/dns_dmarc_edit.htm                                   |  163 
 server/scripts/update_from_tgz.sh                                                |    6 
 install/dist/lib/centos70.lib.php                                                |    1 
 interface/web/vm/lib/lang/br_openvz_template.lng                                 |    2 
 interface/web/dns/lib/lang/nl_dns_dmarc.lng                                      |   50 
 interface/lib/classes/tools_monitor.inc.php                                      |   93 
 interface/web/client/templates/client_del.htm                                    |   19 
 install/tpl/php_fpm_pool.conf.master                                             |    2 
 server/plugins-available/ftpuser_base_plugin.inc.php                             |    4 
 interface/web/vm/openvz_template_edit.php                                        |    9 
 interface/web/themes/default/assets/javascripts/bootstrap.min.js                 |    7 
 interface/lib/lang/en.lng                                                        |    2 
 interface/web/dns/form/dns_alias.tform.php                                       |    2 
 install/tpl/nginx_ispconfig.vhost.master                                         |    2 
 interface/web/tools/templates/resync.htm                                         |  319 
 interface/web/admin/templates/software_package_edit.htm                          |   33 
 interface/web/dashboard/templates/dashboard.htm                                  |   84 
 interface/web/sites/lib/lang/fi_backup_stats_list.lng                            |   10 
 interface/web/tools/dns_import_tupa.php                                          |   66 
 interface/web/mail/lib/lang/en_mail_forward.lng                                  |    2 
 interface/web/dns/form/dns_spf.tform.php                                         |  164 
 server/lib/classes/cron.d/100-monitor_server.inc.php                             |   10 
 remoting_client/API-docs/sites_aps_instance_settings_get.html                    |   29 
 interface/web/mail/templates/mail_user_autoresponder_edit.htm                    |   66 
 interface/web/tools/import_vpopmail.php                                          |  100 
 interface/web/mailuser/templates/mail_user_spamfilter_edit.htm                   |   33 
 interface/web/sites/templates/web_vhost_domain_backup.htm                        |   45 
 interface/web/mail/mail_whitelist_edit.php                                       |    6 
 interface/web/js/select2/select2_locale_tr.js                                    |   19 
 interface/web/mail/templates/mail_blacklist_list.htm                             |   77 
 interface/web/tools/lib/lang/bg_resync.lng                                       |   60 
 interface/web/dns/lib/lang/cz_dns_dmarc.lng                                      |   50 
 interface/web/vm/lib/lang/es_openvz_vm.lng                                       |    2 
 install/apps/metronome_libs/mod_webpresence/icons/status_online.png              |    0 
 interface/web/mail/templates/xmpp_user_list.htm                                  |   74 
 interface/web/dns/lib/lang/ar_dns_dmarc.lng                                      |   50 
 interface/web/dns/templates/dns_import.htm                                       |   66 
 interface/web/dns/lib/lang/de_dns_dmarc.lng                                      |   50 
 interface/web/dns/lib/lang/hr_dns_spf.lng                                        |   25 
 interface/web/sites/templates/web_vhost_domain_redirect.htm                      |   50 
 interface/web/mail/lib/lang/br_backup_stats_list.lng                             |    9 
 interface/web/sites/aps_packagedetails_show.php                                  |    2 
 interface/web/admin/list/iptables.list.php                                       |   10 
 interface/web/client/lib/lang/de_reseller.lng                                    |    3 
 interface/web/admin/templates/software_package_list.htm                          |   65 
 interface/web/js/select2/select2_locale_fi.js                                    |   30 
 interface/web/tools/lib/lang/pt_resync.lng                                       |   52 
 interface/web/dns/lib/lang/pt_dns_dmarc.lng                                      |   50 
 interface/web/sites/lib/lang/de_web_vhost_domain.lng                             |    6 
 server/lib/classes/cron.d/400-openvz.inc.php                                     |    6 
 interface/web/js/select2/select2_locale_bg.js                                    |   20 
 interface/web/js/select2/select2_locale_ko.js                                    |   19 
 interface/web/mail/lib/lang/de_backup_stats_list.lng                             |    9 
 interface/web/mail/lib/lang/it_mail_alias.lng                                    |    1 
 interface/web/tools/lib/lang/ru_resync.lng                                       |   52 
 interface/web/admin/templates/users_list.htm                                     |   79 
 interface/web/admin/templates/server_php_fpm_edit.htm                            |   42 
 interface/web/mail/lib/lang/hr_mail_user.lng                                     |    1 
 interface/web/mail/mail_mailinglist_edit.php                                     |   34 
 interface/web/admin/lib/lang/bg_server_config.lng                                |    2 
 interface/web/sites/templates/web_sites_stats_list.htm                           |   78 
 interface/web/dns/templates/dns_slave_edit.htm                                   |   86 
 interface/web/tools/templates/index.htm                                          |   12 
 interface/web/tools/lib/lang/pl_resync.lng                                       |   58 
 interface/web/admin/templates/language_edit.htm                                  |   18 
 install/update.php                                                               |   24 
 interface/lib/classes/remote.d/aps.inc.php                                       |  318 
 interface/web/sites/lib/lang/de_web_directive_snippets.lng                       |    3 
 install/apps/metronome_libs/mod_auth_external/mod_auth_external.lua              |  118 
 install/tpl/fedora_dovecot2.conf.master                                          |    5 
 interface/lib/classes/remote.d/server.inc.php                                    |   12 
 install/sql/incremental/upd_dev_collection.sql                                   |  139 
 interface/web/vm/lib/lang/sk_openvz_vm.lng                                       |    2 
 interface/web/themes/default/assets/javascripts/ispconfig.min.js                 |    1 
 interface/web/vm/lib/lang/de_openvz_template.lng                                 |    2 
 interface/web/vm/lib/lang/de_openvz_vm.lng                                       |    1 
 interface/web/sites/templates/webdav_user_list.htm                               |   77 
 interface/web/mail/lib/lang/it_mail_user.lng                                     |    1 
 interface/web/dashboard/templates/custom_menu.htm                                |    4 
 interface/web/themes/default/templates/topnav.tpl.htm                            |   14 
 server/plugins-available/network_settings_plugin.inc.php                         |    4 
 interface/web/sites/ftp_user_edit.php                                            |   38 
 interface/web/dashboard/lib/module.conf.php                                      |    1 
 install/apps/metronome_libs/mod_webpresence/icons/status_xa.png                  |    0 
 interface/web/sites/lib/lang/es_aps_instances_list.lng                           |    2 
 interface/web/sites/list/database.list.php                                       |    7 
 interface/web/sites/list/shell_user.list.php                                     |    2 
 interface/web/sites/list/web_childdomain.list.php                                |    2 
 interface/web/sites/web_sites_stats.php                                          |   32 
 interface/web/admin/server_php_edit.php                                          |    2 
 interface/web/js/select2/select2_locale_id.js                                    |   19 
 interface/web/dns/form/dns_txt.tform.php                                         |   41 
 interface/web/sites/templates/database_user_edit.htm                             |   63 
 interface/lib/classes/remote.d/openvz.inc.php                                    |   73 
 interface/web/mail/form/xmpp_user.tform.php                                      |  127 
 server/conf/php-fcgi-starter.master                                              |    3 
 install/tpl/server.ini.master                                                    |   15 
 interface/web/dns/lib/lang/fi_dns_dmarc.lng                                      |   50 
 interface/web/mail/lib/lang/bg_mail_alias.lng                                    |    1 
 interface/web/tools/lib/lang/br_resync.lng                                       |   52 
 interface/web/mail/lib/module.conf.php                                           |   31 
 interface/web/js/select2/select2_locale_pl.js                                    |   54 
 interface/lib/classes/listform.inc.php                                           |   34 
 interface/web/admin/lib/lang/bg_system_config.lng                                |    1 
 interface/web/client/templates/client_circle_list.htm                            |   77 
 interface/web/mail/templates/mail_aliasdomain_edit.htm                           |   43 
 interface/lib/classes/remote.d/admin.inc.php                                     |    4 
 interface/web/client/reseller_edit.php                                           |   85 
 interface/web/admin/templates/language_add.htm                                   |   36 
 interface/web/js/select2/select2.min.js                                          |   23 
 interface/web/sites/list/web_vhost_domain.list.php                               |    5 
 interface/web/mail/lib/lang/ru_backup_stats_list.lng                             |    9 
 interface/web/client/client_template_del.php                                     |    4 
 interface/web/dns/lib/lang/bg_dns_txt.lng                                        |    3 
 interface/web/dns/lib/lang/se_dns_dmarc.lng                                      |   50 
 install/apps/metronome_libs/mod_auth_external/db_auth.php                        |   58 
 interface/web/sites/ajax_get_json.php                                            |   80 
 interface/web/admin/lib/lang/ru_system_config.lng                                |    1 
 interface/web/dns/lib/lang/ro_dns_txt.lng                                        |    3 
 interface/web/tools/templates/import_plesk.htm                                   |   85 
 interface/web/vm/templates/openvz_vm_list.htm                                    |   97 
 install/sql/incremental/upd_0079.sql                                             |    2 
 /dev/null                                                                        |  114 
 interface/lib/classes/client_templates.inc.php                                   |   38 
 interface/web/sites/lib/lang/it_aps_instances_list.lng                           |    2 
 interface/web/dns/lib/lang/hu_dns_dmarc.lng                                      |   50 
 interface/web/mail/templates/mail_alias_edit.htm                                 |   52 
 interface/web/sites/list/backup_stats.list.php                                   |   52 
 interface/web/admin/templates/groups_edit.htm                                    |   36 
 interface/web/dns/lib/lang/fi_dns_txt.lng                                        |    3 
 interface/web/mail/templates/mail_user_mailbox_edit.htm                          |  124 
 interface/web/sites/lib/lang/se_database_quota_stats_list.lng                    |    1 
 interface/web/js/select2/select2_locale_et.js                                    |   19 
 1,228 files changed, 32,426 insertions(+), 17,108 deletions(-)

diff --git a/helper_scripts/recreate_webalizer_stats.php b/helper_scripts/recreate_webalizer_stats.php
index fbaef38..5afcd97 100644
--- a/helper_scripts/recreate_webalizer_stats.php
+++ b/helper_scripts/recreate_webalizer_stats.php
@@ -5,8 +5,8 @@
 //######################################################################################################
 
 
-$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ".$conf["server_id"];
-$records = $app->db->queryAllRecords($sql);
+$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ?";
+$records = $app->db->queryAllRecords($sql, $conf["server_id"]);
 foreach($records as $rec) {
 	$domain = escapeshellcmd($rec["domain"]);
 	$logdir = escapeshellcmd($rec["document_root"].'/log');
diff --git a/install/apps/metronome-init b/install/apps/metronome-init
new file mode 100644
index 0000000..78ba7ea
--- /dev/null
+++ b/install/apps/metronome-init
@@ -0,0 +1,75 @@
+#! /bin/sh
+#
+# metronome        Start/stop metronome server
+#
+
+### BEGIN INIT INFO
+# Provides:          metronome
+# Required-Start:    $remote_fs $network $named $time
+# Required-Stop:     $remote_fs $network $named $time
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Starts metronome server
+# Description:       Starts metronome server, an XMPP server written in Lua.
+### END INIT INFO
+
+METRONOME=/usr/bin/metronomectl
+PIDDIR=/var/run/metronome
+NAME=metronome
+
+test -e $METRONOME || exit 0
+
+start()
+{
+        mkdir $PIDDIR -p
+        chown metronome:metronome $PIDDIR
+        chmod 750 $PIDDIR
+
+    $METRONOME start >> /dev/null
+}
+
+stop()
+{
+    $METRONOME stop >> /dev/null
+}
+
+reload()
+{
+    &METRONOME reload >> /dev/null
+}
+
+restart()
+{
+    &METRONOME restart >> /dev/null
+}
+
+case "$1" in
+    start)
+        echo -n "Starting Metronome..."
+        start &
+    ;;
+    stop)
+        echo -n "Stopping Metronome..."
+        stop &
+    ;;
+    reload)
+        echo -n "Reloading Metronome config..."
+        reload &
+    ;;
+    restart)
+        echo -n "Restarting Metronome..."
+        restart &
+    ;;
+    *)
+        echo "Usage: $0 {start|stop|reload|restart}" >&2
+        exit 1
+    ;;
+esac
+
+if [ $? -eq 0 ]; then
+    echo .
+else
+    echo " failed!"
+fi
+
+exit 0
diff --git a/install/apps/metronome_libs/mod_auth_external/authenticate_isp.sh b/install/apps/metronome_libs/mod_auth_external/authenticate_isp.sh
new file mode 100644
index 0000000..c5a0c8e
--- /dev/null
+++ b/install/apps/metronome_libs/mod_auth_external/authenticate_isp.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+IFS=":"
+AUTH_OK=1
+AUTH_FAILED=0
+LOGFILE="/var/log/metronome/auth.log"
+USELOG=true
+
+while read ACTION USER HOST PASS ; do
+
+    [ $USELOG == true ] && { echo "Date: $(date) Action: $ACTION User: $USER Host: $HOST" >> $LOGFILE; }
+
+    case $ACTION in
+        "auth")
+            if [ `/usr/bin/php /usr/lib/metronome/isp-modules/mod_auth_external/db_auth.php $USER $HOST $PASS 2>/dev/null` == 1 ] ; then
+                echo $AUTH_OK
+                [ $USELOG == true ] && { echo "AUTH OK" >> $LOGFILE; }
+            else
+                echo $AUTH_FAILED
+                [ $USELOG == true ] && { echo "AUTH FAILED" >> $LOGFILE; }
+            fi
+        ;;
+        "isuser")
+             if [ `/usr/bin/php /usr/lib/metronome/isp-modules/mod_auth_external/db_isuser.php $USER $HOST 2>/dev/null` == 1 ] ; then
+                echo $AUTH_OK
+                [ $USELOG == true ] && { echo "ISUSER OK" >> $LOGFILE; }
+            else
+                echo $AUTH_FAILED
+                [ $USELOG == true ] && { echo "ISUSER FAILED" >> $LOGFILE; }
+            fi
+        ;;
+        *)
+            echo $AUTH_FAILED
+            [ $USELOG == true ] && { echo "UNKNOWN ACTION GIVEN: $ACTION" >> $LOGFILE; }
+        ;;
+    esac
+
+done
diff --git a/install/apps/metronome_libs/mod_auth_external/db_auth.php b/install/apps/metronome_libs/mod_auth_external/db_auth.php
new file mode 100644
index 0000000..3df135b
--- /dev/null
+++ b/install/apps/metronome_libs/mod_auth_external/db_auth.php
@@ -0,0 +1,58 @@
+<?php
+ini_set('display_errors', false);
+require_once('db_conf.inc.php');
+
+try{
+    // Connect database
+    $db = new mysqli($db_host, $db_user, $db_pass, $db_name);
+    result_false(mysqli_connect_errno());
+
+    // Get arguments
+    $arg_email = '';
+    $arg_password = '';
+
+    result_false(count($argv) != 4);
+    $arg_email = $argv[1].'@'.$argv[2];
+    $arg_password = $argv[3];
+
+    // check for existing user
+    $dbmail = $db->real_escape_string($arg_email);
+    $result = $db->query("SELECT jid, password FROM xmpp_user WHERE jid LIKE ? AND active='y' AND server_id=?", $dbmail, $isp_server_id);
+    result_false($result->num_rows != 1);
+
+    $user = $result->fetch_object();
+
+    // check for domain autologin api key
+    $domain_key = 'f47kmm5Yh5hJzSws2KTS';
+
+    checkAuth($argv[1], $argv[2], $arg_password, $user->password, $domain_key);
+}catch(Exception $ex){
+    echo 0;
+    exit();
+}
+
+function result_false($cond = true){
+    if(!$cond) return;
+    echo 0;
+    exit();
+}
+function result_true(){
+    echo 1;
+    exit();
+}
+function checkAuth($user, $domain, $pw_arg, $pw_db, $domain_key){
+    if(crypt($pw_arg, $pw_db) == $pw_db)
+        result_true();
+
+    if($domain_key){
+        $datetime = new DateTime();
+        $datetime->setTimezone(new DateTimeZone("UTC"));
+        for($t = $datetime->getTimestamp(); $t >= $datetime->getTimestamp()-30; $t--){
+            $pw_api = md5($domain.'@'.$domain_key.'@'.$user.'@'.$t);
+            if($pw_api == $pw_arg)
+                result_true();
+        }
+    }
+    result_false();
+}
+?>
\ No newline at end of file
diff --git a/install/apps/metronome_libs/mod_auth_external/db_conf.inc.php b/install/apps/metronome_libs/mod_auth_external/db_conf.inc.php
new file mode 100644
index 0000000..1aba63d
--- /dev/null
+++ b/install/apps/metronome_libs/mod_auth_external/db_conf.inc.php
@@ -0,0 +1,6 @@
+<?php
+$db_user = '{mysql_server_ispconfig_user}';
+$db_pass = '{mysql_server_ispconfig_password}';
+$db_name = '{mysql_server_database}';
+$db_host = '{mysql_server_ip}';
+$isp_server_id = '{server_id}';
\ No newline at end of file
diff --git a/install/apps/metronome_libs/mod_auth_external/db_isuser.php b/install/apps/metronome_libs/mod_auth_external/db_isuser.php
new file mode 100644
index 0000000..e682063
--- /dev/null
+++ b/install/apps/metronome_libs/mod_auth_external/db_isuser.php
@@ -0,0 +1,37 @@
+<?php
+ini_set('display_errors', false);
+require_once('db_conf.inc.php');
+
+try{
+    // Connect database
+    $db = new mysqli($db_host, $db_user, $db_pass, $db_name);
+    result_false(mysqli_connect_errno());
+
+    // Get arguments
+    $arg_email = '';
+
+    result_false(count($argv) != 3);
+    $arg_email = $argv[1].'@'.$argv[2];
+
+    // check for existing user
+    $dbmail = $db->real_escape_string($arg_email);
+    $result = $db->query("SELECT jid, password FROM xmpp_user WHERE jid LIKE ? AND active='y' AND server_id=?", $dbmail, $isp_server_id);
+    result_false($result->num_rows != 1);
+    result_true();
+
+}catch(Exception $ex){
+    echo 0;
+    exit();
+}
+
+function result_false($cond = true){
+    if(!$cond) return;
+    echo 0;
+    exit();
+}
+function result_true(){
+    echo 1;
+    exit();
+}
+
+?>
\ No newline at end of file
diff --git a/install/apps/metronome_libs/mod_auth_external/mod_auth_external.lua b/install/apps/metronome_libs/mod_auth_external/mod_auth_external.lua
new file mode 100644
index 0000000..c864006
--- /dev/null
+++ b/install/apps/metronome_libs/mod_auth_external/mod_auth_external.lua
@@ -0,0 +1,118 @@
+local nodeprep = require "util.encodings".stringprep.nodeprep;
+local lpc = require "lpc";
+
+local config = require "core.configmanager";
+local log = module._log;
+local host = module.host;
+local script_type = config.get(host, "external_auth_protocol") or "generic";
+assert(script_type == "ejabberd" or script_type == "generic");
+local command = config.get(host, "external_auth_command") or "";
+assert(type(command) == "string");
+assert(not host:find(":"));
+local usermanager = require "core.usermanager";
+local jid_bare = require "util.jid".bare;
+local new_sasl = require "util.sasl".new;
+
+local pid;
+local readfile;
+local writefile;
+
+local function send_query(text)
+        if pid and lpc.wait(pid,1) ~= nil then
+            log("debug","error, process died, force reopen");
+            pid=nil;
+        end
+        if not pid then
+                log("debug", "Opening process " .. command);
+                pid, writefile, readfile = lpc.run(command);
+        end
+        if not pid then
+                log("debug", "Process failed to open");
+                return nil;
+        end
+
+        writefile:write(text);
+        writefile:flush();
+        if script_type == "ejabberd" then
+                return readfile:read(4);
+        elseif script_type == "generic" then
+                return readfile:read();
+        end
+end
+
+function do_query(kind, username, password)
+        if not username then return nil, "not-acceptable"; end
+        username = nodeprep(username);
+        if not username then return nil, "jid-malformed"; end
+
+        local query = (password and "%s:%s:%s:%s" or "%s:%s:%s"):format(kind, username, host, password);
+        local len = #query
+        if len > 1000 then return nil, "policy-violation"; end
+
+        if script_type == "ejabberd" then
+                local lo = len % 256;
+                local hi = (len - lo) / 256;
+                query = string.char(hi, lo)..query;
+        end
+        if script_type == "generic" then
+                query = query..'\n';
+        end
+
+        local response = send_query(query);
+        if (script_type == "ejabberd" and response == "\0\2\0\0") or
+                (script_type == "generic" and response == "0") then
+                        return nil, "not-authorized";
+        elseif (script_type == "ejabberd" and response == "\0\2\0\1") or
+                (script_type == "generic" and response == "1") then
+                        return true;
+        else
+                log("debug", "Nonsense back");
+                return nil, "internal-server-error";
+        end
+end
+
+function new_external_provider(host)
+        local provider = { name = "external" };
+
+        function provider.test_password(username, password)
+                return do_query("auth", username, password);
+        end
+
+        function provider.set_password(username, password)
+                return do_query("setpass", username, password);
+        end
+
+        function provider.user_exists(username)
+                return do_query("isuser", username);
+        end
+
+        function provider.create_user(username, password) return nil, "Account creation/modification not available."; end
+
+        function provider.get_sasl_handler()
+                local testpass_authentication_profile = {
+                        plain_test = function(sasl, username, password, realm)
+                                return usermanager.test_password(username, realm, password), true;
+                        end,
+                };
+                return new_sasl(module.host, testpass_authentication_profile);
+        end
+
+        function provider.is_admin(jid)
+                local admins = config.get(host, "admins");
+                if admins ~= config.get("*", "admins") then
+                        if type(admins) == "table" then
+                                jid = jid_bare(jid);
+                                for _,admin in ipairs(admins) do
+                                        if admin == jid then return true; end
+                                end
+                        elseif admins then
+                                log("error", "Option 'admins' for host '%s' is not a table", host);
+                        end
+                end
+                return usermanager.is_admin(jid);
+        end
+
+        return provider;
+end
+
+module:add_item("auth-provider", new_external_provider(host));
\ No newline at end of file
diff --git a/install/apps/metronome_libs/mod_discoitems.lua b/install/apps/metronome_libs/mod_discoitems.lua
new file mode 100644
index 0000000..f05b904
--- /dev/null
+++ b/install/apps/metronome_libs/mod_discoitems.lua
@@ -0,0 +1,24 @@
+-- * Metronome IM *
+--
+-- This file is part of the Metronome XMPP server and is released under the
+-- ISC License, please see the LICENSE file in this source package for more
+-- information about copyright and licensing.
+--
+-- As per the sublicensing clause, this file is also MIT/X11 Licensed.
+-- ** Copyright (c) 2009, Waqas Hussain
+
+local st = require "util.stanza";
+
+local result_query = st.stanza("query", {xmlns = "http://jabber.org/protocol/disco#items"});
+for _, item in ipairs(module:get_option("disco_items") or {}) do
+    result_query:tag("item", {jid = item[1], name = item[2]}):up();
+end
+
+module:hook("iq/host/http://jabber.org/protocol/disco#items:query", function(event)
+    local stanza = event.stanza;
+    local query = stanza.tags[1];
+    if stanza.attr.type == "get" and not query.attr.node then
+        event.origin.send(st.reply(stanza):add_child(result_query));
+        return true;
+    end
+end, 100);
diff --git a/install/apps/metronome_libs/mod_webpresence/icons/status_away.png b/install/apps/metronome_libs/mod_webpresence/icons/status_away.png
new file mode 100644
index 0000000..0de5c6a
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/icons/status_away.png
Binary files differ
diff --git a/install/apps/metronome_libs/mod_webpresence/icons/status_chat.png b/install/apps/metronome_libs/mod_webpresence/icons/status_chat.png
new file mode 100644
index 0000000..324f40b
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/icons/status_chat.png
Binary files differ
diff --git a/install/apps/metronome_libs/mod_webpresence/icons/status_dnd.png b/install/apps/metronome_libs/mod_webpresence/icons/status_dnd.png
new file mode 100644
index 0000000..015f3da
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/icons/status_dnd.png
Binary files differ
diff --git a/install/apps/metronome_libs/mod_webpresence/icons/status_offline.png b/install/apps/metronome_libs/mod_webpresence/icons/status_offline.png
new file mode 100644
index 0000000..12db2af
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/icons/status_offline.png
Binary files differ
diff --git a/install/apps/metronome_libs/mod_webpresence/icons/status_online.png b/install/apps/metronome_libs/mod_webpresence/icons/status_online.png
new file mode 100644
index 0000000..fb257c3
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/icons/status_online.png
Binary files differ
diff --git a/install/apps/metronome_libs/mod_webpresence/icons/status_xa.png b/install/apps/metronome_libs/mod_webpresence/icons/status_xa.png
new file mode 100644
index 0000000..321d35b
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/icons/status_xa.png
Binary files differ
diff --git a/install/apps/metronome_libs/mod_webpresence/mod_webpresence.lua b/install/apps/metronome_libs/mod_webpresence/mod_webpresence.lua
new file mode 100644
index 0000000..c1de0e0
--- /dev/null
+++ b/install/apps/metronome_libs/mod_webpresence/mod_webpresence.lua
@@ -0,0 +1,118 @@
+module:depends("http");
+
+local jid_split = require "util.jid".prepped_split;
+local b64 = require "util.encodings".base64.encode;
+local sha1 = require "util.hashes".sha1;
+local stanza = require "util.stanza".stanza;
+local json = require "util.json".encode_ordered;
+
+local function require_resource(name)
+    local icon_path = module:get_option_string("presence_icons", "icons");
+    local f, err  = module:load_resource(icon_path.."/"..name);
+    if f then
+        return f:read("*a");
+    end
+    module:log("warn", "Failed to open image file %s", icon_path..name);
+    return "";
+end
+
+local statuses = { online = {}, away = {}, xa = {}, dnd = {}, chat = {}, offline = {} };
+
+local function handle_request(event, path)
+  local status, message;
+  local jid, type = path:match("([^/]+)/?(.*)$");
+  if jid then
+    local user, host = jid_split(jid);
+    if host and not user then
+        user, host = host, event.request.headers.host;
+        if host then host = host:gsub(":%d+$", ""); end
+    end
+    if user and host then
+      local user_sessions = hosts[host] and hosts[host].sessions[user];
+      if user_sessions then
+        status = user_sessions.top_resources[1];
+        if status and status.presence then
+          message = status.presence:child_with_name("status");
+          status = status.presence:child_with_name("show");
+          if not status then
+            status = "online";
+          else
+            status = status:get_text();
+          end
+          if message then
+            message = message:get_text();
+          end
+        end
+      end
+    end
+  end
+  status = status or "offline";
+
+  statuses[status].image = function()
+    return { status_code = 200, headers = { content_type = "image/png" },
+      body =  require_resource("status_"..status..".png")
+    };
+  end;
+  statuses[status].html = function()
+    local jid_hash = sha1(jid, true);
+    return { status_code = 200, headers = { content_type = "text/html" },
+      body =  [[<!DOCTYPE html>]]..
+        tostring(
+          stanza("html")
+            :tag("head")
+            :tag("title"):text("XMPP Status Page for "..jid):up():up()
+            :tag("body")
+            :tag("div", { id = jid_hash.."_status", class = "xmpp_status" })
+            :tag("img", { id = jid_hash.."_img", class = "xmpp_status_image xmpp_status_"..status,
+              src = "data:image/png;base64,"..b64(require_resource("status_"..status..".png")) }):up()
+            :tag("span", { id = jid_hash.."_status_name", class = "xmpp_status_name" })
+              :text("\194\160"..status):up()
+            :tag("span", { id = jid_hash.."_status_message", class = "xmpp_status_message" })
+              :text(message and "\194\160"..message.."" or "")
+        )
+    };
+  end;
+  statuses[status].text = function()
+    return { status_code = 200, headers = { content_type = "text/plain" },
+      body = status
+    };
+  end;
+  statuses[status].message = function()
+    return { status_code = 200, headers = { content_type = "text/plain" },
+      body = (message and message or "")
+    };
+  end;
+  statuses[status].json = function()
+    return { status_code = 200, headers = { content_type = "application/json" },
+      body = json({
+        jid    = jid,
+        show   = status,
+        status = (message and message or "null")
+      })
+    };
+  end;
+  statuses[status].xml = function()
+    return { status_code = 200, headers = { content_type = "application/xml" },
+      body = [[<?xml version="1.0" encoding="utf-8"?>]]..
+        tostring(
+          stanza("result")
+            :tag("jid"):text(jid):up()
+            :tag("show"):text(status):up()
+            :tag("status"):text(message)
+        )
+      };
+  end
+
+  if ((type == "") or (not statuses[status][type])) then
+    type = "image"
+  end;
+
+  return statuses[status][type]();
+end
+
+module:provides("http", {
+    default_path = "/status";
+    route = {
+        ["GET /*"] = handle_request;
+    };
+});
diff --git a/install/dist/conf/centos70.conf.php b/install/dist/conf/centos70.conf.php
index da5848c..8aa66ea 100644
--- a/install/dist/conf/centos70.conf.php
+++ b/install/dist/conf/centos70.conf.php
@@ -171,9 +171,9 @@
 $conf['bind']['installed'] = false; // will be detected automatically during installation
 $conf['bind']['bind_user'] = 'named';
 $conf['bind']['bind_group'] = 'named';
-$conf['bind']['bind_zonefiles_dir'] = '/var/named/chroot/var/named/';
-$conf['bind']['named_conf_path'] = '/var/named/chroot/etc/named.conf';
-$conf['bind']['named_conf_local_path'] = '/var/named/chroot/var/named/named.local';
+$conf['bind']['bind_zonefiles_dir'] = '/var/named';
+$conf['bind']['named_conf_path'] = '/etc/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/named.conf.local';
 $conf['bind']['init_script'] = 'named';
 
 //* Jailkit
diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php
index 3e9fe35..613c828 100644
--- a/install/dist/conf/debian40.conf.php
+++ b/install/dist/conf/debian40.conf.php
@@ -183,7 +183,7 @@
 $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_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 /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
 $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
 
 //* Squid
diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php
index a381996..2c26dcb 100644
--- a/install/dist/conf/debian60.conf.php
+++ b/install/dist/conf/debian60.conf.php
@@ -183,7 +183,7 @@
 $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_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 /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
 $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
 
 //* Squid
@@ -222,5 +222,9 @@
 $conf['cron']['crontab_dir'] = '/etc/cron.d';
 $conf['cron']['wget'] = '/usr/bin/wget';
 
+//* Metronome XMPP
+$conf['xmpp']['installed'] = false;
+$conf['xmpp']['init_script'] = 'metronome';
+
 
 ?>
diff --git a/install/dist/lib/centos52.lib.php b/install/dist/lib/centos52.lib.php
index 7d9b78c..9111528 100644
--- a/install/dist/lib/centos52.lib.php
+++ b/install/dist/lib/centos52.lib.php
@@ -123,6 +123,7 @@
 		$content = str_replace('{hostname}', $conf['hostname'], $content);
 		$content = str_replace('/var/spool/amavisd/clamd.sock', '/tmp/clamd.socket', $content);
 		wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
+		chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 
 
 		// Adding the amavisd commands to the postfix configuration
diff --git a/install/dist/lib/centos53.lib.php b/install/dist/lib/centos53.lib.php
index c7e11e5..0ac99f2 100644
--- a/install/dist/lib/centos53.lib.php
+++ b/install/dist/lib/centos53.lib.php
@@ -124,6 +124,7 @@
 		$content = str_replace('{hostname}', $conf['hostname'], $content);
 		$content = str_replace('/var/spool/amavisd/clamd.sock', '/var/run/clamav/clamd.sock', $content);
 		wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
+		chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 
 
 		// Adding the amavisd commands to the postfix configuration
diff --git a/install/dist/lib/centos70.lib.php b/install/dist/lib/centos70.lib.php
index 682833b..9cee55f 100644
--- a/install/dist/lib/centos70.lib.php
+++ b/install/dist/lib/centos70.lib.php
@@ -124,6 +124,7 @@
 		$content = str_replace('{hostname}', $conf['hostname'], $content);
 		$content = str_replace('/var/spool/amavisd/clamd.sock', '/var/run/clamav/clamd.sock', $content);
 		wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
+		chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 
 
 		// Adding the amavisd commands to the postfix configuration
diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 584e6aa..8c7f1ba 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -38,7 +38,7 @@
 		
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
 			
@@ -127,6 +127,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($config_dir.'/'.$configfile, $content);
 
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 01fd960..f017ea5 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -143,6 +143,9 @@
 		//* mysql-virtual_sender.cf
 		$this->process_postfix_config('mysql-virtual_sender.cf');
 
+		//* mysql-virtual_sender_login_maps.cf
+		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
+		
 		//* mysql-virtual_client.cf
 		$this->process_postfix_config('mysql-virtual_client.cf');
 
@@ -151,6 +154,9 @@
 
 		//* mysql-virtual_relayrecipientmaps.cf
 		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
+
+		//* mysql-virtual_policy_greylist.cf
+		$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
 
 		//* postfix-dkim
 		$full_file_name=$config_dir.'/tag_as_originating.re';
@@ -179,7 +185,7 @@
 		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* These postconf commands will be executed on installation and update
-		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ".$conf['server_id']);
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ?", $conf['server_id']);
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
 		unset($server_ini_rec);
 
@@ -192,15 +198,28 @@
 			}
 		}
 		unset($rbl_hosts);
+		
+		//* If Postgrey is installed, configure it
+		$greylisting = '';
+		if($conf['postgrey']['installed'] == true) {
+			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
+		}
+		
+		$reject_sender_login_mismatch = '';
+		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
+			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+		}
 		unset($server_ini_array);
-
-		//* These postconf commands will be executed on installation and update
+		
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
 			'{vmail_groupid}' => $cf['vmail_groupid'],
-			'{rbl_list}' => $rbl_list);
-
+			'{rbl_list}' => $rbl_list,
+			'{greylisting}' => $greylisting,
+			'{reject_slm}' => $reject_sender_login_mismatch,
+		);
+		
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
 		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
@@ -359,6 +378,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		wf("$config_dir/$configfile", $content);
 
 		exec("chmod 660 $config_dir/$configfile");
@@ -385,7 +405,7 @@
 		
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
 			
@@ -477,6 +497,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf("$config_dir/$configfile", $content);
 
@@ -503,6 +524,7 @@
 		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
 		$content = str_replace('{hostname}', $conf['hostname'], $content);
 		wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
+		chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 
 
 		// Adding the amavisd commands to the postfix configuration
@@ -633,6 +655,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf["mysql"]["host"], $content);
+		$content = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $content);
 		$content = str_replace('{server_id}', $conf["server_id"], $content);
 		wf($conf["mydns"]["config_dir"].'/'.$configfile, $content);
 		exec('chmod 600 '.$conf["mydns"]["config_dir"].'/'.$configfile);
@@ -659,7 +682,7 @@
 
 		//* Chown the slave subdirectory to $conf['bind']['bind_user']
 		exec('chown '.$conf['bind']['bind_user'].':'.$conf['bind']['bind_group'].' '.$content);
-		exec('chmod 770 '.$content);
+		exec('chmod 2770 '.$content);
 
 	}
 
@@ -694,7 +717,7 @@
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
 		
-		$records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
+		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
 		
 		if(is_array($records) && count($records) > 0) {
@@ -780,7 +803,7 @@
 		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()
+	public function configure_bastille_firewall()
 	{
 		global $conf;
 
@@ -802,7 +825,7 @@
 		$tcp_public_services = '';
 		$udp_public_services = '';
 
-		$row = $this->db->queryOneRecord('SELECT * FROM '.$conf["mysql"]["database"].'.firewall WHERE server_id = '.intval($conf['server_id']));
+		$row = $this->db->queryOneRecord('SELECT * FROM ?? WHERE server_id = ?', $conf["mysql"]["database"] . '.firewall', $conf['server_id']);
 
 		if(trim($row["tcp_port"]) != '' || trim($row["udp_port"]) != ''){
 			$tcp_public_services = trim(str_replace(',', ' ', $row["tcp_port"]));
@@ -813,7 +836,7 @@
 		}
 		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']));
+			if($row["tcp_port"] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ? WHERE server_id = ?", ',' . intval($conf['apache']['vhost_port']), $conf['server_id']);
 		}
 
 		$content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content);
@@ -912,11 +935,13 @@
 		$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_server_port}', $conf['mysql']['port'], $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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -937,11 +962,13 @@
 		$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_server_port}', $conf['mysql']['port'], $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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -1013,13 +1040,11 @@
 		$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']);
+		$sql = "UPDATE `server` SET mail_server = ?, web_server = ?, dns_server = ?, file_server = ?, db_server = ?, vserver_server = ? WHERE server_id = ?";
 
+		$this->db->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
 		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql);
-			$this->db->query($sql);
-		} else {
-			$this->db->query($sql);
+			$this->dbmaster->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
 		}
 
 		// chown install dir to root and chmod 755
@@ -1309,7 +1334,12 @@
 		
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-
+		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
 	}
 }
 
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index 6e463ec..6615dac 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -81,11 +81,40 @@
 		}
 
 		//* These postconf commands will be executed on installation and update
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].'.server', $conf['server_id']);
+		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
+		unset($server_ini_rec);
+
+		//* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update
+		$rbl_list = '';
+		if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') {
+			$rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list']));
+			foreach ($rbl_hosts as $key => $value) {
+				$rbl_list .= ", reject_rbl_client ". $value;
+			}
+		}
+		unset($rbl_hosts);
+
+		//* If Postgrey is installed, configure it
+		$greylisting = '';
+		if($conf['postgrey']['installed'] == true) {
+			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
+		}
+		
+		$reject_sender_login_mismatch = '';
+		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
+			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+		}
+		unset($server_ini_array);
+		
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
 			'{vmail_groupid}' => $cf['vmail_groupid'],
-			'{rbl_list}' => $rbl_list);
+			'{rbl_list}' => $rbl_list,
+			'{greylisting}' => $greylisting,
+			'{reject_slm}' => $reject_sender_login_mismatch,
+		);
 
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_postfix.conf.master', 'tpl/gentoo_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
@@ -229,7 +258,7 @@
 		
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
 			
@@ -421,13 +450,13 @@
 		global $conf;
 
 		//* Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['powerdns']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['powerdns']['database'], $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)) {
+		$query = 'GRANT ALL ON ??.* TO ?@?';
+		if(!$this->db->query($query, $conf['powerdns']['database'], $conf['mysql']['ispconfig_user'], 'localhost')) {
 			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
 		}
 
@@ -537,25 +566,10 @@
 
 
 		//* Copy the ISPConfig configuration include
-		/*
-		$content = $this->get_template_file('apache_ispconfig.conf', true);
-
-		$records = $this->db->queryAllRecords("SELECT * FROM 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";
-			}
-		}
-
-		$this->write_config_file($conf['apache']['vhost_conf_dir'].'/000-ispconfig.conf', $content);
-		*/
-		
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
 		
-		$records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
+		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
 		
 		if(is_array($records) && count($records) > 0) {
@@ -820,6 +834,7 @@
 		$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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -904,13 +919,11 @@
 		$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']);
+		$sql = "UPDATE `server` SET mail_server = ?, web_server = ?, dns_server = ?, file_server = ?, db_server = ?, vserver_server = ? WHERE server_id = ?";
 
+		$this->db->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
 		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql);
-			$this->db->query($sql);
-		} else {
-			$this->db->query($sql);
+			$this->dbmaster->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
 		}
 
 		// chown install dir to root and chmod 755
@@ -1177,7 +1190,13 @@
 		
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-
+		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
+		
 	}
 
 }
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index a278c90..b452c2f 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -159,6 +159,9 @@
 		//* mysql-virtual_sender.cf
 		$this->process_postfix_config('mysql-virtual_sender.cf');
 
+		//* mysql-virtual_sender_login_maps.cf
+		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
+		
 		//* mysql-virtual_client.cf
 		$this->process_postfix_config('mysql-virtual_client.cf');
 
@@ -167,6 +170,9 @@
 
 		//* mysql-virtual_relayrecipientmaps.cf
 		$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
+
+		//* mysql-virtual_policy_greylist.cf
+		$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
 
 		//* postfix-dkim
 		$full_file_name=$config_dir.'/tag_as_originating.re';
@@ -209,7 +215,7 @@
 		if($cf['vmail_mailbox_base'] != '' && strlen($cf['vmail_mailbox_base']) >= 10 && $this->is_update === false) exec('chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base']);
 
 		//* These postconf commands will be executed on installation and update
-		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ".$conf['server_id']);
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ?", $conf['server_id']);
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
 		unset($server_ini_rec);
 
@@ -222,15 +228,28 @@
 			}
 		}
 		unset($rbl_hosts);
-		unset($server_ini_array);
 
-		//* These postconf commands will be executed on installation and update
+		//* If Postgrey is installed, configure it
+		$greylisting = '';
+		if($conf['postgrey']['installed'] == true) {
+			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
+		}
+		
+		$reject_sender_login_mismatch = '';
+		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
+			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+		}
+		unset($server_ini_array);
+		
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
 			'{vmail_groupid}' => $cf['vmail_groupid'],
-			'{rbl_list}' => $rbl_list);
-
+			'{rbl_list}' => $rbl_list,
+			'{greylisting}' => $greylisting,
+			'{reject_slm}' => $reject_sender_login_mismatch,
+		);
+		
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/opensuse_postfix.conf.master', 'tpl/opensuse_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
 		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
@@ -414,6 +433,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		wf("$config_dir/$configfile", $content);
 
 		exec("chmod 660 $config_dir/$configfile");
@@ -440,7 +460,7 @@
 		
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
 			
@@ -526,6 +546,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf("$config_dir/$configfile", $content);
 
@@ -551,6 +572,7 @@
 		$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"].'/amavisd.conf', $content);
+		chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 
 
 		// Adding the amavisd commands to the postfix configuration
@@ -680,6 +702,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf["mysql"]["host"], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		$content = str_replace('{server_id}', $conf["server_id"], $content);
 		wf($conf["mydns"]["config_dir"].'/'.$configfile, $content);
 		exec('chmod 600 '.$conf["mydns"]["config_dir"].'/'.$configfile);
@@ -726,7 +749,7 @@
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
 		
-		$records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
+		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
 		
 		if(is_array($records) && count($records) > 0) {
@@ -854,7 +877,7 @@
 		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()
+	public function configure_bastille_firewall()
 	{
 		global $conf;
 
@@ -876,7 +899,7 @@
 		$tcp_public_services = '';
 		$udp_public_services = '';
 
-		$row = $this->db->queryOneRecord('SELECT * FROM '.$conf["mysql"]["database"].'.firewall WHERE server_id = '.intval($conf['server_id']));
+		$row = $this->db->queryOneRecord('SELECT * FROM ?? WHERE server_id = ?', $conf["mysql"]["database"] . '.firewall', $conf['server_id']);
 
 		if(trim($row["tcp_port"]) != '' || trim($row["udp_port"]) != ''){
 			$tcp_public_services = trim(str_replace(',', ' ', $row["tcp_port"]));
@@ -888,7 +911,7 @@
 
 		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']));
+			if($row["tcp_port"] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ? WHERE server_id = ?", ',' . intval($conf['apache']['vhost_port']), $conf['server_id']);
 		}
 
 		$content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content);
@@ -986,11 +1009,13 @@
 		$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_server_port}', $conf['mysql']['port'], $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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -1011,11 +1036,13 @@
 		$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_server_port}', $conf['mysql']['port'], $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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -1086,13 +1113,11 @@
 		$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']);
+		$sql = "UPDATE `server` SET mail_server = ?, web_server = ?, dns_server = ?, file_server = ?, db_server = ?, vserver_server = ? WHERE server_id = ?";
 
+		$this->db->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
 		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql);
-			$this->db->query($sql);
-		} else {
-			$this->db->query($sql);
+			$this->dbmaster->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
 		}
 
 		// chown install dir to root and chmod 755
@@ -1382,8 +1407,12 @@
 		
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
-
-
+		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
 	}
 
 }
diff --git a/install/install.php b/install/install.php
index 91759f2..8b32027 100644
--- a/install/install.php
+++ b/install/install.php
@@ -171,8 +171,16 @@
 //** 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],'hostname');
+$conf['hostname'] = @$tmp_out[0];
 unset($tmp_out);
+//** Prevent empty hostname
+$check = false;
+do {
+	$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg server1.domain.tld ', $conf['hostname'], 'hostname');
+	$conf['hostname']=trim($conf['hostname']);
+	$check = @($conf['hostname'] !== '')?true:false;
+	if(!$check) swriteln('Hostname may not be empty.');
+} while (!$check);
 
 // 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.');
@@ -181,6 +189,7 @@
 $finished = false;
 do {
 	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
+	$tmp_mysql_server_port = $inst->free_query('MySQL server port', $conf['mysql']['port'],'mysql_port');
 	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user'],'mysql_root_user');	 
 	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');	 
 	$tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database'],'mysql_database');	 
@@ -194,8 +203,9 @@
 	}
 
 	//* Initialize the MySQL server connection
-	if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
+	if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, (int)$tmp_mysql_server_port)) {
 		$conf['mysql']['host'] = $tmp_mysql_server_host;
+		$conf['mysql']['port'] = $tmp_mysql_server_port;
 		$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;
@@ -218,13 +228,145 @@
 $inst->db = new db();
 
 //** Begin with standard or expert installation
+
+$conf['services']['mail'] = false;
+$conf['services']['web'] = false;
+$conf['services']['dns'] = false;
+$conf['services']['file'] = false;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = false;
+$conf['services']['firewall'] = false;
+$conf['services']['proxy'] = false;
+$conf['services']['xmpp'] = false;
+
 if($install_mode == 'standard') {
 
 	//* Create the MySQL database
 	$inst->configure_database();
 
+	//* Insert the Server record into the database
+	$inst->add_database_server_record();
+
+	//* Configure Postgrey
+	$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
+	if($force) swriteln('Configuring Postgrey');
+
+	//* Configure Postfix
+	$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
+	if($force) {
+		swriteln('Configuring Postfix');
+		$inst->configure_postfix();
+		$conf['services']['mail'] = true;
+	}
+
+	if($conf['services']['mail']) {
+
+		//* Configure Mailman
+		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
+		if($force) {
+			swriteln('Configuring Mailman');
+			$inst->configure_mailman();
+		} 
+
+		//* Check for Dovecot and Courier
+		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
+			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot');
+			$conf['courier']['installed'] = $inst->force_configure_app('Courier');
+		}
+		//* Configure Mailserver - Dovecot or Courier
+		if($conf['dovecot']['installed'] && $conf['courier']['installed']) {
+			$mail_server_to_use = $inst->simple_query('Dovecot and Courier detected. Select server to use with ISPConfig:', array('dovecot', 'courier'), 'dovecot','mail_server');
+			if($mail_server_to_use == 'dovecot'){
+				$conf['courier']['installed'] = false;
+			} else {
+				$conf['dovecot']['installed'] = false;
+			}
+		}
+		//* Configure Dovecot
+		if($conf['dovecot']['installed']) {
+			swriteln('Configuring Dovecot');
+			$inst->configure_dovecot();
+		}
+		//* Configure Courier
+		if($conf['courier']['installed']) {
+			swriteln('Configuring Courier');
+			$inst->configure_courier();
+			swriteln('Configuring SASL');
+			$inst->configure_saslauthd();
+			swriteln('Configuring PAM');
+			$inst->configure_pam();
+		}
+
+		//* Configure Spamasassin
+		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin');
+		if($force) {
+			swriteln('Configuring Spamassassin');
+			$inst->configure_spamassassin();
+		}
+    
+		//* Configure Amavis
+		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd');
+		if($force) {
+			swriteln('Configuring Amavisd');
+			$inst->configure_amavis();
+		}
+
+		//* Configure Getmail
+		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
+		if($force) {
+			swriteln('Configuring Getmail');
+			$inst->configure_getmail();
+		}
+
+	} else swriteln('[ERROR] Postfix not installed - skipping Mail');
+
+	//* Check for DNS
+	if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
+		$conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS');
+		$conf['bind']['installed'] = $inst->force_configure_app('BIND');
+		$conf['mydns']['installed'] = $inst->force_configure_app('MyDNS');
+	}
+	//* Configure PowerDNS
+	if($conf['powerdns']['installed']) {
+		swriteln('Configuring PowerDNS');
+		$inst->configure_powerdns();
+		$conf['services']['dns'] = true;
+	}
+	//* Configure Bind
+	if($conf['bind']['installed']) {
+		swriteln('Configuring BIND');
+		$inst->configure_bind();
+		$conf['services']['dns'] = true;
+	}
+	//* Configure MyDNS
+	if($conf['mydns']['installed']) {
+		swriteln('Configuring MyDNS');
+		$inst->configure_mydns();
+		$conf['services']['dns'] = true;
+	}
+
+	//* Configure Jailkit
+	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit');
+	if($force) {
+		swriteln('Configuring Jailkit');
+		$inst->configure_jailkit();
+	}
+
+	//* Configure Pureftpd
+	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
+	if($force) {
+		swriteln('Configuring Pureftpd');
+		$inst->configure_pureftpd();
+	}
+
+	//* Check for Web-Server
+	if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
+		$conf['apache']['installed'] = $inst->force_configure_app('Apache');
+		$conf['nginx']['installed'] = $inst->force_configure_app('nginx');
+	}
+
 	//* Configure Webserver - Apache or nginx
-	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
+	if($conf['apache']['installed'] && $conf['nginx']['installed']) {
 		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
 		if($http_server_to_use == 'apache'){
 			$conf['nginx']['installed'] = false;
@@ -233,125 +375,106 @@
 		}
 	}
 
-	//* Insert the Server record into the database
-	$inst->add_database_server_record();
-
-	//* Configure Postfix
-	$inst->configure_postfix();
-
-	//* Configure Mailman
-	if($conf['mailman']['installed'] == true) {
-		$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
-	if($conf['amavis']['installed'] == true) {
-		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
-	if($conf['apache']['installed'] == true){
+	if($conf['apache']['installed']){
 		swriteln('Configuring Apache');
 		$inst->configure_apache();
+		$conf['services']['web'] = true;
+		$conf['services']['file'] = true;
+		//* Configure Vlogger
+		$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger');
+		if($force) {
+			swriteln('Configuring vlogger');
+			$inst->configure_vlogger();
+		}
+		//* Configure squid
+/*
+		$force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid');
+		if($force) {
+			swriteln('Configuring Squid');
+			$inst->configure_squid();
+			$conf['services']['proxy'] = true;
+		}
+*/
 	}
 
 	//* Configure nginx
-	if($conf['nginx']['installed'] == true){
+	if($conf['nginx']['installed']){
 		swriteln('Configuring nginx');
 		$inst->configure_nginx();
+		$conf['services']['web'] = true;
 	}
 
-	//** Configure Vlogger
-	swriteln('Configuring Vlogger');
-	$inst->configure_vlogger();
+    //* Configure XMPP
+	$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server');
+	if($force) {
+        swriteln('Configuring Metronome XMPP Server');
+        $inst->configure_xmpp();
+	    $conf['services']['xmpp'] = true;
+	}
 
-	//** Configure apps vhost
-	swriteln('Configuring Apps vhost');
-	$inst->configure_apps_vhost();
-
-	//* Configure Firewall
-	if($conf['ufw']['installed'] == true) {
-		//* Configure Ubuntu Firewall
-		$conf['services']['firewall'] = true;
+	//* Check for Firewall
+	if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
+		$conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall');
+		$conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall');
+	}
+	//* Configure Firewall - Ubuntu or Bastille
+	if($conf['ufw']['installed'] && $conf['firewall']['installed']) {
+		$firewall_to_use = $inst->simple_query('Ubuntu and Bastille Firewall detected. Select firewall to use with ISPConfig:', array('bastille', 'ubuntu'), 'bastille','firewall_server');
+		if($firewall_to_use == 'bastille'){
+			$conf['ufw']['installed'] = false;
+		} else {
+			$conf['firewall']['installed'] = false;
+		}
+	}
+	//* Configure Ubuntu Firewall
+	if($conf['ufw']['installed']){
 		swriteln('Configuring Ubuntu Firewall');
 		$inst->configure_ufw_firewall();
-	} else {
-		//* Configure Bastille Firewall
 		$conf['services']['firewall'] = true;
+	}
+	//* Configure Bastille Firewall
+	if($conf['firewall']['installed']){
 		swriteln('Configuring Bastille Firewall');
 		$inst->configure_bastille_firewall();
+		$conf['services']['firewall'] = true;
 	}
 
 	//* Configure Fail2ban
-	if($conf['fail2ban']['installed'] == true) {
+	$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban');
+	if($force) {
 		swriteln('Configuring Fail2ban');
 		$inst->configure_fail2ban();
 	}
 
-	/*
-	if($conf['squid']['installed'] == true) {
-		$conf['services']['proxy'] = true;
-		swriteln('Configuring Squid');
-		$inst->configure_squid();
-	} else if($conf['nginx']['installed'] == true) {
-		$conf['services']['proxy'] = true;
-		swriteln('Configuring Nginx');
-		$inst->configure_nginx();
+	//* Configure OpenVZ
+	$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ');
+	if($force) {
+		$conf['services']['vserver'] = true;
+		swriteln('Configuring OpenVZ');
 	}
-	*/
+
+	//** Configure apps vhost
+	swriteln('Configuring Apps vhost');
+	$inst->configure_apps_vhost();
 
 	//* Configure ISPConfig
 	swriteln('Installing ISPConfig');
 
 	//** Customize the port ISPConfig runs on
 	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
+	$conf['interface_password'] = $inst->free_query('Admin password', 'admin');
+	if($conf['interface_password'] != 'admin') {
+		$check = false;
+		do {
+			unset($temp_password);
+			$temp_password = $inst->free_query('Re-enter admin password', '');
+			$check = @($temp_password == $conf['interface_password'])?true:false;
+			if(!$check) swriteln('Passwords do not match.');
+		} while (!$check);
+	}
+	unset($check);
+	unset($temp_password);
 	if($conf['apache']['installed'] == true) $conf['apache']['vhost_port']  = $ispconfig_vhost_port;
 	if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
 	unset($ispconfig_vhost_port);
@@ -367,8 +490,10 @@
 	$inst->configure_dbserver();
 
 	//* Configure ISPConfig
-	swriteln('Installing ISPConfig crontab');
-	$inst->install_crontab();
+	if($conf['cron']['installed']) {
+		swriteln('Installing ISPConfig crontab');
+		$inst->install_crontab();
+	} else swriteln('[ERROR] Cron not found');
 
 	swriteln('Restarting services ...');
 	if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1');
@@ -398,17 +523,9 @@
 	//if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['squid']['init_script']))     system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
 	if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
 	if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null');
+    if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['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;
-	$conf['services']['firewall'] = false;
-	$conf['services']['proxy'] = false;
-
+} else { //* expert mode
 
 	//** Get Server ID
 	// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
@@ -420,13 +537,15 @@
 		$finished = false;
 		do {
 			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
+			$tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
 			$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');	 
 			$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password'); 
 			$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
 
 			//* Initialize the MySQL server connection
-			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
+			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, (int)$tmp_mysql_server_port)) {
 				$conf['mysql']['master_host'] = $tmp_mysql_server_host;
+				$conf['mysql']['master_port'] = $tmp_mysql_server_port;
 				$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;
@@ -440,10 +559,8 @@
 		// 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"];
+		$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
+		$inst->dbmaster->setDBName($conf['mysql']["master_database"]);
 
 	} else {
 		// the master DB is the same then the slave DB
@@ -453,11 +570,17 @@
 	//* Create the mysql database
 	$inst->configure_database();
 
+	//* Check for Web-Server
+	if($conf['apache']['installed'] != true && $conf['nginx']['installed'] != true) {
+		$conf['apache']['installed'] = $inst->force_configure_app('Apache');
+		$conf['nginx']['installed'] = $inst->force_configure_app('nginx');
+	}
 	//* Configure Webserver - Apache or nginx
 	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
 		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
 		if($http_server_to_use == 'apache'){
 			$conf['nginx']['installed'] = false;
+			$conf['services']['file'] = true;
 		} else {
 			$conf['apache']['installed'] = false;
 		}
@@ -472,44 +595,73 @@
 
 		$conf['services']['mail'] = true;
 
+		//* Configure Postgrey
+		$force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
+		if($force) swriteln('Configuring Postgrey');
+
 		//* Configure Postfix
-		swriteln('Configuring Postfix');
-		$inst->configure_postfix();
+		$force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
+		if($force) {
+			swriteln('Configuring Postfix');
+			$inst->configure_postfix();
+		}
 
 		//* Configure Mailman
-		swriteln('Configuring Mailman');
-		$inst->configure_mailman();
+		$force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
+		if($force) {
+			swriteln('Configuring Mailman');
+			$inst->configure_mailman();
+		}
 
-		if($conf['dovecot']['installed'] == true) {
-			//* Configure dovecot
+		//* Check for Dovecot and Courier
+		if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
+			$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot');
+			$conf['courier']['installed'] = $inst->force_configure_app('Courier');
+		}
+		//* Configure Mailserver - Dovecot or Courier
+		if($conf['dovecot']['installed'] && $conf['courier']['installed']) {
+			$mail_server_to_use = $inst->simple_query('Dovecot and Courier detected. Select server to use with ISPConfig:', array('dovecot', 'courier'), 'dovecot','mail_server');
+			if($mail_server_to_use == 'dovecot'){
+				$conf['courier']['installed'] = false;
+			} else {
+				$conf['dovecot']['installed'] = false;
+			}
+		}
+		//* Configure Dovecot
+		if($conf['dovecot']['installed']) {
 			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
+		}
+		//* Configure Courier
+		if($conf['courier']['installed']) {
 			swriteln('Configuring Courier');
 			$inst->configure_courier();
+			swriteln('Configuring SASL');
+			$inst->configure_saslauthd();
+			swriteln('Configuring PAM');
+			$inst->configure_pam();
 		}
 
 		//* Configure Spamasassin
-		swriteln('Configuring Spamassassin');
-		$inst->configure_spamassassin();
-
+		$force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin');
+		if($force) {
+			swriteln('Configuring Spamassassin');
+			$inst->configure_spamassassin();
+		}
+    
 		//* Configure Amavis
-		swriteln('Configuring Amavisd');
-		$inst->configure_amavis();
+		$force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd');
+		if($force) {
+			swriteln('Configuring Amavisd');
+			$inst->configure_amavis();
+		}
 
 		//* Configure Getmail
-		swriteln('Configuring Getmail');
-		$inst->configure_getmail();
+		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
+		if($force) {
+			swriteln('Configuring Getmail');
+			$inst->configure_getmail();
+		}
 
 		if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
 		if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
@@ -526,118 +678,122 @@
 		if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &');
 	}
 
-	//** Configure Jailkit
-	if(strtolower($inst->simple_query('Configure Jailkit', array('y', 'n'), 'y','configure_jailkit') ) == 'y') {
+	//* Configure Jailkit
+	$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit');
+	if($force) {
 		swriteln('Configuring Jailkit');
 		$inst->configure_jailkit();
 	}
 
-	//** Configure Pureftpd
-	if(strtolower($inst->simple_query('Configure FTP Server', array('y', 'n'), 'y','configure_ftp') ) == 'y') {
+	//* Configure Pureftpd
+	$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
+	if($force) {
 		swriteln('Configuring Pureftpd');
 		$inst->configure_pureftpd();
-		if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
 	}
 
 	//** Configure DNS
 	if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
 		$conf['services']['dns'] = true;
-		//* Configure DNS
-		if($conf['powerdns']['installed'] == true) {
+
+		//* Check for DNS
+		if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
+			$conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS');
+			$conf['bind']['installed'] = $inst->force_configure_app('BIND');
+			$conf['mydns']['installed'] = $inst->force_configure_app('MyDNS');
+		}
+		//* Configure PowerDNS
+		if($conf['powerdns']['installed']) {
 			swriteln('Configuring PowerDNS');
 			$inst->configure_powerdns();
-			if($conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null');
-		} elseif($conf['bind']['installed'] == true) {
+			$conf['services']['dns'] = true;
+		}
+		//* Configure Bind
+		if($conf['bind']['installed']) {
 			swriteln('Configuring BIND');
 			$inst->configure_bind();
-			if($conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
-		} else {
+			$conf['services']['dns'] = true;
+		}
+		//* Configure MyDNS
+		if($conf['mydns']['installed']) {
 			swriteln('Configuring MyDNS');
 			$inst->configure_mydns();
-			if($conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null');
+			$conf['services']['dns'] = true;
 		}
 
 	}
 
-	/*
-	//** Configure Squid
-	if(strtolower($inst->simple_query('Configure Proxy Server', array('y','n'),'y') ) == 'y') {
-		if($conf['squid']['installed'] == true) {
-			$conf['services']['proxy'] = true;
-			swriteln('Configuring Squid');
-			$inst->configure_squid();
-			if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
-		} else if($conf['nginx']['installed'] == true) {
-			$conf['services']['proxy'] = true;
-			swriteln('Configuring Nginx');
-			$inst->configure_nginx();
-			if($conf['nginx']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['nginx']['init_script']))system($conf['init_scripts'].'/'.$conf['nginx']['init_script'].' restart &> /dev/null');
-		}
-	}
-	*/
+	if(strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') {
+		$conf['services']['web'] = true;
 
-	//** Configure Apache
-	if($conf['apache']['installed'] == true){
-		swriteln("\nHint: If this server shall run the ISPConfig interface, select 'y' in the 'Configure Apache Server' option.\n");
-		if(strtolower($inst->simple_query('Configure Apache Server', array('y', 'n'), 'y','configure_apache')) == 'y') {
-			$conf['services']['web'] = true;
+		//* Configure Apache
+		if($conf['apache']['installed']){
 			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();
+			$conf['services']['file'] = true;
+			//* Configure Vlogger
+			$force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger');
+			if($force) {
+				swriteln('Configuring vlogger');
+				$inst->configure_vlogger();
+			}
+			//* Configure squid
+/*
+			$force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid');
+			if($force) {
+				swriteln('Configuring Squid');
+				$inst->configure_squid();
+				$conf['services']['proxy'] = true;
+				if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
+			}
+*/
 		}
-	}
-
-	//** Configure nginx
-	if($conf['nginx']['installed'] == true){
-		swriteln("\nHint: If this server shall run the ISPConfig interface, select 'y' in the 'Configure nginx Server' option.\n");
-		if(strtolower($inst->simple_query('Configure nginx Server', array('y', 'n'), 'y','configure_nginx')) == 'y') {
-			$conf['services']['web'] = true;
+		//* Configure nginx
+		if($conf['nginx']['installed']){
 			swriteln('Configuring nginx');
 			$inst->configure_nginx();
-
-			//** Configure Vlogger
-			//swriteln('Configuring Vlogger');
-			//$inst->configure_vlogger();
-
-			//** Configure apps vhost
-			swriteln('Configuring Apps vhost');
-			$inst->configure_apps_vhost();
 		}
 	}
 
-	//** Configure Firewall
+	if($conf['openvz']['installed'] = true && strtolower($inst->simple_query('Enable Openvz-Server', array('y', 'n'), 'y','configure_openvz')) == 'y')
+			$conf['services']['vserver'] = true;
+
 	if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
-		//if($conf['bastille']['installed'] == true) {
-		//* Configure Bastille Firewall
-		$conf['services']['firewall'] = true;
-		swriteln('Configuring Bastille Firewall');
-		$inst->configure_firewall();
-		/*} elseif($conf['ufw']['installed'] == true) {
-			//* Configure Ubuntu Firewall
-			$conf['services']['firewall'] = true;
+		//* Check for Firewall
+		if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
+			$conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall');
+			$conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall');
+		}
+		//* Configure Firewall - Ubuntu or Bastille
+		if($conf['ufw']['installed'] && $conf['firewall']['installed']) {
+			$firewall_to_use = $inst->simple_query('Ubuntu and Bastille Firewall detected. Select firewall to use with ISPConfig:', array('bastille', 'ubuntu'), 'bastille','firewall_server');
+			if($firewall_to_use == 'bastille'){
+				$conf['ufw']['installed'] = false;
+			} else {
+				$conf['firewall']['installed'] = false;
+			}
+		}
+		//* Configure Ubuntu Firewall
+		if($conf['ufw']['installed']){
 			swriteln('Configuring Ubuntu Firewall');
 			$inst->configure_ufw_firewall();
-		} else {
-			//* Configure Bastille Firewall
 			$conf['services']['firewall'] = true;
+		}
+		//* Configure Bastille Firewall
+		if($conf['firewall']['installed']){
 			swriteln('Configuring Bastille Firewall');
 			$inst->configure_bastille_firewall();
+			$conf['services']['firewall'] = true;
 		}
-		*/
 	}
 
-	//** Configure Firewall
-	/*if(strtolower($inst->simple_query('Configure Firewall Server',array('y','n'),'y')) == 'y') {
-		swriteln('Configuring Firewall');
-		$inst->configure_firewall();
-	}*/
+    //* Configure XMPP
+	$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server');
+	if($force) {
+        swriteln('Configuring Metronome XMPP Server');
+        $inst->configure_xmpp();
+	    $conf['services']['xmpp'] = true;
+	}
 
 	//** Configure ISPConfig :-)
 	$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
@@ -660,6 +816,18 @@
 
 		//** Customise the port ISPConfig runs on
 		$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
+		$conf['interface_password'] = $inst->free_query('Admin password', 'admin');
+		if($conf['interface_password'] != 'admin') {
+			$check = false;
+			do {
+				unset($temp_password);
+				$temp_password = $inst->free_query('Re-enter admin password', '');
+				$check = @($temp_password == $conf['interface_password'])?true:false;
+				if(!$check) swriteln('Passwords do not match.');
+			} while (!$check);
+		}
+		unset($check);
+		unset($temp_password);
 		if($conf['apache']['installed'] == true) $conf['apache']['vhost_port']  = $ispconfig_vhost_port;
 		if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
 		unset($ispconfig_vhost_port);
@@ -694,6 +862,8 @@
 
 } //* << $install_mode / 'Standard' or Genius
 
+$inst->create_mount_script();
+
 //* Create md5 filelist
 $md5_filename = '/usr/local/ispconfig/security/data/file_checksums_'.date('Y-m-d_h-i').'.md5';
 exec('find /usr/local/ispconfig -type f -print0 | xargs -0 md5sum > '.$md5_filename);
@@ -703,4 +873,4 @@
 echo "Installation completed.\n";
 
 
-?>
+?>
\ No newline at end of file
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 9bd0e1d..f17b982 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -86,6 +86,9 @@
 			$mainver = array_filter($mainver);
 			$mainver = current($mainver).'.'.next($mainver);
 			switch ($mainver){
+			case "15.04":
+				$relname = "(Vivid Vervet)";
+				break;
 			case "14.10":
 				$relname = "(Utopic Unicorn)";
 				break;
@@ -178,6 +181,12 @@
 			$distid = 'debian60';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian 7.0 (Wheezy/Sid) or compatible\n");
+		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
+			$distname = 'Debian';
+			$distver = 'Jessie';
+			$distid = 'debian60';
+			$distbaseid = 'debian';
+			swriteln("Operating System: Debian 8.0 (Jessie) or compatible\n");
 		} else {
 			$distname = 'Debian';
 			$distver = 'Unknown';
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 9137a41..f867f04 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -135,7 +135,8 @@
 
 		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('postgrey')) $conf['postgrey']['installed'] = true;
+		if(is_installed('mailman') || is_installed('mmsitepass')) $conf['mailman']['installed'] = true;
 		if(is_installed('apache') || is_installed('apache2') || is_installed('httpd') || is_installed('httpd2')) $conf['apache']['installed'] = true;
 		if(is_installed('getmail')) $conf['getmail']['installed'] = true;
 		if(is_installed('courierlogger')) $conf['courier']['installed'] = true;
@@ -153,10 +154,25 @@
 		if(is_installed('iptables') && is_installed('ufw')) $conf['ufw']['installed'] = true;
 		if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true;
 		if(is_installed('vzctl')) $conf['openvz']['installed'] = true;
-		if(is_dir("/etc/Bastille")) $conf['bastille']['installed'] = true;
+		if(is_installed('iptables') && is_installed('bastille-netfilter')) $conf['bastille']['installed'] = true;
+		if(is_installed('metronome') && is_installed('metronomectl')) $conf['xmpp']['installed'] = true;
+		if(is_installed('spamassassin')) $conf['spamassasin']['installed'] = true;
+		if(is_installed('vlogger')) $conf['vlogger']['installed'] = true;
+		if(is_installed('cron')) $conf['cron']['installed'] = true;
 
 		if ($conf['services']['web'] && (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")))) $this->ispconfig_interface_installed = true;
 	}
+
+    public function force_configure_app($service) {
+		$force = false;
+        swriteln("[WARN] autodetect for $service failed");
+        if(strtolower($this->simple_query("Force configure $service", array('y', 'n'), 'n') ) == 'y') {
+//			swriteln("Configure $service");
+            $force = true;
+		} else swriteln("Skipping $service\n");
+		return $force;
+    }
+
 
 	/** Create the database for ISPConfig */
 
@@ -165,12 +181,12 @@
 		global $conf;
 
 		//** Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['mysql']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['mysql']['database'], $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'];
+		$this->db->setDBName($conf['mysql']['database']);
 
 		//* Load the database dump into the database, if database contains no tables
 		$db_tables = $this->db->getTables();
@@ -190,8 +206,8 @@
 			}
 
 			//* 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");
+			$system_ini = rf('tpl/system.ini.master');
+			$this->db->query("UPDATE sys_ini SET config = ? WHERE sysini_id = 1", $system_ini);
 
 		}
 	}
@@ -208,15 +224,13 @@
 		}
 
 		// 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;');
+		$this->db->query("DELETE FROM mysql.user WHERE User = ? AND Host = ?", $conf['mysql']['ispconfig_user'], $from_host);
+		$this->db->query("DELETE FROM mysql.db WHERE Db = ? AND Host = ?", $conf['mysql']['database'], $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)) {
+		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@? IDENTIFIED BY ?';
+		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
 			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
 		}
 
@@ -224,7 +238,7 @@
 		$this->db->query('FLUSH PRIVILEGES;');
 
 		//* Set the database name in the DB library
-		$this->db->dbName = $conf['mysql']['database'];
+		$this->db->setDBName($conf['mysql']['database']);
 
 		$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
 
@@ -278,8 +292,7 @@
 		}
 
 		$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;
@@ -307,14 +320,14 @@
 		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`,`firewall_server`,`proxy_server`) 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, $proxy_server_enabled, $firewall_server_enabled);";
-			$this->dbmaster->query($sql);
+			$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`,`firewall_server`,`proxy_server`) VALUES (1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
+			$this->dbmaster->query($sql, $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
 			$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`,`firewall_server`,`proxy_server`) 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, $proxy_server_enabled, $firewall_server_enabled);";
-			$this->db->query($sql);
+			$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`,`firewall_server`,`proxy_server`) VALUES (?,1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
+			$this->db->query($sql, $conf['server_id'], $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
 
 			//* username for the ispconfig user
 			$conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
@@ -323,8 +336,8 @@
 
 		} 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`,`firewall_server`,`proxy_server`) 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, $proxy_server_enabled, $firewall_server_enabled);";
-			$this->db->query($sql);
+			$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`,`firewall_server`,`proxy_server`) VALUES (1, 1, 'riud', 'riud', 'r', ?, ?, ?, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?);";
+			$this->db->query($sql, $conf['hostname'], $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $server_ini_content, $current_db_version, $proxy_server_enabled, $firewall_server_enabled);
 			$conf['server_id'] = $this->db->insertID();
 			$conf['server_id'] = $conf['server_id'];
 		}
@@ -386,141 +399,141 @@
 			 * 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'] . "'";
+					$query = "CREATE USER ?@? IDENTIFIED BY ?";
 					if ($verbose){
 						echo "\n\n" . $query ."\n";
 					}
-					$this->dbmaster->query($query); // ignore the error
+					$this->dbmaster->query($query, $value['user'], $host, $value['pwd']); // 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."' ";
+				$query = "REVOKE ALL PRIVILEGES, GRANT OPTION FROM ?@?";
 				if ($verbose){
 					echo "\n\n" . $query ."\n";
 				}
-				$this->dbmaster->query($query); // ignore the error
+				$this->dbmaster->query($query, $value['user'], $host); // ignore the error
 
 				//* Create the ISPConfig database user in the remote database
-				$query = "GRANT SELECT ON ".$value['db'].".`server` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.server', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, INSERT ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_log', $value['user'], $host)) {
 					$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`, `error`) ON ".$value['db'].".`sys_datalog` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT, UPDATE(`status`, `error`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_datalog', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, UPDATE(`status`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.software_update_inst', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, UPDATE(`updated`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.server', $value['user'], $host)) {
 					$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`, `ssl_key`) ON ".$value['db'].".`web_domain` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT, UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`, `ssl_key`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.web_domain', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_group', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, UPDATE (`action_state`, `response`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.sys_remoteaction', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, INSERT , DELETE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.monitor_data', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.mail_traffic', $value['user'], $host)) {
 					$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."' ";
+				$query = "GRANT SELECT, INSERT, UPDATE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.web_traffic', $value['user'], $host)) {
 					$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, DELETE ON ".$value['db'].".`aps_instances` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT, UPDATE, DELETE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances', $value['user'], $host)) {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
 				
-				$query = "GRANT SELECT, DELETE ON ".$value['db'].".`aps_instances_settings` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT, DELETE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.aps_instances_settings', $value['user'], $host)) {
 					$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'].".`web_backup` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT, INSERT, DELETE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.web_backup', $value['user'], $host)) {
 					$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'].".`mail_backup` TO '".$value['user']."'@'".$host."' ";
+				$query = "GRANT SELECT, INSERT, DELETE ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
-				if(!$this->dbmaster->query($query)) {
+				if(!$this->dbmaster->query($query, $value['db'] . '.mail_backup', $value['user'], $host)) {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
 			}
@@ -528,7 +541,7 @@
 			/*
 		 * It is all done. Relod the rights...
 		 */
-			$this->dbmaster->query('FLUSH PRIVILEGES;');
+			$this->dbmaster->query('FLUSH PRIVILEGES');
 		}
 
 	}
@@ -692,6 +705,9 @@
 		//* mysql-virtual_sender.cf
 		$this->process_postfix_config('mysql-virtual_sender.cf');
 
+		//* mysql-virtual_sender_login_maps.cf
+		$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
+
 		//* mysql-virtual_client.cf
 		$this->process_postfix_config('mysql-virtual_client.cf');
 
@@ -703,6 +719,9 @@
 		
 		//* mysql-virtual_outgoing_bcc.cf
 		$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
+
+                //* mysql-virtual_policy_greylist.cf
+                $this->process_postfix_config('mysql-virtual_policy_greylist.cf');
 
 		//* postfix-dkim
 		$full_file_name=$config_dir.'/tag_as_originating.re';
@@ -727,7 +746,7 @@
 		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* These postconf commands will be executed on installation and update
-		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM `" . $this->db->quote($conf["mysql"]["database"]) . "`.`server` WHERE server_id = ".$conf['server_id']);
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
 		unset($server_ini_rec);
 
@@ -740,13 +759,27 @@
 			}
 		}
 		unset($rbl_hosts);
-		unset($server_ini_array);
 
+		//* If Postgrey is installed, configure it
+		$greylisting = '';
+		if($conf['postgrey']['installed'] == true) {
+			$greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
+		}
+		
+		$reject_sender_login_mismatch = '';
+		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
+			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+		}
+		unset($server_ini_array);
+		
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
 			'{vmail_userid}' => $cf['vmail_userid'],
 			'{vmail_groupid}' => $cf['vmail_groupid'],
-			'{rbl_list}' => $rbl_list);
+			'{rbl_list}' => $rbl_list,
+			'{greylisting}' => $greylisting,
+			'{reject_slm}' => $reject_sender_login_mismatch,
+		);
 
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
@@ -841,7 +874,7 @@
 		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 	}
-
+	
 	public function configure_saslauthd() {
 		global $conf;
 
@@ -852,12 +885,12 @@
 		unset($parts);
 		unset($out);
 
-		if(version_compare($saslversion , '2.1.23') > 0) {
-			//* Configfile for saslauthd versions 2.1.24 and newer
-			$configfile = 'sasl_smtpd2.conf';
-		} else {
+		if(version_compare($saslversion , '2.1.23', '<=')) {
 			//* Configfile for saslauthd versions up to 2.1.23
 			$configfile = 'sasl_smtpd.conf';
+		} else {
+			//* Configfile for saslauthd versions 2.1.24 and newer
+			$configfile = 'sasl_smtpd2.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~');
@@ -935,6 +968,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		wf($config_dir.'/'.$configfile, $content);
 
 		chmod($config_dir.'/'.$configfile, 0660);
@@ -961,7 +995,7 @@
 		
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
 			
@@ -1019,21 +1053,21 @@
 		unset($tmp);
 
 		//* Copy dovecot configuration file
-		if(version_compare($dovecot_version,2) >= 0) {
+		if(version_compare($dovecot_version,1, '<=')) {	//* Dovecot 1.x
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
+			} else {
+				copy('tpl/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
+			}
+		} else {	//* Dovecot 2.x
 			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master')) {
 				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot2.conf.master', $config_dir.'/'.$configfile);
 			} else {
 				copy('tpl/debian_dovecot2.conf.master', $config_dir.'/'.$configfile);
 			}
 			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
-			if(version_compare($dovecot_version,2.1) < 0) {
+			if(version_compare($dovecot_version, 2.1, '<')) {
 				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
-			}
-		} else {
-			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master')) {
-				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
-			} else {
-				copy('tpl/debian_dovecot.conf.master', $config_dir.'/'.$configfile);
 			}
 		}
 
@@ -1048,6 +1082,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($config_dir.'/'.$configfile, $content);
 
@@ -1066,7 +1101,7 @@
 		// 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);
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', '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);
@@ -1074,6 +1109,7 @@
 		$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);
+		chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 
 		// TODO: chmod and chown on the config file
 
@@ -1225,6 +1261,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($conf['mydns']['config_dir'].'/'.$configfile, $content);
 		chmod($conf['mydns']['config_dir'].'/'.$configfile, 0600);
@@ -1237,18 +1274,18 @@
 		global $conf;
 
 		//* Create the database
-		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['powerdns']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) {
+		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['powerdns']['database'], $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)) {
+		$query = "GRANT ALL ON ?? TO ?@'localhost'";
+		if(!$this->db->query($query, $conf['powerdns']['database'] . '.*', $conf['mysql']['ispconfig_user'])) {
 			$this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage);
 		}
 
 		//* Reload database privelages
-		$this->db->query('FLUSH PRIVILEGES;');
+		$this->db->query('FLUSH PRIVILEGES');
 
 		//* load the powerdns databse dump
 		if($conf['mysql']['admin_password'] == '') {
@@ -1268,6 +1305,7 @@
 		$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);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 		wf($conf['powerdns']['config_dir'].'/'.$configfile, $content);
 		chmod($conf['powerdns']['config_dir'].'/'.$configfile, 0600);
 		chown($conf['powerdns']['config_dir'].'/'.$configfile, 'root');
@@ -1287,14 +1325,134 @@
 
 		//* Create the slave subdirectory
 		$content .= 'slave';
-		if(!@is_dir($content)) mkdir($content, 0770, true);
+		if(!@is_dir($content)) mkdir($content, 2770, true);
 
 		//* Chown the slave subdirectory to $conf['bind']['bind_user']
 		chown($content, $conf['bind']['bind_user']);
 		chgrp($content, $conf['bind']['bind_group']);
+		chmod($content, 2770);
 
 	}
 
+
+    public function configure_xmpp($options = '') {
+        global $conf;
+
+        if($conf['xmpp']['installed'] == false) return;
+        //* Create the logging directory for xmpp server
+        if(!@is_dir('/var/log/metronome')) mkdir('/var/log/metronome', 0755, true);
+        chown('/var/log/metronome', 'metronome');
+        if(!@is_dir('/var/run/metronome')) mkdir('/var/run/metronome', 0755, true);
+        chown('/var/run/metronome', 'metronome');
+        if(!@is_dir('/var/lib/metronome')) mkdir('/var/lib/metronome', 0755, true);
+        chown('/var/lib/metronome', 'metronome');
+        if(!@is_dir('/etc/metronome/hosts')) mkdir('/etc/metronome/hosts', 0755, true);
+        if(!@is_dir('/etc/metronome/status')) mkdir('/etc/metronome/status', 0755, true);
+        unlink('/etc/metronome/metronome.cfg.lua');
+
+        $row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $conf["server_id"]);
+        $server_name = $row["server_name"];
+
+        $tpl = new tpl('metronome_conf_main.master');
+        wf('/etc/metronome/metronome.cfg.lua', $tpl->grab());
+        unset($tpl);
+
+        $tpl = new tpl('metronome_conf_global.master');
+        $tpl->setVar('xmpp_admins','');
+        wf('/etc/metronome/global.cfg.lua', $tpl->grab());
+        unset($tpl);
+
+        // Copy isp libs
+        if(!@is_dir('/usr/lib/metronome/isp-modules')) mkdir('/usr/lib/metronome/isp-modules', 0755, true);
+        caselog('cp -rf apps/metronome_libs/* /usr/lib/metronome/isp-modules/', __FILE__, __LINE__);
+        // Process db config
+        $full_file_name = '/usr/lib/metronome/isp-modules/mod_auth_external/db_conf.inc.php';
+        $content = rf($full_file_name);
+        $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);
+
+        if(!stristr($options, 'dont-create-certs')){
+            // Create SSL Certificate for localhost
+            echo "writing new private key to 'localhost.key'\n-----\n";
+            $ssl_country = $this->free_query('Country Name (2 letter code)', 'AU');
+            $ssl_locality = $this->free_query('Locality Name (eg, city)', '');
+            $ssl_organisation = $this->free_query('Organization Name (eg, company)', 'Internet Widgits Pty Ltd');
+            $ssl_organisation_unit = $this->free_query('Organizational Unit Name (eg, section)', '');
+            $ssl_domain = $this->free_query('Common Name (e.g. server FQDN or YOUR name)', $conf['hostname']);
+            $ssl_email = $this->free_query('Email Address', '');
+
+            $tpl = new tpl('metronome_conf_ssl.master');
+            $tpl->setVar('ssl_country',$ssl_country);
+            $tpl->setVar('ssl_locality',$ssl_locality);
+            $tpl->setVar('ssl_organisation',$ssl_organisation);
+            $tpl->setVar('ssl_organisation_unit',$ssl_organisation_unit);
+            $tpl->setVar('domain',$ssl_domain);
+            $tpl->setVar('ssl_email',$ssl_email);
+            wf('/etc/metronome/certs/localhost.cnf', $tpl->grab());
+            unset($tpl);
+            // Generate new key, csr and cert
+            exec("(cd /etc/metronome/certs && make localhost.key)");
+            exec("(cd /etc/metronome/certs && make localhost.csr)");
+            exec("(cd /etc/metronome/certs && make localhost.cert)");
+            exec('chmod 0400 /etc/metronome/certs/localhost.key');
+            exec('chown metronome /etc/metronome/certs/localhost.key');
+        }else{
+            echo "-----\n";
+            echo "Metronome XMPP SSL server certificate is not renewed. Run the following command manual as root to recreate it:\n";
+            echo "# (cd /etc/metronome/certs && make localhost.key && make localhost.csr && make localhost.cert && chmod 0400 localhost.key && chown metronome localhost.key)\n";
+            echo "-----\n";
+        }
+
+        // Copy init script
+        caselog('cp -f apps/metronome-init /etc/init.d/metronome', __FILE__, __LINE__);
+        caselog('chmod u+x /etc/init.d/metronome', __FILE__, __LINE__);
+        caselog('update-rc.d metronome defaults', __FILE__, __LINE__);
+
+        exec($this->getinitcommand('xmpp', 'restart'));
+
+/*
+writing new private key to 'smtpd.key'
+-----
+You are about to be asked to enter information that will be incorporated
+into your certificate request.
+What you are about to enter is what is called a Distinguished Name or a DN.
+There are quite a few fields but you can leave some blank
+For some fields there will be a default value,
+If you enter '.', the field will be left blank.
+-----
+Country Name (2 letter code) [AU]:
+State or Province Name (full name) [Some-State]:
+Locality Name (eg, city) []:
+Organization Name (eg, company) [Internet Widgits Pty Ltd]:
+Organizational Unit Name (eg, section) []:
+Common Name (e.g. server FQDN or YOUR name) []:
+Email Address []:
+ * */
+
+        /*// Dont just copy over the virtualhost template but add some custom settings
+        $tpl = new tpl('apache_apps.vhost.master');
+
+        $tpl->setVar('apps_vhost_port',$conf['web']['apps_vhost_port']);
+        $tpl->setVar('apps_vhost_dir',$conf['web']['website_basedir'].'/apps');
+        $tpl->setVar('apps_vhost_basedir',$conf['web']['website_basedir']);
+        $tpl->setVar('apps_vhost_servername',$apps_vhost_servername);
+        $tpl->setVar('apache_version',getapacheversion());
+
+
+        // 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) {
+            $tpl->setVar('vhost_port_listen','#');
+        } else {
+            $tpl->setVar('vhost_port_listen','');
+        }
+
+        wf($vhost_conf_dir.'/apps.vhost', $tpl->grab());
+        unset($tpl);*/
+    }
 
 
 	public function configure_apache() {
@@ -1351,7 +1509,7 @@
 		$tpl = new tpl('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version',getapacheversion());
 		
-		$records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
+		$records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
 		$ip_addresses = array();
 		
 		if(is_array($records) && count($records) > 0) {
@@ -1434,36 +1592,6 @@
 		//* 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");
-
-		/*
-		$row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$conf["server_id"]."");
-		$ip_address = gethostbyname($row["server_name"]);
-		$server_name = $row["server_name"];
-
-        //setup proxy.conf
-		$configfile = 'proxy.conf';
-		if(is_file($conf["nginx"]["config_dir"].'/'.$configfile)) copy($conf["nginx"]["config_dir"].'/'.$configfile,$conf["nginx"]["config_dir"].'/'.$configfile.'~');
-		if(is_file($conf["nginx"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["nginx"]["config_dir"].'/'.$configfile.'~');
-		$content = rf("tpl/nginx_".$configfile.".master");
-		wf($conf["nginx"]["config_dir"].'/'.$configfile,$content);
-		exec('chmod 600 '.$conf["nginx"]["config_dir"].'/'.$configfile);
-		exec('chown root:root '.$conf["nginx"]["config_dir"].'/'.$configfile);
-
-        //setup conf.d/cache.conf
-        $configfile = 'cache.conf';
-		if(is_file($conf["nginx"]["config_dir"].'/conf.d/'.$configfile)) copy($conf["nginx"]["config_dir"].'/conf.d/'.$configfile,$conf["nginx"]["config_dir"].'/conf.d/'.$configfile.'~');
-		if(is_file($conf["nginx"]["config_dir"].'/conf.d/'.$configfile.'~')) exec('chmod 400 '.$conf["nginx"]["config_dir"].'/conf.d/'.$configfile.'~');
-		$content = rf("tpl/nginx_".$configfile.".master");
-		wf($conf["nginx"]["config_dir"].'/conf.d/'.$configfile,$content);
-		exec('chmod 600 '.$conf["nginx"]["config_dir"].'/conf.d/'.$configfile);
-		exec('chown root:root '.$conf["nginx"]["config_dir"].'/conf.d/'.$configfile);
-
-        //setup cache directories
-        mkdir('/var/cache/nginx/cache');
-        exec('chown www-data:www-data /var/cache/nginx/cache');
-        mkdir('/var/cache/nginx/temp');
-        exec('chown www-data:www-data /var/cache/nginx/temp');
-		*/
 	}
 
 	public function configure_fail2ban() {
@@ -1473,7 +1601,7 @@
 	public function configure_squid()
 	{
 		global $conf;
-		$row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$conf["server_id"]."");
+		$row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $conf["server_id"]);
 		$ip_address = gethostbyname($row["server_name"]);
 		$server_name = $row["server_name"];
 
@@ -1520,7 +1648,7 @@
 		$tcp_public_services = '';
 		$udp_public_services = '';
 
-		$row = $this->db->queryOneRecord('SELECT * FROM '.$conf["mysql"]["database"].'.firewall WHERE server_id = '.intval($conf['server_id']));
+		$row = $this->db->queryOneRecord('SELECT * FROM ?? WHERE server_id = ?', $conf["mysql"]["database"] . '.firewall', $conf['server_id']);
 
 		if(trim($row['tcp_port']) != '' || trim($row['udp_port']) != '') {
 			$tcp_public_services = trim(str_replace(',', ' ', $row['tcp_port']));
@@ -1532,7 +1660,7 @@
 
 		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']));
+			if($row['tcp_port'] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ? WHERE server_id = ?", ',' . intval($conf['apache']['vhost_port']), $conf['server_id']);
 		}
 
 		$content = str_replace('{TCP_PUBLIC_SERVICES}', $tcp_public_services, $content);
@@ -1843,11 +1971,13 @@
 		$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_server_port}', $conf['mysql']['port'], $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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -1868,11 +1998,13 @@
 		$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_server_port}', $conf['mysql']['port'], $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('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
 
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
@@ -1957,14 +2089,13 @@
 		$vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
 		$proxy_server_enabled = ($conf['services']['proxy'])?1:0;
 		$firewall_server_enabled = ($conf['services']['firewall'])?1:0;
+        $xmpp_server_enabled = ($conf['services']['xmpp'])?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', proxy_server = '$proxy_server_enabled', firewall_server = '$firewall_server_enabled' WHERE server_id = ".intval($conf['server_id']);
+		$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', proxy_server = '$proxy_server_enabled', firewall_server = '$firewall_server_enabled', xmpp_server = '.$xmpp_server_enabled.' WHERE server_id = ?";
 
+		$this->db->query($sql, $conf['server_id']);
 		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql);
-			$this->db->query($sql);
-		} else {
-			$this->db->query($sql);
+			$this->dbmaster->query($sql, $conf['server_id']);
 		}
 
 
@@ -2078,6 +2209,11 @@
 		//* 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");
+
+		if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') {
+			$sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';";
+			$this->db->query($sql, $conf['interface_password']);
+		}
 
 		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
 			//* Copy the ISPConfig vhost for the controlpanel
@@ -2254,6 +2390,11 @@
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
 		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
 	}
 
 	public function configure_dbserver() {
@@ -2343,6 +2484,32 @@
 
 	}
 	
+	public function create_mount_script(){
+		global $app, $conf;
+		$mount_script = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
+		$mount_command = '';
+		
+		if(is_file($mount_script)) return;
+		if(is_file('/etc/rc.local')){
+			$rc_local = file('/etc/rc.local');
+			if(is_array($rc_local) && !empty($rc_local)){
+				foreach($rc_local as $line){
+					$line = trim($line);
+					if(substr($line, 0, 1) == '#') continue;
+					if(strpos($line, 'sshfs') !== false && strpos($line, '/var/backup') !== false){
+						$mount_command = "#!/bin/sh\n\n";
+						$mount_command .= $line."\n\n";
+						file_put_contents($mount_script, $mount_command);
+						chmod($mount_script, 0755);
+						chown($mount_script, 'root');
+						chgrp($mount_script, 'root');
+						break;
+					}
+				}
+			}
+		}
+	}
+	
 	// This function is called at the end of the update process and contains code to clean up parts of old ISPCONfig releases
 	public function cleanup_ispconfig() {
 		global $app,$conf;
@@ -2355,7 +2522,11 @@
 		if(is_file('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/db_firebird.inc.php');
 		if(is_file('/usr/local/ispconfig/interface/lib/classes/form.inc.php')) unlink('/usr/local/ispconfig/interface/lib/classes/form.inc.php');
 		
-		
+		// Change mode of a few files from amavisd
+		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
+		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
 		
 	}
 
@@ -2487,6 +2658,7 @@
 		$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);
 		$tContents = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $tContents);
 
 		return $tContents;
diff --git a/install/lib/mysql.lib.php b/install/lib/mysql.lib.php
index c5c2a83..c6078ca 100644
--- a/install/lib/mysql.lib.php
+++ b/install/lib/mysql.lib.php
@@ -1,190 +1,499 @@
 <?php
-
 /*
-Copyright (c) 2007, Till Brehm, projektfarm Gmbh
-All rights reserved.
+   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:
+   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.
+ * 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.
-*/
+ 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 db
+class db extends mysqli
 {
-	var $dbHost = "";    // hostname of the MySQL server
-	var $dbName = "";    // logical database name on that server
-	var $dbUser = "";    // database authorized user
-	var $dbPass = "";    // user's password
-	var $dbCharset = "";      // what charset comes and goes to mysql: utf8 / latin1
-	var $linkId = false;    // last result of mysql_connect()
-	var $queryId = 0;    // last result of mysql_query()
-	var $record = array();   // last record fetched
-	var $autoCommit = 1;      // Autocommit Transactions
-	var $currentRow;    // current row number
-	var $errorNumber = 0;   // last error number
-	var $errorMessage = "";   // last error message
-	var $errorLocation = "";  // last error location
-	var $show_error_messages = false;
+	/**#@+
+     * @access private
+     */
+	private $_iQueryId;
+	private $_iConnId;
 
-	// constructor
-	function db()
-	{
+	private $dbHost = '';  // hostname of the MySQL server
+	private $dbName = '';  // logical database name on that server
+	private $dbUser = '';  // database authorized user
+	private $dbPass = '';  // user's password
+	private $dbCharset = 'utf8';// Database charset
+	private $dbNewLink = false; // Return a new linkID when connect is called again
+	private $dbClientFlags = 0; // MySQL Client falgs
+	/**#@-*/
 
+	public $show_error_messages = false; // false in server, true in interface
+
+
+	/* old things - unused now ////
+	private $linkId = 0;  // last result of mysqli_connect()
+	private $queryId = 0;  // last result of mysqli_query()
+	private $record = array(); // last record fetched
+	private $autoCommit = 1;    // Autocommit Transactions
+	private $currentRow;  // current row number
+	public $errorNumber = 0; // last error number
+	public $errorMessage = ''; // last error message
+	private $errorLocation = '';// last error location
+	private $isConnected = false; // needed to know if we have a valid mysqli object from the constructor
+	////
+	*/
+
+	public function __destruct() {
+		if($this->_iConnId) mysqli_close($this->_iConnId);
+	}
+	
+	private function do_connect() {
 		global $conf;
+		
+		if($this->_iConnId) return true;
 		$this->dbHost = $conf["mysql"]["host"];
-		//$this->dbName = $conf["mysql"]["database"];
+		$this->dbName = false;//$conf["mysql"]["database"];
 		$this->dbUser = $conf["mysql"]["admin_user"];
 		$this->dbPass = $conf["mysql"]["admin_password"];
 		$this->dbCharset = $conf["mysql"]["charset"];
-		//$this->connect();
-	}
+		$this->dbNewLink = false;
+		$this->dbClientFlags = null;
+		
+		$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+		$try = 0;
+		while((!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5) {
+			if($try > 0) sleep(1);
 
-	// error handler
-	function updateError($location)
-	{
-		$this->errorNumber = mysqli_errno($this->linkId);
-		$this->errorMessage = mysqli_error($this->linkId);
-		$this->errorLocation = $location;
-		if($this->errorNumber && $this->show_error_messages)
-		{
-			echo '<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage;
-			flush();
+			$try++;
+			$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+		}
+
+		if(!is_object($this->_iConnId) || mysqli_connect_error()) {
+			$this->_iConnId = null;
+			$this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!');
+			return false;
+		}
+		
+		if($this->dbName) $this->setDBName($this->dbName);
+
+		$this->_setCharset();
+	}
+	
+	public function setDBData($host, $user, $password) {
+		$this->dbHost = $host;
+		$this->dbUser = $user;
+		$this->dbPass = $password;
+	}
+	
+	public function setDBName($name) {
+		$this->dbName = $name;
+		if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) {
+			$this->close();
+			$this->_sqlerror('Datenbank nicht gefunden / Database not found');
+			return false;
 		}
 	}
+	
+	public function close() {
+		if($this->_iConnId) mysqli_close($this->_iConnId);
+		$this->_iConnId = null;
+	}
 
-	function connect()
-	{
-		if(!$this->linkId)
-		{
-			$this->linkId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+	/* This allows our private variables to be "read" out side of the class */
+	public function __get($var) {
+		return isset($this->$var) ? $this->$var : NULL;
+	}
 
-			if(!$this->linkId)
-			{
-				$this->updateError('DB::connect()<br />mysqli_connect');
-				return false;
+	public function _build_query_string($sQuery = '') {
+		$iArgs = func_num_args();
+		if($iArgs > 1) {
+			$aArgs = func_get_args();
+
+			if($iArgs == 3 && $aArgs[1] === true && is_array($aArgs[2])) {
+				$aArgs = $aArgs[2];
+				$iArgs = count($aArgs);
+			} else {
+				array_shift($aArgs); // delete the query string that is the first arg!
 			}
-			$this->queryId = @mysqli_query($this->linkId, 'SET NAMES '.$this->dbCharset);
+
+			$iPos = 0;
+			$iPos2 = 0;
+			foreach($aArgs as $sKey => $sValue) {
+				$iPos2 = strpos($sQuery, '??', $iPos2);
+				$iPos = strpos($sQuery, '?', $iPos);
+
+				if($iPos === false && $iPos2 === false) break;
+
+				if($iPos2 !== false && ($iPos === false || $iPos2 <= $iPos)) {
+					$sTxt = $this->escape($sValue);
+
+					if(strpos($sTxt, '.') !== false) {
+						$sTxt = preg_replace('/^(.+)\.(.+)$/', '`$1`.`$2`', $sTxt);
+						$sTxt = str_replace('.`*`', '.*', $sTxt);
+					} else $sTxt = '`' . $sTxt . '`';
+
+					$sQuery = substr_replace($sQuery, $sTxt, $iPos2, 2);
+					$iPos2 += strlen($sTxt);
+					$iPos = $iPos2;
+				} else {
+					if(is_int($sValue) || is_float($sValue)) {
+						$sTxt = $sValue;
+					} elseif(is_string($sValue) && (strcmp($sValue, '#NULL#') == 0)) {
+						$sTxt = 'NULL';
+					} elseif(is_array($sValue)) {
+						$sTxt = '';
+						foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\'';
+						$sTxt = '(' . substr($sTxt, 1) . ')';
+						if($sTxt == '()') $sTxt = '(0)';
+					} else {
+						$sTxt = '\'' . $this->escape($sValue) . '\'';
+					}
+
+					$sQuery = substr_replace($sQuery, $sTxt, $iPos, 1);
+					$iPos += strlen($sTxt);
+					$iPos2 = $iPos;
+				}
+			}
+		}
+
+		return $sQuery;
+	}
+
+	/**#@-*/
+
+
+	/**#@+
+     * @access private
+     */
+	private function _setCharset() {
+		mysqli_query($this->_iConnId, 'SET NAMES '.$this->dbCharset);
+		mysqli_query($this->_iConnId, "SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'");
+	}
+
+	private function _query($sQuery = '') {
+		$this->do_connect();
+
+		if ($sQuery == '') {
+			$this->_sqlerror('Keine Anfrage angegeben / No query given');
+			return false;
+		}
+
+		$try = 0;
+		do {
+			$try++;
+			$ok = mysqli_ping($this->_iConnId);
+			if(!$ok) {
+				if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) {
+					if($this->errorNumber == '111') {
+						// server is not available
+						if($try > 9) {
+							$this->_sqlerror('DB::query -> error connecting');
+							exit;
+						}
+						sleep(30); // additional seconds, please!
+					}
+
+					if($try > 9) {
+						$this->_sqlerror('DB::query -> reconnect');
+						return false;
+					} else {
+						sleep(($try > 7 ? 5 : 1));
+					}
+				} else {
+					$this->_setCharset();
+					$ok = true;
+				}
+			}
+		} while($ok == false);
+
+		$aArgs = func_get_args();
+		$sQuery = call_user_func_array(array(&$this, '_build_query_string'), $aArgs);
+
+		$this->_iQueryId = mysqli_query($this->_iConnId, $sQuery);
+		if (!$this->_iQueryId) {
+			$this->_sqlerror('Falsche Anfrage / Wrong Query', false, 'SQL-Query = ' . $sQuery);
+			return false;
+		}
+
+		return is_bool($this->_iQueryId) ? $this->_iQueryId : new db_result($this->_iQueryId, $this->_iConnId);
+	}
+
+	/**#@-*/
+
+
+
+
+
+	/**
+	 * Executes a query
+	 *
+	 * Executes a given query string, has a variable amount of parameters:
+	 * - 1 parameter
+	 *   executes the given query
+	 * - 2 parameters
+	 *   executes the given query, replaces the first ? in the query with the second parameter
+	 * - 3 parameters
+	 *   if the 2nd parameter is a boolean true, the 3rd parameter has to be an array containing all the replacements for every occuring ? in the query, otherwise the second parameter replaces the first ?, the third parameter replaces the second ? in the query
+	 * - 4 or more parameters
+	 *   all ? in the query are replaced from left to right by the parameters 2 to x
+	 *
+	 * @access public
+	 * @param string  $sQuery query string
+	 * @param mixed   ... one or more parameters
+	 * @return db_result the result object of the query
+	 */
+
+
+	public function query($sQuery = '') {
+		$aArgs = func_get_args();
+		return call_user_func_array(array(&$this, '_query'), $aArgs);
+	}
+
+	/**
+	 * Execute a query and get first result array
+	 *
+	 * Executes a query and returns the first result row as an array
+	 * This is like calling $result = $db->query(),  $result->get(), $result->free()
+	 * Use of this function @see query
+	 *
+	 * @access public
+	 * @param string  $sQuery query to execute
+	 * @param ...     further params (see query())
+	 * @return array result row or NULL if none found
+	 */
+	public function queryOneRecord($sQuery = '') {
+		if(!preg_match('/limit \d+\s*,\s*\d+$/i', $sQuery)) $sQuery .= ' LIMIT 0,1';
+
+		$aArgs = func_get_args();
+		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
+		if(!$oResult) return null;
+
+		$aReturn = $oResult->get();
+		$oResult->free();
+
+		return $aReturn;
+	}
+
+	public function queryOne($sQuery = '') {
+		return call_user_func_array(array(&$this, 'queryOneRecord'), func_get_args());
+	}
+
+	public function query_one($sQuery = '') {
+		return call_user_func_array(array(&$this, 'queryOneRecord'), func_get_args());
+	}
+
+	/**
+	 * Execute a query and return all rows
+	 *
+	 * Executes a query and returns all result rows in an array
+	 * <strong>Use this with extreme care!!!</strong> Uses lots of memory on big result sets.
+	 *
+	 * @access public
+	 * @param string  $sQuery query to execute
+	 * @param ...     further params (see query())
+	 * @return array all the rows in the result set
+	 */
+	public function queryAllRecords($sQuery = '') {
+		$aArgs = func_get_args();
+		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
+		if(!$oResult) return array();
+
+		$aResults = array();
+		while($aRow = $oResult->get()) {
+			$aResults[] = $aRow;
+		}
+		$oResult->free();
+
+		return $aResults;
+	}
+
+	public function queryAll($sQuery = '') {
+		return call_user_func_array(array(&$this, 'queryAllRecords'), func_get_args());
+	}
+
+	public function query_all($sQuery = '') {
+		return call_user_func_array(array(&$this, 'queryAllRecords'), func_get_args());
+	}
+
+	/**
+	 * Execute a query and return all rows as simple array
+	 *
+	 * Executes a query and returns all result rows in an array with elements
+	 * <strong>Only first column is returned</strong> Uses lots of memory on big result sets.
+	 *
+	 * @access public
+	 * @param string  $sQuery query to execute
+	 * @param ...     further params (see query())
+	 * @return array all the rows in the result set
+	 */
+	public function queryAllArray($sQuery = '') {
+		$aArgs = func_get_args();
+		$oResult = call_user_func_array(array(&$this, 'query'), $aArgs);
+		if(!$oResult) return array();
+
+		$aResults = array();
+		while($aRow = $oResult->get()) {
+			$aResults[] = reset($aRow);
+		}
+		$oResult->free();
+
+		return $aResults;
+	}
+
+	public function query_all_array($sQuery = '') {
+		return call_user_func_array(array(&$this, 'queryAllArray'), func_get_args());
+	}
+
+
+
+	/**
+	 * Get id of last inserted row
+	 *
+	 * Gives you the id of the last inserted row in a table with an auto-increment primary key
+	 *
+	 * @access public
+	 * @return int id of last inserted row or 0 if none
+	 */
+	public function insert_id() {
+		$iRes = mysqli_query($this->_iConnId, 'SELECT LAST_INSERT_ID() as `newid`');
+		if(!is_object($iRes)) return false;
+
+		$aReturn = mysqli_fetch_assoc($iRes);
+		mysqli_free_result($iRes);
+
+		return $aReturn['newid'];
+	}
+
+
+
+	/**
+	 * get affected row count
+	 *
+	 * Gets the amount of rows affected by the previous query
+	 *
+	 * @access public
+	 * @return int affected rows
+	 */
+	public function affected() {
+		if(!is_object($this->_iConnId)) return 0;
+		$iRows = mysqli_affected_rows($this->_iConnId);
+		if(!$iRows) $iRows = 0;
+		return $iRows;
+	}
+
+
+
+	/**
+	 * check if a utf8 string is valid
+	 *
+	 * @access public
+	 * @param string  $string the string to check
+	 * @return bool true if it is valid utf8, false otherwise
+	 */
+	private function check_utf8($str) {
+		$len = strlen($str);
+		for($i = 0; $i < $len; $i++){
+			$c = ord($str[$i]);
+			if ($c > 128) {
+				if (($c > 247)) return false;
+				elseif ($c > 239) $bytes = 4;
+				elseif ($c > 223) $bytes = 3;
+				elseif ($c > 191) $bytes = 2;
+				else return false;
+				if (($i + $bytes) > $len) return false;
+				while ($bytes > 1) {
+					$i++;
+					$b = ord($str[$i]);
+					if ($b < 128 || $b > 191) return false;
+					$bytes--;
+				}
+			}
 		}
 		return true;
-	}
+	} // end of check_utf8
 
-	function query($queryString)
-	{
-		if(!$this->connect())
-		{
-			return false;
+	/**
+	 * Escape a string for usage in a query
+	 *
+	 * @access public
+	 * @param string  $sString query string to escape
+	 * @return string escaped string
+	 */
+	public function escape($sString) {
+		if(!is_string($sString) && !is_numeric($sString)) {
+			$sString = '';
 		}
-		if($this->dbName != '') {
-			if(!mysqli_select_db($this->linkId, $this->dbName))
-			{
-				$this->updateError('DB::connect()<br />mysqli_select_db');
-				return false;
+
+		$cur_encoding = mb_detect_encoding($sString);
+		if($cur_encoding != "UTF-8") {
+			if($cur_encoding != 'ASCII') {
+				if($cur_encoding) $sString = mb_convert_encoding($sString, 'UTF-8', $cur_encoding);
+				else $sString = mb_convert_encoding($sString, 'UTF-8');
 			}
+		} elseif(!$this->check_utf8($sString)) {
+			$sString = utf8_encode($sString);
 		}
-		$this->queryId = @mysqli_query($this->linkId, $queryString);
-		$this->updateError('DB::query('.$queryString.')<br />mysqli_query');
-		if(!$this->queryId)
-		{
-			return false;
-		}
-		$this->currentRow = 0;
-		return $this->queryId;
+
+		if($this->_iConnId) return mysqli_real_escape_string($this->_iConnId, $sString);
+		else return addslashes($sString);
 	}
 
-	// returns all records in an array
-	function queryAllRecords($queryString)
-	{
-		if(!$this->query($queryString))
-		{
-			return false;
+	/**
+	 *
+	 *
+	 * @access private
+	 */
+	private function _sqlerror($sErrormsg = 'Unbekannter Fehler', $sAddMsg = '') {
+		global $conf;
+
+		$mysql_error = (is_object($this->_iConnId) ? mysqli_error($this->_iConnId) : mysqli_connect_error());
+		$mysql_errno = (is_object($this->_iConnId) ? mysqli_errno($this->_iConnId) : mysqli_connect_errno());
+
+		//$sAddMsg .= getDebugBacktrace();
+
+		if($this->show_error_messages && $conf['demo_mode'] === false) {
+			echo $sErrormsg . $sAddMsg;
 		}
-		$ret = array();
-		while($line = $this->nextRecord())
-		{
-			$ret[] = $line;
-		}
-		return $ret;
 	}
 
-	// returns one record in an array
-	function queryOneRecord($queryString)
-	{
-		if(!$this->query($queryString) || $this->numRows() == 0)
-		{
-			return false;
-		}
-		return $this->nextRecord();
-	}
-
-	// returns the next record in an array
-	function nextRecord()
-	{
-		$this->record = mysqli_fetch_assoc($this->queryId);
-		$this->updateError('DB::nextRecord()<br />mysqli_fetch_array');
-		if(!$this->record || !is_array($this->record))
-		{
-			return false;
-		}
-		$this->currentRow++;
-		return $this->record;
-	}
-
-	// returns number of rows returned by the last select query
-	function numRows()
-	{
-		return mysqli_num_rows($this->queryId);
-	}
-
-	function affectedRows()
-	{
-		return mysqli_affected_rows($this->linkId);
+	public function affectedRows() {
+		return $this->affected();
 	}
 
 	// returns mySQL insert id
-	function insertID()
-	{
-		return mysqli_insert_id($this->linkId);
+	public function insertID() {
+		return $this->insert_id();
 	}
 
-	// Check der variablen
-	// deprecated, now use quote
-	function check($formfield)
-	{
-		return $this->quote($formfield);
+
+	//* Function to quote strings
+	public function quote($formfield) {
+		return $this->escape($formfield);
 	}
 
-	// Check der variablen
-	function quote($formfield)
-	{
-		return mysqli_real_escape_string($this->linkId, $formfield);
-	}
-
-	// Check der variablen
-	function unquote($formfield)
-	{
+	//* Function to unquotae strings
+	public function unquote($formfield) {
 		return stripslashes($formfield);
 	}
 
-	function toLower($record) {
+	public function toLower($record) {
 		if(is_array($record)) {
 			foreach($record as $key => $val) {
 				$key = strtolower($key);
@@ -194,7 +503,7 @@
 		return $out;
 	}
 
-
+	/* TODO: rewrite SQL */
 	function insert($tablename, $form, $debug = 0)
 	{
 		if(is_array($form)){
@@ -213,7 +522,8 @@
 			if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
 		}
 	}
-
+	
+	/* TODO: rewrite SQL */
 	function update($tablename, $form, $bedingung, $debug = 0)
 	{
 
@@ -230,218 +540,174 @@
 		}
 	}
 
-	function closeConn() {
-
-	}
-
-	function freeResult() {
-
-
-	}
-
-	function delete() {
-
-	}
-
-	function Transaction($action) {
-		//action = begin, commit oder rollback
-
-	}
 
 	/*
-   $columns = array(action =>   add | alter | drop
-                    name =>     Spaltenname
-                    name_new => neuer Spaltenname, nur bei 'alter' belegt
-                    type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
-                    typeValue => Wert z.B. bei Varchar
-                    defaultValue =>  Default Wert
-                    notNull =>   true | false
-                    autoInc =>   true | false
-                    option =>   unique | primary | index)
+       $columns = array(action =>   add | alter | drop
+       name =>     Spaltenname
+       name_new => neuer Spaltenname, nur bei 'alter' belegt
+       type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
+       typeValue => Wert z.B. bei Varchar
+       defaultValue =>  Default Wert
+       notNull =>   true | false
+       autoInc =>   true | false
+       option =>   unique | primary | index)
 
 
-   */
-
-	function createTable($table_name, $columns) {
-		$index = "";
-		$sql = "CREATE TABLE $table_name (";
+     */
+	/* TODO: rewrite SQL */
+	public function createTable($table_name, $columns) {
+		$index = '';
+		$sql = "CREATE TABLE ?? (";
 		foreach($columns as $col){
-			$sql .= $col["name"]." ".$this->mapType($col["type"], $col["typeValue"])." ";
+			$sql .= $col['name'].' '.$this->mapType($col['type'], $col['typeValue']).' ';
 
-			if($col["defaultValue"] != "") {
-				if($col["defaultValue"] == "NULL" or $col["defaultValue"] == "NOT NULL") {
-					$sql .= "DEFAULT ".$col["defaultValue"]." ";
-				} else {
-					$sql .= "DEFAULT '".$col["defaultValue"]."' ";
-				}
-
-			} elseif($col["defaultValue"] != false) {
-				$sql .= "DEFAULT '' ";
+			if($col['defaultValue'] != '') $sql .= "DEFAULT '".$col['defaultValue']."' ";
+			if($col['notNull'] == true) {
+				$sql .= 'NOT NULL ';
+			} else {
+				$sql .= 'NULL ';
 			}
-			if($col["defaultValue"] != "NULL" && $col["defaultValue"] != "NOT NULL") {
-				if($col["notNull"] == true) {
-					$sql .= "NOT NULL ";
-				} else {
-					$sql .= "NULL ";
-				}
-			}
-			if($col["autoInc"] == true) $sql .= "auto_increment ";
-			$sql.= ",";
+			if($col['autoInc'] == true) $sql .= 'auto_increment ';
+			$sql.= ',';
 			// key Definitionen
-			if($col["option"] == "primary") $index .= "PRIMARY KEY (".$col["name"]."),";
-			if($col["option"] == "index") $index .= "INDEX (".$col["name"]."),";
-			if($col["option"] == "unique") $index .= "UNIQUE (".$col["name"]."),";
+			if($col['option'] == 'primary') $index .= 'PRIMARY KEY ('.$col['name'].'),';
+			if($col['option'] == 'index') $index .= 'INDEX ('.$col['name'].'),';
+			if($col['option'] == 'unique') $index .= 'UNIQUE ('.$col['name'].'),';
 		}
 		$sql .= $index;
 		$sql = substr($sql, 0, -1);
-		$sql .= ")";
-
-		$this->query($sql);
+		$sql .= ')';
+		/* TODO: secure parameters */
+		$this->query($sql, $table_name);
 		return true;
 	}
 
 	/*
-   $columns = array(action =>   add | alter | drop
-                    name =>     Spaltenname
-                    name_new => neuer Spaltenname, nur bei 'alter' belegt
-                    type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
-                    typeValue => Wert z.B. bei Varchar
-                    defaultValue =>  Default Wert
-                    notNull =>   true | false
-                    autoInc =>   true | false
-                    option =>   unique | primary | index)
+       $columns = array(action =>   add | alter | drop
+       name =>     Spaltenname
+       name_new => neuer Spaltenname, nur bei 'alter' belegt
+       type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
+       typeValue => Wert z.B. bei Varchar
+       defaultValue =>  Default Wert
+       notNull =>   true | false
+       autoInc =>   true | false
+       option =>   unique | primary | index)
 
 
-   */
-	function alterTable($table_name, $columns) {
-		$index = "";
-		$sql = "ALTER TABLE $table_name ";
+     */
+    /* TODO: rewrite SQL */
+	public function alterTable($table_name, $columns) {
+		$index = '';
+		$sql = "ALTER TABLE ?? ";
 		foreach($columns as $col){
-			if($col["action"] == 'add') {
-				$sql .= "ADD ".$col["name"]." ".$this->mapType($col["type"], $col["typeValue"])." ";
-			} elseif ($col["action"] == 'alter') {
-				$sql .= "CHANGE ".$col["name"]." ".$col["name_new"]." ".$this->mapType($col["type"], $col["typeValue"])." ";
-			} elseif ($col["action"] == 'drop') {
-				$sql .= "DROP ".$col["name"]." ";
+			if($col['action'] == 'add') {
+				$sql .= 'ADD '.$col['name'].' '.$this->mapType($col['type'], $col['typeValue']).' ';
+			} elseif ($col['action'] == 'alter') {
+				$sql .= 'CHANGE '.$col['name'].' '.$col['name_new'].' '.$this->mapType($col['type'], $col['typeValue']).' ';
+			} elseif ($col['action'] == 'drop') {
+				$sql .= 'DROP '.$col['name'].' ';
 			}
-			if($col["action"] != 'drop') {
-				if($col["defaultValue"] != "") $sql .= "DEFAULT '".$col["defaultValue"]."' ";
-				if($col["notNull"] == true) {
-					$sql .= "NOT NULL ";
+			if($col['action'] != 'drop') {
+				if($col['defaultValue'] != '') $sql .= "DEFAULT '".$col['defaultValue']."' ";
+				if($col['notNull'] == true) {
+					$sql .= 'NOT NULL ';
 				} else {
-					$sql .= "NULL ";
+					$sql .= 'NULL ';
 				}
-				if($col["autoInc"] == true) $sql .= "auto_increment ";
-				$sql.= ",";
-				// key Definitionen
-				if($col["option"] == "primary") $index .= "PRIMARY KEY (".$col["name"]."),";
-				if($col["option"] == "index") $index .= "INDEX (".$col["name"]."),";
-				if($col["option"] == "unique") $index .= "UNIQUE (".$col["name"]."),";
+				if($col['autoInc'] == true) $sql .= 'auto_increment ';
+				$sql.= ',';
+				// Index definitions
+				if($col['option'] == 'primary') $index .= 'PRIMARY KEY ('.$col['name'].'),';
+				if($col['option'] == 'index') $index .= 'INDEX ('.$col['name'].'),';
+				if($col['option'] == 'unique') $index .= 'UNIQUE ('.$col['name'].'),';
 			}
 		}
 		$sql .= $index;
 		$sql = substr($sql, 0, -1);
-
+		/* TODO: secure parameters */
 		//die($sql);
-		$this->query($sql);
+		$this->query($sql, $table_name);
 		return true;
 	}
 
-	function dropTable($table_name) {
+	public function dropTable($table_name) {
 		$this->check($table_name);
-		$sql = "DROP TABLE '". $table_name."'";
-		return $this->query($sql);
+		$sql = "DROP TABLE ??";
+		return $this->query($sql, $table_name);
 	}
 
 	// gibt Array mit Tabellennamen zur�ck
-	function getTables($database_name = '') {
-
-		if($database_name == ''){
-			$database_name = $this->dbName;
-		}
-
-		$tables = $this->queryAllRecords("SHOW TABLES FROM `$database_name`");
-		$tb_names = array();
-		if(is_array($tables) && !empty($tables)){
-			for($i = 0; $i < sizeof($tables); $i++){
-				$tb_names[$i] = $tables[$i]['Tables_in_'.$database_name];
-			}
-		}
-
-		/*
-        $result = mysqli_query("SHOW TABLES FROM `$database_name`");
-        $tb_names = array();
-        for ($i = 0; $i < mysqli_num_rows($result); $i++) {
-            $tb_names[$i] = mysql_tablename($result, $i);
-        }
-		*/
+	public function getTables($database_name = '') {
+		if(!is_object($this->_iConnId)) return false;
+		if($database_name == '') $database_name = $this->dbName;
+		$tb_names = $this->queryAllArray("SHOW TABLES FROM ??", $database_name);
 		return $tb_names;
 	}
 
 	// gibt Feldinformationen zur Tabelle zur�ck
 	/*
-   $columns = array(action =>   add | alter | drop
-                    name =>     Spaltenname
-                    name_new => neuer Spaltenname, nur bei 'alter' belegt
-                    type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
-                    typeValue => Wert z.B. bei Varchar
-                    defaultValue =>  Default Wert
-                    notNull =>   true | false
-                    autoInc =>   true | false
-                    option =>   unique | primary | index)
+       $columns = array(action =>   add | alter | drop
+       name =>     Spaltenname
+       name_new => neuer Spaltenname, nur bei 'alter' belegt
+       type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
+       typeValue => Wert z.B. bei Varchar
+       defaultValue =>  Default Wert
+       notNull =>   true | false
+       autoInc =>   true | false
+       option =>   unique | primary | index)
 
 
-   */
-
+     */
+	/* TODO: rewrite SQL */
 	function tableInfo($table_name) {
 
 		global $go_api, $go_info;
 		// Tabellenfelder einlesen
 
-		if($rows = $go_api->db->queryAllRecords("SHOW FIELDS FROM ".$table_name)){
+		if($rows = $go_api->db->queryAllRecords('SHOW FIELDS FROM ??', $table_name)){
 			foreach($rows as $row) {
-				$name = $row[0];
-				$default = $row[4];
-				$key = $row[3];
-				$extra = $row[5];
-				$isnull = $row[2];
-				$type = $row[1];
+				$name = $row['Field'];
+				$default = $row['Default'];
+				$key = $row['Key'];
+				$extra = $row['Extra'];
+				$isnull = $row['Null'];
+				$type = $row['Type'];
 
 
 				$column = array();
 
-				$column["name"] = $name;
-				//$column["type"] = $type;
-				$column["defaultValue"] = $default;
-				if(stristr($key, "PRI")) $column["option"] = "primary";
-				if(stristr($isnull, "YES")) {
-					$column["notNull"] = false;
+				$column['name'] = $name;
+				//$column['type'] = $type;
+				$column['defaultValue'] = $default;
+				if(stristr($key, 'PRI')) $column['option'] = 'primary';
+				if(stristr($isnull, 'YES')) {
+					$column['notNull'] = false;
 				} else {
-					$column["notNull"] = true;
+					$column['notNull'] = true;
 				}
-				if($extra == 'auto_increment') $column["autoInc"] = true;
+				if($extra == 'auto_increment') $column['autoInc'] = true;
 
 
 				// Type in Metatype umsetzen
 
-				if(stristr($type, "int(")) $metaType = 'int32';
-				if(stristr($type, "bigint")) $metaType = 'int64';
-				if(stristr($type, "char")) {
+				if(stristr($type, 'int(')) $metaType = 'int32';
+				if(stristr($type, 'bigint')) $metaType = 'int64';
+				if(stristr($type, 'char')) {
 					$metaType = 'char';
 					$tmp_typeValue = explode('(', $type);
-					$column["typeValue"] = substr($tmp_typeValue[1], 0, -1);
+					$column['typeValue'] = substr($tmp_typeValue[1], 0, -1);
 				}
-				if(stristr($type, "varchar")) {
+				if(stristr($type, 'varchar')) {
 					$metaType = 'varchar';
 					$tmp_typeValue = explode('(', $type);
-					$column["typeValue"] = substr($tmp_typeValue[1], 0, -1);
+					$column['typeValue'] = substr($tmp_typeValue[1], 0, -1);
 				}
-				if(stristr($type, "text")) $metaType = 'text';
-				if(stristr($type, "double")) $metaType = 'double';
-				if(stristr($type, "blob")) $metaType = 'blob';
+				if(stristr($type, 'text')) $metaType = 'text';
+				if(stristr($type, 'double')) $metaType = 'double';
+				if(stristr($type, 'blob')) $metaType = 'blob';
 
 
-				$column["type"] = $metaType;
+				$column['type'] = $metaType;
 
 				$columns[] = $column;
 			}
@@ -452,7 +718,7 @@
 
 	}
 
-	function mapType($metaType, $typeValue) {
+	public function mapType($metaType, $typeValue) {
 		global $go_api;
 		$metaType = strtolower($metaType);
 		switch ($metaType) {
@@ -472,7 +738,7 @@
 			return 'char';
 			break;
 		case 'varchar':
-			if($typeValue < 1) die("Datenbank Fehler: F�r diesen Datentyp ist eine L�ngenangabe notwendig.");
+			if($typeValue < 1) die('Database failure: Lenght required for these data types.');
 			return 'varchar('.$typeValue.')';
 			break;
 		case 'text':
@@ -486,4 +752,238 @@
 
 }
 
+/**
+ * database query result class
+ *
+ * @package pxFramework
+ *
+ */
+class db_result {
+
+	/**
+	 *
+	 *
+	 * @access private
+	 */
+	private $_iResId = null;
+	private $_iConnection = null;
+
+
+
+	/**
+	 *
+	 *
+	 * @access private
+	 */
+	public function db_result($iResId, $iConnection) {
+		$this->_iResId = $iResId;
+		$this->_iConnection = $iConnection;
+	}
+
+
+
+	/**
+	 * get count of result rows
+	 *
+	 * Returns the amount of rows in the result set
+	 *
+	 * @access public
+	 * @return int amount of rows
+	 */
+	public function rows() {
+		if(!is_object($this->_iResId)) return 0;
+		$iRows = mysqli_num_rows($this->_iResId);
+		if(!$iRows) $iRows = 0;
+		return $iRows;
+	}
+
+
+
+	/**
+	 * Get number of affected rows
+	 *
+	 * Returns the amount of rows affected by the previous query
+	 *
+	 * @access public
+	 * @return int amount of affected rows
+	 */
+	public function affected() {
+		if(!is_object($this->_iConnection)) return 0;
+		$iRows = mysqli_affected_rows($this->_iConnection);
+		if(!$iRows) $iRows = 0;
+		return $iRows;
+	}
+
+
+
+	/**
+	 * Frees the result set
+	 *
+	 * @access public
+	 */
+	public function free() {
+		if(!is_object($this->_iResId)) return;
+
+		mysqli_free_result($this->_iResId);
+		return;
+	}
+
+
+
+	/**
+	 * Get a result row (associative)
+	 *
+	 * Returns the next row in the result set. To be used in a while loop like while($currow = $result->get()) { do something ... }
+	 *
+	 * @access public
+	 * @return array result row
+	 */
+	public function get() {
+		$aItem = null;
+
+		if(is_object($this->_iResId)) {
+			$aItem = mysqli_fetch_assoc($this->_iResId);
+			if(!$aItem) $aItem = null;
+		}
+		return $aItem;
+	}
+
+
+
+	/**
+	 * Get a result row (array with numeric index)
+	 *
+	 * @access public
+	 * @return array result row
+	 */
+	public function getAsRow() {
+		$aItem = null;
+
+		if(is_object($this->_iResId)) {
+			$aItem = mysqli_fetch_row($this->_iResId);
+			if(!$aItem) $aItem = null;
+		}
+		return $aItem;
+	}
+
+}
+
+/**
+ * database query result class
+ *
+ * emulates a db result set out of an array so you can use array results and db results the same way
+ *
+ * @package pxFramework
+ * @see db_result
+ *
+ *
+ */
+class fakedb_result {
+
+	/**
+	 *
+	 *
+	 * @access private
+	 */
+	private $aResultData = array();
+
+	/**
+	 *
+	 *
+	 * @access private
+	 */
+	private $aLimitedData = array();
+
+
+
+	/**
+	 *
+	 *
+	 * @access private
+	 */
+	public function fakedb_result($aData) {
+		$this->aResultData = $aData;
+		$this->aLimitedData = $aData;
+		reset($this->aLimitedData);
+	}
+
+
+
+	/**
+	 * get count of result rows
+	 *
+	 * Returns the amount of rows in the result set
+	 *
+	 * @access public
+	 * @return int amount of rows
+	 */
+	// Gibt die Anzahl Zeilen zurück
+	public function rows() {
+		return count($this->aLimitedData);
+	}
+
+
+
+	/**
+	 * Frees the result set
+	 *
+	 * @access public
+	 */
+	// Gibt ein Ergebnisset frei
+	public function free() {
+		$this->aResultData = array();
+		$this->aLimitedData = array();
+		return;
+	}
+
+
+
+	/**
+	 * Get a result row (associative)
+	 *
+	 * Returns the next row in the result set. To be used in a while loop like while($currow = $result->get()) { do something ... }
+	 *
+	 * @access public
+	 * @return array result row
+	 */
+	// Gibt eine Ergebniszeile zurück
+	public function get() {
+		$aItem = null;
+
+		if(!is_array($this->aLimitedData)) return $aItem;
+
+		if(list($vKey, $aItem) = each($this->aLimitedData)) {
+			if(!$aItem) $aItem = null;
+		}
+		return $aItem;
+	}
+
+
+
+	/**
+	 * Get a result row (array with numeric index)
+	 *
+	 * @access public
+	 * @return array result row
+	 */
+	public function getAsRow() {
+		return $this->get();
+	}
+
+
+
+	/**
+	 * Limit the result (like a LIMIT x,y in a SQL query)
+	 *
+	 * @access public
+	 * @param int     $iStart offset to start read
+	 * @param int     iLength amount of datasets to read
+	 */
+	public function limit_result($iStart, $iLength) {
+		$this->aLimitedData = array_slice($this->aResultData, $iStart, $iLength, true);
+	}
+
+}
+
+
 ?>
diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index d2d11bf..1813a19 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -124,7 +124,7 @@
 	global $inst, $conf;
 
 	//* Update $conf array with values from the server.ini that shall be preserved
-	$tmp = $inst->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+	$tmp = $inst->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
 	$ini_array = ini_to_array(stripslashes($tmp['config']));
 	$current_db_version = (isset($tmp['dbversion']))?intval($tmp['dbversion']):0;
 
@@ -218,8 +218,8 @@
 		}
 
 		//* update the database version in server table
-		$inst->db->query("UPDATE ".$conf["mysql"]["database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
-		if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ".$conf["mysql"]["master_database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
+		$inst->db->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $current_db_version, $conf['server_id']);
+		if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["master_database"] . ".server", $current_db_version, $conf['server_id']);
 
 
 		//* If ISPConfig Version < 3.0.3, we will do a full db update
@@ -228,7 +228,7 @@
 		swriteln($inst->lng('Starting full database update.'));
 
 		//** Delete the old database
-		if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {
+		if( !$inst->db->query('DROP DATABASE IF EXISTS ??', $conf['mysql']['database']) ) {
 			$inst->error('Unable to drop MySQL database: '.$conf['mysql']['database'].'.');
 		}
 
@@ -239,7 +239,7 @@
 		$db_tables = $inst->db->getTables();
 
 		foreach($db_tables as $table) {
-			$inst->db->query("TRUNCATE $table");
+			$inst->db->query("TRUNCATE ??", $table);
 		}
 
 		//** load old data back into database
@@ -262,15 +262,15 @@
 		}
 
 		//* update the database version in server table
-		$inst->db->query("UPDATE ".$conf["mysql"]["database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
-		if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ".$conf["mysql"]["master_database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
+		$inst->db->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $current_db_version, $conf['server_id']);
+		if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["master_database"] . ".server", $current_db_version, $conf['server_id']);
 
 		if ($conf['powerdns']['installed']) {
 
 			swriteln($inst->lng('Starting full PowerDNS database update.'));
 
 			//** Delete the old PowerDNS database
-			if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['powerdns']['database']) ) {
+			if( !$inst->db->query('DROP DATABASE IF EXISTS ??', $conf['powerdns']['database']) ) {
 				$inst->error('Unable to drop MySQL database: '.$conf['powerdns']['database'].'.');
 			}
 
@@ -288,7 +288,7 @@
 
 
 	//** Update server ini
-	$tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
+	$tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 	$old_ini_array = ini_to_array(stripslashes($tmp_server_rec['config']));
 	unset($tmp_server_rec);
 	$tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
@@ -344,12 +344,12 @@
 	}
 
 	$new_ini = array_to_ini($tpl_ini_array);
-	$sql = "UPDATE ".$conf["mysql"]["database"].".server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id'];
-	$inst->db->query($sql);
+	$sql = "UPDATE ?? SET config = ? WHERE server_id = ?";
+	$inst->db->query($sql, $conf["mysql"]["database"] . ".server", $new_ini, $conf['server_id']);
 
 	if($inst->db->dbHost != $inst->dbmaster->dbHost) {
-		$sql = "UPDATE ".$conf["mysql"]["master_database"].".server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id'];
-		$inst->dbmaster->query($sql);
+		$sql = "UPDATE ?? SET config = ? WHERE server_id = ?";
+		$inst->dbmaster->query($sql, $conf["mysql"]["master_database"].".server", $new_ini, $conf['server_id']);
 	}
 	unset($old_ini_array);
 	unset($tpl_ini_array);
@@ -357,7 +357,7 @@
 
 
 	//** Update system ini
-	$tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ".$conf["mysql"]["database"].".sys_ini WHERE sysini_id = 1");
+	$tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ?? WHERE sysini_id = 1", $conf["mysql"]["database"] . ".sys_ini");
 	$old_ini_array = ini_to_array(stripslashes($tmp_server_rec['config']));
 	unset($tmp_server_rec);
 	$tpl_ini_array = ini_to_array(rf('tpl/system.ini.master'));
@@ -372,11 +372,11 @@
 	}
 
 	$new_ini = array_to_ini($tpl_ini_array);
-	$tmp = $inst->db->queryOneRecord('SELECT count(sysini_id) as number FROM '.$conf["mysql"]["database"].'.sys_ini WHERE 1');
+	$tmp = $inst->db->queryOneRecord('SELECT count(sysini_id) as number FROM ?? WHERE 1', $conf["mysql"]["database"] . '.sys_ini');
 	if($tmp['number'] == 0) {
-		$inst->db->query("INSERT INTO ".$conf["mysql"]["database"].".sys_ini (sysini_id, config) VALUES (1,'".mysql_real_escape_string($new_ini)."')");
+		$inst->db->query("INSERT INTO ?? (sysini_id, config) VALUES (1,?)", $conf["mysql"]["database"] . ".sys_ini", $new_ini);
 	} else {
-		$inst->db->query("UPDATE ".$conf["mysql"]["database"].".sys_ini SET config = '".mysql_real_escape_string($new_ini)."' WHERE sysini_id = 1");
+		$inst->db->query("UPDATE ?? SET config = ? WHERE sysini_id = 1", $conf["mysql"]["database"] . ".sys_ini", $new_ini);
 	}
 	unset($old_ini_array);
 	unset($tpl_ini_array);
@@ -385,4 +385,24 @@
 
 
 
+function setDefaultServers(){
+	global $inst, $conf;
+	
+	// clients
+	$clients = $inst->db->queryAllRecords("SELECT * FROM ".$conf["mysql"]["database"].".client");
+	if(is_array($clients) && !empty($clients)){
+		foreach($clients as $client){
+			// mailserver
+			if(trim($client['mail_servers']) == '') $inst->db->query("UPDATE ?? SET mail_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_mailserver']), $client['client_id']);
+			// webserver
+			if(trim($client['web_servers']) == '') $inst->db->query("UPDATE ?? SET web_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_webserver']), $client['client_id']);
+			// dns server
+			if(trim($client['dns_servers']) == '') $inst->db->query("UPDATE ?? SET dns_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_dnsserver']), $client['client_id']);
+			// db server
+			if(trim($client['db_servers']) == '') $inst->db->query("UPDATE ?? SET db_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_dbserver']), $client['client_id']);
+		}
+	}
+	
+}
+
 ?>
diff --git a/install/sql/incremental/upd_0079.sql b/install/sql/incremental/upd_0079.sql
new file mode 100644
index 0000000..5dd0152
--- /dev/null
+++ b/install/sql/incremental/upd_0079.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `directive_snippets` ADD `customer_viewable` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `snippet`;
+ALTER TABLE `web_domain` ADD `directive_snippets_id` int(11) unsigned NOT NULL default '0';
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0080.sql b/install/sql/incremental/upd_0080.sql
new file mode 100644
index 0000000..fcdcb62
--- /dev/null
+++ b/install/sql/incremental/upd_0080.sql
@@ -0,0 +1 @@
+ALTER TABLE `web_domain` ADD COLUMN `enable_spdy` ENUM('y','n') NULL DEFAULT 'n' AFTER `proxy_directives`;
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e60ae02..1f8b21d 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -2,9 +2,148 @@
 	CHANGE `uid` `uid` int(11) NOT NULL DEFAULT '5000',
 	CHANGE `gid` `gid` int(11) NOT NULL DEFAULT '5000';
 
+ALTER TABLE `mail_user`
+	ADD COLUMN `sender_cc` varchar(255) NOT NULL DEFAULT '' AFTER `cc`;
+
 ALTER TABLE `client_template` ADD `default_mailserver` INT(11) NOT NULL DEFAULT 1;
 ALTER TABLE `client_template` ADD `default_webserver` INT(11) NOT NULL DEFAULT 1;
 ALTER TABLE `client_template` ADD `default_dnsserver` INT(11) NOT NULL DEFAULT 1;
 ALTER TABLE `client_template` ADD `default_slave_dnsserver` INT(11) NOT NULL DEFAULT 1;
 ALTER TABLE `client_template` ADD `default_dbserver` INT(11) NOT NULL DEFAULT 1;
 ALTER TABLE  `client` ADD  `contact_firstname` VARCHAR( 64 ) NOT NULL DEFAULT '' AFTER  `gender`;
+
+UPDATE `dns_template` SET `fields` = 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM' WHERE `dns_template`.`template_id` =1;
+UPDATE `dns_template` SET `template` = '[ZONE]
+origin={DOMAIN}.
+ns={NS1}.
+mbox={EMAIL}.
+refresh=7200
+retry=540
+expire=604800
+minimum=3600
+ttl=3600
+
+[DNS_RECORDS]
+A|{DOMAIN}.|{IP}|0|3600
+A|www|{IP}|0|3600
+A|mail|{IP}|0|3600
+NS|{DOMAIN}.|{NS1}.|0|3600
+NS|{DOMAIN}.|{NS2}.|0|3600
+MX|{DOMAIN}.|mail.{DOMAIN}.|10|3600
+TXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600' WHERE `dns_template`.`template_id` = 1;
+
+ALTER TABLE `mail_backup` CHANGE `filesize` `filesize` VARCHAR(20) NOT NULL DEFAULT '';
+ALTER TABLE `web_backup` CHANGE `filesize` `filesize` VARCHAR(20) NOT NULL DEFAULT '';
+
+ALTER TABLE `sys_datalog` ADD INDEX `dbtable` (`dbtable` (25), `dbidx` (25)), ADD INDEX (`action`);
+ALTER TABLE `mail_user` ADD `greylisting` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `postfix`;
+ALTER TABLE `mail_user` ADD `maildir_format` varchar(255) NOT NULL default 'maildir' AFTER `maildir`;
+ALTER TABLE `mail_forwarding` ADD `greylisting` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `active`;
+
+ALTER TABLE `openvz_ip` CHANGE `ip_address` `ip_address` VARCHAR(39) DEFAULT NULL;
+
+-- XMPP Support
+
+ALTER TABLE `server` ADD COLUMN `xmpp_server` tinyint(1) NOT NULL default '0' AFTER `firewall_server`;
+
+ALTER TABLE `client`
+  ADD COLUMN `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
+  ADD COLUMN `xmpp_servers` blob,
+  ADD COLUMN `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
+  ADD COLUMN `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
+  ADD COLUMN `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  ADD COLUMN `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  ADD COLUMN `limit_xmpp_auth_options` varchar(255) NOT NULL DEFAULT 'plain,hashed,isp',
+  ADD COLUMN `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  ADD COLUMN `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  ADD COLUMN `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  ADD COLUMN `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  ADD COLUMN `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n';
+
+
+CREATE TABLE `xmpp_domain` (
+  `domain_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 default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL default '',
+
+  `management_method` ENUM( 'normal', 'maildomain' ) NOT NULL default 'normal',
+  `public_registration` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `registration_url` varchar(255) NOT NULL DEFAULT '',
+  `registration_message` varchar(255) NOT NULL DEFAULT '',
+  `domain_admins` text,
+
+  `use_pubsub` enum('n','y') NOT NULL DEFAULT 'n',
+  `use_proxy` enum('n','y') NOT NULL DEFAULT 'n',
+  `use_anon_host` enum('n','y') NOT NULL DEFAULT 'n',
+
+  `use_vjud` enum('n','y') NOT NULL DEFAULT 'n',
+  `vjud_opt_mode` enum('in', 'out') NOT NULL DEFAULT 'in',
+
+  `use_muc_host` enum('n','y') NOT NULL DEFAULT 'n',
+  `muc_name` varchar(30) NOT NULL DEFAULT ''
+  `muc_restrict_room_creation` enum('n', 'y', 'm') NOT NULL DEFAULT 'm',
+  `muc_admins` text,
+  `use_pastebin` enum('n','y') NOT NULL DEFAULT 'n',
+  `pastebin_expire_after` int(3) NOT NULL DEFAULT 48,
+  `pastebin_trigger` varchar(10) NOT NULL DEFAULT '!paste',
+  `use_http_archive` enum('n','y') NOT NULL DEFAULT 'n',
+  `http_archive_show_join` enum('n', 'y') NOT NULL DEFAULT 'n',
+  `http_archive_show_status` enum('n', 'y') NOT NULL DEFAULT 'n',
+  `use_status_host` enum('n','y') NOT NULL DEFAULT 'n',
+
+  `ssl_state` varchar(255) NULL,
+  `ssl_locality` varchar(255) NULL,
+  `ssl_organisation` varchar(255) NULL,
+  `ssl_organisation_unit` varchar(255) NULL,
+  `ssl_country` varchar(255) NULL,
+  `ssl_email` varchar(255) NULL,
+  `ssl_request` mediumtext NULL,
+  `ssl_cert` mediumtext NULL,
+  `ssl_bundle` mediumtext NULL,
+  `ssl_key` mediumtext NULL,
+  `ssl_action` varchar(16) NULL,
+
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`domain_id`),
+  KEY `server_id` (`server_id`,`domain`),
+  KEY `domain_active` (`domain`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+--
+-- Table structure for table  `xmpp_user`
+--
+
+CREATE TABLE `xmpp_user` (
+  `xmppuser_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 default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `jid` varchar(255) NOT NULL default '',
+  `password` varchar(255) NOT NULL default '',
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`xmppuser_id`),
+  KEY `server_id` (`server_id`,`jid`),
+  KEY `jid_active` (`jid`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+UPDATE `dbispconfig`.`sys_ini` SET `default_logo` = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABBCAYAAACU5+uOAAAItUlEQVR42u1dCWwVVRStUJZCK6HsFNAgWpaCJkKICZKApKUFhURQpEnZF4EEUJZYEEpBIamgkQpUQBZRW7YCBqQsggsQEAgKLbIGCYsSCNqyQ8D76h18Hd/MvJk/n/bXc5KT+TNz79vPzNv+/2FhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAe++s0akTsRZxMnE6cGkKcxkwhPofaBPwWRzxxB/EO8UGI8xhxEGoV8EscY8qBKFRcgdoFAhXHC+VUHAbHo5aBQASyrZwL5DoxEjUNeBXI9XIuEMEE1DTgVSA3FA3qIDEtBLnTQiBDUNOAV4EUKhpURojmZQQEAjwKgSwK0bykWQgEU74ABAKBABAIBOIJffoNrkRsS0whDiMO5uNw4gBiSxvfGOJrbDtMOgr2JNa18HmZmETsopnGp4h9xdF0TcQRb8NEPkawTzv2qaWIoybnZYRUBoJD+difGAuBlCy0qsRM4mfERcTFfGygsBUF/xFxE/EQ8RixwIbi/j7il8R3iE8qwuxAXMJxuuFiTvNMYleb/E0gXiI+cOBaISTJrzLxcw2/+8Q5pjjfNNkM0RDILLadpbimw+bsc4DPkxRpuqkZ1orisoBAiguuhkUhPSvZRBA3u6gsK94g9jDFP9aHcAV3EKNNYX8i3RcNJ4M4nTiROJCYykIzbGZKvouk68vYbyS/cUbz+RrJZpzkO5Sv3eajaJhRDvUwg21nKK4VcF5WKPgFH6PZZw/7dJXC6S6lczunfbIQLpeDkZ+lJcoCAikuvChioaLBtfD4JHPiXSFKKexBPoa9Wwr3ael6skMZDGO7K3z+uOSb5OA7mu2KiOGmPH3ADVh8/sohnDS2S1NcG+uiO/kd+8RL146YRWzj359tb0Eg+gIpsHkjFNrQqiF3DZJABDtyuCP5/FuNRlHN8Ofz9nx+XLNR3jR1c4w8TSFGSmnr4FEgU7wKhI51jAeTpv+/ZQGBOAuEu1d/Ku6LV35t9rdigkUjHuMgkHPEecQsxdjjUx4zHbMI+10OdzqfZ2o0iiqSfzgPfMXnzZqN6iTbJ5jytMTU0E97FEhaAAJ5kc/PuJjQOCoIgegJpKbUl5b5vGaBT+A+vOgn5/JYIdFBIOs1wo1kIZl93+P70/h8oUZYFXkmKInPU9h3m2YeT8lvRilPyyWbi3xt4iMWSDc+P4lp3uAIRDxdryjui6dmuujXcr91IDcMmaJv31WISfTrLeJXCUT3yb1a4Ztmalyu61MaZG/XtD9tapRGnpZKNp2lNNZ3KZARAQgk3untBYEEPgbJ92FsIAax34v1AQ2B5Go2BlW60n0QyCC/BWISdJ5LgewWU8k86DdTzMyNh0BKVyAzfB5I93YQyBGeTlW9lQbwIle2Rdgzy7BAxJT6Hb6X6EIgTrznRSCiHli02cwcPor1pbkQiL5AKvOA+ZZPAtkfxFms3j4IZHAwBGJaRPxdjH00BSImJRqKOlEwjtjUo0Dm2pWla4HMzsyqQIxSMKI8C8RkL9YXuhDf5gqcw4NweaZJiGkh8UeLwi+Utkb4KZCrYszkVSDiQRDMN4hkf5DvZ2gKZJyLPJgFkmAjEDEF3EYSWzPeklO8Q8CLQGKJhQquK+eDdLFNZBJxFLEf8XUXFTbcYv2kRhAEIq+vGNO88zTTKVaRzxPrSSvPW11O8yZqCiROSnMsX0sP0ixWops1Hfbx/AaJIz5QcFc5n+ZVNcbxmoWtEsBNB4EU8Tgk32Gv1wneEybeWG1N8RoNbplmOo2neiyxE3/eoun7G9t31hGIqXuzl8/HB0kgxhvhD03/KoEIpIWFQPLK+UJhkWpgKLZP8IKhajNhJg8A7yt8/5K6QoFM8z5mc68Ph3VWM6wTbN+a+AR/vqThV13KYyMXAgmXps9FnK8GSSA17KaXFf7R3gUyd8H/TiBss9fngfQehzfMpkDLgxcS73J4k1y85WrxtTtOjZPuVZA2O55RhLfUId5XpI2UHwZDIHxtp7HtRrVL25SfhWy7z7VAMuYvipszd0FJcfxzHspdrMctGnGcZNPTZ4F0VszqyPSlPHm8JG9f2SDtgF3Nq/rnJZssyXeUdP0CN64c9l/FDfGyZNNNkaeVGmnMM+Vdtd19los8/2e7Ow/E70lxiG7pRmkn8AaeULlcoo4sBDLfKvL0nLUxablfX0hfmfuQ01avI65fUQYEkupRIJHcAMwbDWNNdmLgupV4zeMO3stcIZ1M4aYo4vZt0oO7Locd0ndGTEQofN+QxiZ22+y7W+RpgUb66vOU7232SZXupZqvaYT3Dfu8ZLrejtc47mvkJ9FoVEWKBmW7dyc7ZXD1Nb2TH3JVn5Tqa3r1repzY6/gwWeqhUCGO/XjWSTmjYYVLOzFoP0Z/qJTks033brxrtjmxCbGtK4ivEqKuH2fNuc0tDatIYgna4yGbz2eeTL8WhJbic2aDnmqqpm2KlLeK5vWn0pc0wirGvtUtBkzNdPKDzWe24oGdZX4CzGfWCD4U93GBQdqNSw4Uiny8K9h4buOhlU2scq+Q1G1i233k63hFwBPEfcS04l1FGJoynbH+fgz8ZKFQJLDAMDjk/psCPzw20XxE6mmdLd24d8KNQ14FciUEPl1xHvEhlK6W2j65aOWgUAEUpV4NEREstyDQNqjloFARVKL/xukrAvkGjGC09zGwfYKsQdqF/BTKMnEJcTtxC3EPAU3iic5cRkfjc/ZFvZuuZm4gXjOouG35LQ2Yfutkq/4pfpN/E9TDVCjQGkJqQExho+CjYlRPseRiQE3EIriaMZTw4K3mOJv23J8jme23RsEAMqqQJrb9PnnEbPEVpUAuJD4Mf/PoCqeONQCUJYFElGKf7ojpnqjUQtAWRdJaf1t2w8ofSAUBNKulATSEaUPhIpIRj9icbyFUgdCTSRTeR0i2HwfpQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBnG392D9QU+JXhxAAAAAElFTkSuQmCC' WHERE `sys_ini`.`sysini_id` = 1;
+
+ALTER TABLE `directive_snippets` ADD `required_php_snippets` VARCHAR(255) NOT NULL DEFAULT '' AFTER `customer_viewable`;
+ALTER TABLE `dns_rr` CHANGE `ttl` `ttl` INT(11) UNSIGNED NOT NULL DEFAULT '3600';
+ALTER TABLE `dns_soa` CHANGE `minimum` `minimum` INT(11) UNSIGNED NOT NULL DEFAULT '3600', CHANGE `ttl` `ttl` INT(11) UNSIGNED NOT NULL DEFAULT '3600';
+ALTER TABLE `client` CHANGE `web_php_options` `web_php_options` VARCHAR(255) NOT NULL DEFAULT 'no,fast-cgi,cgi,mod,suphp,php-fpm,hhvm';
+
+ALTER TABLE openvz_template ADD COLUMN `features` varchar(255) DEFAULT NULL AFTER `capability`;
+ALTER TABLE openvz_vm ADD COLUMN `features` TEXT DEFAULT NULL AFTER `capability`;
+ALTER TABLE openvz_template ADD COLUMN `iptables` varchar(255) DEFAULT NULL AFTER `features`;
+ALTER TABLE openvz_vm ADD COLUMN `iptables` TEXT DEFAULT NULL AFTER `features`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 3f65bfe..9d90b5e 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -184,12 +184,24 @@
   `limit_spamfilter_wblist` int(11) NOT NULL DEFAULT '0',
   `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0',
   `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0',
+  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
+  `xmpp_servers` blob,
+  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
+  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
+  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_anon` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_auth_options` varchar(255) NOT NULL DEFAULT 'plain,hashed,isp',
+  `limit_xmpp_vjud` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_proxy` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
   `default_webserver` int(11) unsigned NOT NULL DEFAULT '1',
   `web_servers` blob,
   `limit_web_ip` text,
   `limit_web_domain` int(11) NOT NULL DEFAULT '-1',
   `limit_web_quota` int(11) NOT NULL DEFAULT '-1',
-  `web_php_options` varchar(255) NOT NULL DEFAULT 'no,fast-cgi,cgi,mod,suphp,php-fpm',
+  `web_php_options` varchar(255) NOT NULL DEFAULT 'no,fast-cgi,cgi,mod,suphp,php-fpm,hhvm',
   `limit_cgi` enum('n','y') NOT NULL DEFAULT 'n',
   `limit_ssi` enum('n','y') NOT NULL DEFAULT 'n',
   `limit_perl` enum('n','y') NOT NULL DEFAULT 'n',
@@ -429,6 +441,8 @@
   `name` varchar(255) DEFAULT NULL,
   `type` varchar(255) DEFAULT NULL,
   `snippet` mediumtext,
+  `customer_viewable` ENUM('n','y') NOT NULL DEFAULT 'n',
+  `required_php_snippets` varchar(255) NOT NULL DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`directive_snippets_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -452,7 +466,7 @@
   `type` enum('A','AAAA','ALIAS','CNAME','HINFO','MX','NAPTR','NS','PTR','RP','SRV','TXT') default NULL,
   `data` TEXT NOT NULL DEFAULT '',
   `aux` int(11) unsigned NOT NULL default '0',
-  `ttl` int(11) unsigned NOT NULL default '86400',
+  `ttl` int(11) unsigned NOT NULL default '3600',
   `active` enum('N','Y') NOT NULL default 'Y',
   `stamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
   `serial` int(10) unsigned default NULL,
@@ -504,8 +518,8 @@
   `refresh` int(11) unsigned NOT NULL default '28800',
   `retry` int(11) unsigned NOT NULL default '7200',
   `expire` int(11) unsigned NOT NULL default '604800',
-  `minimum` int(11) unsigned NOT NULL default '86400',
-  `ttl` int(11) unsigned NOT NULL default '86400',
+  `minimum` int(11) unsigned NOT NULL default '3600',
+  `ttl` int(11) unsigned NOT NULL default '3600',
   `active` enum('N','Y') NOT NULL DEFAULT 'N',
   `xfer` varchar(255) NOT NULL DEFAULT '',
   `also_notify` varchar(255) default NULL,
@@ -702,7 +716,7 @@
   `backup_mode` varchar(64) NOT NULL DEFAULT  '',
   `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
   `filename` varchar(255) NOT NULL DEFAULT '',
-  `filesize` VARCHAR(10) NOT NULL DEFAULT '',
+  `filesize` VARCHAR(20) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -901,6 +915,7 @@
   `uid` int(11) NOT NULL default '5000',
   `gid` int(11) NOT NULL default '5000',
   `maildir` varchar(255) NOT NULL default '',
+  `maildir_format` varchar(255) NOT NULL default 'maildir',
   `quota` bigint(20) NOT NULL default '-1',
   `cc` varchar(255) NOT NULL default '',
   `sender_cc` varchar(255) NOT NULL default '',
@@ -984,7 +999,7 @@
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   `server_id` int(11) NOT NULL DEFAULT '0',
-  `ip_address` varchar(15) DEFAULT NULL,
+  `ip_address` varchar(39) DEFAULT NULL,
   `vm_id` int(11) NOT NULL DEFAULT '0',
   `reserved` varchar(255) NOT NULL DEFAULT 'n',
   PRIMARY KEY (`ip_address_id`)
@@ -1073,6 +1088,8 @@
   `nameserver` varchar(255) DEFAULT NULL,
   `create_dns` varchar(1) NOT NULL DEFAULT 'n',
   `capability` varchar(255) DEFAULT NULL,
+  `features` varchar(255) DEFAULT NULL,
+  `iptables` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`template_id`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
 
@@ -1080,7 +1097,7 @@
 -- Dumping data for table `openvz_template`
 --
 
-INSERT INTO `openvz_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `diskspace`, `traffic`, `bandwidth`, `ram`, `ram_burst`, `cpu_units`, `cpu_num`, `cpu_limit`, `io_priority`, `active`, `description`, `numproc`, `numtcpsock`, `numothersock`, `vmguarpages`, `kmemsize`, `tcpsndbuf`, `tcprcvbuf`, `othersockbuf`, `dgramrcvbuf`, `oomguarpages`, `privvmpages`, `lockedpages`, `shmpages`, `physpages`, `numfile`, `avnumproc`, `numflock`, `numpty`, `numsiginfo`, `dcachesize`, `numiptent`, `swappages`, `hostname`, `nameserver`, `create_dns`, `capability`) VALUES(1, 1, 1, 'riud', 'riud', '', 'small', 10, -1, -1, 256, 512, 1000, 4, 400, 4, 'y', '', '999999:999999', '7999992:7999992', '7999992:7999992', '65536:65536', '2147483646:2147483646', '214748160:396774400', '214748160:396774400', '214748160:396774400', '214748160:396774400', '65536:65536', '131072:131072', '999999:999999', '65536:65536', '0:2147483647', '23999976:23999976', '180:180', '999999:999999', '500000:500000', '999999:999999', '2147483646:2147483646', '999999:999999', '256000:256000', 'v{VEID}.test.tld', '8.8.8.8 8.8.4.4', 'n', '');
+INSERT INTO `openvz_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `diskspace`, `traffic`, `bandwidth`, `ram`, `ram_burst`, `cpu_units`, `cpu_num`, `cpu_limit`, `io_priority`, `active`, `description`, `numproc`, `numtcpsock`, `numothersock`, `vmguarpages`, `kmemsize`, `tcpsndbuf`, `tcprcvbuf`, `othersockbuf`, `dgramrcvbuf`, `oomguarpages`, `privvmpages`, `lockedpages`, `shmpages`, `physpages`, `numfile`, `avnumproc`, `numflock`, `numpty`, `numsiginfo`, `dcachesize`, `numiptent`, `swappages`, `hostname`, `nameserver`, `create_dns`, `capability`, `features`, `iptables`) VALUES(1, 1, 1, 'riud', 'riud', '', 'small', 10, -1, -1, 256, 512, 1000, 4, 400, 4, 'y', '', '999999:999999', '7999992:7999992', '7999992:7999992', '65536:65536', '2147483646:2147483646', '214748160:396774400', '214748160:396774400', '214748160:396774400', '214748160:396774400', '65536:65536', '131072:131072', '999999:999999', '65536:65536', '0:2147483647', '23999976:23999976', '180:180', '999999:999999', '500000:500000', '999999:999999', '2147483646:2147483646', '999999:999999', '256000:256000', 'v{VEID}.test.tld', '8.8.8.8 8.8.4.4', 'n', '', '', '');
 
 -- --------------------------------------------------------
 
@@ -1136,6 +1153,8 @@
   `nameserver` varchar(255) NOT NULL DEFAULT '8.8.8.8 8.8.4.4',
   `create_dns` varchar(1) NOT NULL DEFAULT 'n',
   `capability` text,
+  `features` text,
+  `iptabless` text,
   `config` mediumtext,
   PRIMARY KEY (`vm_id`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
@@ -1200,6 +1219,7 @@
   `vserver_server` tinyint(1) NOT NULL default '0',
   `proxy_server` tinyint(1) NOT NULL default '0',
   `firewall_server` tinyint(1) NOT NULL default '0',
+  `xmpp_server` tinyint(1) NOT NULL default '0',
   `config` text,
   `updated` bigint(20) unsigned NOT NULL default '0',
   `mirror_server_id` int(11) unsigned NOT NULL default '0',
@@ -1607,6 +1627,8 @@
 CREATE TABLE `sys_ini` (
   `sysini_id` int(11) unsigned NOT NULL auto_increment,
   `config` longtext,
+  `default_logo` text NOT NULL,
+  `custom_logo` text NOT NULL,
   PRIMARY KEY  (`sysini_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -1745,7 +1767,7 @@
   `backup_mode` varchar(64) NOT NULL DEFAULT  '',
   `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
   `filename` varchar(255) NOT NULL DEFAULT '',
-  `filesize` VARCHAR(10) NOT NULL DEFAULT '',
+  `filesize` VARCHAR(20) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -1876,10 +1898,12 @@
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
   `fastcgi_php_version` varchar(255) DEFAULT NULL,
   `proxy_directives` mediumtext,
+  `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
   `added_date` date NOT NULL DEFAULT '0000-00-00',
   `added_by` varchar(255) DEFAULT NULL,
+  `directive_snippets_id` int(11) unsigned NOT NULL default '0',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -1946,6 +1970,89 @@
   `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
   PRIMARY KEY  (`hostname`,`traffic_date`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `xmpp_domain`
+--
+
+CREATE TABLE `xmpp_domain` (
+  `domain_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 default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `domain` varchar(255) NOT NULL default '',
+
+  `management_method` ENUM( 'normal', 'maildomain' ) NOT NULL default 'normal',
+  `public_registration` ENUM( 'n', 'y' ) NOT NULL default 'n',
+  `registration_url` varchar(255) NOT NULL DEFAULT '',
+  `registration_message` varchar(255) NOT NULL DEFAULT '',
+  `domain_admins` text,
+
+  `use_pubsub` enum('n','y') NOT NULL DEFAULT 'n',
+  `use_proxy` enum('n','y') NOT NULL DEFAULT 'n',
+  `use_anon_host` enum('n','y') NOT NULL DEFAULT 'n',
+
+  `use_vjud` enum('n','y') NOT NULL DEFAULT 'n',
+  `vjud_opt_mode` enum('in', 'out') NOT NULL DEFAULT 'in',
+
+  `use_muc_host` enum('n','y') NOT NULL DEFAULT 'n',
+  `muc_name` varchar(30) NOT NULL DEFAULT '',
+  `muc_restrict_room_creation` enum('n', 'y', 'm') NOT NULL DEFAULT 'm',
+  `muc_admins` text,
+  `use_pastebin` enum('n','y') NOT NULL DEFAULT 'n',
+  `pastebin_expire_after` int(3) NOT NULL DEFAULT 48,
+  `pastebin_trigger` varchar(10) NOT NULL DEFAULT '!paste',
+  `use_http_archive` enum('n','y') NOT NULL DEFAULT 'n',
+  `http_archive_show_join` enum('n', 'y') NOT NULL DEFAULT 'n',
+  `http_archive_show_status` enum('n', 'y') NOT NULL DEFAULT 'n',
+  `use_status_host` enum('n','y') NOT NULL DEFAULT 'n',
+
+  `ssl_state` varchar(255) NULL,
+  `ssl_locality` varchar(255) NULL,
+  `ssl_organisation` varchar(255) NULL,
+  `ssl_organisation_unit` varchar(255) NULL,
+  `ssl_country` varchar(255) NULL,
+  `ssl_email` varchar(255) NULL,
+  `ssl_request` mediumtext NULL,
+  `ssl_cert` mediumtext NULL,
+  `ssl_bundle` mediumtext NULL,
+  `ssl_key` mediumtext NULL,
+  `ssl_action` varchar(16) NULL,
+
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`domain_id`),
+  KEY `server_id` (`server_id`,`domain`),
+  KEY `domain_active` (`domain`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table  `xmpp_user`
+--
+
+CREATE TABLE `xmpp_user` (
+  `xmppuser_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 default '',
+  `sys_perm_group` varchar(5) NOT NULL default '',
+  `sys_perm_other` varchar(5) NOT NULL default '',
+  `server_id` int(11) unsigned NOT NULL default '0',
+  `jid` varchar(255) NOT NULL default '',
+  `password` varchar(255) NOT NULL default '',
+  `active` enum('n','y') NOT NULL DEFAULT 'n',
+  PRIMARY KEY  (`xmppuser_id`),
+  KEY `server_id` (`server_id`,`jid`),
+  KEY `jid_active` (`jid`,`active`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
 
 -- --------------------------------------------------------
 -- --------------------------------------------------------
@@ -2215,7 +2322,8 @@
 -- Dumping data for table `dns_template`
 -- 
 
-INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=86400\nttl=3600\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600', 'y');
+INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y');
+
 
 -- --------------------------------------------------------
 
@@ -2269,7 +2377,7 @@
 -- Dumping data for table `sys_ini`
 -- 
 
-INSERT INTO `sys_ini` (`sysini_id`, `config`) VALUES (1, '');
+INSERT INTO `sys_ini` (`sysini_id`, `config`, `default_logo`, `custom_logo`) VALUES (1, '', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABBCAYAAACU5+uOAAAItUlEQVR42u1dCWwVVRStUJZCK6HsFNAgWpaCJkKICZKApKUFhURQpEnZF4EEUJZYEEpBIamgkQpUQBZRW7YCBqQsggsQEAgKLbIGCYsSCNqyQ8D76h18Hd/MvJk/n/bXc5KT+TNz79vPzNv+/2FhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAe++s0akTsRZxMnE6cGkKcxkwhPofaBPwWRzxxB/EO8UGI8xhxEGoV8EscY8qBKFRcgdoFAhXHC+VUHAbHo5aBQASyrZwL5DoxEjUNeBXI9XIuEMEE1DTgVSA3FA3qIDEtBLnTQiBDUNOAV4EUKhpURojmZQQEAjwKgSwK0bykWQgEU74ABAKBABAIBOIJffoNrkRsS0whDiMO5uNw4gBiSxvfGOJrbDtMOgr2JNa18HmZmETsopnGp4h9xdF0TcQRb8NEPkawTzv2qaWIoybnZYRUBoJD+difGAuBlCy0qsRM4mfERcTFfGygsBUF/xFxE/EQ8RixwIbi/j7il8R3iE8qwuxAXMJxuuFiTvNMYleb/E0gXiI+cOBaISTJrzLxcw2/+8Q5pjjfNNkM0RDILLadpbimw+bsc4DPkxRpuqkZ1orisoBAiguuhkUhPSvZRBA3u6gsK94g9jDFP9aHcAV3EKNNYX8i3RcNJ4M4nTiROJCYykIzbGZKvouk68vYbyS/cUbz+RrJZpzkO5Sv3eajaJhRDvUwg21nKK4VcF5WKPgFH6PZZw/7dJXC6S6lczunfbIQLpeDkZ+lJcoCAikuvChioaLBtfD4JHPiXSFKKexBPoa9Wwr3ael6skMZDGO7K3z+uOSb5OA7mu2KiOGmPH3ADVh8/sohnDS2S1NcG+uiO/kd+8RL146YRWzj359tb0Eg+gIpsHkjFNrQqiF3DZJABDtyuCP5/FuNRlHN8Ofz9nx+XLNR3jR1c4w8TSFGSmnr4FEgU7wKhI51jAeTpv+/ZQGBOAuEu1d/Ku6LV35t9rdigkUjHuMgkHPEecQsxdjjUx4zHbMI+10OdzqfZ2o0iiqSfzgPfMXnzZqN6iTbJ5jytMTU0E97FEhaAAJ5kc/PuJjQOCoIgegJpKbUl5b5vGaBT+A+vOgn5/JYIdFBIOs1wo1kIZl93+P70/h8oUZYFXkmKInPU9h3m2YeT8lvRilPyyWbi3xt4iMWSDc+P4lp3uAIRDxdryjui6dmuujXcr91IDcMmaJv31WISfTrLeJXCUT3yb1a4Ztmalyu61MaZG/XtD9tapRGnpZKNp2lNNZ3KZARAQgk3untBYEEPgbJ92FsIAax34v1AQ2B5Go2BlW60n0QyCC/BWISdJ5LgewWU8k86DdTzMyNh0BKVyAzfB5I93YQyBGeTlW9lQbwIle2Rdgzy7BAxJT6Hb6X6EIgTrznRSCiHli02cwcPor1pbkQiL5AKvOA+ZZPAtkfxFms3j4IZHAwBGJaRPxdjH00BSImJRqKOlEwjtjUo0Dm2pWla4HMzsyqQIxSMKI8C8RkL9YXuhDf5gqcw4NweaZJiGkh8UeLwi+Utkb4KZCrYszkVSDiQRDMN4hkf5DvZ2gKZJyLPJgFkmAjEDEF3EYSWzPeklO8Q8CLQGKJhQquK+eDdLFNZBJxFLEf8XUXFTbcYv2kRhAEIq+vGNO88zTTKVaRzxPrSSvPW11O8yZqCiROSnMsX0sP0ixWops1Hfbx/AaJIz5QcFc5n+ZVNcbxmoWtEsBNB4EU8Tgk32Gv1wneEybeWG1N8RoNbplmOo2neiyxE3/eoun7G9t31hGIqXuzl8/HB0kgxhvhD03/KoEIpIWFQPLK+UJhkWpgKLZP8IKhajNhJg8A7yt8/5K6QoFM8z5mc68Ph3VWM6wTbN+a+AR/vqThV13KYyMXAgmXps9FnK8GSSA17KaXFf7R3gUyd8H/TiBss9fngfQehzfMpkDLgxcS73J4k1y85WrxtTtOjZPuVZA2O55RhLfUId5XpI2UHwZDIHxtp7HtRrVL25SfhWy7z7VAMuYvipszd0FJcfxzHspdrMctGnGcZNPTZ4F0VszqyPSlPHm8JG9f2SDtgF3Nq/rnJZssyXeUdP0CN64c9l/FDfGyZNNNkaeVGmnMM+Vdtd19los8/2e7Ow/E70lxiG7pRmkn8AaeULlcoo4sBDLfKvL0nLUxablfX0hfmfuQ01avI65fUQYEkupRIJHcAMwbDWNNdmLgupV4zeMO3stcIZ1M4aYo4vZt0oO7Locd0ndGTEQofN+QxiZ22+y7W+RpgUb66vOU7232SZXupZqvaYT3Dfu8ZLrejtc47mvkJ9FoVEWKBmW7dyc7ZXD1Nb2TH3JVn5Tqa3r1repzY6/gwWeqhUCGO/XjWSTmjYYVLOzFoP0Z/qJTks033brxrtjmxCbGtK4ivEqKuH2fNuc0tDatIYgna4yGbz2eeTL8WhJbic2aDnmqqpm2KlLeK5vWn0pc0wirGvtUtBkzNdPKDzWe24oGdZX4CzGfWCD4U93GBQdqNSw4Uiny8K9h4buOhlU2scq+Q1G1i233k63hFwBPEfcS04l1FGJoynbH+fgz8ZKFQJLDAMDjk/psCPzw20XxE6mmdLd24d8KNQ14FciUEPl1xHvEhlK6W2j65aOWgUAEUpV4NEREstyDQNqjloFARVKL/xukrAvkGjGC09zGwfYKsQdqF/BTKMnEJcTtxC3EPAU3iic5cRkfjc/ZFvZuuZm4gXjOouG35LQ2Yfutkq/4pfpN/E9TDVCjQGkJqQExho+CjYlRPseRiQE3EIriaMZTw4K3mOJv23J8jme23RsEAMqqQJrb9PnnEbPEVpUAuJD4Mf/PoCqeONQCUJYFElGKf7ojpnqjUQtAWRdJaf1t2w8ofSAUBNKulATSEaUPhIpIRj9icbyFUgdCTSRTeR0i2HwfpQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBnG392D9QU+JXhxAAAAAElFTkSuQmCC', '');
 
 -- --------------------------------------------------------
 
diff --git a/install/tpl/apache_apps_fcgi_starter.master b/install/tpl/apache_apps_fcgi_starter.master
index 8a26441..8ef1cbb 100644
--- a/install/tpl/apache_apps_fcgi_starter.master
+++ b/install/tpl/apache_apps_fcgi_starter.master
@@ -3,4 +3,8 @@
 export PHPRC
 export PHP_FCGI_MAX_REQUESTS=5000
 export PHP_FCGI_CHILDREN=1
-exec {fastcgi_bin} -d magic_quotes_gpc=off
\ No newline at end of file
+exec {fastcgi_bin} -d  \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d magic_quotes_gpc=off \
+    -d open_basedir=
diff --git a/install/tpl/apache_ispconfig_fcgi_starter.master b/install/tpl/apache_ispconfig_fcgi_starter.master
index 240fccc..ab7d13f 100644
--- a/install/tpl/apache_ispconfig_fcgi_starter.master
+++ b/install/tpl/apache_ispconfig_fcgi_starter.master
@@ -3,4 +3,9 @@
 export PHPRC
 export PHP_FCGI_MAX_REQUESTS=5000
 export PHP_FCGI_CHILDREN=1
-exec {fastcgi_bin} -d magic_quotes_gpc=off -d session.save_path=/usr/local/ispconfig/interface/temp
\ No newline at end of file
+exec {fastcgi_bin} \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d magic_quotes_gpc=off \
+    -d open_basedir= \
+    -d session.save_path=/usr/local/ispconfig/interface/temp
diff --git a/install/tpl/authmysqlrc.master b/install/tpl/authmysqlrc.master
index d44b4f2..ec4095d 100644
--- a/install/tpl/authmysqlrc.master
+++ b/install/tpl/authmysqlrc.master
@@ -1,7 +1,7 @@
 MYSQL_SERVER {mysql_server_host}
 MYSQL_USERNAME {mysql_server_ispconfig_user}
 MYSQL_PASSWORD {mysql_server_ispconfig_password}
-MYSQL_PORT 0
+MYSQL_PORT {mysql_server_port}
 MYSQL_DATABASE {mysql_server_database}
 MYSQL_USER_TABLE mail_user
 MYSQL_CRYPT_PWFIELD password
diff --git a/install/tpl/bastille-firewall.cfg.master b/install/tpl/bastille-firewall.cfg.master
index 728a731..408713d 100644
--- a/install/tpl/bastille-firewall.cfg.master
+++ b/install/tpl/bastille-firewall.cfg.master
@@ -75,7 +75,7 @@
 # use the "\" continuation character (so Bastille can change the
 # values if it is run more than once)
 TRUSTED_IFACES="lo"                                        # MINIMAL/SAFEST
-PUBLIC_IFACES="eth+ ppp+ slip+ venet+ bond+"                        # SAFEST
+PUBLIC_IFACES="eth+ ppp+ slip+ venet+ bond+ en+"                        # SAFEST
 INTERNAL_IFACES=""                                # SAFEST
 
 
diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index e5fa2c4..02a7b2f 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -63,6 +63,7 @@
 //** Database
 $conf['db_type'] = 'mysql';
 $conf['db_host'] = '{mysql_server_host}';
+$conf['db_port'] = '{mysql_server_port}';
 $conf['db_database'] = '{mysql_server_database}';
 $conf['db_user'] = '{mysql_server_ispconfig_user}';
 $conf['db_password'] = '{mysql_server_ispconfig_password}';
@@ -72,6 +73,7 @@
 
 define('DB_TYPE',$conf['db_type']);
 define('DB_HOST',$conf['db_host']);
+define('DB_PORT',$conf['db_port']);
 define('DB_DATABASE',$conf['db_database']);
 define('DB_USER',$conf['db_user']);
 define('DB_PASSWORD',$conf['db_password']);
@@ -81,6 +83,7 @@
 //** Database settings for the master DB. This setting is only used in multiserver setups
 $conf['dbmaster_type']			= 'mysql';
 $conf['dbmaster_host']			= '{mysql_master_server_host}';
+$conf['dbmaster_port']			= '{mysql_master_server_port}';
 $conf['dbmaster_database']		= '{mysql_master_server_database}';
 $conf['dbmaster_user']			= '{mysql_master_server_ispconfig_user}';
 $conf['dbmaster_password']		= '{mysql_master_server_ispconfig_password}';
diff --git a/install/tpl/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master
index 61f86c4..30afc18 100644
--- a/install/tpl/debian6_dovecot-sql.conf.master
+++ b/install/tpl/debian6_dovecot-sql.conf.master
@@ -10,11 +10,12 @@
 # );
 
 driver = mysql
-connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
+connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} port={mysql_server_port}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+# password-query with prefetch
+password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index 8da19d1..ee77f4e 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -7,9 +7,13 @@
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
+mail_max_userip_connections = 100
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
+}
+userdb {
+  driver = prefetch
 }
 userdb {
   args = /etc/dovecot/dovecot-sql.conf
@@ -18,6 +22,7 @@
 plugin {
   quota = dict:user::file:/var/vmail/%d/%n/.quotausage
   sieve=/var/vmail/%d/%n/.sieve
+  sieve_max_redirects = 25
 }
 service auth {
   unix_listener /var/spool/postfix/private/auth {
@@ -41,7 +46,7 @@
 }
 service imap-login {
   client_limit = 1000
-  process_limit = 500
+  process_limit = 512
 }
 protocol imap {
   mail_plugins = quota imap_quota
diff --git a/install/tpl/debian_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master
index a4d5bbd..b8919ff 100644
--- a/install/tpl/debian_dovecot-sql.conf.master
+++ b/install/tpl/debian_dovecot-sql.conf.master
@@ -117,11 +117,12 @@
 #password_query = SELECT userid as user, password, home as userdb_home, uid as userdb_uid, gid as userdb_gid FROM users WHERE userid = '%u'
 
 driver = mysql
-connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
+connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} port={mysql_server_port}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+# password-query with prefetch
+password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master
index 3d8ea9a..8d60225 100644
--- a/install/tpl/debian_dovecot.conf.master
+++ b/install/tpl/debian_dovecot.conf.master
@@ -1006,8 +1006,8 @@
   # This can be made to work with SQL and LDAP databases, see their example
   # configuration files for more information how to do it.
   # <doc/wiki/UserDatabase.Prefetch.txt>
-  #userdb prefetch {
-  #}
+  userdb prefetch {
+  }
 
   # User to use for the process. This user needs access to only user and
   # password databases, nothing else. Only shadow and pam authentication
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 8b21f6a..39cf60f 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -8,9 +8,13 @@
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_protocols = !SSLv2 !SSLv3
+mail_max_userip_connections = 100
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
+}
+userdb {
+  driver = prefetch
 }
 userdb {
   args = /etc/dovecot/dovecot-sql.conf
@@ -19,6 +23,7 @@
 plugin {
   quota = dict:user::file:/var/vmail/%d/%n/.quotausage
   sieve=/var/vmail/%d/%n/.sieve
+  sieve_max_redirects = 25
 }
 service auth {
   unix_listener /var/spool/postfix/private/auth {
@@ -42,7 +47,7 @@
 }
 service imap-login {
   client_limit = 1000
-  process_limit = 500
+  process_limit = 512
 }
 protocol imap {
   mail_plugins = quota imap_quota
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 708de66..911b1ca 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -12,7 +12,9 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
+smtpd_restriction_classes = greylisting
+greylisting = check_policy_service inet:127.0.0.1:10023 
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -20,8 +22,9 @@
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, 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 $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
-smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
+smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
@@ -36,3 +39,5 @@
 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
 smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_exclude_ciphers = RC4, aNULL
+smtp_tls_exclude_ciphers = RC4, aNULL
diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master
index 769e0a4..d242c8c 100644
--- a/install/tpl/fedora_dovecot-sql.conf.master
+++ b/install/tpl/fedora_dovecot-sql.conf.master
@@ -130,11 +130,12 @@
 #  FROM users WHERE userid = '%u'
 
 driver = mysql
-connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
+connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} port={mysql_server_port}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+# password-query with prefetch
+password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master
index c11d401..cfac856 100644
--- a/install/tpl/fedora_dovecot.conf.master
+++ b/install/tpl/fedora_dovecot.conf.master
@@ -1039,8 +1039,8 @@
   # This can be made to work with SQL and LDAP databases, see their example
   # configuration files for more information how to do it.
   # <doc/wiki/UserDatabase.Prefetch.txt>
-  #userdb prefetch {
-  #}
+  userdb prefetch {
+  }
 
   # System users (NSS, /etc/passwd, or similiar). In many systems nowadays this
   # uses Name Service Switch, which is configured in /etc/nsswitch.conf.
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 2b542f1..9fca319 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -12,6 +12,9 @@
   driver = sql
 }
 userdb {
+  driver = prefetch
+}
+userdb {
   args = /etc/dovecot-sql.conf
   driver = sql
 }
@@ -57,4 +60,4 @@
 protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
-}
\ No newline at end of file
+}
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 6a2c97e..473bbce 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -9,7 +9,9 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
+smtpd_restriction_classes = greylisting
+greylisting = check_policy_service inet:127.0.0.1:10023
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -17,8 +19,9 @@
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, 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 $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
-smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
+smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
@@ -33,3 +36,5 @@
 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
 smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_exclude_ciphers = RC4, aNULL
+smtp_tls_exclude_ciphers = RC4, aNULL
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 8db67c4..f5730f7 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -8,7 +8,9 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
+smtpd_restriction_classes = greylisting
+greylisting = check_policy_service inet:127.0.0.1:10023
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -16,8 +18,9 @@
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, 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
-smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
+smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.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 $smtpd_sender_login_maps
+smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
@@ -32,3 +35,5 @@
 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
 smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_exclude_ciphers = RC4, aNULL
+smtp_tls_exclude_ciphers = RC4, aNULL
diff --git a/install/tpl/metronome_conf_global.master b/install/tpl/metronome_conf_global.master
new file mode 100644
index 0000000..68f4c59
--- /dev/null
+++ b/install/tpl/metronome_conf_global.master
@@ -0,0 +1,65 @@
+pidfile = "/var/run/metronome/metronome.pid";
+metronome_max_files_soft = 200000;
+metronome_max_files_hard = 300000;
+plugin_paths = {
+        "/usr/lib/metronome/isp-modules",
+};
+use_libevent = true;
+log = {
+        debug = "/var/log/metronome/metronome.dbg",
+        info = "/var/log/metronome/metronome.log",
+        error = "/var/log/metronome/metronome.err",
+};
+use_ipv6 = true;
+http_ports = {
+        5290,
+};
+https_ports = {
+        5291,
+};
+pastebin_ports = {
+        5292,
+};
+bosh_ports = {
+        5280,
+};
+admins = {
+        {tmpl_var xmpp_admins}
+};
+modules_enabled = {
+        "saslauth",
+        "tls",
+        "dialback",
+        "disco",
+        "discoitems",
+        "version",
+        "uptime",
+        "time",
+        "ping",
+        "admin_adhoc",
+        "admin_telnet",
+        "bosh",
+        "posix",
+        "announce",
+        "offline",
+        "webpresence",
+        "mam",
+        "stream_management",
+        "message_carbons"
+};
+modules_disabled = {
+};
+bosh_max_inactivity = 30;
+consider_bosh_secure = true;
+cross_domain_bosh = true;
+allow_registration = false;
+ssl = {
+        key = "/etc/metronome/certs/localhost.key",
+        certificate = "/etc/metronome/certs/localhost.cert",
+};
+c2s_require_encryption = false;
+s2s_secure = true;
+s2s_insecure_domains = {
+        "gmail.com",
+};
+authentication = "internal_plain";
diff --git a/install/tpl/metronome_conf_main.master b/install/tpl/metronome_conf_main.master
new file mode 100644
index 0000000..f9c8fbd
--- /dev/null
+++ b/install/tpl/metronome_conf_main.master
@@ -0,0 +1,3 @@
+Include "/etc/metronome/global.cfg.lua"
+Include "/etc/metronome/hosts/*.lua"
+Include "/etc/metronome/status/*.lua"
diff --git a/install/tpl/metronome_conf_ssl.master b/install/tpl/metronome_conf_ssl.master
new file mode 100644
index 0000000..922dfd2
--- /dev/null
+++ b/install/tpl/metronome_conf_ssl.master
@@ -0,0 +1,48 @@
+oid_section = new_oids
+
+[ new_oids ]
+
+# RFC 3920 section 5.1.1 defines this OID
+xmppAddr = 1.3.6.1.5.5.7.8.5
+
+# RFC 4985 defines this OID
+SRVName  = 1.3.6.1.5.5.7.8.7
+
+[ req ]
+
+default_bits       = 4096
+default_keyfile    = {tmpl_var name='domain'}.key
+distinguished_name = distinguished_name
+req_extensions     = v3_extensions
+x509_extensions    = v3_extensions
+
+# ask about the DN?
+prompt = no
+
+[ distinguished_name ]
+
+commonName             = {tmpl_var name='domain'}
+countryName            = {tmpl_var name='ssl_country'}
+localityName           = {tmpl_var name='ssl_locality'}
+organizationName       = {tmpl_var name='ssl_organisation'}
+organizationalUnitName = {tmpl_var name='ssl_organisation_unit'}
+emailAddress           = {tmpl_var name='ssl_email'}
+
+[ v3_extensions ]
+
+# for certificate requests (req_extensions)
+# and self-signed certificates (x509_extensions)
+
+basicConstraints = CA:FALSE
+keyUsage         = digitalSignature,keyEncipherment
+extendedKeyUsage = serverAuth,clientAuth
+subjectAltName   = @subject_alternative_name
+
+[ subject_alternative_name ]
+
+# See http://tools.ietf.org/html/draft-ietf-xmpp-3920bis#section-13.7.1.2 for more info.
+
+DNS.0       =                                           {tmpl_var name='domain'}
+otherName.0 =                 xmppAddr;FORMAT:UTF8,UTF8:{tmpl_var name='domain'}
+otherName.1 =            SRVName;IA5STRING:_xmpp-client.{tmpl_var name='domain'}
+otherName.2 =            SRVName;IA5STRING:_xmpp-server.{tmpl_var name='domain'}
\ No newline at end of file
diff --git a/install/tpl/mydns.conf.master b/install/tpl/mydns.conf.master
index 4af5a8e..fbfac02 100644
--- a/install/tpl/mydns.conf.master
+++ b/install/tpl/mydns.conf.master
@@ -18,6 +18,7 @@
 db-user = {mysql_server_ispconfig_user}             # SQL server username
 db-password = {mysql_server_ispconfig_password}         # SQL server password
 database = {mysql_server_database}          # MyDNS database name
+db-port = {mysql_server_port}             # SQL server port
 
 
                                 # GENERAL OPTIONS
diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
new file mode 100644
index 0000000..6ca154f
--- /dev/null
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -0,0 +1,8 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+table = mail_user
+select_field = sender_cc
+where_field = email
+additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n'
+hosts = 127.0.0.1
\ No newline at end of file
diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
new file mode 100644
index 0000000..8beb7c4
--- /dev/null
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -0,0 +1,5 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+query = SELECT 'greylisting' FROM (SELECT greylisting, source AS email FROM mail_forwarding WHERE server_id = {server_id} UNION SELECT greylisting, email FROM mail_user WHERE server_id = {server_id}) addresses WHERE addresses.email='%s' AND addresses.greylisting='y'
+hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master
new file mode 100644
index 0000000..ad2d758
--- /dev/null
+++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master
@@ -0,0 +1,5 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND type = 'alias' AND server_id = {server_id} UNION SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id};
+hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master
index 2c720b5..57a78bc 100644
--- a/install/tpl/nginx_apps.vhost.master
+++ b/install/tpl/nginx_apps.vhost.master
@@ -12,7 +12,7 @@
         }
 
         # serve static files directly
-        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
+        location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
                access_log        off;
         }
 
diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master
index 70d6a53..528ee2c 100644
--- a/install/tpl/nginx_ispconfig.vhost.master
+++ b/install/tpl/nginx_ispconfig.vhost.master
@@ -19,7 +19,7 @@
         }
 
         # serve static files directly
-        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
+        location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
                access_log        off;
         }
 
diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master
index 57515af..f9ffbf7 100644
--- a/install/tpl/opensuse_dovecot-sql.conf.master
+++ b/install/tpl/opensuse_dovecot-sql.conf.master
@@ -130,11 +130,12 @@
 #  FROM users WHERE userid = '%u'
 
 driver = mysql
-connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
+connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} port={mysql_server_port}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+# password-query with prefetch
+password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master
index eca13a6..9d345fa 100644
--- a/install/tpl/opensuse_dovecot.conf.master
+++ b/install/tpl/opensuse_dovecot.conf.master
@@ -1033,8 +1033,8 @@
   # This can be made to work with SQL and LDAP databases, see their example
   # configuration files for more information how to do it.
   # <doc/wiki/UserDatabase.Prefetch.txt>
-  #userdb prefetch {
-  #}
+  userdb prefetch {
+  }
 
   # System users (NSS, /etc/passwd, or similiar). In many systems nowadays this
   # uses Name Service Switch, which is configured in /etc/nsswitch.conf.
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 8da19d1..1b9d9dc 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -12,6 +12,9 @@
   driver = sql
 }
 userdb {
+  driver = prefetch
+}
+userdb {
   args = /etc/dovecot/dovecot-sql.conf
   driver = sql
 }
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 5afd78e..f018e23 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -11,7 +11,9 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
+smtpd_restriction_classes = greylisting
+greylisting = check_policy_service inet:127.0.0.1:10023
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -19,8 +21,9 @@
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, 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 $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
-smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
+smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re
 smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
@@ -35,3 +38,5 @@
 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
 smtpd_tls_protocols = !SSLv2,!SSLv3
 smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_exclude_ciphers = RC4, aNULL
+smtp_tls_exclude_ciphers = RC4, aNULL
diff --git a/install/tpl/pdns.local.master b/install/tpl/pdns.local.master
index 3e29ec4..eb4ab71 100644
--- a/install/tpl/pdns.local.master
+++ b/install/tpl/pdns.local.master
@@ -7,6 +7,7 @@
 gmysql-user={mysql_server_ispconfig_user}
 gmysql-password={mysql_server_ispconfig_password}
 gmysql-dbname={powerdns_database}
+gmysql-port={mysql_server_port}
 
 slave=yes
 master=yes
diff --git a/install/tpl/php_fpm_pool.conf.master b/install/tpl/php_fpm_pool.conf.master
index 9ff7ebc..16e1241 100644
--- a/install/tpl/php_fpm_pool.conf.master
+++ b/install/tpl/php_fpm_pool.conf.master
@@ -16,6 +16,6 @@
 
 chdir = /
 
-; php_admin_value[open_basedir] = /usr/local/ispconfig/interface:/usr/share
+; php_admin_value[open_basedir] = /usr/local/ispconfig/interface:/usr/local/ispconfig/security:/usr/share:/var/lib/roundcube:/etc/roundcube:/usr/share/roundcube
 php_admin_value[session.save_path] = /usr/local/ispconfig/interface/temp
 php_admin_flag[magic_quotes_gpc] = off
\ No newline at end of file
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index c563650..ec7fac8 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -16,7 +16,7 @@
 loglevel=2
 admin_notify_events=1
 backup_dir=/var/backup
-backup_dir_is_mount=n
+backup_dir_is_mount=y
 backup_mode=rootgz
 backup_delete=y
 monit_url=
@@ -77,6 +77,7 @@
 apps_vhost_servername=
 php_open_basedir=[website_path]/web:[website_path]/private:[website_path]/tmp:/var/www/[website_domain]/web:/srv/www/[website_domain]/web:/usr/share/php5:/usr/share/php:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin
 htaccess_allow_override=All
+enable_spdy=y
 awstats_conf_dir=/etc/awstats
 awstats_data_dir=/var/lib/awstats
 awstats_pl=/usr/lib/cgi-bin/awstats.pl
@@ -85,6 +86,7 @@
 php_ini_path_cgi=/etc/php5/cgi/php.ini
 check_apache_config=y
 enable_sni=y
+enable_spdy=n
 enable_ip_wildcard=y
 overtraffic_notify_admin=y
 overtraffic_notify_client=y
@@ -127,7 +129,7 @@
 [jailkit]
 jailkit_chroot_home=/home/[username]
 jailkit_chroot_app_sections=basicshell editors extendedshell netutils ssh sftp scp groups jk_lsh
-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
+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 /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch
 jailkit_chroot_cron_programs=/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php
 
 [vlogger]
@@ -144,3 +146,12 @@
 do_not_try_rescue_mysql=n
 do_not_try_rescue_mail=n
 
+[xmpp]
+xmpp_use_ispv6=n
+xmpp_bosh_max_inactivity=30
+xmpp_server_admins=admin@service.com, superuser@service.com
+xmpp_modules_enabled=saslauth, tls, dialback, disco, discoitems, version, uptime, time, ping, admin_adhoc, admin_telnet, bosh, posix, announce, offline, webpresence, mam, stream_management, message_carbons
+xmpp_port_http=5290
+xmpp_port_https=5291
+xmpp_port_pastebin=5292
+xmpp_port_bosh=5280
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index f1a1bc9..92ae518 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -8,6 +8,9 @@
 
 [mail]
 enable_custom_login=n
+mailbox_show_autoresponder_tab=y
+mailbox_show_mail_filter_tab=y
+mailbox_show_custom_rules_tab=y
 mailboxlist_webmail_link=y
 webmail_url=/webmail
 dkim_path=/var/lib/amavis/dkim
@@ -23,9 +26,13 @@
 dblist_phpmyadmin_link=y
 phpmyadmin_url=/phpmyadmin
 webftp_url=
+vhost_subdomains=n
+vhost_aliasdomains=n
 client_username_web_check_disabled=n
+backups_include_into_web_quota=n
 reseller_can_use_options=n
 
+
 [tools]
 
 [domains]
diff --git a/install/uninstall.php b/install/uninstall.php
index 56cf0eb..111f574 100644
--- a/install/uninstall.php
+++ b/install/uninstall.php
@@ -60,14 +60,6 @@
 
 	echo "\n\n>> Uninstalling ISPConfig 3... \n\n";
 
-	// Delete the ISPConfig database
-	// $app->db->query("DROP DATABASE '".$conf["db_database"]."'");
-	// $app->db->query("DELETE FROM mysql.user WHERE User = 'ispconfig'");
-	
-//	exec("/etc/init.d/mysql stop");
-//	exec("rm -rf /var/lib/mysql/".$conf["db_database"]);
-//	exec("/etc/init.d/mysql start");
-
 	$link = mysql_connect($clientdb_host, $clientdb_user, $clientdb_password);
 	if (!$link) {
 		echo "Unable to connect to the database'.mysql_error($link)";
diff --git a/install/update.php b/install/update.php
index 311c070..97b28fd 100644
--- a/install/update.php
+++ b/install/update.php
@@ -247,13 +247,15 @@
 	$finished = false;
 	do {
 		$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
+		$tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
 		$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');	 
 		$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
 		$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
 
 		//* Initialize the MySQL server connection
-		if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
+		if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, (int)$tmp_mysql_server_port)) {
 			$conf['mysql']['master_host'] = $tmp_mysql_server_host;
+			$conf['mysql']['master_port'] = $tmp_mysql_server_port;
 			$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;
@@ -267,10 +269,8 @@
 	// 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"];
+	$inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
+	$inst->dbmaster->setDBName($conf['mysql']["master_database"]);
 } else {
 	$inst->dbmaster = $inst->db;
 }
@@ -392,6 +392,11 @@
 		$inst->configure_apps_vhost();
 	}
 
+    if($conf['services']['xmpp']) {
+        //** Configure Metronome XMPP
+        $inst->configure_xmpp('dont-create-certs');
+    }
+
 
 	//* Configure DBServer
 	swriteln('Configuring Database');
@@ -494,6 +499,10 @@
 		if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
 	}
 
+    if($conf['services']['xmpp']) {
+        if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null');
+    }
+
 	if($conf['services']['proxy']) {
 		// if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))     system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
 		if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
@@ -504,6 +513,11 @@
 	}
 }
 
+//* Set default servers
+setDefaultServers();
+
+$inst->create_mount_script();
+
 //* Create md5 filelist
 $md5_filename = '/usr/local/ispconfig/security/data/file_checksums_'.date('Y-m-d_h-i').'.md5';
 exec('find /usr/local/ispconfig -type f -print0 | xargs -0 md5sum > '.$md5_filename);
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index 615e390..949f164 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -70,6 +70,8 @@
 
 			$this->uses('session');
 			$sess_timeout = $this->conf('interface', 'session_timeout');
+			$cookie_domain = (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']);
+			$cookie_secure = ($_SERVER["HTTPS"] == 'on')?true:false;
 			if($sess_timeout) {
 				/* check if user wants to stay logged in */
 				if(isset($_POST['s_mod']) && isset($_POST['s_pg']) && $_POST['s_mod'] == 'login' && $_POST['s_pg'] == 'index' && isset($_POST['stay']) && $_POST['stay'] == '1') {
@@ -79,19 +81,19 @@
 					$tmp = $this->ini_parser->parse_ini_string(stripslashes($tmp['config']));
 					if(!isset($tmp['misc']['session_allow_endless']) || $tmp['misc']['session_allow_endless'] != 'y') {
 						$this->session->set_timeout($sess_timeout);
-						session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
+						session_set_cookie_params(3600 * 24 * 365,'/',$cookie_domain,$cookie_secure,true); // cookie timeout is never updated, so it must not be short
 					} else {
 						// we are doing login here, so we need to set the session data
 						$this->session->set_permanent(true);
-						$this->session->set_timeout(365 * 24 * 3600); // one year
-						session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
+						$this->session->set_timeout(365 * 24 * 3600,'/',$cookie_domain,$cookie_secure,true); // one year
+						session_set_cookie_params(3600 * 24 * 365,'/',$cookie_domain,$cookie_secure,true); // cookie timeout is never updated, so it must not be short
 					}
 				} else {
 					$this->session->set_timeout($sess_timeout);
-					session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
+					session_set_cookie_params(3600 * 24 * 365,'/',$cookie_domain,$cookie_secure,true); // cookie timeout is never updated, so it must not be short
 				}
 			} else {
-				session_set_cookie_params(0); // until browser is closed
+				session_set_cookie_params(0,'/',$cookie_domain,$cookie_secure,true); // until browser is closed
 			}
 			
 			session_set_save_handler( array($this->session, 'open'),
@@ -153,15 +155,15 @@
 	
 	public function conf($plugin, $key, $value = null) {
 		if(is_null($value)) {
-			$tmpconf = $this->db->queryOneRecord("SELECT `value` FROM `sys_config` WHERE `group` = '" . $this->db->quote($plugin) . "' AND `name` = '" . $this->db->quote($key) . "'");
+			$tmpconf = $this->db->queryOneRecord("SELECT `value` FROM `sys_config` WHERE `group` = ? AND `name` = ?", $plugin, $key);
 			if($tmpconf) return $tmpconf['value'];
 			else return null;
 		} else {
 			if($value === false) {
-				$this->db->query("DELETE FROM `sys_config` WHERE `group` = '" . $this->db->quote($plugin) . "' AND `name` = '" . $this->db->quote($key) . "'");
+				$this->db->query("DELETE FROM `sys_config` WHERE `group` = ? AND `name` = ?", $plugin, $key);
 				return null;
 			} else {
-				$this->db->query("REPLACE INTO `sys_config` (`group`, `name`, `value`) VALUES ('" . $this->db->quote($plugin) . "', '" . $this->db->quote($key) . "', '" . $this->db->quote($value) . "')");
+				$this->db->query("REPLACE INTO `sys_config` (`group`, `name`, `value`) VALUES (?, ?, ?)", $plugin, $key, $value);
 				return $value;
 			}
 		}
@@ -177,8 +179,8 @@
 			$server_id = 0;
 			$priority = $this->functions->intval($priority);
 			$tstamp = time();
-			$msg = $this->db->quote('[INTERFACE]: '.$msg);
-			$this->db->query("INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES ($server_id,0,$priority,$tstamp,'$msg')");
+			$msg = '[INTERFACE]: '.$msg;
+			$this->db->query("INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES (?, 0, ?, ?, ?)", $server_id, $priority,$tstamp,$msg);
 			/*
 			if (is_writable($this->_conf['log_file'])) {
 				if (!$fp = fopen ($this->_conf['log_file'], 'a')) {
diff --git a/interface/lib/classes/aps_crawler.inc.php b/interface/lib/classes/aps_crawler.inc.php
index 7bb2650..99db77b 100644
--- a/interface/lib/classes/aps_crawler.inc.php
+++ b/interface/lib/classes/aps_crawler.inc.php
@@ -189,6 +189,8 @@
 			curl_setopt($conn[$i], CURLOPT_TIMEOUT, 0);
 			curl_setopt($conn[$i], CURLOPT_FAILONERROR, 1);
 			curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1);
+			curl_setopt($conn[$i], CURLOPT_SSL_VERIFYHOST, 1);
+			curl_setopt($conn[$i], CURLOPT_SSL_VERIFYPEER, false);
 
 			curl_multi_add_handle($mh, $conn[$i]);
 		}
@@ -283,182 +285,182 @@
 					$apps_count = substr_count($apps[$j], '<opensearch:totalResults>0</opensearch:totalResults>');
 					if($apps_count == 0) // obviously this vendor provides one or more apps
 						{
-						// Rename namespaces and register them
-						$xml = str_replace("xmlns=", "ns=", $apps[$j]);
-						$sxe = new SimpleXMLElement($xml);
-						$namespaces = $sxe->getDocNamespaces(true);
-						foreach($namespaces as $ns => $url) $sxe->registerXPathNamespace($ns, $url);
+						try {
+							// Rename namespaces and register them
+							$xml = str_replace("xmlns=", "ns=", $apps[$j]);
+							$sxe = new SimpleXMLElement($xml);
+							$namespaces = $sxe->getDocNamespaces(true);
+							foreach($namespaces as $ns => $url) $sxe->registerXPathNamespace($ns, $url);
 						
-						//Find highest version
-						$app_version = "0.0.0";
-						$entry_pos = 1;
-						for ($p = 1; ; $p++) {
-							$app_version_tmp = parent::getXPathValue($sxe, 'entry[position()=' . $p . ']/a:version');
-							if (strlen($app_version_tmp) < 1) break;
-							if (version_compare($app_version_tmp, $app_version) >= 0) {
-								$app_version = $app_version_tmp;
-								$entry_pos = $p;
+							//Find highest version
+							$app_version = "0.0.0";
+							$entry_pos = 1;
+							for ($p = 1; ; $p++) {
+								$app_version_tmp = parent::getXPathValue($sxe, 'entry[position()=' . $p . ']/a:version');
+								if (strlen($app_version_tmp) < 1) break;
+								if (version_compare($app_version_tmp, $app_version) >= 0) {
+									$app_version = $app_version_tmp;
+									$entry_pos = $p;
+								}
 							}
-						}
 
-						// Fetching values of interest
-						//$app_name = parent::getXPathValue($sxe, 'entry[position()=1]/a:name');
-						//$app_version = parent::getXPathValue($sxe, 'entry[position()=1]/a:version');
-						//$app_release = parent::getXPathValue($sxe, 'entry[position()=1]/a:release');
-						$app_name = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/a:name");
-						$app_version = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/a:version");
-						$app_release = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/a:release");
+							// Fetching values of interest
+							//$app_name = parent::getXPathValue($sxe, 'entry[position()=1]/a:name');
+							//$app_version = parent::getXPathValue($sxe, 'entry[position()=1]/a:version');
+							//$app_release = parent::getXPathValue($sxe, 'entry[position()=1]/a:release');
+							$app_name = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/a:name");
+							$app_version = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/a:version");
+							$app_release = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/a:release");
 
-						// Find out a (possibly) existing package version
-						$ex_ver = '';
-						/*
-                        array_walk($existing_apps,
-                            create_function('$v, $k, $ex_ver', 'if($v["Name"] == "'.$app_name.'") $ex_ver = $v["CurrentVersion"];'), &$ex_ver);
-                        */
-						if(is_array($existing_apps)) {
-							foreach($existing_apps as $k => $v) {
-								if($v["Name"] == $app_name) $ex_ver = $v["CurrentVersion"];
+							// Find out a (possibly) existing package version
+							$ex_ver = '';
+							/*
+							array_walk($existing_apps,
+								create_function('$v, $k, $ex_ver', 'if($v["Name"] == "'.$app_name.'") $ex_ver = $v["CurrentVersion"];'), &$ex_ver);
+							*/
+							if(is_array($existing_apps)) {
+								foreach($existing_apps as $k => $v) {
+									if($v["Name"] == $app_name) $ex_ver = $v["CurrentVersion"];
+								}
 							}
-						}
 
-						$new_ver = $app_version.'-'.$app_release;
-						$local_intf_folder = $this->interface_pkg_dir.'/'.$app_name.'-'.$new_ver.'.app.zip/';
+							$new_ver = $app_version.'-'.$app_release;
+							$local_intf_folder = $this->interface_pkg_dir.'/'.$app_name.'-'.$new_ver.'.app.zip/';
 
-						// Proceed if a newer or at least equal version has been found with server mode or
-						// interface mode is activated and there are no valid APP-META.xml and PKG_URL existing yet
-						if((!$this->interface_mode && version_compare($new_ver, $ex_ver) >= 0) || ($this->interface_mode && (!file_exists($local_intf_folder.'APP-META.xml') || filesize($local_intf_folder.'APP-META.xml') == 0 || !file_exists($local_intf_folder.'PKG_URL') || filesize($local_intf_folder.'PKG_URL') == 0))){
-							// Check if we already have an old version of this app
-							if(!empty($ex_ver) && version_compare($new_ver, $ex_ver) == 1) $apps_updated++;
+							// Proceed if a newer or at least equal version has been found with server mode or
+							// interface mode is activated and there are no valid APP-META.xml and PKG_URL existing yet
+							if((!$this->interface_mode && version_compare($new_ver, $ex_ver) >= 0) || ($this->interface_mode && (!file_exists($local_intf_folder.'APP-META.xml') || filesize($local_intf_folder.'APP-META.xml') == 0 || !file_exists($local_intf_folder.'PKG_URL') || filesize($local_intf_folder.'PKG_URL') == 0))){
+								// Check if we already have an old version of this app
+								if(!empty($ex_ver) && version_compare($new_ver, $ex_ver) == 1) $apps_updated++;
 
-							//$app_dl = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='aps']/@href");
-							//$app_filesize = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='aps']/@length");
-							//$app_metafile = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='meta']/@href");
-							$app_dl = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='aps']/@href");
-							$app_filesize = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='aps']/@length");
-							$app_metafile = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='meta']/@href");
+								//$app_dl = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='aps']/@href");
+								//$app_filesize = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='aps']/@length");
+								//$app_metafile = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='meta']/@href");
+								$app_dl = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='aps']/@href");
+								$app_filesize = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='aps']/@length");
+								$app_metafile = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='meta']/@href");
 
-							//$this->app_download_url_list[$app_name.'-'.$new_ver.'.app.zip'] = $app_dl;
-							// Skip ASP.net packages because they can't be used at all
-							$asp_handler = parent::getXPathValue($sxe, '//aspnet:handler');
-							$asp_permissions = parent::getXPathValue($sxe, '//aspnet:permissions');
-							$asp_version = parent::getXPathValue($sxe, '//aspnet:version');
-							if(!empty($asp_handler) || !empty($asp_permissions) || !empty($asp_version)) continue;
+								//$this->app_download_url_list[$app_name.'-'.$new_ver.'.app.zip'] = $app_dl;
+								// Skip ASP.net packages because they can't be used at all
+								$asp_handler = parent::getXPathValue($sxe, '//aspnet:handler');
+								$asp_permissions = parent::getXPathValue($sxe, '//aspnet:permissions');
+								$asp_version = parent::getXPathValue($sxe, '//aspnet:version');
+								if(!empty($asp_handler) || !empty($asp_permissions) || !empty($asp_version)) continue;
 
-							// Interface mode (download only parts)
-							if($this->interface_mode)
-							{
-								// Delete an obviously out-dated version from the system and DB
-								if(!empty($ex_ver) && version_compare($new_ver, $ex_ver) == 1)
+								// Interface mode (download only parts)
+								if($this->interface_mode)
 								{
-									$old_folder = $this->interface_pkg_dir.'/'.$app_name.'-'.$ex_ver.'.app.zip';
-									if(file_exists($old_folder)) $this->removeDirectory($old_folder);
-
-									/*
-                                    $app->db->query("UPDATE aps_packages SET package_status = '".PACKAGE_OUTDATED."' WHERE name = '".
-                                        $app->db->quote($app_name)."' AND CONCAT(version, '-', CAST(`release` AS CHAR)) = '".
-                                        $app->db->quote($ex_ver)."';");
-									*/
-									$tmp = $app->db->queryOneRecord("SELECT id FROM aps_packages WHERE name = '".
-										$app->db->quote($app_name)."' AND CONCAT(version, '-', CAST(`release` AS CHAR)) = '".
-										$app->db->quote($ex_ver)."';");
-									$app->db->datalogUpdate('aps_packages', "package_status = ".PACKAGE_OUTDATED, 'id', $tmp['id']);
-									unset($tmp);
-								}
-
-								// Create the local folder if not yet existing
-								if(!file_exists($local_intf_folder)) @mkdir($local_intf_folder, 0777, true);
-
-								// Save the package URL in an extra file because it's not part of the APP-META.xml file
-								@file_put_contents($local_intf_folder.'PKG_URL', $app_dl);
-
-								// Download the meta file
-								$local_metafile = $local_intf_folder.'APP-META.xml';
-								if(!file_exists($local_metafile) || filesize($local_metafile) == 0)
-								{
-									$apps_to_dl[] = array('name' => 'APP-META.xml',
-										'url' => $app_metafile,
-										'filesize' => 0,
-										'localtarget' => $local_metafile);
-									$apps_downloaded++;
-								}
-
-								// Download package license
-								//$license = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='eula']/@href");
-								$license = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='eula']/@href");
-								if($license != '')
-								{
-									$local_license = $local_intf_folder.'LICENSE';
-									if(!file_exists($local_license) || filesize($local_license) == 0)
+									// Delete an obviously out-dated version from the system and DB
+									if(!empty($ex_ver) && version_compare($new_ver, $ex_ver) == 1)
 									{
-										$apps_to_dl[] = array('name' => basename($license),
-											'url' => $license,
-											'filesize' => 0,
-											'localtarget' => $local_license);
+										$old_folder = $this->interface_pkg_dir.'/'.$app_name.'-'.$ex_ver.'.app.zip';
+										if(file_exists($old_folder)) $this->removeDirectory($old_folder);
+
+										$tmp = $app->db->queryOneRecord("SELECT id FROM aps_packages WHERE name = ? AND CONCAT(version, '-', CAST(`release` AS CHAR)) = ?", $app_name, $ex_ver);
+										$app->db->datalogUpdate('aps_packages', array("package_status" => PACKAGE_OUTDATED), 'id', $tmp['id']);
+										unset($tmp);
 									}
-								}
 
-								// Download package icon
-								//$icon = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='icon']/@href");
-								$icon = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='icon']/@href");
-								if($icon != '')
-								{
-									$local_icon = $local_intf_folder.basename($icon);
-									if(!file_exists($local_icon) || filesize($local_icon) == 0)
+									// Create the local folder if not yet existing
+									if(!file_exists($local_intf_folder)) @mkdir($local_intf_folder, 0777, true);
+
+									// Save the package URL in an extra file because it's not part of the APP-META.xml file
+									@file_put_contents($local_intf_folder.'PKG_URL', $app_dl);
+
+									// Download the meta file
+									$local_metafile = $local_intf_folder.'APP-META.xml';
+									if(!file_exists($local_metafile) || filesize($local_metafile) == 0)
 									{
-										$apps_to_dl[] = array('name' => basename($icon),
-											'url' => $icon,
+										$apps_to_dl[] = array('name' => 'APP-META.xml',
+											'url' => $app_metafile,
 											'filesize' => 0,
-											'localtarget' => $local_icon);
+											'localtarget' => $local_metafile);
+										$apps_downloaded++;
 									}
-								}
 
-								// Download available screenshots
-								//$screenshots = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='screenshot']", true);
-								$screenshots = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='screenshot']", true);
-								if(!empty($screenshots))
-								{
-									foreach($screenshots as $screen)
+									// Download package license
+									//$license = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='eula']/@href");
+									$license = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='eula']/@href");
+									if($license != '')
 									{
-										$local_screen = $local_intf_folder.basename($screen['href']);
-										if(!file_exists($local_screen) || filesize($local_screen) == 0)
+										$local_license = $local_intf_folder.'LICENSE';
+										if(!file_exists($local_license) || filesize($local_license) == 0)
 										{
-											$apps_to_dl[] = array('name' => basename($screen['href']),
-												'url' => $screen['href'],
+											$apps_to_dl[] = array('name' => basename($license),
+												'url' => $license,
 												'filesize' => 0,
-												'localtarget' => $local_screen);
+												'localtarget' => $local_license);
+										}
+									}
+
+									// Download package icon
+									//$icon = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='icon']/@href");
+									$icon = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='icon']/@href");
+									if($icon != '')
+									{
+										$local_icon = $local_intf_folder.basename($icon);
+										if(!file_exists($local_icon) || filesize($local_icon) == 0)
+										{
+											$apps_to_dl[] = array('name' => basename($icon),
+												'url' => $icon,
+												'filesize' => 0,
+												'localtarget' => $local_icon);
+										}
+									}
+
+									// Download available screenshots
+									//$screenshots = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='screenshot']", true);
+									$screenshots = parent::getXPathValue($sxe, "entry[position()=" . $entry_pos . "]/link[@a:type='screenshot']", true);
+									if(!empty($screenshots))
+									{
+										foreach($screenshots as $screen)
+										{
+											$local_screen = $local_intf_folder.basename($screen['href']);
+											if(!file_exists($local_screen) || filesize($local_screen) == 0)
+											{
+												$apps_to_dl[] = array('name' => basename($screen['href']),
+													'url' => $screen['href'],
+													'filesize' => 0,
+													'localtarget' => $local_screen);
+											}
 										}
 									}
 								}
-							}
-							else // Server mode (download whole ZIP archive)
-								{
-								// Delete an obviously out-dated version from the system
-								if(!empty($ex_ver) && version_compare($new_ver, $ex_ver) == 1)
-								{
-									$old_file = $this->packages_dir.'/'.$app_name.'-'.$ex_ver.'.app.zip';
-									if(file_exists($old_file)) $this->removeDirectory($old_file);
-								}
+								else // Server mode (download whole ZIP archive)
+									{
+									// Delete an obviously out-dated version from the system
+									if(!empty($ex_ver) && version_compare($new_ver, $ex_ver) == 1)
+									{
+										$old_file = $this->packages_dir.'/'.$app_name.'-'.$ex_ver.'.app.zip';
+										if(file_exists($old_file)) $this->removeDirectory($old_file);
+									}
 
-								// Attention: $new_ver can also be == $ex_ver (according to version_compare >= 0)
-								$local_zip = $this->packages_dir.'/'.$app_name.'-'.$new_ver.'.app.zip';
+									// Attention: $new_ver can also be == $ex_ver (according to version_compare >= 0)
+									$local_zip = $this->packages_dir.'/'.$app_name.'-'.$new_ver.'.app.zip';
 
-								// Before re-downloading a file, make sure it's not yet existing on HDD (due to DB inconsistency)
-								if((file_exists($local_zip) && (filesize($local_zip) == $app_filesize)) === false)
-								{
-									$apps_to_dl[] = array('name' => $app_name,
-										'url' => $app_dl,
-										'filesize' => $app_filesize,
-										'localtarget' => $local_zip);
-									$apps_downloaded++;
+									// Before re-downloading a file, make sure it's not yet existing on HDD (due to DB inconsistency)
+									if((file_exists($local_zip) && (filesize($local_zip) == $app_filesize)) === false)
+									{
+										$apps_to_dl[] = array('name' => $app_name,
+											'url' => $app_dl,
+											'filesize' => $app_filesize,
+											'localtarget' => $local_zip);
+										$apps_downloaded++;
+									}
 								}
 							}
+
+							unset($sxe);
+							$apps_in_repo++;
+						} catch (Exception $e) {
+							// We dont want the crawler to fail on xml parse errors
+							$app->log($this->log_prefix.$e->getMessage(), LOGLEVEL_WARN);
+							//echo 'Caught exception: ',  $e->getMessage(), "\n";
 						}
-
-						unset($sxe);
-						$apps_in_repo++;
 					}
 				}
 				//var_dump($apps);
+				//echo print_r($apps_to_dl).'<br>-------------------<br>';
 
 				// For memory reasons, unset the current vendor and his apps
 				unset($apps);
@@ -531,14 +533,12 @@
 
 			// Get registered packages and mark non-existant packages with an error code to omit the install
 			$existing_packages = array();
-			$path_query = $app->db->queryAllRecords('SELECT path AS Path FROM aps_packages;');
+			$path_query = $app->db->queryAllRecords('SELECT path AS Path FROM aps_packages');
 			foreach($path_query as $path) $existing_packages[] = $path['Path'];
 			$diff = array_diff($existing_packages, $pkg_list);
 			foreach($diff as $todelete) {
-				/*$app->db->query("UPDATE aps_packages SET package_status = '".PACKAGE_ERROR_NOMETA."'
-                    WHERE path = '".$app->db->quote($todelete)."';");*/
-				$tmp = $app->db->queryOneRecord("SELECT id FROM aps_packages WHERE path = '".$app->db->quote($todelete)."';");
-				$app->db->datalogUpdate('aps_packages', "package_status = ".PACKAGE_ERROR_NOMETA, 'id', $tmp['id']);
+				$tmp = $app->db->queryOneRecord("SELECT id FROM aps_packages WHERE path = ?", $todelete);
+				$app->db->datalogUpdate('aps_packages', array("package_status" => PACKAGE_ERROR_NOMETA), 'id', $tmp['id']);
 				unset($tmp);
 			}
 
@@ -568,20 +568,17 @@
 				//$pkg_url = $this->app_download_url_list[$pkg];
 				$pkg_url = @file_get_contents($this->interface_pkg_dir.'/'.$pkg.'/PKG_URL');
 
-				/*
-                $app->db->query("INSERT INTO `aps_packages`
-                    (`path`, `name`, `category`, `version`, `release`, `package_status`) VALUES
-                    ('".$app->db->quote($pkg)."', '".$app->db->quote($pkg_name)."',
-                    '".$app->db->quote($pkg_category)."', '".$app->db->quote($pkg_version)."',
-                    ".$app->db->quote($pkg_release).", ".PACKAGE_ENABLED.");");
-				*/
 				// Insert only if data is complete
 				if($pkg != '' && $pkg_name != '' && $pkg_category != '' && $pkg_version != '' && $pkg_release != '' && $pkg_url){
-					$insert_data = "(`path`, `name`, `category`, `version`, `release`, `package_url`, `package_status`) VALUES
-                    ('".$app->db->quote($pkg)."', '".$app->db->quote($pkg_name)."',
-                    '".$app->db->quote($pkg_category)."', '".$app->db->quote($pkg_version)."',
-                    ".$app->db->quote($pkg_release).", '".$app->db->quote($pkg_url)."', ".PACKAGE_ENABLED.");";
-
+					$insert_data = array(
+						"path" => $pkg,
+						"name" => $pkg_name,
+						"category" => $pkg_category,
+						"version" => $pkg_version,
+						"release" => $pkg_release,
+						"package_url" => $pkg_url,
+						"package_status" => PACKAGE_ENABLED
+					);
 					$app->db->datalogInsert('aps_packages', $insert_data, 'id');
 				} else {
 					if(file_exists($this->interface_pkg_dir.'/'.$pkg)) $this->removeDirectory($this->interface_pkg_dir.'/'.$pkg);
@@ -611,12 +608,12 @@
 			// This method must be used in interface mode
 			if(!$this->interface_mode) return false;
 
-			$incomplete_pkgs = $app->db->queryAllRecords("SELECT * FROM aps_packages WHERE package_url = ''");
+			$incomplete_pkgs = $app->db->queryAllRecords("SELECT * FROM aps_packages WHERE package_url = ?", '');
 			if(is_array($incomplete_pkgs) && !empty($incomplete_pkgs)){
 				foreach($incomplete_pkgs as $incomplete_pkg){
 					$pkg_url = @file_get_contents($this->interface_pkg_dir.'/'.$incomplete_pkg['path'].'/PKG_URL');
 					if($pkg_url != ''){
-						$app->db->datalogUpdate('aps_packages', "package_url = '".$app->db->quote($pkg_url)."'", 'id', $incomplete_pkg['id']);
+						$app->db->datalogUpdate('aps_packages', array("package_url" => $pkg_url), 'id', $incomplete_pkg['id']);
 					}
 				}
 			}
diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index f6a0ff4..db1c148 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -100,7 +100,7 @@
 
 		$customerdata = $app->db->queryOneRecord("SELECT client_id FROM sys_group, web_domain
             WHERE web_domain.sys_groupid = sys_group.groupid
-            AND web_domain.domain = '".$app->db->quote($domain)."';");
+            AND web_domain.domain = ?", $domain);
 		if(!empty($customerdata)) $customerid = $customerdata['client_id'];
 
 		return $customerid;
@@ -122,14 +122,14 @@
 
 		$websrv = $app->db->queryOneRecord("SELECT server_id FROM web_domain
             WHERE domain = (SELECT value FROM aps_instances_settings
-                WHERE name = 'main_domain' AND instance_id = ".$app->db->quote($instanceid).");");
+                WHERE name = 'main_domain' AND instance_id = ?)", $instanceid);
 
 		// If $websrv is empty, an error has occured. Domain no longer existing? Settings table damaged?
 		// Anyhow, remove this instance record because it's not useful at all
 		if(empty($websrv))
 		{
-			$app->db->query("DELETE FROM aps_instances WHERE id = ".$app->db->quote($instanceid).";");
-			$app->db->query("DELETE FROM aps_instances_settings WHERE instance_id = ".$app->db->quote($instanceid).";");
+			$app->db->query("DELETE FROM aps_instances WHERE id = ?", $instanceid);
+			$app->db->query("DELETE FROM aps_instances_settings WHERE instance_id = ?", $instanceid);
 		}
 		else $webserver_id = $websrv['server_id'];
 
@@ -154,9 +154,9 @@
 		$result = $app->db->queryOneRecord("SELECT id, name,
             CONCAT(version, '-', CAST(`release` AS CHAR)) AS current_version
             FROM aps_packages
-            WHERE name = (SELECT name FROM aps_packages WHERE id = ".$app->db->quote($id).")
+            WHERE name = (SELECT name FROM aps_packages WHERE id = ?)
             AND package_status = 2
-            ORDER BY REPLACE(version, '.', '')+0 DESC, `release` DESC");
+            ORDER BY REPLACE(version, '.', '')+0 DESC, `release` DESC", $id);
 
 		if(!empty($result) && ($id != $result['id'])) return $result['id'];
 
@@ -180,7 +180,7 @@
 			'package_status = '.PACKAGE_ENABLED.' AND' :
 			'(package_status = '.PACKAGE_ENABLED.' OR package_status = '.PACKAGE_LOCKED.') AND';
 
-		$result = $app->db->queryOneRecord("SELECT id FROM aps_packages WHERE ".$sql_ext." id = ".$app->db->quote($id).";");
+		$result = $app->db->queryOneRecord("SELECT id FROM aps_packages WHERE ".$sql_ext." id = ?", $id);
 		if(!$result) return false;
 
 		return true;
@@ -203,16 +203,132 @@
 		if(preg_match('/^[0-9]+$/', $id) != 1) return false;
 
 		// Only filter if not admin
-		$sql_ext = (!$is_admin) ? 'customer_id = '.$app->db->quote($client_id).' AND' : '';
-
-		$result = $app->db->queryOneRecord('SELECT id FROM aps_instances WHERE '.$sql_ext.' id = '.$app->db->quote($id).';');
+		$params = array();
+		$sql_ext = '';
+		if(!$is_admin) {
+			$sql_ext = 'customer_id = ? AND ';
+			$params[] = $client_id;
+		}
+		$params[] = $id;
+		
+		$result = $app->db->queryOneRecord('SELECT id FROM aps_instances WHERE '.$sql_ext.' id = ?', true, $params);
 		if(!$result) return false;
 
 		return true;
 	}
 
-
-
+	public function createDatabaseForPackageInstance(&$settings, $websrv) {
+		global $app;
+	
+		$app->uses('tools_sites');
+	
+		$global_config = $app->getconf->get_global_config('sites');
+	
+		$tmp = array();
+		$tmp['parent_domain_id'] = $websrv['domain_id'];
+		$tmp['sys_groupid'] = $websrv['sys_groupid'];
+		$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $tmp);
+		$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $tmp);
+		unset($tmp);
+	
+		// get information if the webserver is a db server, too
+		$web_server = $app->db->queryOneRecord("SELECT server_id,server_name,db_server FROM server WHERE server_id  = ?", $websrv['server_id']);
+		if($web_server['db_server'] == 1) {
+			// create database on "localhost" (webserver)
+			$mysql_db_server_id = $app->functions->intval($websrv['server_id']);
+			$settings['main_database_host'] = 'localhost';
+			$mysql_db_remote_access = 'n';
+			$mysql_db_remote_ips = '';
+		} else {
+			//* get the default database server of the client
+			$client = $app->db->queryOneRecord("SELECT default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $websrv['sys_groupid']);
+			if(is_array($client) && $client['default_dbserver'] > 0 && $client['default_dbserver'] != $websrv['server_id']) {
+				$mysql_db_server_id =  $app->functions->intval($client['default_dbserver']);
+				$dbserver_config = $web_config = $app->getconf->get_server_config($app->functions->intval($mysql_db_server_id), 'server');
+				$settings['main_database_host'] = $dbserver_config['ip_address'];
+				$mysql_db_remote_access = 'y';
+				$webserver_config = $app->getconf->get_server_config($app->functions->intval($websrv['server_id']), 'server');
+				$mysql_db_remote_ips = $webserver_config['ip_address'];
+			} else {
+				/* I left this in place for a fallback that should NEVER! happen.
+				 * if we reach this point it means that there is NO default db server for the client
+				* AND the webserver has NO db service enabled.
+				* We have to abort the aps installation here... so I added a return false
+				* although this does not present any error message to the user.
+				*/
+				return false;
+	
+				/*$mysql_db_server_id = $websrv['server_id'];
+				 $settings['main_database_host'] = 'localhost';
+				$mysql_db_remote_access = 'n';
+				$mysql_db_remote_ips = '';*/
+			}
+		}
+		
+		if (empty($settings['main_database_name'])) {
+			//* Find a free db name for the app
+			for($n = 1; $n <= 1000; $n++) {
+				$mysql_db_name = ($dbname_prefix != '' ? $dbname_prefix.'aps'.$n : uniqid('aps'));
+				$tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE database_name = ?", $mysql_db_name);
+				if($tmp['number'] == 0) break;
+			}
+			$settings['main_database_name'] = $mysql_db_name;
+		}
+		if (empty($settings['main_database_login'])) {
+			//* Find a free db username for the app
+			for($n = 1; $n <= 1000; $n++) {
+				$mysql_db_user = ($dbuser_prefix != '' ? $dbuser_prefix.'aps'.$n : uniqid('aps'));
+				$tmp = $app->db->queryOneRecord("SELECT count(database_user_id) as number FROM web_database_user WHERE database_user = ?", $mysql_db_user);
+				if($tmp['number'] == 0) break;
+			}
+			$settings['main_database_login'] = $mysql_db_user;
+		}
+		
+		//* Create the mysql database user if not existing
+		$tmp = $app->db->queryOneRecord("SELECT database_user_id FROM web_database_user WHERE database_user = ?", $settings['main_database_login']);
+		if(!$tmp) {
+			$insert_data = array("sys_userid" => $websrv['sys_userid'],
+								 "sys_groupid" => $websrv['sys_groupid'],
+								 "sys_perm_user" => 'riud',
+								 "sys_perm_group" => $websrv['sys_perm_group'],
+								 "sys_perm_other" => '',
+								 "server_id" => 0,
+								 "database_user" => $settings['main_database_login'],
+								 "database_user_prefix" => $dbuser_prefix,
+								 "database_password" => "PASSWORD('" . $settings['main_database_password'] . "')"
+								 );
+			$mysql_db_user_id = $app->db->datalogInsert('web_database_user', $insert_data, 'database_user_id');
+		}
+		else $mysql_db_user_id = $tmp['database_user_id'];
+		
+		//* Create the mysql database if not existing
+		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE database_name = ?", $settings['main_database_name']);
+		if($tmp['number'] == 0) {
+			$insert_data = array("sys_userid" => $websrv['sys_userid'],
+								 "sys_groupid" => $websrv['sys_groupid'],
+								 "sys_perm_user" => 'riud',
+								 "sys_perm_group" => $websrv['sys_perm_group'],
+								 "sys_perm_other" => '',
+								 "server_id" => $mysql_db_server_id,
+								 "parent_domain_id" => $websrv['domain_id'],
+								 "type" => 'mysql',
+								 "database_name" => $settings['main_database_name'],
+								 "database_name_prefix" => $dbname_prefix,
+								 "database_user_id" => $mysql_db_user_id,
+								 "database_ro_user_id" => 0,
+								 "database_charset" => '',
+								 "remote_access" => $mysql_db_remote_access,
+								 "remote_ips" => $mysql_db_remote_ips,
+								 "backup_copies" => $websrv['backup_copies'],
+								 "active" => 'y', 
+								 "backup_interval" => $websrv['backup_interval']
+								 );
+			$app->db->datalogInsert('web_database', $insert_data, 'database_id');
+		}
+		
+		return true;
+	}
+	
 	/**
 	 * Creates a new database record for the package instance and
 	 * an install task
@@ -227,7 +343,7 @@
 		$app->uses('tools_sites');
 
 		$webserver_id = 0;
-		$websrv = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '".$app->db->quote($settings['main_domain'])."';");
+		$websrv = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = ?", $settings['main_domain']);
 		if(!empty($websrv)) $webserver_id = $websrv['server_id'];
 		$customerid = $this->getCustomerIDFromDomain($settings['main_domain']);
 
@@ -240,115 +356,57 @@
 		//* Set PHP mode to php-fcgi and enable suexec in website on apache servers / set PHP mode to PHP-FPM on nginx servers
 		if($web_config['server_type'] == 'apache') {
 			if(($websrv['php'] != 'fast-cgi' || $websrv['suexec'] != 'y') && $websrv['php'] != 'php-fpm') {
-				$app->db->datalogUpdate('web_domain', "php = 'fast-cgi', suexec = 'y'", 'domain_id', $websrv['domain_id']);
+				$app->db->datalogUpdate('web_domain', array("php" => 'fast-cgi', "suexec" => 'y'), 'domain_id', $websrv['domain_id']);
 			}
 		} else {
 			// nginx
 			if($websrv['php'] != 'php-fpm' && $websrv['php'] != 'fast-cgi') {
-				$app->db->datalogUpdate('web_domain', "php = 'php-fpm'", 'domain_id', $websrv['domain_id']);
+				$app->db->datalogUpdate('web_domain', array("php" => 'php-fpm'), 'domain_id', $websrv['domain_id']);
 			}
 		}
 
 
-		//* Create the MySQL database for the application
-		$pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = '.$app->db->quote($packageid).';');
+		//* Create the MySQL database for the application if necessary
+		$pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = ?', $packageid);
 		$metafile = $this->interface_pkg_dir.'/'.$pkg['path'].'/APP-META.xml';
 		$sxe = $this->readInMetaFile($metafile);
 
 		$db_id = parent::getXPathValue($sxe, '//db:id');
 		if (!empty($db_id)) {
-			$global_config = $app->getconf->get_global_config('sites');
-
-			$tmp = array();
-			$tmp['parent_domain_id'] = $websrv['domain_id'];
-			$tmp['sys_groupid'] = $websrv['sys_groupid'];
-			$dbname_prefix = $app->tools_sites->replacePrefix($global_config['dbname_prefix'], $tmp);
-			$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $tmp);
-			unset($tmp);
-
-			// get information if the webserver is a db server, too
-			$web_server = $app->db->queryOneRecord("SELECT server_id,server_name,db_server FROM server WHERE server_id  = ".$app->functions->intval($websrv['server_id']));
-			if($web_server['db_server'] == 1) {
-				// create database on "localhost" (webserver)
-				$mysql_db_server_id = $app->functions->intval($websrv['server_id']);
-				$mysql_db_host = 'localhost';
-				$mysql_db_remote_access = 'n';
-				$mysql_db_remote_ips = '';
-			} else {
-				//* get the default database server of the client
-				$client = $app->db->queryOneRecord("SELECT default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ".$app->functions->intval($websrv['sys_groupid']));
-				if(is_array($client) && $client['default_dbserver'] > 0 && $client['default_dbserver'] != $websrv['server_id']) {
-					$mysql_db_server_id =  $app->functions->intval($client['default_dbserver']);
-					$dbserver_config = $web_config = $app->getconf->get_server_config($app->functions->intval($mysql_db_server_id), 'server');
-					$mysql_db_host = $dbserver_config['ip_address'];
-					$mysql_db_remote_access = 'y';
-					$webserver_config = $app->getconf->get_server_config($app->functions->intval($websrv['server_id']), 'server');
-					$mysql_db_remote_ips = $webserver_config['ip_address'];
-				} else {
-					/* I left this in place for a fallback that should NEVER! happen.
-                     * if we reach this point it means that there is NO default db server for the client
-                     * AND the webserver has NO db service enabled.
-                     * We have to abort the aps installation here... so I added a return false
-                     * although this does not present any error message to the user.
-                     */
-					return false;
-
-					/*$mysql_db_server_id = $websrv['server_id'];
-                    $mysql_db_host = 'localhost';
-                    $mysql_db_remote_access = 'n';
-                    $mysql_db_remote_ips = '';*/
-				}
-			}
-
-			//* Find a free db name for the app
-			for($n = 1; $n <= 1000; $n++) {
-				$mysql_db_name = $app->db->quote(($dbname_prefix != '' ? $dbname_prefix.'aps'.$n : uniqid('aps')));
-				$tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE database_name = '".$app->db->quote($mysql_db_name)."'");
-				if($tmp['number'] == 0) break;
-			}
-			//* Find a free db username for the app
-			for($n = 1; $n <= 1000; $n++) {
-				$mysql_db_user = $app->db->quote(($dbuser_prefix != '' ? $dbuser_prefix.'aps'.$n : uniqid('aps')));
-				$tmp = $app->db->queryOneRecord("SELECT count(database_user_id) as number FROM web_database_user WHERE database_user = '".$app->db->quote($mysql_db_user)."'");
-				if($tmp['number'] == 0) break;
-			}
-
-			$mysql_db_password = $settings['main_database_password'];
-
-			//* Create the mysql database user
-			$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `database_user`, `database_user_prefix`, `database_password`)
-					  VALUES( ".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', 0, '$mysql_db_user', '".$app->db->quote($dbuser_prefix) . "', PASSWORD('$mysql_db_password'))";
-			$mysql_db_user_id = $app->db->datalogInsert('web_database_user', $insert_data, 'database_user_id');
-
-			//* Create the mysql database
-			$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `parent_domain_id`, `type`, `database_name`, `database_name_prefix`, `database_user_id`, `database_ro_user_id`, `database_charset`, `remote_access`, `remote_ips`, `backup_copies`, `active`, `backup_interval`)
-					  VALUES( ".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', $mysql_db_server_id, ".$app->functions->intval($websrv['domain_id']).", 'mysql', '$mysql_db_name', '" . $app->db->quote($dbname_prefix) . "', '$mysql_db_user_id', 0, '', '$mysql_db_remote_access', '$mysql_db_remote_ips', ".$app->functions->intval($websrv['backup_copies']).", 'y', '".$app->functions->intval($websrv['backup_interval'])."')";
-			$app->db->datalogInsert('web_database', $insert_data, 'database_id');
-
-			//* Add db details to package settings
-			$settings['main_database_host'] = $mysql_db_host;
-			$settings['main_database_name'] = $mysql_db_name;
-			$settings['main_database_login'] = $mysql_db_user;
-
+			// mysql-database-name is updated inside if not set already
+			if (!$this->createDatabaseForPackageInstance($settings, $websrv)) return false;
 		}
-
+		
 		//* Insert new package instance
-		$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `customer_id`, `package_id`, `instance_status`) VALUES (".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->db->quote($websrv['sys_perm_group'])."', '', ".$app->db->quote($webserver_id).",".$app->db->quote($customerid).", ".$app->db->quote($packageid).", ".INSTANCE_PENDING.")";
+		$insert_data = array(
+			"sys_userid" => $websrv['sys_userid'],
+			"sys_groupid" => $websrv['sys_groupid'],
+			"sys_perm_user" => 'riud',
+			"sys_perm_group" => $websrv['sys_perm_group'],
+			"sys_perm_other" => '',
+			"server_id" => $webserver_id,
+			"customer_id" => $customerid,
+			"package_id" => $packageid,
+			"instance_status" => INSTANCE_PENDING
+		);
 		$InstanceID = $app->db->datalogInsert('aps_instances', $insert_data, 'id');
 
 		//* Insert all package settings
 		if(is_array($settings)) {
 			foreach($settings as $key => $value) {
-				$insert_data = "(server_id, instance_id, name, value) VALUES (".$app->db->quote($webserver_id).",".$app->db->quote($InstanceID).", '".$app->db->quote($key)."', '".$app->db->quote($value)."')";
+				$insert_data = array(
+					"server_id" => $webserver_id,
+					"instance_id" => $InstanceID,
+					"name" => $key,
+					"value" => $value
+				);
 				$app->db->datalogInsert('aps_instances_settings', $insert_data, 'id');
 			}
 		}
 
 		//* Set package status to install afetr we inserted the settings
-		$app->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_INSTALL, 'id', $InstanceID);
+		$app->db->datalogUpdate('aps_instances', array("instance_status" => INSTANCE_INSTALL), 'id', $InstanceID);
 	}
-
-
 
 	/**
 	 * Sets the status of an instance to "should be removed" and creates a
@@ -356,60 +414,22 @@
 	 *
 	 * @param $instanceid the instance to delete
 	 */
-	public function deleteInstance($instanceid)
-	{
-		global $app;
-		/*
-		$app->db->query("UPDATE aps_instances SET instance_status = ".INSTANCE_REMOVE." WHERE id = ".$instanceid.";");
-
-        $webserver_id = $this->getInstanceDataForDatalog($instanceid);
-        if($webserver_id == '') return;
-
-        // Create a sys_datalog entry for deletion
-        $datalog = array('Instance_id' => $instanceid, 'server_id' => $webserver_id);
-        $app->db->datalogSave('aps', 'DELETE', 'id', $instanceid, array(), $datalog);
-		*/
-
-		$sql = "SELECT web_database.database_id as database_id, web_database.database_user_id as `database_user_id` FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$instanceid." LIMIT 0,1";
-		$tmp = $app->db->queryOneRecord($sql);
-		if($tmp['database_id'] > 0) $app->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
-
-		$database_user = $tmp['database_user_id'];
-		$tmp = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_database` WHERE `database_user_id` = '" . $app->functions->intval($database_user) . "' OR `database_ro_user_id` = '" . $app->functions->intval($database_user) . "'");
-		if($tmp['cnt'] < 1) $app->db->datalogDelete('web_database_user', 'database_user_id', $database_user);
-
-		$app->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_REMOVE, 'id', $instanceid);
-
-	}
-
-
-
-	/**
-	 * Sets the status of an instance to "installation planned" and creates a
-	 * datalog entry to re-install the package. The existing package is simply overwritten.
-	 *
-	 * @param $instanceid the instance to delete
-	 */
-	public function reinstallInstance($instanceid)
+	public function deleteInstance($instanceid, $keepdatabase = false)
 	{
 		global $app;
 
-		/*
-		$app->db->query("UPDATE aps_instances SET instance_status = ".INSTANCE_INSTALL." WHERE id = ".$instanceid.";");
+		if (!$keepdatabase) {
+			$sql = "SELECT web_database.database_id as database_id, web_database.database_user_id as `database_user_id` FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ? LIMIT 0,1";
+			$tmp = $app->db->queryOneRecord($sql, $instanceid);
+			if($tmp['database_id'] > 0) $app->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
+	
+			$database_user = $tmp['database_user_id'];
+			$tmp = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_database` WHERE `database_user_id` = ? OR `database_ro_user_id` = ?", $database_user, $database_user);
+			if($tmp['cnt'] < 1) $app->db->datalogDelete('web_database_user', 'database_user_id', $database_user);
+		}
 
-        $webserver_id = $this->getInstanceDataForDatalog($instanceid);
-        if($webserver_id == '') return;
+		$app->db->datalogUpdate('aps_instances', array("instance_status" => INSTANCE_REMOVE), 'id', $instanceid);
 
-        // Create a sys_datalog entry for re-installation
-        $datalog = array('instance_id' => $instanceid, 'server_id' => $webserver_id);
-        $app->db->datalogSave('aps', 'INSERT', 'id', $instanceid, array(), $datalog);
-		*/
-
-		$sql = "SELECT web_database.database_id as database_id FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.value =  aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$app->db->quote($instanceid)." LIMIT 0,1";
-		$tmp = $app->db->queryOneRecord($sql);
-		if($tmp['database_id'] > 0) $app->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
-
-		$app->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_INSTALL, 'id', $instanceid);
 	}
 
 	/**
@@ -422,7 +442,7 @@
 	{
 		global $app;
 
-		$pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = '.$app->db->quote($id).';');
+		$pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = ?', $id);
 
 		// Load in meta file if existing and register its namespaces
 		$metafile = $this->interface_pkg_dir.'/'.$pkg['path'].'/APP-META.xml';
@@ -544,7 +564,7 @@
 			if(in_array($postinput['main_domain'], $domains))
 			{
 				$docroot = $app->db->queryOneRecord("SELECT document_root FROM web_domain
-                    WHERE domain = '".$app->db->quote($postinput['main_domain'])."';");
+                    WHERE domain = ?", $postinput['main_domain']);
 				$new_path = $docroot['document_root'];
 				if(substr($new_path, -1) != '/') $new_path .= '/';
 				$new_path .= $main_location;
@@ -559,13 +579,13 @@
 				$instance_domains = $app->db->queryAllRecords("SELECT instance_id, s.value AS domain
                     FROM aps_instances AS i, aps_instances_settings AS s
                     WHERE i.id = s.instance_id AND s.name = 'main_domain'
-                        AND i.customer_id = '".$app->db->quote($customerid)."';");
+                        AND i.customer_id = ?", $customerid);
 				for($i = 0; $i < count($instance_domains); $i++)
 				{
 					$used_path = '';
 
 					$doc_root = $app->db->queryOneRecord("SELECT document_root FROM web_domain
-                        WHERE domain = '".$app->db->quote($instance_domains[$i]['domain'])."';");
+                        WHERE domain = ?", $instance_domains[$i]['domain']);
 
 					// Probably the domain settings were changed later, so make sure the doc_root
 					// is not empty for further validation
@@ -576,7 +596,7 @@
 
 						$location_for_domain = $app->db->queryOneRecord("SELECT value
                             FROM aps_instances_settings WHERE name = 'main_location'
-                            AND instance_id = '".$app->db->quote($instance_domains[$i]['instance_id'])."';");
+                            AND instance_id = ?", $instance_domains[$i]['instance_id']);
 
 						// The location might be empty but the DB return must not be false!
 						if($location_for_domain) $used_path .= $location_for_domain['value'];
@@ -608,6 +628,10 @@
 		if(isset($pkg_details['Requirements Database'])
 			&& $pkg_details['Requirements Database'] != '')
 		{
+			if (isset($postinput['main_database_host'])) $input['main_database_host'] = $postinput['main_database_host'];
+			if (isset($postinput['main_database_name'])) $input['main_database_name'] = $postinput['main_database_name'];
+			if (isset($postinput['main_database_login'])) $input['main_database_login'] = $postinput['main_database_login'];
+			
 			if(isset($postinput['main_database_password']))
 			{
 				if($postinput['main_database_password'] == '') $error[] = $app->lng('error_no_database_pw');
@@ -705,7 +729,7 @@
 	{
 		global $app;
 
-		$pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = '.$app->db->quote($id).';');
+		$pkg = $app->db->queryOneRecord('SELECT * FROM aps_packages WHERE id = ?', $id);
 
 		// Load in meta file if existing and register its namespaces
 		$metafile = $this->interface_pkg_dir.'/'.$pkg['path'].'/APP-META.xml';
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 70c1722..9640a4b 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -57,7 +57,7 @@
 		global $app, $conf;
 
 		$userid = $app->functions->intval($userid);
-		$client = $app->db->queryOneRecord("SELECT client.limit_client FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
+		$client = $app->db->queryOneRecord("SELECT client.limit_client FROM sys_user, client WHERE sys_user.userid = ? AND sys_user.client_id = client.client_id", $userid);
 		if($client['limit_client'] != 0) {
 			return true;
 		} else {
@@ -73,12 +73,12 @@
 		$groupid = $app->functions->intval($groupid);
 
 		if($userid > 0 && $groupid > 0) {
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
+			$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);
+			$sql = "UPDATE sys_user SET groups = ? WHERE userid = ?";
+			$app->db->query($sql, $groups_string, $userid);
 			return true;
 		} else {
 			return false;
@@ -95,7 +95,7 @@
 		
 		// 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");
+			$this->client_limits = $app->db->queryOneRecord("SELECT client.* FROM sys_user, client WHERE sys_user.userid = ? AND sys_user.client_id = client.client_id", $userid);
 
 		// isn't client -> no limit
 		if(!$this->client_limits)
@@ -114,13 +114,13 @@
 		$groupid = $app->functions->intval($groupid);
 
 		if($userid > 0 && $groupid > 0) {
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
+			$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);
+			$sql = "UPDATE sys_user SET groups = ? WHERE userid = ?";
+			$app->db->query($sql, $groups_string, $userid);
 			return true;
 		} else {
 			return false;
@@ -129,11 +129,32 @@
 
 	public function check_module_permissions($module) {
 		// Check if the current user has the permissions to access this module
+		$module = trim(preg_replace('@\s+@', '', $module));
 		$user_modules = explode(',',$_SESSION["s"]["user"]["modules"]);
-		if(!in_array($module,$user_modules)) {
-			// echo "LOGIN_REDIRECT:/index.php";
-			header("Location: /index.php");
-			exit;
+		if(strpos($module, ',') !== false){
+			$can_use_module = false;
+			$tmp_modules = explode(',', $module);
+			if(is_array($tmp_modules) && !empty($tmp_modules)){
+				foreach($tmp_modules as $tmp_module){
+					if($tmp_module != ''){
+						if(in_array($tmp_module,$user_modules)) {
+							$can_use_module = true;
+							break;
+						}
+					}
+				}
+			}
+			if(!$can_use_module){
+				// echo "LOGIN_REDIRECT:/index.php";
+				header("Location: /index.php");
+				exit;
+			}
+		} else {
+			if(!in_array($module,$user_modules)) {
+				// echo "LOGIN_REDIRECT:/index.php";
+				header("Location: /index.php");
+				exit;
+			}
 		}
 	}
 	
@@ -153,13 +174,44 @@
 		
 	}
 
-	public function get_random_password($length = 8) {
-		$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-		$password = '';
-		for ($n=0;$n<$length;$n++) {
-			$password.=$base64_alphabet[mt_rand(0, 63)];
+	public function get_random_password($minLength = 8, $special = false) {
+		$minLength = $minLength || 10;
+		if($minLength < 8) $minLength = 8;
+		$maxLength = $minLength + 5;
+		$length = mt_rand($minLength, $maxLength);
+		
+		$alphachars = "abcdefghijklmnopqrstuvwxyz";
+		$upperchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+		$numchars = "1234567890";
+		$specialchars = "!@#_";
+		
+		$num_special = 0;
+		if($special == true) {
+			$num_special = intval(mt_rand(0, round($length / 4))) + 1;
 		}
-		return $password;
+		$numericlen = mt_rand(1, 2);
+		$alphalen = $length - $num_special - $numericlen;
+		$upperlen = intval($alphalen / 2);
+		$alphalen = $alphalen - $upperlen;
+		$password = '';
+		
+		for($i = 0; $i < $alphalen; $i++) {
+			$password .= substr($alphachars, mt_rand(0, strlen($alphachars) - 1), 1);
+		}
+		
+		for($i = 0; $i < $upperlen; $i++) {
+			$password .= substr($upperchars, mt_rand(0, strlen($upperchars) - 1), 1);
+		}
+		
+		for($i = 0; $i < $num_special; $i++) {
+			$password .= substr($specialchars, mt_rand(0, strlen($specialchars) - 1), 1);
+		}
+		
+		for($i = 0; $i < $numericlen; $i++) {
+			$password .= substr($numchars, mt_rand(0, strlen($numchars) - 1), 1);
+		}
+		
+		return str_shuffle($password);
 	}
 
 	public function crypt_password($cleartext_password) {
diff --git a/interface/lib/classes/client_templates.inc.php b/interface/lib/classes/client_templates.inc.php
index 993936b..e3141d7 100644
--- a/interface/lib/classes/client_templates.inc.php
+++ b/interface/lib/classes/client_templates.inc.php
@@ -49,7 +49,7 @@
 
 		if($old_style == true) {
 			// we have to take care of this in an other way
-			$in_db = $app->db->queryAllRecords('SELECT `assigned_template_id`, `client_template_id` FROM `client_template_assigned` WHERE `client_id` = ' . $app->functions->intval($clientId));
+			$in_db = $app->db->queryAllRecords('SELECT `assigned_template_id`, `client_template_id` FROM `client_template_assigned` WHERE `client_id` = ?', $clientId);
 			if(is_array($in_db) && count($in_db) > 0) {
 				foreach($in_db as $item) {
 					if(array_key_exists($item['client_template_id'], $needed_types) == false) $needed_types[$item['client_template_id']] = 0;
@@ -61,24 +61,24 @@
 				if($count > 0) {
 					// add new template to client (includes those from old-style without assigned_template_id)
 					for($i = $count; $i > 0; $i--) {
-						$app->db->query('INSERT INTO `client_template_assigned` (`client_id`, `client_template_id`) VALUES (' . $app->functions->intval($clientId) . ', ' . $app->functions->intval($tpl_id) . ')');
+						$app->db->query('INSERT INTO `client_template_assigned` (`client_id`, `client_template_id`) VALUES (?, ?)', $clientId, $tpl_id);
 					}
 				} elseif($count < 0) {
 					// remove old ones
 					for($i = $count; $i < 0; $i++) {
-						$app->db->query('DELETE FROM `client_template_assigned` WHERE client_id = ' . $app->functions->intval($clientId) . ' AND client_template_id = ' . $app->functions->intval($tpl_id) . ' LIMIT 1');
+						$app->db->query('DELETE FROM `client_template_assigned` WHERE client_id = ? AND client_template_id = ? LIMIT 1', $clientId, $tpl_id);
 					}
 				}
 			}
 		} else {
 			// we have to take care of this in an other way
-			$in_db = $app->db->queryAllRecords('SELECT `assigned_template_id`, `client_template_id` FROM `client_template_assigned` WHERE `client_id` = ' . $app->functions->intval($clientId));
+			$in_db = $app->db->queryAllRecords('SELECT `assigned_template_id`, `client_template_id` FROM `client_template_assigned` WHERE `client_id` = ?', $clientId);
 			if(is_array($in_db) && count($in_db) > 0) {
 				// check which templates were removed from this client
 				foreach($in_db as $item) {
 					if(in_array($item['assigned_template_id'], $used_assigned) == false) {
 						// delete this one
-						$app->db->query('DELETE FROM `client_template_assigned` WHERE `assigned_template_id` = ' . $app->functions->intval($item['assigned_template_id']));
+						$app->db->query('DELETE FROM `client_template_assigned` WHERE `assigned_template_id` = ?', $item['assigned_template_id']);
 					}
 				}
 			}
@@ -86,7 +86,7 @@
 			if(count($new_tpl) > 0) {
 				foreach($new_tpl as $item) {
 					// add new template to client (includes those from old-style without assigned_template_id)
-					$app->db->query('INSERT INTO `client_template_assigned` (`client_id`, `client_template_id`) VALUES (' . $app->functions->intval($clientId) . ', ' . $app->functions->intval($item) . ')');
+					$app->db->query('INSERT INTO `client_template_assigned` (`client_id`, `client_template_id`) VALUES (?, ?)', $clientId, $item);
 				}
 			}
 		}
@@ -106,8 +106,8 @@
 		/*
          * Get the master-template for the client
          */
-		$sql = "SELECT template_master, template_additional,limit_client FROM client WHERE client_id = " . $app->functions->intval($clientId);
-		$record = $app->db->queryOneRecord($sql);
+		$sql = "SELECT template_master, template_additional,limit_client FROM client WHERE client_id = ?";
+		$record = $app->db->queryOneRecord($sql, $clientId);
 		$masterTemplateId = $record['template_master'];
 		$is_reseller = ($record['limit_client'] != 0)?true:false;
 
@@ -115,15 +115,15 @@
 			// we have to call the update_client_templates function
 			$templates = explode('/', $record['template_additional']);
 			$this->update_client_templates($clientId, $templates);
-			$app->db->query('UPDATE `client` SET `template_additional` = \'\' WHERE `client_id` = ' . $app->functions->intval($clientId));
+			$app->db->query('UPDATE `client` SET `template_additional` = \'\' WHERE `client_id` = ?', $clientId);
 		}
 
 		/*
          * if the master-Template is custom there is NO changing
          */
 		if ($masterTemplateId > 0){
-			$sql = "SELECT * FROM client_template WHERE template_id = " . $app->functions->intval($masterTemplateId);
-			$limits = $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM client_template WHERE template_id = ?";
+			$limits = $app->db->queryOneRecord($sql, $masterTemplateId);
 		} else {
 			// if there is no master template it makes NO SENSE adding sub templates.
 			// adding subtemplates are stored in client limits, so they would add up
@@ -136,11 +136,11 @@
          * if != -1)
          */
 		$addTpl = explode('/', $additionalTemplateStr);
-		$addTpls = $app->db->queryAllRecords('SELECT `client_template_id` FROM `client_template_assigned` WHERE `client_id` = ' . $app->functions->intval($clientId));
+		$addTpls = $app->db->queryAllRecords('SELECT `client_template_id` FROM `client_template_assigned` WHERE `client_id` = ?', $clientId);
 		foreach ($addTpls as $addTpl){
 			$item = $addTpl['client_template_id'];
-			$sql = "SELECT * FROM client_template WHERE template_id = " . $app->functions->intval($item);
-			$addLimits = $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM client_template WHERE template_id = ?";
+			$addLimits = $app->db->queryOneRecord($sql, $item);
 			$app->log('Template processing subtemplate ' . $item . ' for client ' . $clientId, LOGLEVEL_DEBUG);
 			/* maybe the template is deleted in the meantime */
 			if (is_array($addLimits)){
@@ -232,6 +232,7 @@
          * Write all back to the database
          */
 		$update = '';
+		$update_values = array();
 		if(!$is_reseller) unset($limits['limit_client']); // Only Resellers may have limit_client set in template to ensure that we do not convert a client to reseller accidently.
 		foreach($limits as $k => $v){
 			if (strpos($k, 'default') !== false and $v == 0) {
@@ -239,13 +240,16 @@
 			}
 			if ((strpos($k, 'limit') !== false or strpos($k, 'default') !== false or $k == 'ssh_chroot' or $k == 'web_php_options' or $k == 'force_suexec') && !is_array($v)){
 				if ($update != '') $update .= ', ';
-				$update .= '`' . $k . "`='" . $v . "'";
+				$update .= '?? = ?';
+				$update_values[] = $k;
+				$update_values[] = $v;
 			}
 		}
+		$update_values[] = $clientId;
 		$app->log('Template processed for client ' . $clientId . ', update string: ' . $update, LOGLEVEL_DEBUG);
 		if($update != '') {
-			$sql = 'UPDATE client SET ' . $update . " WHERE client_id = " . $app->functions->intval($clientId);
-			$app->db->query($sql);
+			$sql = 'UPDATE client SET ' . $update . " WHERE client_id = ?";
+			$app->db->query($sql, true, $update_values);
 		}
 		unset($form);
 	}
diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index 16036f5..414de29 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -47,12 +47,12 @@
 		if($_SESSION["s"]["user"]["typ"] == 'user') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT default_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-			$sql = "SELECT server_id,server_name FROM server WHERE server_id = ".$app->functions->intval($client['default_dnsserver']);
+			$client = $app->db->queryOneRecord("SELECT default_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+			$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
 		} else {
 			$sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 ORDER BY server_name";
 		}
-		$records = $app->db->queryAllRecords($sql);
+		$records = $app->db->queryAllRecords($sql, $client['default_dnsserver']);
 		$records_new = array();
 		if(is_array($records)) {
 			foreach($records as $rec) {
@@ -69,12 +69,12 @@
 		if($_SESSION["s"]["user"]["typ"] == 'user') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT default_slave_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-			$sql = "SELECT server_id,server_name FROM server WHERE server_id = ".$app->functions->intval($client['default_slave_dnsserver']);
+			$client = $app->db->queryOneRecord("SELECT default_slave_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+			$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
 		} else {
 			$sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 ORDER BY server_name";
 		}
-		$records = $app->db->queryAllRecords($sql);
+		$records = $app->db->queryAllRecords($sql, $client['default_slave_dnsserver']);
 		$records_new = array();
 		if(is_array($records)) {
 			foreach($records as $rec) {
@@ -99,7 +99,7 @@
 		}
 		if(count($server_ids) == 0) return array();
 		$server_ids = implode(',', $server_ids);
-		$records = $app->db->queryAllRecords("SELECT web_domain.domain_id, CONCAT(web_domain.domain, ' :: ', server.server_name) AS parent_domain FROM web_domain, server WHERE web_domain.type = 'vhost' AND web_domain.server_id IN (".$app->db->quote($server_ids).") AND web_domain.server_id = server.server_id AND ".$app->tform->getAuthSQL('r', 'web_domain')." ORDER BY web_domain.domain");
+		$records = $app->db->queryAllRecords("SELECT web_domain.domain_id, CONCAT(web_domain.domain, ' :: ', server.server_name) AS parent_domain FROM web_domain, server WHERE web_domain.type = 'vhost' AND web_domain.server_id IN ? AND web_domain.server_id = server.server_id AND ".$app->tform->getAuthSQL('r', 'web_domain')." ORDER BY web_domain.domain", $server_ids);
 
 		$records_new = array();
 		if(is_array($records)) {
@@ -159,22 +159,25 @@
 		if($_SESSION["s"]["user"]["typ"] == 'user') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$sql = "SELECT $server_type as server_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
-			$client = $app->db->queryOneRecord($sql);
+			$sql = "SELECT $server_type as server_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?";
+			$client = $app->db->queryOneRecord($sql, $client_group_id);
 			if($client['server_id'] > 0) {
 				//* Select the default server for the client
-				$sql = "SELECT server_id,server_name FROM server WHERE server_id = ".$app->functions->intval($client['server_id']);
+				$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
+				$records = $app->db->queryAllRecords($sql, $client['server_id']);
 			} else {
 				//* Not able to find the clients defaults, use this as fallback and add a warning message to the log
 				$app->log('Unable to find default server for client in custom_datasource.inc.php', 1);
-				$sql = "SELECT server_id,server_name FROM server WHERE $field = 1 ORDER BY server_name";
+				$sql = "SELECT server_id,server_name FROM server WHERE ?? = 1 ORDER BY server_name";
+				$records = $app->db->queryAllRecords($sql, $field);
 			}
 		} else {
 			//* The logged in user is admin, so we show him all available servers of a specific type.
-			$sql = "SELECT server_id,server_name FROM server WHERE $field = 1 ORDER BY server_name";
+			$sql = "SELECT server_id,server_name FROM server WHERE ?? = 1 ORDER BY server_name";
+			$records = $app->db->queryAllRecords($sql, $field);
 		}
 
-		$records = $app->db->queryAllRecords($sql);
+		
 		$records_new = array();
 		if(is_array($records)) {
 			foreach($records as $rec) {
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index c8d569b..08a224f 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -36,6 +36,7 @@
 	private $_iConnId;
 
 	private $dbHost = '';  // hostname of the MySQL server
+	private $dbPort = '';  // port of the MySQL server
 	private $dbName = '';  // logical database name on that server
 	private $dbUser = '';  // database authorized user
 	private $dbPass = '';  // user's password
@@ -54,7 +55,9 @@
 	private $autoCommit = 1;    // Autocommit Transactions
 	private $currentRow;  // current row number
 	private $errorNumber = 0; // last error number
+	*/
 	public $errorMessage = ''; // last error message
+	/*
 	private $errorLocation = '';// last error location
 	private $isConnected = false; // needed to know if we have a valid mysqli object from the constructor
 	////
@@ -65,6 +68,7 @@
 		global $conf;
 		if($prefix != '') $prefix .= '_';
 		$this->dbHost = $conf[$prefix.'db_host'];
+		$this->dbPort = $conf[$prefix.'db_port'];
 		$this->dbName = $conf[$prefix.'db_database'];
 		$this->dbUser = $conf[$prefix.'db_user'];
 		$this->dbPass = $conf[$prefix.'db_password'];
@@ -72,13 +76,13 @@
 		$this->dbNewLink = $conf[$prefix.'db_new_link'];
 		$this->dbClientFlags = $conf[$prefix.'db_client_flags'];
 
-		$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+		$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, (int)$this->dbPort);
 		$try = 0;
 		while((!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5) {
 			if($try > 0) sleep(1);
 
 			$try++;
-			$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+			$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, (int)$this->dbPort);
 		}
 
 		if(!is_object($this->_iConnId) || mysqli_connect_error()) {
@@ -86,7 +90,7 @@
 			$this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!');
 			return false;
 		}
-		if(!((bool)mysqli_query( $this->_iConnId, "USE $this->dbName"))) {
+		if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) {
 			$this->close();
 			$this->_sqlerror('Datenbank nicht gefunden / Database not found');
 			return false;
@@ -128,8 +132,10 @@
 					$sTxt = $this->escape($sValue);
 					
 					$sTxt = str_replace('`', '', $sTxt);
-					if(strpos($sTxt, '.') !== false) $sTxt = preg_replace('/^(.+)\.(.+)$/', '`$1`.`$2`', $sTxt);
-					else $sTxt = '`' . $sTxt . '`';
+					if(strpos($sTxt, '.') !== false) {
+						$sTxt = preg_replace('/^(.+)\.(.+)$/', '`$1`.`$2`', $sTxt);
+						$sTxt = str_replace('.`*`', '.*', $sTxt);
+					} else $sTxt = '`' . $sTxt . '`';
 
 					$sQuery = substr_replace($sQuery, $sTxt, $iPos2, 2);
 					$iPos2 += strlen($sTxt);
@@ -137,13 +143,17 @@
 				} else {
 					if(is_int($sValue) || is_float($sValue)) {
 						$sTxt = $sValue;
-					} elseif(is_string($sValue) && (strcmp($sValue, '#NULL#') == 0)) {
+					} elseif(is_null($sValue) || (is_string($sValue) && (strcmp($sValue, '#NULL#') == 0))) {
 						$sTxt = 'NULL';
 					} elseif(is_array($sValue)) {
-						$sTxt = '';
-						foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\'';
-						$sTxt = '(' . substr($sTxt, 1) . ')';
-						if($sTxt == '()') $sTxt = '(0)';
+						if(isset($sValue['SQL'])) {
+							$sTxt = $sValue['SQL'];
+						} else {
+							$sTxt = '';
+							foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\'';
+							$sTxt = '(' . substr($sTxt, 1) . ')';
+							if($sTxt == '()') $sTxt = '(0)';
+						}
 					} else {
 						$sTxt = '\'' . $this->escape($sValue) . '\'';
 					}
@@ -234,7 +244,7 @@
 			$try++;
 			$ok = mysqli_ping($this->_iConnId);
 			if(!$ok) {
-				if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) {
+				if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort)) {
 					if($try > 4) {
 						$this->_sqlerror('DB::query -> reconnect');
 						return false;
@@ -252,7 +262,7 @@
 		$sQuery = call_user_func_array(array(&$this, '_build_query_string'), $aArgs);
 		$this->securityScan($sQuery);
 
-		$this->_iQueryId = mysqli_query($this->_iConnId, $sQuery);
+		$this->_iQueryId = @mysqli_query($this->_iConnId, $sQuery);
 		if (!$this->_iQueryId) {
 			$this->_sqlerror('Falsche Anfrage / Wrong Query', false, 'SQL-Query = ' . $sQuery);
 			return false;
@@ -425,6 +435,34 @@
 	}
 
 
+	/**
+	 * check if a utf8 string is valid
+	 *
+	 * @access public
+	 * @param string  $string the string to check
+	 * @return bool true if it is valid utf8, false otherwise
+	 */
+	private function check_utf8($str) {
+		$len = strlen($str);
+		for($i = 0; $i < $len; $i++){
+			$c = ord($str[$i]);
+			if ($c > 128) {
+				if (($c > 247)) return false;
+				elseif ($c > 239) $bytes = 4;
+				elseif ($c > 223) $bytes = 3;
+				elseif ($c > 191) $bytes = 2;
+				else return false;
+				if (($i + $bytes) > $len) return false;
+				while ($bytes > 1) {
+					$i++;
+					$b = ord($str[$i]);
+					if ($b < 128 || $b > 191) return false;
+					$bytes--;
+				}
+			}
+		}
+		return true;
+	} // end of check_utf8
 
 	/**
 	 * Escape a string for usage in a query
@@ -442,16 +480,16 @@
 			$sString = '';
 		}
 
-		/*$cur_encoding = mb_detect_encoding($sString);
+		$cur_encoding = mb_detect_encoding($sString);
 		if($cur_encoding != "UTF-8") {
 			if($cur_encoding != 'ASCII') {
-				$app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_WARN);
+				$app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_INFO);
 				if($cur_encoding) $sString = mb_convert_encoding($sString, 'UTF-8', $cur_encoding);
 				else $sString = mb_convert_encoding($sString, 'UTF-8');
 			}
-		} elseif(!PXBase::check_utf8($sString)) {
+		} elseif(!$this->check_utf8($sString)) {
 			$sString = utf8_encode($sString);
-		}*/
+		}
 
 		if($this->_iConnId) return mysqli_real_escape_string($this->_iConnId, $sString);
 		else return addslashes($sString);
@@ -467,6 +505,7 @@
 
 		$mysql_error = (is_object($this->_iConnId) ? mysqli_error($this->_iConnId) : mysqli_connect_error());
 		$mysql_errno = (is_object($this->_iConnId) ? mysqli_errno($this->_iConnId) : mysqli_connect_errno());
+		$this->errorMessage = $mysql_error;
 
 		//$sAddMsg .= getDebugBacktrace();
 
@@ -506,7 +545,27 @@
 		}
 		return $out;
 	}
-
+	
+	public function insertFromArray($tablename, $data) {
+		if(!is_array($data)) return false;
+		
+		$k_query = '';
+		$v_query = '';
+		
+		$params = array($tablename);
+		$v_params = array();
+		
+		foreach($data as $key => $value) {
+			$k_query .= ($k_query != '' ? ', ' : '') . '??';
+			$v_query .= ($v_query != '' ? ', ' : '') . '?';
+			$params[] = $key;
+			$v_params[] = $value;
+		}
+		
+		$query = 'INSERT INTO ?? (' . $k_query . ') VALUES (' . $v_query . ')';
+		return $this->query($query, true, $params + $v_params);
+	}
+	
 	public function diffrec($record_old, $record_new) {
 		$diffrec_full = array();
 		$diff_num = 0;
@@ -550,7 +609,6 @@
 		if(!preg_match('/^[a-zA-Z0-9\-\_\.]{1,64}$/',$db_table)) $app->error('Invalid table name '.$db_table);
 		if(!preg_match('/^[a-zA-Z0-9\-\_]{1,64}$/',$primary_field)) $app->error('Invalid primary field '.$primary_field.' in table '.$db_table);
 		
-		$primary_field = $this->quote($primary_field);
 		$primary_id = intval($primary_id);
 
 		if($force_update == true) {
@@ -598,20 +656,27 @@
 		if(is_array($insert_data)) {
 			$key_str = '';
 			$val_str = '';
+			$params = array($tablename);
+			$v_params = array();
 			foreach($insert_data as $key => $val) {
-				$key_str .= "`".$key ."`,";
-				$val_str .= "'".$this->escape($val)."',";
+				$key_str .= '??,';
+				$params[] = $key;
+				
+				$val_str .= '?,';
+				$v_params[] = $val;
 			}
 			$key_str = substr($key_str, 0, -1);
 			$val_str = substr($val_str, 0, -1);
 			$insert_data_str = '('.$key_str.') VALUES ('.$val_str.')';
+			$this->query("INSERT INTO ?? $insert_data_str", true, $params + $v_params);
 		} else {
+			/* TODO: deprecate this method! */
 			$insert_data_str = $insert_data;
+			$this->query("INSERT INTO ?? $insert_data_str", $tablename);
+			$app->log("deprecated use of passing values to datalogInsert() - table " . $tablename, 1);
 		}
-		/* TODO: reduce risk of insert_data_str! */
-
+		
 		$old_rec = array();
-		$this->query("INSERT INTO ?? $insert_data_str", $tablename);
 		$index_value = $this->insertID();
 		$new_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ? = ?", $tablename, $index_field, $index_value);
 		$this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec);
@@ -630,17 +695,24 @@
 		$old_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ?? = ?", $tablename, $index_field, $index_value);
 
 		if(is_array($update_data)) {
+			$params = array($tablename);
 			$update_data_str = '';
 			foreach($update_data as $key => $val) {
-				$update_data_str .= "`".$key ."` = '".$this->escape($val)."',";
+				$update_data_str .= '?? = ?,';
+				$params[] = $key;
+				$params[] = $val;
 			}
+			$params[] = $index_field;
+			$params[] = $index_value;
 			$update_data_str = substr($update_data_str, 0, -1);
+			$this->query("UPDATE ?? SET $update_data_str WHERE ?? = ?", true, $params);
 		} else {
+			/* TODO: deprecate this method! */
 			$update_data_str = $update_data;
+			$this->query("UPDATE ?? SET $update_data_str WHERE ?? = ?", $tablename, $index_field, $index_value);
+			$app->log("deprecated use of passing values to datalogUpdate() - table " . $tablename, 1);
 		}
-		/* TODO: reduce risk of update_data_str */
 
-		$this->query("UPDATE ?? SET $update_data_str WHERE ?? = ?", $tablename, $index_field, $index_value);
 		$new_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ?? = ?", $tablename, $index_field, $index_value);
 		$this->datalogSave($tablename, 'UPDATE', $index_field, $index_value, $old_rec, $new_rec, $force_update);
 
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 2be5fb7..43eec67 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -202,7 +202,7 @@
 		}
 
 		$ips = array();
-		$results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = '".$app->db->quote($type)."'");
+		$results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = ?", $type);
 		if(!empty($results) && is_array($results)){
 			foreach($results as $result){
 				if(preg_match($regex, $result['ip'])){
@@ -229,39 +229,6 @@
 				if(preg_match($regex, $result['ip'])) $ips[] = $result['ip'];
 			}
 		}
-		
-		/*
-		$results = $app->db->queryAllRecords("SELECT xfer FROM dns_slave WHERE xfer != ''");
-		if(!empty($results) && is_array($results)){
-			foreach($results as $result){
-				$tmp_ips = explode(',', $result['xfer']);
-				foreach($tmp_ips as $tmp_ip){
-					$tmp_ip = trim($tmp_ip);
-					if(preg_match($regex, $tmp_ip)) $ips[] = $tmp_ip;
-				}
-			}
-		}
-		$results = $app->db->queryAllRecords("SELECT xfer FROM dns_soa WHERE xfer != ''");
-		if(!empty($results) && is_array($results)){
-			foreach($results as $result){
-				$tmp_ips = explode(',', $result['xfer']);
-				foreach($tmp_ips as $tmp_ip){
-					$tmp_ip = trim($tmp_ip);
-					if(preg_match($regex, $tmp_ip)) $ips[] = $tmp_ip;
-				}
-			}
-		}
-		$results = $app->db->queryAllRecords("SELECT also_notify FROM dns_soa WHERE also_notify != ''");
-		if(!empty($results) && is_array($results)){
-			foreach($results as $result){
-				$tmp_ips = explode(',', $result['also_notify']);
-				foreach($tmp_ips as $tmp_ip){
-					$tmp_ip = trim($tmp_ip);
-					if(preg_match($regex, $tmp_ip)) $ips[] = $tmp_ip;
-				}
-			}
-		}
-		*/
 		
 		$results = $app->db->queryAllRecords("SELECT remote_ips FROM web_database WHERE remote_ips != ''");
 		if(!empty($results) && is_array($results)){
@@ -413,6 +380,15 @@
 		
 		return true;
 	}
+	
+	public function getimagesizefromstring($string){
+		if (!function_exists('getimagesizefromstring')) {
+			$uri = 'data://application/octet-stream;base64,' . base64_encode($string);
+			return getimagesize($uri);
+		} else {
+			return getimagesizefromstring($string);
+		}		
+	}
 
 }
 
diff --git a/interface/lib/classes/getconf.inc.php b/interface/lib/classes/getconf.inc.php
index a246b18..ef9e070 100644
--- a/interface/lib/classes/getconf.inc.php
+++ b/interface/lib/classes/getconf.inc.php
@@ -39,7 +39,7 @@
 		if(!isset($this->config[$server_id])) {
 			$app->uses('ini_parser');
 			$server_id = $app->functions->intval($server_id);
-			$server = $app->db->queryOneRecord('SELECT config FROM server WHERE server_id = '.$server_id);
+			$server = $app->db->queryOneRecord('SELECT config FROM server WHERE server_id = ?', $server_id);
 			$this->config[$server_id] = $app->ini_parser->parse_ini_string(stripslashes($server['config']));
 		}
 		return ($section == '') ? $this->config[$server_id] : $this->config[$server_id][$section];
diff --git a/interface/lib/classes/listform.inc.php b/interface/lib/classes/listform.inc.php
index 1b613a9..c8a9225 100644
--- a/interface/lib/classes/listform.inc.php
+++ b/interface/lib/classes/listform.inc.php
@@ -246,6 +246,7 @@
 		return $this->pagingValues[$key];
 	}
 
+	/* TODO: maybe rewrite sql */
 	public function getPagingSQL($sql_where = '1')
 	{
 		global $app, $conf;
@@ -283,7 +284,7 @@
 		if($this->searchChanged == 1) $_SESSION['search'][$list_name]['page'] = 0;
 
 		$sql_von = $app->functions->intval($_SESSION['search'][$list_name]['page'] * $records_per_page);
-		$record_count = $app->db->queryOneRecord("SELECT count(*) AS anzahl FROM $table".($app->listform->listDef['additional_tables'] != ''? ','.$app->listform->listDef['additional_tables'] : '')." WHERE $sql_where");
+		$record_count = $app->db->queryOneRecord("SELECT count(*) AS anzahl FROM ??".($app->listform->listDef['additional_tables'] != ''? ','.$app->listform->listDef['additional_tables'] : '')." WHERE $sql_where", $table);
 		$pages = $app->functions->intval(($record_count['anzahl'] - 1) / $records_per_page);
 
 
@@ -348,29 +349,33 @@
 
 		sort($show_pages);
 		$show_pages = array_unique($show_pages);
-
+		
+		$content = '<nav>
+		<ul class="pagination">';
+		
 		//* Show Back
 		if(isset($vars['show_page_back']) && $vars['show_page_back'] == 1){
-			$content = '<a class="btn-page first-page" href="'."javascript:loadContent('".$vars['list_file'].'?page=0'.$vars['page_params']."');".'">'
-				.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_stop_180.png"></a> &nbsp; ';
-			$content .= '<a class="btn-page previous-page" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['last_page'].$vars['page_params']."');".'">'
-				.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_180.png"></a> &nbsp; ';
+			$content .= '<li><a href="#" data-load-content="'.$vars['list_file'].'?page=0'.$vars['page_params'].'" aria-label="First">
+			<span aria-hidden="true">&laquo;</span></a></li>';
+			$content .= '<li><a href="#" data-load-content='.$vars['list_file'].'?page='.$vars['last_page'].$vars['page_params'].'" aria-label="Previous">
+			<span aria-hidden="true">&lsaquo;</span></a></li>';
 		}
-		$content .= ' '.$this->lng('page_txt').' ';
 		$prev = -1;
 		foreach($show_pages as $p) {
-			if($prev != -1 && $p > $prev + 1) $content .= '<span class="page-spacer">...</span>';
-			$content .= '<a class="link-page' . ($p == $vars['page'] ? ' current-page' : '') . '" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$p.$vars['page_params']."');".'">'. ($p+1) .'</a>';
+			if($prev != -1 && $p > $prev + 1) $content .= '<li class="disabled"><a href="#">…</a></li>';
+			$content .= '<li' . ($p == $vars['page'] ? ' class="active"' : '') . '><a href="#" data-load-content="'.$vars['list_file'].'?page='.$p.$vars['page_params'].'">'. ($p+1) .'</a></li>';
 			$prev = $p;
 		}
 		//.$vars['next_page'].' '.$this->lng('page_of_txt').' '.$vars['max_pages'].' &nbsp; ';
 		//* Show Next
 		if(isset($vars['show_page_next']) && $vars['show_page_next'] == 1){
-			$content .= '<a class="btn-page next-page" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['next_page'].$vars['page_params']."');".'">'
-				.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow.png"></a> &nbsp; ';
-			$content .= '<a class="btn-page last-page" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['pages'].$vars['page_params']."');".'">'
-				.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_stop.png"></a>';
+			$content .= '<li><a href="#" data-load-content="'.$vars['list_file'].'?page='.$vars['next_page'].$vars['page_params'].'" aria-label="Next">
+			<span aria-hidden="true">&rsaquo;</span></a></li>';
+			$content .= '<li><a href="#" data-load-content="'.$vars['list_file'].'?page='.$vars['pages'].$vars['page_params'].'" aria-label="Last">
+			<span aria-hidden="true">&raquo;</span></a></li>';
 		}
+		$content .= '</ul></nav>';
+		
 		return $content;
 	}
 
@@ -478,7 +483,8 @@
 		}
 		return $record;
 	}
-
+	
+	/* TODO: check double quoting of SQL */
 	public function encode($record)
 	{
 		global $app;
diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index 0062d8e..3a3ac6e 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -190,6 +190,7 @@
 		return $rec;
 	}
 
+	/* TODO: maybe rewrite SQL */
 	public function getQueryString($no_limit = false) {
 		global $app;
 		$sql_where = '';
diff --git a/interface/lib/classes/listform_tpl_generator.inc.php b/interface/lib/classes/listform_tpl_generator.inc.php
index b8a26a7..0cb158b 100644
--- a/interface/lib/classes/listform_tpl_generator.inc.php
+++ b/interface/lib/classes/listform_tpl_generator.inc.php
@@ -44,7 +44,7 @@
   <div class="pnl_toolsarea">
     <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
       <div class="buttons">
-        <button class="iconstxt icoAdd" type="button" onclick="'."loadContent('".$module."/".$listDef["edit_file"]."');".'">
+        <button class="iconstxt icoAdd" type="button" data-load-content="'.$module."/".$listDef["edit_file"].'">
           <span>{tmpl_var name="add_new_record_txt"}</span>
         </button>
       </div>
@@ -75,13 +75,13 @@
 		foreach($listDef["item"] as $field) {
 			$key = $field["field"];
 			if($field["formtype"] == 'SELECT') {
-				$html .= "            <td class=\"tbl_col_".$key."\"><select name=\"".$listDef["search_prefix"].$key."\" onChange=\"submitForm('pageForm','".$module."/".$listDef["file"]."');\">{tmpl_var name='".$listDef["search_prefix"].$key."'}</select></td>\n";
+				$html .= "            <td class=\"tbl_col_".$key."\"><select name=\"".$listDef["search_prefix"].$key."\" onChange=\"ISPConfig.submitForm('pageForm','".$module."/".$listDef["file"]."');\">{tmpl_var name='".$listDef["search_prefix"].$key."'}</select></td>\n";
 			} else {
 				$html .= "            <td class=\"tbl_col_".$key."\"><input type=\"text\" name=\"".$listDef["search_prefix"].$key."\" value=\"{tmpl_var name='".$listDef["search_prefix"].$key."'}\" /></td>\n";
 			}
 		}
 
-		$html .= '            <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','".$module."/".$listDef["file"]."');".'"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
+		$html .= '            <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="'."ISPConfig.submitForm('pageForm','".$module."/".$listDef["file"]."');".'"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
           </tr>
         </thead>
         <tbody>
@@ -91,7 +91,7 @@
 
 		foreach($listDef["item"] as $field) {
 			$key = $field["field"];
-			$html .= "            <td class=\"tbl_col_".$key."\"><a href=\"#\" onclick=\"loadContent('".$module."/".$listDef["edit_file"]."?id={tmpl_var name='id'}');\">{tmpl_var name=\"".$key."\"}</a></td>\n";
+			$html .= "            <td class=\"tbl_col_".$key."\"><a href=\"#\" data-load-content=\"".$module."/".$listDef["edit_file"]."?id={tmpl_var name='id'}\">{tmpl_var name=\"".$key."\"}</a></td>\n";
 		}
 
 		$html .= "            <td class=\"tbl_col_buttons\">
diff --git a/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php
index 9aebf77..471560a 100644
--- a/interface/lib/classes/plugin_backuplist.inc.php
+++ b/interface/lib/classes/plugin_backuplist.inc.php
@@ -56,50 +56,42 @@
 			$backup_id = $app->functions->intval($_GET['backup_id']);
 
 			//* check if the user is  owner of the parent domain
-			$domain_backup = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_backup WHERE backup_id = ".$backup_id);
+			$domain_backup = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_backup WHERE backup_id = ?", $backup_id);
 
 			$check_perm = 'u';
 			if($_GET['backup_action'] == 'download') $check_perm = 'r'; // only check read permissions on download, not update permissions
 
-			$get_domain = $app->db->queryOneRecord("SELECT domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($domain_backup["parent_domain_id"])." AND ".$app->tform->getAuthSQL($check_perm));
+			$get_domain = $app->db->queryOneRecord("SELECT domain_id FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL($check_perm), $domain_backup["parent_domain_id"]);
 			if(empty($get_domain) || !$get_domain) {
 				$app->error($app->tform->lng('no_domain_perm'));
 			}
 
 			if($_GET['backup_action'] == 'download' && $backup_id > 0) {
-				$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_download' AND action_param = '$backup_id'";
-				$tmp = $app->db->queryOneRecord($sql);
+				$server_id = $this->form->dataRecord['server_id'];
+				$backup = $app->db->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = ?", $backup_id);
+				if($backup['server_id'] > 0) $server_id = $backup['server_id'];
+				$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_download' AND action_param = ?";
+				$tmp = $app->db->queryOneRecord($sql, $backup_id);
 				if($tmp['number'] == 0) {
 					$message .= $wb['download_info_txt'];
 					$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-						"VALUES (".
-						(int)$this->form->dataRecord['server_id'] . ", " .
-						time() . ", " .
-						"'backup_download', " .
-						"'".$backup_id."', " .
-						"'pending', " .
-						"''" .
-						")";
-					$app->db->query($sql);
+						"VALUES (?, UNIX_TIMESTAMP(), 'backup_download', ?, 'pending', '')";
+					$app->db->query($sql, $server_id, $backup_id);
 				} else {
 					$error .= $wb['download_pending_txt'];
 				}
 			}
 			if($_GET['backup_action'] == 'restore' && $backup_id > 0) {
+				$server_id = $this->form->dataRecord['server_id'];
+				$backup = $app->db->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = ?", $backup_id);
+				if($backup['server_id'] > 0) $server_id = $backup['server_id'];
 				$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore' AND action_param = '$backup_id'";
 				$tmp = $app->db->queryOneRecord($sql);
 				if($tmp['number'] == 0) {
 					$message .= $wb['restore_info_txt'];
 					$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-						"VALUES (".
-						(int)$this->form->dataRecord['server_id'] . ", " .
-						time() . ", " .
-						"'backup_restore', " .
-						"'".$backup_id."', " .
-						"'pending', " .
-						"''" .
-						")";
-					$app->db->query($sql);
+						"VALUES (?, UNIX_TIMESTAMP(), 'backup_restore', ?, 'pending', '')";
+					$app->db->query($sql, $server_id, $backup_id);
 				} else {
 					$error .= $wb['restore_pending_txt'];
 				}
@@ -108,9 +100,18 @@
 		}
 
 		//* Get the data
-		$web = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->form->id));
-		$sql = "SELECT * FROM web_backup WHERE parent_domain_id = ".$app->functions->intval($this->form->id)." AND server_id = ".$app->functions->intval($web['server_id'])." ORDER BY tstamp DESC, backup_type ASC";
-		$records = $app->db->queryAllRecords($sql);
+		$server_ids = array();
+		$web = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->form->id);
+		$databases = $app->db->queryAllRecords("SELECT server_id FROM web_database WHERE parent_domain_id = ?", $this->form->id);
+		if($app->functions->intval($web['server_id']) > 0) $server_ids[] = $app->functions->intval($web['server_id']);
+		if(is_array($databases) && !empty($databases)){
+			foreach($databases as $database){
+				if($app->functions->intval($database['server_id']) > 0) $server_ids[] = $app->functions->intval($database['server_id']);
+			}
+		}
+		$server_ids = array_unique($server_ids);
+		$sql = "SELECT * FROM web_backup WHERE parent_domain_id = ? AND server_id IN ? ORDER BY tstamp DESC, backup_type ASC";
+		$records = $app->db->queryAllRecords($sql, $this->form->id, $server_ids);
 
 		$bgcolor = "#FFFFFF";
 		if(is_array($records)) {
@@ -122,6 +123,13 @@
 
 				$rec['date'] = date($app->lng('conf_format_datetime'), $rec['tstamp']);
 				$rec['backup_type'] = $wb[('backup_type_'.$rec['backup_type'])];
+				
+				$rec['download_available'] = true;
+				if($rec['server_id'] != $web['server_id']) $rec['download_available'] = false;
+				
+				if($rec['filesize'] > 0){
+					$rec['filesize'] = $app->functions->currency_format($rec['filesize']/(1024*1024), 'client').' MB';
+				}
 
 				$records_new[] = $rec;
 			}
diff --git a/interface/lib/classes/plugin_backuplist_mail.inc.php b/interface/lib/classes/plugin_backuplist_mail.inc.php
index 5bef570..901901a 100644
--- a/interface/lib/classes/plugin_backuplist_mail.inc.php
+++ b/interface/lib/classes/plugin_backuplist_mail.inc.php
@@ -39,6 +39,9 @@
 
 	function onShow() {
 		global $app;
+		
+		$app->uses('functions');
+		
 		$listTpl = new tpl;
 		$listTpl->newTemplate('templates/mail_user_backup_list.htm');
 				
@@ -52,42 +55,15 @@
 
 		if(isset($_GET['backup_action'])) {
 			$backup_id = $app->functions->intval($_GET['backup_id']);
-/*
-			if($_GET['backup_action'] == 'download' && $backup_id > 0) {
-				$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_download' AND action_param = '$backup_id'";
-				$tmp = $app->db->queryOneRecord($sql);
-				if($tmp['number'] == 0) {
-					$message .= $wb['download_info_txt'];
-					$sql = 	"INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-					"VALUES (".
-						(int)$this->form->dataRecord['server_id'] . ", " .
-						time() . ", " .
-						"'backup_download', " .
-						"'".$backup_id."', " .
-						"'pending', " .
-						"''" .
-					")";
-					$app->db->query($sql);
-				} else {
-					$error .= $wb['download_pending_txt'];
-				}
-			}
-*/
-			if($_GET['backup_action'] == 'restore' && $backup_id > 0) {
-				$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore' AND action_param = '$backup_id'";
-				$tmp = $app->db->queryOneRecord($sql);
+
+			if($_GET['backup_action'] == 'restore_mail' && $backup_id > 0) {
+				$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore_mail' AND action_param = ?";
+				$tmp = $app->db->queryOneRecord($sql, $backup_id);
 				if($tmp['number'] == 0) {
 					$message .= $wb['restore_info_txt'];
 					$sql = 	"INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-					"VALUES (".
-						(int)$this->form->dataRecord['server_id'] . ", " .
-						time() . ", " .
-						"'backup_restore', " .
-						"'".$backup_id."', " .
-						"'pending', " .
-						"''" .
-					")";
-					$app->db->query($sql);
+					"VALUES (?, ? 'backup_restore_mail', ?, 'pending','')";
+					$app->db->query($sql, $this->form->dataRecord['server_id'], time(), $backup_id);
 				} else {
 					$error .= $wb['restore_pending_txt'];
 				}
@@ -95,8 +71,8 @@
 		}
 				
 		//* Get the data
-		$sql = "SELECT * FROM mail_backup WHERE mailuser_id = ".$this->form->id." ORDER BY tstamp DESC";
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT * FROM mail_backup WHERE mailuser_id = ? ORDER BY tstamp DESC";
+		$records = $app->db->queryAllRecords($sql, $this->form->id);
 		$bgcolor = "#FFFFFF";
 		if(is_array($records)) {
 			foreach($records as $rec) {
@@ -105,6 +81,7 @@
 				$rec["bgcolor"] = $bgcolor;
 				$rec['date'] = date($app->lng('conf_format_datetime'),$rec['tstamp']);
 				$rec['backup_type'] = $wb[('backup_type_'.$rec['backup_type'])];
+				$rec['filesize'] = $app->functions->formatBytes($rec['filesize']);
 				$records_new[] = $rec;
 			}
 		}
diff --git a/interface/lib/classes/plugin_dbhistory.inc.php b/interface/lib/classes/plugin_dbhistory.inc.php
index c654731..3ad5d42 100644
--- a/interface/lib/classes/plugin_dbhistory.inc.php
+++ b/interface/lib/classes/plugin_dbhistory.inc.php
@@ -47,12 +47,13 @@
 		$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."'";
+			$sql = "SELECT action, tstamp, user, data FROM sys_datalog WHERE dbtable = ? AND dbidx = ?";
+			$records = $app->db->queryAllRecords($sql, $db_table, $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."'";
+			$sql = "SELECT action, tstamp, user, data FROM sys_datalog WHERE user = ? AND dbtable = ? AND dbidx = ?";
+			$records = $app->db->queryAllRecords($sql, $_SESSION["s"]["user"]["username"], $db_table, $db_table_idx.":".$primary_id);
 		}
 
-		$records = $app->db->queryAllRecords($sql);
 		if(is_array($records)) {
 			$content .= '<table>';
 			foreach($records as $rec) {
diff --git a/interface/lib/classes/plugin_directive_snippets.inc.php b/interface/lib/classes/plugin_directive_snippets.inc.php
new file mode 100644
index 0000000..dbc7d48
--- /dev/null
+++ b/interface/lib/classes/plugin_directive_snippets.inc.php
@@ -0,0 +1,72 @@
+<?php
+
+
+class plugin_directive_snippets extends plugin_base
+{
+	var $module;
+	var $form;
+	var $tab;
+	var $record_id;
+	var $formdef;
+	var $options;
+
+	public function onShow()
+	{
+		global $app;
+
+		$listTpl = new tpl;
+		$listTpl->newTemplate('templates/web_directive_snippets.htm');
+
+		//* Loading language file
+		$lng_file = "lib/lang/".$_SESSION["s"]["language"]."_web_directive_snippets.lng";
+
+		include $lng_file;
+		$listTpl->setVar($wb);
+
+		$message = '';
+		$error   = '';
+
+		$server_type = $app->getconf->get_server_config($this->form->dataRecord['server_id'], 'web');
+		$server_type = $server_type['server_type'];
+		$records = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND type = ? ORDER BY name ASC", $server_type);
+
+		for ($i = 0, $c = count($records); $i < $c; $i++)
+		{
+			$records[$i]['is_selected'] = false;
+
+			if ($this->form->dataRecord['directive_snippets_id'] === $records[$i]['directive_snippets_id'])
+				$records[$i]['is_selected'] = true;
+		}
+
+		$listTpl->setLoop('records', $records);
+
+		$list_name = 'directive_snippets_list';
+		$_SESSION["s"]["list"][$list_name]["parent_id"] = $this->form->id;
+		$_SESSION["s"]["list"][$list_name]["parent_name"] = $app->tform->formDef["name"];
+		$_SESSION["s"]["list"][$list_name]["parent_tab"] = $_SESSION["s"]["form"]["tab"];
+		$_SESSION["s"]["list"][$list_name]["parent_script"] = $app->tform->formDef["action"];
+		$_SESSION["s"]["form"]["return_to"] = $list_name;
+
+		return $listTpl->grab();
+	}
+	
+	public function onUpdate()
+	{
+		global $app, $conf;
+
+		if (isset($this->form->dataRecord['directive_snippets_id']) && $this->form->oldDataRecord['directive_snippets_id'] !== $this->form->dataRecord['directive_snippets_id']) {
+			$app->db->query('UPDATE web_domain SET directive_snippets_id = ? WHERE domain_id = ?', $this->form->dataRecord['directive_snippets_id'], $this->form->id);
+		}
+	}
+
+	public function onInsert()
+	{
+		global $app, $conf;
+
+		if (isset($this->form->dataRecord['directive_snippets_id'])) {
+			$app->db->query('UPDATE web_domain SET directive_snippets_id = ? WHERE domain_id = ?', $this->form->dataRecord['directive_snippets_id'], $this->form->id);
+		}
+	}
+
+}
+?>
\ No newline at end of file
diff --git a/interface/lib/classes/plugin_listview.inc.php b/interface/lib/classes/plugin_listview.inc.php
index e7d576c..bc764ca 100644
--- a/interface/lib/classes/plugin_listview.inc.php
+++ b/interface/lib/classes/plugin_listview.inc.php
@@ -126,7 +126,7 @@
 
 
 		// Get the data
-		$records = $app->db->queryAllRecords("SELECT * FROM ".$app->listform->listDef["table"]." WHERE $sql_where $sql_order_by $limit_sql");
+		$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE $sql_where $sql_order_by $limit_sql", $app->listform->listDef["table"]);
 
 		$bgcolor = "#FFFFFF";
 		if(is_array($records)) {
@@ -174,6 +174,58 @@
 		$_SESSION["s"]["form"]["return_to"] = $list_name;
 		//die(print_r($_SESSION["s"]["list"][$list_name]));
 
+		// defaults
+		$listTpl->setVar('app_title', $app->_conf['app_title']);
+		if(isset($_SESSION['s']['user'])) {
+			$listTpl->setVar('app_version', $app->_conf['app_version']);
+			// get pending datalog changes
+			$datalog = $app->db->datalogStatus();
+			$listTpl->setVar('datalog_changes_txt', $app->lng('datalog_changes_txt'));
+			$listTpl->setVar('datalog_changes_end_txt', $app->lng('datalog_changes_end_txt'));
+			$listTpl->setVar('datalog_changes_count', $datalog['count']);
+			$listTpl->setLoop('datalog_changes', $datalog['entries']);
+		} else {
+			$listTpl->setVar('app_version', '');
+		}
+		$listTpl->setVar('app_link', $app->_conf['app_link']);
+
+		$listTpl->setVar('app_logo', $app->_conf['logo']);
+
+		$listTpl->setVar('phpsessid', session_id());
+
+		$listTpl->setVar('theme', $_SESSION['s']['theme']);
+		$listTpl->setVar('html_content_encoding', $app->_conf['html_content_encoding']);
+
+		$listTpl->setVar('delete_confirmation', $app->lng('delete_confirmation'));
+		//print_r($_SESSION);
+		if(isset($_SESSION['s']['module']['name'])) {
+			$listTpl->setVar('app_module', $_SESSION['s']['module']['name']);
+		}
+		if(isset($_SESSION['s']['user']) && $_SESSION['s']['user']['typ'] == 'admin') {
+			$listTpl->setVar('is_admin', 1);
+		}
+		if(isset($_SESSION['s']['user']) && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+			$listTpl->setVar('is_reseller', 1);
+		}
+		/* Show username */
+		if(isset($_SESSION['s']['user'])) {
+			$listTpl->setVar('cpuser', $_SESSION['s']['user']['username']);
+			$listTpl->setVar('logout_txt', $app->lng('logout_txt'));
+			/* Show search field only for normal users, not mail users */
+			if(stristr($_SESSION['s']['user']['username'], '@')){
+				$listTpl->setVar('usertype', 'mailuser');
+			} else {
+				$listTpl->setVar('usertype', 'normaluser');
+			}
+		}
+
+		/* Global Search */
+		$listTpl->setVar('globalsearch_resultslimit_of_txt', $app->lng('globalsearch_resultslimit_of_txt'));
+		$listTpl->setVar('globalsearch_resultslimit_results_txt', $app->lng('globalsearch_resultslimit_results_txt'));
+		$listTpl->setVar('globalsearch_noresults_text_txt', $app->lng('globalsearch_noresults_text_txt'));
+		$listTpl->setVar('globalsearch_noresults_limit_txt', $app->lng('globalsearch_noresults_limit_txt'));
+		$listTpl->setVar('globalsearch_searchfield_watermark_txt', $app->lng('globalsearch_searchfield_watermark_txt'));
+		
 		return $listTpl->grab();
 
 	}
diff --git a/interface/lib/classes/quota_lib.inc.php b/interface/lib/classes/quota_lib.inc.php
index b9ef6aa..24a3ce3 100644
--- a/interface/lib/classes/quota_lib.inc.php
+++ b/interface/lib/classes/quota_lib.inc.php
@@ -14,7 +14,7 @@
 		//print_r($monitor_data);
 		
 		// select all websites or websites belonging to client
-		$sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".(($clientid != null)?" AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)":''), $app->functions->intval($client_id));
+		$sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".(($clientid != null)?" AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)":''), $clientid);
 		
 		//print_r($sites);
 		if(is_array($sites) && !empty($sites)){
@@ -35,7 +35,13 @@
 				if (!is_numeric($sites[$i]['soft'])) $sites[$i]['soft']=$sites[$i]['soft'][1];
 				if (!is_numeric($sites[$i]['hard'])) $sites[$i]['hard']=$sites[$i]['hard'][1];
 				if (!is_numeric($sites[$i]['files'])) $sites[$i]['files']=$sites[$i]['files'][1];
-		
+				
+				$sites[$i]['used_raw'] = $sites[$i]['used'];
+				$sites[$i]['soft_raw'] = $sites[$i]['soft'];
+				$sites[$i]['hard_raw'] = $sites[$i]['hard'];
+				$sites[$i]['files_raw'] = $sites[$i]['files'];
+				$sites[$i]['used_percentage'] = ($sites[$i]['soft'] > 0 && $sites[$i]['used'] > 0 ? round($sites[$i]['used'] * 100 / $sites[$i]['soft']) : 0);
+				
 				if ($readable) {
 					// colours
 					$sites[$i]['display_colour'] = '#000000';
@@ -89,7 +95,68 @@
 		
 		return $sites;
 	}
-
+	
+	public function get_trafficquota_data($clientid = null, $lastdays = 0) {
+		global $app;
+	
+		$traffic_data = array();
+	
+		// select vhosts (belonging to client)
+		if($clientid != null){
+			$sql_where = " AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)";
+		}
+		$sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')".$sql_where, $clientid);
+	
+		$hostnames = array();
+		$traffic_data = array();
+	
+		foreach ($sites as $site) {
+			$hostnames[] = $site['domain'];
+			$traffic_data[$site['domain']]['domain_id'] = $site['domain_id'];
+		}
+	
+		// fetch all traffic-data of selected vhosts
+		if (!empty($hostnames)) {
+			$tmp_year = date('Y');
+			$tmp_month = date('m');
+			// This Month
+			$tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE YEAR(traffic_date) = ? AND MONTH(traffic_date) = ? AND hostname IN ? GROUP BY hostname", $tmp_year, $tmp_month, $hostnames);
+			foreach ($tmp_recs as $tmp_rec) {
+				$traffic_data[$tmp_rec['hostname']]['this_month'] = $tmp_rec['t'];
+			}
+			// This Year
+			$tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE YEAR(traffic_date) = ? AND hostname IN ? GROUP BY hostname", $tmp_year, $hostnames);
+			foreach ($tmp_recs as $tmp_rec) {
+				$traffic_data[$tmp_rec['hostname']]['this_year'] = $tmp_rec['t'];
+			}
+				
+			$tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
+			$tmp_month = date('m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
+			// Last Month
+			$tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE YEAR(traffic_date) = ? AND MONTH(traffic_date) = ? AND hostname IN ? GROUP BY hostname", $tmp_year, $tmp_month, $hostnames);
+			foreach ($tmp_recs as $tmp_rec) {
+				$traffic_data[$tmp_rec['hostname']]['last_month'] = $tmp_rec['t'];
+			}
+				
+			$tmp_year = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y")-1));
+			// Last Year
+			$tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE YEAR(traffic_date) = ? AND hostname IN ? GROUP BY hostname", $tmp_year, $hostnames);
+			foreach ($tmp_recs as $tmp_rec) {
+				$traffic_data[$tmp_rec['hostname']]['last_year'] = $tmp_rec['t'];
+			}
+				
+			if (is_int($lastdays)  && ($lastdays > 0)) {
+				// Last xx Days
+				$tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE (traffic_date >= DATE_SUB(NOW(), INTERVAL ? DAY)) AND hostname IN ? GROUP BY hostname", $lastdays, $hostnames);
+				foreach ($tmp_recs as $tmp_rec) {
+					$traffic_data[$tmp_rec['hostname']]['lastdays'] = $tmp_rec['t'];
+				}
+			}
+		}
+	
+		return $traffic_data;
+	}
+	
 	public function get_mailquota_data($clientid = null, $readable = true) {
 		global $app;
 		
@@ -109,7 +176,7 @@
 		//print_r($monitor_data);
 		
 		// select all email accounts or email accounts belonging to client
-		$emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : ''), $app->functions->intval($client_id));
+		$emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : ''), $clientid);
 		
 		//print_r($emails);
 		if(is_array($emails) && !empty($emails)){
@@ -119,6 +186,11 @@
 				$emails[$i]['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0);
 		
 				if (!is_numeric($emails[$i]['used'])) $emails[$i]['used']=$emails[$i]['used'][1];
+				
+				$emails[$i]['quota_raw'] = $emails[$i]['quota'];
+				$emails[$i]['used_raw'] = $emails[$i]['used'];
+				$emails[$i]['used_percentage'] = ($emails[$i]['quota'] > 0 && $emails[$i]['used'] > 0 ? round($emails[$i]['used'] * 100 / $emails[$i]['quota']) : 0);
+
 				
 				if ($readable) {
 					// colours
@@ -149,4 +221,66 @@
 		
 		return $emails;
 	}
+	
+	public function get_databasequota_data($clientid = null, $readable = true) {
+		global $app;
+	
+		$tmp_rec =  $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'database_size' ORDER BY created DESC");
+		$monitor_data = array();
+		if(is_array($tmp_rec)) {
+			foreach ($tmp_rec as $tmp_mon) {
+				$tmp_array = unserialize($app->db->unquote($tmp_mon['data']));
+				if(is_array($tmp_array)) {
+					foreach($tmp_array as $key => $data) {
+						if(!isset($monitor_data[$data['database_name']]['size'])) $monitor_data[$data['database_name']]['size'] = $data['size'];
+					}
+				}
+			}
+		}
+		//print_r($monitor_data);
+	
+		// select all databases belonging to client
+		$databases = $app->db->queryAllRecords("SELECT * FROM web_database".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : ''), $clientid);
+	
+		//print_r($databases);
+		if(is_array($databases) && !empty($databases)){
+			for($i=0;$i<sizeof($databases);$i++){
+				$databasename = $databases[$i]['database_name'];
+	
+				$databases[$i]['used'] = isset($monitor_data[$databasename]['size']) ? $monitor_data[$databasename]['size'] : 0;
+	
+				$databases[$i]['quota_raw'] = $databases[$i]['database_quota'];
+				$databases[$i]['used_raw'] = $databases[$i]['used'];
+				$databases[$i]['used_percentage'] = (($databases[$i]['database_quota'] > 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used'] * 100 / $databases[$i]['database_quota']) : 0;
+	
+				if ($readable) {
+					// colours
+					$databases[$i]['display_colour'] = '#000000';
+					if($databases[$i]['database_quota'] > 0){
+						$used_ratio = $databases[$i]['used']/$databases[$i]['database_quota'];
+					} else {
+						$used_ratio = 0;
+					}
+					if($used_ratio >= 0.8) $databases[$i]['display_colour'] = '#fd934f';
+					if($used_ratio >= 1) $databases[$i]['display_colour'] = '#cc0000';
+						
+					if($databases[$i]['database_quota'] == 0){
+						$databases[$i]['database_quota'] = $app->lng('unlimited');
+					} else {
+						$databases[$i]['database_quota'] = round($databases[$i]['database_quota'] / 1048576, 4).' MB';
+					}
+						
+						
+					if($databases[$i]['used'] < 1544000) {
+						$databases[$i]['used'] = round($databases[$i]['used'] / 1024, 4).' KB';
+					} else {
+						$databases[$i]['used'] = round($databases[$i]['used'] / 1048576, 4).' MB';
+					}
+				}
+			}
+		}
+	
+		return $databases;
+	}
+	
 }
\ No newline at end of file
diff --git a/interface/lib/classes/remote.d/admin.inc.php b/interface/lib/classes/remote.d/admin.inc.php
index ba966fe..2541ca5 100644
--- a/interface/lib/classes/remote.d/admin.inc.php
+++ b/interface/lib/classes/remote.d/admin.inc.php
@@ -60,7 +60,7 @@
 			switch($key) {
 				case 'sys_userid':
 					// check if userid is valid
-					$check = $app->db->queryOneRecord('SELECT userid FROM sys_user WHERE userid = ' . $app->functions->intval($value));
+					$check = $app->db->queryOneRecord('SELECT userid FROM sys_user WHERE userid = ?', $app->functions->intval($value));
 					if(!$check || !$check['userid']) {
 						$this->server->fault('invalid parameters', $value . ' is no valid sys_userid.');
 						return false;
@@ -69,7 +69,7 @@
 					break;
 				case 'sys_groupid':
 					// check if groupid is valid
-					$check = $app->db->queryOneRecord('SELECT groupid FROM sys_group WHERE groupid = ' . $app->functions->intval($value));
+					$check = $app->db->queryOneRecord('SELECT groupid FROM sys_group WHERE groupid = ?', $app->functions->intval($value));
 					if(!$check || !$check['groupid']) {
 						$this->server->fault('invalid parameters', $value . ' is no valid sys_groupid.');
 						return false;
diff --git a/interface/lib/classes/remote.d/aps.inc.php b/interface/lib/classes/remote.d/aps.inc.php
new file mode 100644
index 0000000..b626f1b
--- /dev/null
+++ b/interface/lib/classes/remote.d/aps.inc.php
@@ -0,0 +1,318 @@
+<?php
+
+/*
+Copyright (c) 2007 - 2013, 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 01.2015--
+Created by Dominik Müller <info@profi-webdesign.net>
+Copyright (c) Profi Webdesign Dominik Müller
+
+*/
+
+class remoting_aps extends remoting {
+	//* Functions for APS
+	public function sites_aps_update_package_list($session_id)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_update_package')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_crawler');
+		$aps = new ApsCrawler($app, false); // true = Interface mode, false = Server mode
+		$aps->startCrawler();
+		$aps->parseFolderToDB();
+		$aps->fixURLs();
+	
+		return true;
+	}
+	
+	public function sites_aps_available_packages_list($session_id, $params)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_available_packages_list')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_base');
+	
+		if (isset($params['all_packages']) && ($params['all_packages'] == true)) {
+			$where = '(aps_packages.package_status = '.PACKAGE_ENABLED.' OR aps_packages.package_status = '.PACKAGE_LOCKED.')';
+		}
+		else {
+			$where = 'aps_packages.package_status = '.PACKAGE_ENABLED;
+		}
+	
+		$sql  = 'SELECT * FROM aps_packages WHERE '.$where.' ORDER BY aps_packages.name, aps_packages.version';
+		return $app->db->queryAllRecords($sql);
+	}
+	
+	public function sites_aps_get_package_details($session_id, $primary_id)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_get_package_details')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_guicontroller');
+		$gui = new ApsGUIController($app);
+	
+		// Package-ID Check
+		if (isset($primary_id))
+		{
+			$newest_pkg_id = $gui->getNewestPackageID($pkg_id);
+			if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
+		}
+	
+		// Make sure an integer ID is given
+		if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
+			$this->server->fault('package_error', 'The given Package ID is not valid.');
+			return false;
+		}
+	
+		// Get package details
+		$details = $gui->getPackageDetails($primary_id);
+		if (isset($details['error'])) {
+			$this->server->fault('package_error', $details['error']);
+			return false;
+		}
+	
+		// encode all parts to ensure SOAP-XML-format
+		array_walk_recursive($details, function(&$item, &$key) { $item = utf8_encode($item); } );
+		// Special handling for license-text because of too much problems with soap-transport
+		$details['License content'] = base64_encode($details['License content']);
+	
+		return $details;
+	}
+	
+	public function sites_aps_get_package_file($session_id, $primary_id, $filename) {
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_get_package_file')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_guicontroller');
+		$gui = new ApsGUIController($app);
+	
+		// Package-ID Check
+		if (isset($primary_id))
+		{
+			$newest_pkg_id = $gui->getNewestPackageID($pkg_id);
+			if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
+		}
+	
+		// Make sure an integer ID is given
+		if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
+			$this->server->fault('package_error', 'The given Package ID is not valid.');
+			return false;
+		}
+	
+		// Get package details
+		$details = $gui->getPackageDetails($primary_id);
+		if (isset($details['error'])) {
+			$this->server->fault('package_error', $details['error']);
+			return false;
+		}
+	
+		// find file in details
+		$found = false;
+		if (basename($details['Icon']) == $filename) $found = true;
+		if (!$found && isset($details['Screenshots']) && is_array($details['Screenshots']))
+		foreach ($details['Screenshots'] as $screen) { if (basename($screen['ScreenPath']) == $filename) { $found = true; break; } }
+	
+		if (!$found) {
+			$this->server->fault('package_error', 'File not found in package.');
+			return false;
+		}
+	
+		return base64_encode(file_get_contents(ISPC_ROOT_PATH.'/web/sites/aps_meta_packages/'.$details['path'].'/'.$filename));
+	}
+	
+	public function sites_aps_get_package_settings($session_id, $primary_id)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_get_package_details')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_guicontroller');
+		$gui = new ApsGUIController($app);
+	
+		// Package-ID Check
+		if (isset($primary_id))
+		{
+			$newest_pkg_id = $gui->getNewestPackageID($pkg_id);
+			if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
+		}
+	
+		// Make sure an integer ID is given
+		if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
+			$this->server->fault('package_error', 'The given Package ID is not valid.');
+			return false;
+		}
+	
+		// Get package settings
+		$settings = $gui->getPackageSettings($primary_id);
+		if (isset($settings['error'])) {
+			$this->server->fault('package_error', $settings['error']);
+			return false;
+		}
+	
+		// encode all parts to ensure SOAP-XML-format
+		array_walk_recursive($settings, function(&$item, &$key) { $item = utf8_encode($item); } );
+	
+		return $settings;
+	}
+	
+	public function sites_aps_install_package($session_id, $primary_id, $params)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_install_package')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_guicontroller');
+		$gui = new ApsGUIController($app);
+	
+		// Package-ID Check
+		if (isset($primary_id))
+		{
+			$newest_pkg_id = $gui->getNewestPackageID($primary_id);
+			if($newest_pkg_id != 0) $primary_id = $newest_pkg_id;
+		}
+	
+		// Make sure an integer ID is given
+		if (!isset($primary_id) || !$gui->isValidPackageID($primary_id, true)) {// always adminflag
+			$this->server->fault('package_error', 'The given Package ID is not valid.');
+			return false;
+		}
+	
+		// Get package details
+		$details = $gui->getPackageDetails($primary_id);
+		if (isset($details['error'])) {
+			$this->server->fault('package_error', $details['error']);
+			return false;
+		}
+		$settings = $gui->getPackageSettings($primary_id);
+		if (isset($settings['error'])) {
+			$this->server->fault('package_error', $settings['error']);
+			return false;
+		}
+	
+		// Check given Site/VHostDomain
+		if (!isset($params['main_domain'])) {
+			$this->server->fault('invalid parameters', 'No valid domain given.');
+			return false;
+		}
+	
+		$sql = "SELECT * FROM web_domain WHERE domain = ?";
+		$domain = $app->db->queryOneRecord($sql, $params['main_domain']);
+	
+		if (!$domain) {
+			$this->server->fault('invalid parameters', 'No valid domain given.');
+			return false;
+		}
+	
+		$domains = array($domain['domain']); // Simulate correct Domain-List
+		$result = $gui->validateInstallerInput($params, $details, $domains, $settings);
+		if(empty($result['error']))
+		{
+			return $gui->createPackageInstance($result['input'], $primary_id);
+		}
+		
+		$this->server->fault('invalid parameters', implode('<br />', $result['error']));
+		return false;
+	}
+	
+	public function sites_aps_instance_get($session_id, $primary_id)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_instance_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$sql  = "SELECT * FROM aps_instances WHERE id = ?";
+		$result = $app->db->queryOneRecord($sql, $app->functions->intval($primary_id));
+		return $result;
+	}
+	
+	public function sites_aps_instance_settings_get($session_id, $primary_id)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_instance_get')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$sql  = "SELECT * FROM aps_instances_settings WHERE instance_id = ?";
+		$result = $app->db->queryAllRecords($sql, $app->functions->intval($primary_id));
+		return $result;
+	}
+	
+	public function sites_aps_instance_delete($session_id, $primary_id, $params = array())
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'sites_aps_instance_delete')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$app->load('aps_guicontroller');
+		$gui = new ApsGUIController($app);
+	
+		// Check if Instance exists
+		$sql  = "SELECT * FROM aps_instances WHERE id = ?";
+		$result = $app->db->queryOneRecord($sql, $primary_id);
+	
+		if (!$result) {
+			$this->server->fault('instance_error', 'No valid instance id given.');
+			return false;
+		}
+	
+		$gui->deleteInstance($primary_id, (isset($params['keep_database']) && ($params['keep_database'] === true)));
+	
+		return true;
+	}
+}
+
+?>
diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php
index d780ec8..cccc04f 100644
--- a/interface/lib/classes/remote.d/client.inc.php
+++ b/interface/lib/classes/remote.d/client.inc.php
@@ -65,7 +65,7 @@
 			if(isset($data['client_id'])) {
 				// this is a single record
 				if($data['template_additional'] == '') {
-					$tpls = $app->db->queryAllRecords('SELECT CONCAT(`assigned_template_id`, \':\', `client_template_id`) as `item` FROM `client_template_assigned` WHERE `client_id` = ' . $data['client_id']);
+					$tpls = $app->db->queryAllRecords('SELECT CONCAT(`assigned_template_id`, \':\', `client_template_id`) as `item` FROM `client_template_assigned` WHERE `client_id` = ?', $data['client_id']);
 					$tpl_arr = array();
 					if($tpls) {
 						foreach($tpls as $tpl) $tpl_arr[] = $tpl['item'];
@@ -78,7 +78,7 @@
 				// multiple client records
 				foreach($data as $index => $client) {
 					if($client['template_additional'] == '') {
-						$tpls = $app->db->queryAllRecords('SELECT CONCAT(`assigned_template_id`, \':\', `client_template_id`) as `item` FROM `client_template_assigned` WHERE `client_id` = ' . $client['client_id']);
+						$tpls = $app->db->queryAllRecords('SELECT CONCAT(`assigned_template_id`, \':\', `client_template_id`) as `item` FROM `client_template_assigned` WHERE `client_id` = ?', $client['client_id']);
 						$tpl_arr = array();
 						if($tpls) {
 							foreach($tpls as $tpl) $tpl_arr[] = $tpl['item'];
@@ -104,7 +104,7 @@
 
 		$sys_userid = $app->functions->intval($sys_userid);
 
-		$rec = $app->db->queryOneRecord("SELECT client_id FROM sys_user WHERE userid = ".$sys_userid);
+		$rec = $app->db->queryOneRecord("SELECT client_id FROM sys_user WHERE userid = ?", $sys_userid);
 		if(isset($rec['client_id'])) {
 			return $app->functions->intval($rec['client_id']);
 		} else {
@@ -125,7 +125,7 @@
 		
 		$client_id = $app->functions->intval($client_id);
 
-		$rec = $app->db->queryOneRecord("SELECT company_name,contact_name,gender,email,language FROM client WHERE client_id = ".$client_id);
+		$rec = $app->db->queryOneRecord("SELECT company_name,contact_name,gender,email,language FROM client WHERE client_id = ?", $client_id);
 		
 		if(is_array($rec)) {
 			return $rec;
@@ -145,7 +145,7 @@
 
 		$client_id = $app->functions->intval($client_id);
 
-		$rec = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client_id);
+		$rec = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
 		if(isset($rec['groupid'])) {
 			return $app->functions->intval($rec['groupid']);
 		} else {
@@ -169,7 +169,7 @@
 
 		if($params['parent_client_id']) {
 			// check if this one is reseller
-			$check = $app->db->queryOneRecord('SELECT `limit_client` FROM `client` WHERE `client_id` = ' . intval($params['parent_client_id']));
+			$check = $app->db->queryOneRecord('SELECT `limit_client` FROM `client` WHERE `client_id` = ?', intval($params['parent_client_id']));
 			if($check['limit_client'] == 0) {
 				$this->server->fault('Invalid reseller', 'Selected client is not a reseller.');
 				return false;
@@ -208,7 +208,7 @@
 
 		if($params['parent_client_id']) {
 			// check if this one is reseller
-			$check = $app->db->queryOneRecord('SELECT `limit_client` FROM `client` WHERE `client_id` = ' . intval($params['parent_client_id']));
+			$check = $app->db->queryOneRecord('SELECT `limit_client` FROM `client` WHERE `client_id` = ?', intval($params['parent_client_id']));
 			if($check['limit_client'] == 0) {
 				$this->server->fault('Invalid reseller', 'Selected client is not a reseller.');
 				return false;
@@ -221,7 +221,7 @@
 		}
 
 		// we need the previuos templates assigned here
-		$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ' . $client_id);
+		$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ?', $client_id);
 		if(!is_array($this->oldTemplatesAssigned) || count($this->oldTemplatesAssigned) < 1) {
 			// check previous type of storing templates
 			$tpls = explode('/', $old_rec['template_additional']);
@@ -258,8 +258,8 @@
 		}
 
 		if(@is_numeric($client_id)) {
-			$sql = "SELECT * FROM `client_template_assigned` WHERE `client_id` = ".$client_id;
-			return $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM `client_template_assigned` WHERE `client_id` = ?";
+			return $app->db->queryOneRecord($sql, $client_id);
 		} else {
 			$this->server->fault('The ID must be an integer.');
 			return array();
@@ -270,10 +270,10 @@
 		global $app;
 
 		$this->id = $client_id;
-		$this->dataRecord = $app->db->queryOneRecord('SELECT * FROM `client` WHERE `client_id` = ' . $client_id);
+		$this->dataRecord = $app->db->queryOneRecord('SELECT * FROM `client` WHERE `client_id` = ?', $client_id);
 		$this->oldDataRecord = $this->dataRecord;
 
-		$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ' . $client_id);
+		$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ?', $client_id);
 		if(!is_array($this->oldTemplatesAssigned) || count($this->oldTemplatesAssigned) < 1) {
 			// check previous type of storing templates
 			$tpls = explode('/', $this->oldDataRecord['template_additional']);
@@ -297,13 +297,13 @@
 
 		if(@is_numeric($client_id) && @is_numeric($template_id)) {
 			// check if client exists
-			$check = $app->db->queryOneRecord('SELECT `client_id` FROM `client` WHERE `client_id` = ' . $client_id);
+			$check = $app->db->queryOneRecord('SELECT `client_id` FROM `client` WHERE `client_id` = ?', $client_id);
 			if(!$check) {
 				$this->server->fault('Invalid client');
 				return false;
 			}
 			// check if template exists
-			$check = $app->db->queryOneRecord('SELECT `template_id` FROM `client_template` WHERE `template_id` = ' . $template_id);
+			$check = $app->db->queryOneRecord('SELECT `template_id` FROM `client_template` WHERE `template_id` = ?', $template_id);
 			if(!$check) {
 				$this->server->fault('Invalid template');
 				return false;
@@ -312,8 +312,8 @@
 			// for the update event we have to cheat a bit
 			$this->_set_client_formdata($client_id);
 
-			$sql = "INSERT INTO `client_template_assigned` (`client_id`, `client_template_id`) VALUES (" . $client_id . ", " . $template_id . ")";
-			$app->db->query($sql);
+			$sql = "INSERT INTO `client_template_assigned` (`client_id`, `client_template_id`) VALUES (?, ?)";
+			$app->db->query($sql, $client_id, $template_id);
 			$insert_id = $app->db->insertID();
 
 			$app->plugin->raiseEvent('client:client:on_after_update', $this);
@@ -335,13 +335,13 @@
 
 		if(@is_numeric($client_id) && @is_numeric($template_id)) {
 			// check if client exists
-			$check = $app->db->queryOneRecord('SELECT `client_id` FROM `client` WHERE `client_id` = ' . $client_id);
+			$check = $app->db->queryOneRecord('SELECT `client_id` FROM `client` WHERE `client_id` = ?', $client_id);
 			if(!$check) {
 				$this->server->fault('Invalid client');
 				return false;
 			}
 			// check if template exists
-			$check = $app->db->queryOneRecord('SELECT `assigned_template_id` FROM `client_template_assigned` WHERE `assigned_template_id` = ' . $assigned_template_id);
+			$check = $app->db->queryOneRecord('SELECT `assigned_template_id` FROM `client_template_assigned` WHERE `assigned_template_id` = ?', $assigned_template_id);
 			if(!$check) {
 				$this->server->fault('Invalid template');
 				return false;
@@ -350,8 +350,8 @@
 			// for the update event we have to cheat a bit
 			$this->_set_client_formdata($client_id);
 
-			$sql = "DELETE FROM `client_template_assigned` WHERE `assigned_template_id` = " . $template_id . " AND `client_id` = " . $client_id;
-			$app->db->query($sql);
+			$sql = "DELETE FROM `client_template_assigned` WHERE `assigned_template_id` = ? AND `client_id` = ?";
+			$app->db->query($sql, $template_id, $client_id);
 			$affected_rows = $app->db->affectedRows();
 
 			$app->plugin->raiseEvent('client:client:on_after_update', $this);
@@ -395,15 +395,15 @@
 		if($client_id > 0) {
 			//* remove the group of the client from the resellers group
 			$parent_client_id = $app->functions->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");
+			$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");
+			$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");
+			$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_database_user,web_domain,web_traffic';
@@ -413,7 +413,7 @@
 			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);
+						$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 = '';
@@ -428,11 +428,11 @@
 									$app->db->datalogDelete($table, $index_field, $rec[$index_field]);
 									//* Delete traffic records that dont have a sys_groupid column
 									if($table == 'web_domain') {
-										$app->db->query("DELETE FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."'");
+										$app->db->query("DELETE FROM web_traffic WHERE hostname = ?", $rec['domain']);
 									}
 									//* Delete mail_traffic records that dont have a sys_groupid
 									if($table == 'mail_user') {
-										$app->db->query("DELETE FROM mail_traffic WHERE mailuser_id = '".$app->db->quote($rec['mailuser_id'])."'");
+										$app->db->query("DELETE FROM mail_traffic WHERE mailuser_id = ?", $rec['mailuser_id']);
 									}
 								}
 							}
@@ -468,12 +468,32 @@
 			throw new SoapFault('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."'");
+		$rec = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE username = ?", $username);
 		if (isset($rec)) {
 			return $rec;
 		} else {
 			throw new SoapFault('no_client_found', 'There is no user account for this user name.');
+			return false;
+		}
+	}
+	
+	public function client_get_by_customer_no($session_id, $customer_no) {
+		global $app;
+		if(!$this->checkPerm($session_id, 'client_get_by_customer_no')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$customer_no = trim($customer_no);
+		if($customer_no == '') {
+			throw new SoapFault('permission_denied', 'There was no customer number specified.');
+			return false;
+		}
+		$customer_no = $app->db->quote($customer_no);
+		$rec = $app->db->queryOneRecord("SELECT * FROM client WHERE customer_no = '".$customer_no."'");
+		if (isset($rec)) {
+			return $rec;
+		} else {
+			throw new SoapFault('no_client_found', 'There is no user account for this customer number.');
 			return false;
 		}
 	}
@@ -517,13 +537,12 @@
 			return false;
 		}
 		$client_id = $app->functions->intval($client_id);
-		$client = $app->db->queryOneRecord("SELECT client_id FROM client WHERE client_id = ".$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);
+			$sql = "UPDATE client SET password = md5(?) 	WHERE client_id = ?";
+			$app->db->query($sql, $new_password, $client_id);
+			$sql = "UPDATE sys_user SET passwort = md5(?) 	WHERE client_id = ?";
+			$app->db->query($sql, $new_password, $client_id);
 			return true;
 		} else {
 			throw new SoapFault('no_client_found', 'There is no user account for this client_id');
@@ -567,8 +586,8 @@
 		}
 		
 		//* Check failed logins
-		$sql = "SELECT * FROM `attempts_login` WHERE `ip`= '".$app->db->quote($remote_ip)."' AND  `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
-		$alreadyfailed = $app->db->queryOneRecord($sql);
+		$sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND  `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
+		$alreadyfailed = $app->db->queryOneRecord($sql, $remote_ip);
 		
 		//* too many failedlogins
 		if($alreadyfailed['times'] > 5) {
@@ -582,8 +601,8 @@
 		
 		if(strstr($username,'@')) {
 			// Check against client table
-			$sql = "SELECT * FROM client WHERE email = '".$app->db->quote($username)."'";
-			$user = $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM client WHERE email = ?";
+			$user = $app->db->queryOneRecord($sql, $username);
 
 			if($user) {
 				$saved_password = stripslashes($user['password']);
@@ -614,8 +633,8 @@
 			
 		} else {
 			// Check against sys_user table
-			$sql = "SELECT * FROM sys_user WHERE username = '".$app->db->quote($username)."'";
-			$user = $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM sys_user WHERE username = ?";
+			$user = $app->db->queryOneRecord($sql, $username);
 
 			if($user) {
 				$saved_password = stripslashes($user['passwort']);
@@ -649,15 +668,14 @@
 		
 		//* Log failed login attempts
 		if($user === false) {
-			$time = time();
 			if(!$alreadyfailed['times'] ) {
 				//* user login the first time wrong
-				$sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES ('".$app->db->quote($remote_ip)."', 1, NOW())";
-				$app->db->query($sql);
+				$sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())";
+				$app->db->query($sql, $remote_ip);
 			} elseif($alreadyfailed['times'] >= 1) {
 				//* update times wrong
-				$sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `login_time` >= '".$time."' LIMIT 1";
-				$app->db->query($sql);
+				$sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? AND `login_time` > (NOW() - INTERVAL 1 MINUTE) ORDER BY `login_time` DESC LIMIT 1";
+				$app->db->query($sql, $remote_ip);
 			}
 		}
 		
diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 1e9526a..57f7040 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -50,9 +50,9 @@
 			return false;
 		}
 
-		$client = $app->db->queryOneRecord("SELECT default_dnsserver FROM client WHERE client_id = ".$app->functions->intval($client_id));
+		$client = $app->db->queryOneRecord("SELECT default_dnsserver FROM client WHERE client_id = ?", $client_id);
 		$server_id = $client["default_dnsserver"];
-		$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = '$template_id'");
+		$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = ?", $template_id);
 		$fields = explode(',', $template_record['fields']);
 		$tform_def_file = "../../web/dns/form/dns_soa.tform.php";
 		$app->uses('tform');
@@ -95,11 +95,11 @@
 					if($section == 'dns_records') {
 						$parts = explode('|', $row);
 						$dns_rr[] = array(
-							'name' => $app->db->quote($parts[1]),
-							'type' => $app->db->quote($parts[0]),
-							'data' => $app->db->quote($parts[2]),
-							'aux'  => $app->db->quote($parts[3]),
-							'ttl'  => $app->db->quote($parts[4])
+							'name' => $parts[1],
+							'type' => $parts[0],
+							'data' => $parts[2],
+							'aux'  => $parts[3],
+							'ttl'  => $parts[4]
 						);
 					}
 				}
@@ -117,30 +117,62 @@
 
 		if($error == '') {
 			// Insert the soa record
-			$tmp = $app->db->queryOneRecord("SELECT userid,default_group FROM sys_user WHERE client_id = ".$app->functions->intval($client_id));
+			$tmp = $app->db->queryOneRecord("SELECT userid,default_group FROM sys_user WHERE client_id = ?", $client_id);
 			$sys_userid = $tmp['userid'];
 			$sys_groupid = $tmp['default_group'];
 			unset($tmp);
-			$origin = $app->db->quote($vars['origin']);
-			$ns = $app->db->quote($vars['ns']);
-			$mbox = $app->db->quote(str_replace('@', '.', $vars['mbox']));
-			$refresh = $app->db->quote($vars['refresh']);
-			$retry = $app->db->quote($vars['retry']);
-			$expire = $app->db->quote($vars['expire']);
-			$minimum = $app->db->quote($vars['minimum']);
-			$ttl = $app->db->quote($vars['ttl']);
-			$xfer = $app->db->quote($vars['xfer']);
-			$also_notify = $app->db->quote($vars['also_notify']);
-			$update_acl = $app->db->quote($vars['update_acl']);
+			$origin = $vars['origin'];
+			$ns = $vars['ns'];
+			$mbox = str_replace('@', '.', $vars['mbox']);
+			$refresh = $vars['refresh'];
+			$retry = $vars['retry'];
+			$expire = $vars['expire'];
+			$minimum = $vars['minimum'];
+			$ttl = $vars['ttl'];
+			$xfer = $vars['xfer'];
+			$also_notify = $vars['also_notify'];
+			$update_acl = $vars['update_acl'];
 			$serial = $app->validate_dns->increase_serial(0);
-			$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `origin`, `ns`, `mbox`, `serial`, `refresh`, `retry`, `expire`, `minimum`, `ttl`, `active`, `xfer`, `also_notify`, `update_acl`) VALUES
-			('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$origin', '$ns', '$mbox', '$serial', '$refresh', '$retry', '$expire', '$minimum', '$ttl', 'Y', '$xfer', '$also_notify', '$update_acl')";
+			$insert_data = array(
+				"sys_userid" => $sys_userid,
+				"sys_groupid" => $sys_groupid,
+				"sys_perm_user" => 'riud',
+				"sys_perm_group" => 'riud',
+				"sys_perm_other" => '',
+				"server_id" => $server_id,
+				"origin" => $origin,
+				"ns" => $ns,
+				"mbox" => $mbox,
+				"serial" => $serial,
+				"refresh" => $refresh,
+				"retry" => $retry,
+				"expire" => $expire,
+				"minimum" => $minimum,
+				"ttl" => $ttl,
+				"active" => 'Y',
+				"xfer" => $xfer,
+				"also_notify" => $also_notify,
+				"update_acl" => $update_acl
+			);
 			$dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
 			// Insert the dns_rr records
 			if(is_array($dns_rr) && $dns_soa_id > 0) {
 				foreach($dns_rr as $rr) {
-					$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES
-					('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '$rr[name]', '$rr[type]', '$rr[data]', '$rr[aux]', '$rr[ttl]', 'Y')";
+					$insert_data = array(
+						"sys_userid" => $sys_userid,
+						"sys_groupid" => $sys_groupid,
+						"sys_perm_user" => 'riud',
+						"sys_perm_group" => 'riud',
+						"sys_perm_other" => '',
+						"server_id" => $server_id,
+						"zone" => $dns_soa_id,
+						"name" => $rr['name'],
+						"type" => $rr['type'],
+						"data" => $rr['data'],
+						"aux" => $rr['aux'],
+						"ttl" => $rr['ttl'],
+						"active" => 'Y'
+					);
 					$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 				}
 			}
@@ -180,7 +212,7 @@
 			return false;
 		}
 
-		$rec = $app->db->queryOneRecord("SELECT id FROM dns_soa WHERE origin like '".$origin."%'");
+		$rec = $app->db->queryOneRecord("SELECT id FROM dns_soa WHERE origin like ?", $origin."%");
 		if(isset($rec['id'])) {
 			return $app->functions->intval($rec['id']);
 		} else {
@@ -764,8 +796,8 @@
 		if (!empty($client_id) && !empty($server_id)) {
 			$server_id      = $app->functions->intval($server_id);
 			$client_id      = $app->functions->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);
+			$sql            = "SELECT id, origin FROM dns_soa d INNER JOIN sys_user s on(d.sys_groupid = s.default_group) WHERE client_id = ? AND server_id = ?";
+			$result         = $app->db->queryAllRecords($sql, $client_id, $server_id);
 			return          $result;
 		}
 		return false;
@@ -785,8 +817,8 @@
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$sql    = "SELECT * FROM dns_rr WHERE zone = ".$app->functions->intval($zone_id);;
-		$result = $app->db->queryAllRecords($sql);
+		$sql    = "SELECT * FROM dns_rr WHERE zone = ?";
+		$result = $app->db->queryAllRecords($sql, $zone_id);
 		return $result;
 	}
 
@@ -809,8 +841,8 @@
 			} else {
 				$status = 'N';
 			}
-			$sql = "UPDATE dns_soa SET active = '$status' WHERE id = ".$app->functions->intval($primary_id);
-			$app->db->query($sql);
+			$sql = "UPDATE dns_soa SET active = ? WHERE id = ?";
+			$app->db->query($sql, $status, $primary_id);
 			$result = $app->db->affectedRows();
 			return $result;
 		} else {
diff --git a/interface/lib/classes/remote.d/domains.inc.php b/interface/lib/classes/remote.d/domains.inc.php
index 9bba710..3383033 100644
--- a/interface/lib/classes/remote.d/domains.inc.php
+++ b/interface/lib/classes/remote.d/domains.inc.php
@@ -86,8 +86,8 @@
 			return false;
 		}
 		$group_id = $app->functions->intval($group_id);
-		$sql = "SELECT domain_id, domain FROM domain WHERE sys_groupid  = $group_id ";
-		$all = $app->db->queryAllRecords($sql);
+		$sql = "SELECT domain_id, domain FROM domain WHERE sys_groupid  = ?";
+		$all = $app->db->queryAllRecords($sql, $group_id);
 		return $all;
 	}
 
diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php
index e579fb6..9147770 100644
--- a/interface/lib/classes/remote.d/mail.inc.php
+++ b/interface/lib/classes/remote.d/mail.inc.php
@@ -208,7 +208,7 @@
 
 		//* Check if mail domain exists
 		$email_parts = explode('@', $params['email']);
-		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = '".$app->db->quote($email_parts[1])."'");
+		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ?", $email_parts[1]);
 		if($tmp['domain'] != $email_parts[1]) {
 			throw new SoapFault('mail_domain_does_not_exist', 'Mail domain - '.$email_parts[1].' - does not exist.');
 			return false;
@@ -235,7 +235,7 @@
 
 		//* Check if mail domain exists
 		$email_parts = explode('@', $params['email']);
-		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = '".$app->db->quote($email_parts[1])."'");
+		$tmp = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ?", $email_parts[1]);
 		if($tmp['domain'] != $email_parts[1]) {
 			throw new SoapFault('mail_domain_does_not_exist', 'Mail domain - '.$email_parts[1].' - does not exist.');
 			return false;
@@ -309,6 +309,73 @@
 		// $app->plugin->raiseEvent('mail:mail_user_filter:on_after_delete',$this);
 		return $affected_rows;
 	}
+	
+	// Mail backup list function by Dominik M�ller, info@profi-webdesign.net
+	public function mail_user_backup_list($session_id, $primary_id = null)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'mail_user_backup')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		$params = array();
+		if ($site_id != null) {
+			$params[] = $site_id;
+			$sql  = "SELECT * FROM mail_backup WHERE parent_domain_id = ?";
+		}
+		else {
+			$sql  = "SELECT * FROM mail_backup";
+		}
+	
+		$result = $app->db->queryAllRecords($sql, true, $params);
+		return $result;
+	}
+	
+	// Mail backup restore/download functions by Dominik M�ller, info@profi-webdesign.net
+	public function mail_user_backup($session_id, $primary_id, $action_type)
+	{
+		global $app;
+	
+		if(!$this->checkPerm($session_id, 'mail_user_backup')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		//*Set variables
+		$backup_record  =       $app->db->queryOneRecord("SELECT * FROM `mail_backup` WHERE `backup_id`=?", $primary_id);
+		$server_id      =       $backup_record['server_id'];
+	
+		//*Set default action state
+		$action_state   =       "pending";
+		$tstamp         =       time();
+	
+		//* Basic validation of variables
+		if ($server_id <= 0) {
+			$this->server->fault('invalid_backup_id', "Invalid or non existant backup_id $primary_id");
+			return false;
+		}
+	
+		if (/*$action_type != 'backup_download_mail' and*/ $action_type != 'backup_restore_mail') {
+			$this->server->fault('invalid_action', "Invalid action_type $action_type");
+			return false;
+		}
+	
+		//* Validate instance
+		$instance_record        =       $app->db->queryOneRecord("SELECT * FROM `sys_remoteaction` WHERE `action_param`=? and `action_type`=? and `action_state`='pending'", $primary_id, $action_type);
+		if ($instance_record['action_id'] >= 1) {
+			$this->server->fault('duplicate_action', "There is already a pending $action_type action");
+			return false;
+		}
+	
+		//* Save the record
+		if ($app->db->query("INSERT INTO `sys_remoteaction` SET `server_id` = ?, `tstamp` = ?, `action_type` = ?, `action_param` = ?, `action_state` = ?", $server_id, $tstamp, $action_type, $primary_id, $action_state)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
 
 	//* Get alias details
 	public function mail_alias_get($session_id, $primary_id)
@@ -336,7 +403,7 @@
 		}
 
 		//* Check if there is no active mailbox with this address
-		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = '".$app->db->quote($params["source"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = ?", $params["source"]);
 		if($tmp['number'] > 0) {
 			throw new SoapFault('duplicate', 'There is already a mailbox with this email address.');
 		}
@@ -358,7 +425,7 @@
 		}
 
 		//* Check if there is no active mailbox with this address
-		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = '".$app->db->quote($params["source"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = ?", $params["source"]);
 		if($tmp['number'] > 0) {
 			throw new SoapFault('duplicate', 'There is already a mailbox with this email address.');
 		}
@@ -994,9 +1061,8 @@
 			return false;
 		}
 		if (!empty($domain)) {
-			$domain       = $app->db->quote($domain);
-			$sql            = "SELECT * FROM mail_domain WHERE domain = '$domain'";
-			$result         = $app->db->queryAllRecords($sql);
+			$sql            = "SELECT * FROM mail_domain WHERE domain = ?";
+			$result         = $app->db->queryAllRecords($sql, $domain);
 			return          $result;
 		}
 		return false;
@@ -1014,8 +1080,8 @@
 			} else {
 				$status = 'n';
 			}
-			$sql = "UPDATE mail_domain SET active = '$status' WHERE domain_id = ".$app->functions->intval($primary_id);
-			$app->db->query($sql);
+			$sql = "UPDATE mail_domain SET active = ? WHERE domain_id = ?";
+			$app->db->query($sql, $status, $primary_id);
 			$result = $app->db->affectedRows();
 			return $result;
 		} else {
diff --git a/interface/lib/classes/remote.d/openvz.inc.php b/interface/lib/classes/remote.d/openvz.inc.php
index 4a087cc..c427a1f 100644
--- a/interface/lib/classes/remote.d/openvz.inc.php
+++ b/interface/lib/classes/remote.d/openvz.inc.php
@@ -159,7 +159,7 @@
 		$server_id = $app->functions->intval($server_id);
 
 		if($server_id > 0) {
-			$tmp = $app->db->queryOneRecord("SELECT ip_address_id, server_id, ip_address FROM openvz_ip WHERE reserved = 'n' AND vm_id = 0 AND server_id = $server_id LIMIT 0,1");
+			$tmp = $app->db->queryOneRecord("SELECT ip_address_id, server_id, ip_address FROM openvz_ip WHERE reserved = 'n' AND vm_id = 0 AND server_id = ? LIMIT 0,1", $server_id);
 		} else {
 			$tmp = $app->db->queryOneRecord("SELECT ip_address_id, server_id, ip_address FROM openvz_ip WHERE reserved = 'n' AND vm_id = 0 LIMIT 0,1");
 		}
@@ -229,9 +229,9 @@
 
 		if (!empty($client_id)) {
 			$client_id      = $app->functions->intval($client_id);
-			$tmp    = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
-			$sql            = "SELECT * FROM openvz_vm WHERE sys_groupid = ".$app->functions->intval($tmp['groupid']);
-			$result         = $app->db->queryAllRecords($sql);
+			$tmp    = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
+			$sql            = "SELECT * FROM openvz_vm WHERE sys_groupid = ?";
+			$result         = $app->db->queryAllRecords($sql, $tmp['groupid']);
 			return          $result;
 		}
 		return false;
@@ -272,23 +272,23 @@
 		}
 
 		// Verify if template and ostemplate exist
-		$tmp = $app->db->queryOneRecord("SELECT template_id FROM openvz_template WHERE template_id = $template_id");
+		$tmp = $app->db->queryOneRecord("SELECT template_id FROM openvz_template WHERE template_id = ?", $template_id);
 		if(!is_array($tmp)) {
 			throw new SoapFault('template_id_error', 'Template does not exist.');
 			return false;
 		}
-		$tmp = $app->db->queryOneRecord("SELECT ostemplate_id FROM openvz_ostemplate WHERE ostemplate_id = $ostemplate_id");
+		$tmp = $app->db->queryOneRecord("SELECT ostemplate_id FROM openvz_ostemplate WHERE ostemplate_id = ?", $ostemplate_id);
 		if(!is_array($tmp)) {
 			throw new SoapFault('ostemplate_id_error', 'OSTemplate does not exist.');
 			return false;
 		}
 
 		//* Get the template
-		$vtpl = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = $template_id");
+		$vtpl = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = ?", $template_id);
 
 		//* Get the IP address and server_id
 		if($override_params['server_id'] > 0) {
-			$vmip = $app->db->queryOneRecord("SELECT ip_address_id, server_id, ip_address FROM openvz_ip WHERE reserved = 'n' AND vm_id = 0 AND server_id = ".$override_params['server_id']." LIMIT 0,1");
+			$vmip = $app->db->queryOneRecord("SELECT ip_address_id, server_id, ip_address FROM openvz_ip WHERE reserved = 'n' AND vm_id = 0 AND server_id = ? LIMIT 0,1", $override_params['server_id']);
 		} else {
 			$vmip = $app->db->queryOneRecord("SELECT ip_address_id, server_id, ip_address FROM openvz_ip WHERE reserved = 'n' AND vm_id = 0 LIMIT 0,1");
 		}
@@ -376,25 +376,18 @@
 		$action = 'openvz_start_vm';
 
 		$tmp = $app->db->queryOneRecord("SELECT count(action_id) as actions FROM sys_remoteaction
-				WHERE server_id = '".$vm['server_id']."'
-				AND action_type = '$action'
-				AND action_param = '".$vm['veid']."'
-				AND action_state = 'pending'");
+				WHERE server_id = ?
+				AND action_type = ?
+				AND action_param = ?
+				AND action_state = 'pending'", $vm['server_id'], $action, $vm['veid']);
 
 		if($tmp['actions'] > 0) {
 			throw new SoapFault('action_pending', 'There is already a action pending for this VM.');
 			return false;
 		} else {
 			$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-				"VALUES (".
-				(int)$vm['server_id'] . ", ".
-				time() . ", ".
-				"'".$action."', ".
-				$vm['veid'].", ".
-				"'pending', ".
-				"''".
-				")";
-			$app->db->query($sql);
+				"VALUES (?, ?, ?, ?, 'pending', '')";
+			$app->db->query($sql, (int)$vm['server_id'], time(), $action, $vm['veid']);
 		}
 	}
 
@@ -425,25 +418,18 @@
 		$action = 'openvz_stop_vm';
 
 		$tmp = $app->db->queryOneRecord("SELECT count(action_id) as actions FROM sys_remoteaction
-				WHERE server_id = '".$vm['server_id']."'
-				AND action_type = '$action'
-				AND action_param = '".$vm['veid']."'
-				AND action_state = 'pending'");
+				WHERE server_id = ?
+				AND action_type = ?
+				AND action_param = ?
+				AND action_state = 'pending'", $vm['server_id'], $action, $vm['veid']);
 
 		if($tmp['actions'] > 0) {
 			throw new SoapFault('action_pending', 'There is already a action pending for this VM.');
 			return false;
 		} else {
 			$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-				"VALUES (".
-				(int)$vm['server_id'] . ", ".
-				time() . ", ".
-				"'".$action."', ".
-				$vm['veid'].", ".
-				"'pending', ".
-				"''".
-				")";
-			$app->db->query($sql);
+				"VALUES (?, ?, ?, ?, 'pending', '')";
+			$app->db->query($sql, (int)$vm['server_id'], time(), $action, $vm['veid']);
 		}
 	}
 
@@ -474,25 +460,18 @@
 		$action = 'openvz_restart_vm';
 
 		$tmp = $app->db->queryOneRecord("SELECT count(action_id) as actions FROM sys_remoteaction
-				WHERE server_id = '".$vm['server_id']."'
-				AND action_type = '$action'
-				AND action_param = '".$vm['veid']."'
-				AND action_state = 'pending'");
+				WHERE server_id = ?
+				AND action_type = ?
+				AND action_param = ?
+				AND action_state = 'pending'", $vm['server_id'], $action, $vm['veid']);
 
 		if($tmp['actions'] > 0) {
 			throw new SoapFault('action_pending', 'There is already a action pending for this VM.');
 			return false;
 		} else {
 			$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-				"VALUES (".
-				(int)$vm['server_id'] . ", ".
-				time() . ", ".
-				"'".$action."', ".
-				$vm['veid'].", ".
-				"'pending', ".
-				"''".
-				")";
-			$app->db->query($sql);
+				"VALUES (?, ?, ?, ?, 'pending', '')";
+			$app->db->query($sql, (int)$vm['server_id'], time(), $action, $vm['veid']);
 		}
 	}
 
diff --git a/interface/lib/classes/remote.d/server.inc.php b/interface/lib/classes/remote.d/server.inc.php
index 4035302..eb4a8b9 100644
--- a/interface/lib/classes/remote.d/server.inc.php
+++ b/interface/lib/classes/remote.d/server.inc.php
@@ -55,8 +55,8 @@
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$sql = "SELECT server_id FROM server_ip WHERE ip_address  = '$ipaddress' LIMIT 1 ";
-		$all = $app->db->queryAllRecords($sql);
+		$sql = "SELECT server_id FROM server_ip WHERE ip_address  = ? LIMIT 1";
+		$all = $app->db->queryAllRecords($sql, $ipaddress);
 		return $all;
 	}
 
@@ -178,8 +178,8 @@
             return false;
 		}
 		if (!empty($session_id) && !empty($server_name)) {
-			$sql = "SELECT server_id FROM server WHERE server_name  = '$server_name' LIMIT 1 ";
-			$all = $app->db->queryAllRecords($sql);
+			$sql = "SELECT server_id FROM server WHERE server_name  = ? LIMIT 1";
+			$all = $app->db->queryAllRecords($sql, $server_name);
 			return $all;
 		} else {
 			return false;
@@ -200,8 +200,8 @@
             return false;
 		}
 		if (!empty($session_id) && !empty($server_id)) { 
-			$sql = "SELECT mail_server, web_server, dns_server, file_server, db_server, vserver_server, proxy_server, firewall_server FROM server WHERE server_id  = '$server_id' LIMIT 1 ";
-			$all = $app->db->queryAllRecords($sql);
+			$sql = "SELECT mail_server, web_server, dns_server, file_server, db_server, vserver_server, proxy_server, firewall_server FROM server WHERE server_id  = ? LIMIT 1 ";
+			$all = $app->db->queryAllRecords($sql, $server_id);
 			return $all;
 		} else {
 			return false;
diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php
index 98c5bf6..ad3f2e3 100644
--- a/interface/lib/classes/remote.d/sites.inc.php
+++ b/interface/lib/classes/remote.d/sites.inc.php
@@ -102,7 +102,8 @@
 		$app->remoting_lib->loadFormDef('../sites/form/database.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
-
+	
+	/* TODO: secure queries! */
 	//* Add a record
 	public function sites_database_add($session_id, $client_id, $params)
 	{
@@ -114,7 +115,7 @@
 		}
 
 		//* Check for duplicates
-		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = '".$app->db->quote($params['database_name'])."' AND server_id = '".intval($params["server_id"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = ? AND server_id = ?", $params['database_name'], $params["server_id"]);
 		if($tmp['dbnum'] > 0) {
 			throw new SoapFault('database_name_error_unique', 'There is already a database with that name on the same server.');
 			return false;
@@ -135,7 +136,6 @@
 				$sql_set = array();
 				if(isset($params['backup_interval'])) $sql_set[] = "backup_interval = '".$app->db->quote($params['backup_interval'])."'";
 				if(isset($params['backup_copies'])) $sql_set[] = "backup_copies = ".$app->functions->intval($params['backup_copies']);
-				//$app->db->query("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$retval);
 				$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$retval, $retval, $params);
 			}
 			
@@ -169,7 +169,6 @@
 				$sql_set = array();
 				if(isset($params['backup_interval'])) $sql_set[] = "backup_interval = '".$app->db->quote($params['backup_interval'])."'";
 				if(isset($params['backup_copies'])) $sql_set[] = "backup_copies = ".$app->functions->intval($params['backup_copies']);
-				//$app->db->query("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$primary_id);
 				$this->updateQueryExecute("UPDATE web_database SET ".implode(', ', $sql_set)." WHERE database_id = ".$primary_id, $primary_id, $params);
 			}
 			
@@ -239,7 +238,7 @@
 
 		$new_rec = $app->remoting_lib->getDataRecord($primary_id);
 
-		$records = $app->db->queryAllRecords("SELECT DISTINCT server_id FROM web_database WHERE database_user_id = '".$app->functions->intval($primary_id)."' UNION SELECT DISTINCT server_id FROM web_database WHERE database_ro_user_id = '".$app->functions->intval($primary_id)."'");
+		$records = $app->db->queryAllRecords("SELECT DISTINCT server_id FROM web_database WHERE database_user_id = ? UNION SELECT DISTINCT server_id FROM web_database WHERE database_ro_user_id = ?", $primary_id, $primary_id);
 		foreach($records as $rec) {
 			$tmp_rec = $new_rec;
 			$tmp_rec['server_id'] = $rec['server_id'];
@@ -265,14 +264,14 @@
 		$app->db->datalogDelete('web_database_user', 'database_user_id', $primary_id);
 		$affected_rows = $this->deleteQuery('../sites/form/database_user.tform.php', $primary_id);
 
-		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_user_id = '".$app->functions->intval($primary_id)."'");
+		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_user_id = ?", $primary_id);
 		foreach($records as $rec) {
-			$app->db->datalogUpdate('web_database', 'database_user_id=NULL', 'database_id', $rec['database_id']);
+			$app->db->datalogUpdate('web_database', array('database_user_id' => null), 'database_id', $rec['database_id']);
 
 		}
-		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_ro_user_id = '".$app->functions->intval($primary_id)."'");
+		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_ro_user_id = ?", $primary_id);
 		foreach($records as $rec) {
-			$app->db->datalogUpdate('web_database', 'database_ro_user_id=NULL', 'database_id', $rec['database_id']);
+			$app->db->datalogUpdate('web_database', array('database_ro_user_id' => null), 'database_id', $rec['database_id']);
 		}
 
 		return $affected_rows;
@@ -336,7 +335,7 @@
 			return false;
 		}
 
-		$data = $app->db->queryOneRecord("SELECT server_id FROM ftp_user WHERE username = '".$app->db->quote($ftp_user)."'");
+		$data = $app->db->queryOneRecord("SELECT server_id FROM ftp_user WHERE username = ?", $ftp_user);
 		//file_put_contents('/tmp/test.txt', serialize($data));
 		if(!isset($data['server_id'])) return false;
 
@@ -406,7 +405,7 @@
 			return false;
 		}
 		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../sites/form/web_domain.tform.php');
+		$app->remoting_lib->loadFormDef('../sites/form/web_vhost_domain.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
@@ -420,7 +419,7 @@
 		}
 
 		if(!isset($params['client_group_id']) or (isset($params['client_group_id']) && empty($params['client_group_id']))) {
-			$rec = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client_id));
+			$rec = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
 			$params['client_group_id'] = $rec['groupid'];
 		}
 
@@ -435,9 +434,9 @@
 		if($params['pm_min_spare_servers'] == '') $params['pm_min_spare_servers'] = 1;
 		if($params['pm_max_spare_servers'] == '') $params['pm_max_spare_servers'] = 1;
 
-		$domain_id = $this->insertQuery('../sites/form/web_domain.tform.php', $client_id, $params, 'sites:web_domain:on_after_insert');
+		$domain_id = $this->insertQuery('../sites/form/web_vhost_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);
+			$app->db->query("UPDATE web_domain SET `sys_userid` = '1' WHERE domain_id = ?", $domain_id);
 		return $domain_id;
 	}
 
@@ -455,7 +454,7 @@
 		if($params['pm_min_spare_servers'] == '') $params['pm_min_spare_servers'] = 1;
 		if($params['pm_max_spare_servers'] == '') $params['pm_max_spare_servers'] = 1;
 
-		$affected_rows = $this->updateQuery('../sites/form/web_domain.tform.php', $client_id, $primary_id, $params);
+		$affected_rows = $this->updateQuery('../sites/form/web_vhost_domain.tform.php', $client_id, $primary_id, $params);
 		return $affected_rows;
 	}
 
@@ -466,7 +465,7 @@
 			throw new SoapFault('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);
+		$affected_rows = $this->deleteQuery('../sites/form/web_vhost_domain.tform.php', $primary_id);
 		return $affected_rows;
 	}
 
@@ -751,7 +750,7 @@
 		}
 
 		// Delete all users that belong to this folder. - taken from web_folder_delete.php
-		$records = $app->db->queryAllRecords("SELECT web_folder_user_id FROM web_folder_user WHERE web_folder_id = '".$app->functions->intval($primary_id)."'");
+		$records = $app->db->queryAllRecords("SELECT web_folder_user_id FROM web_folder_user WHERE web_folder_id = ?", $primary_id);
 		foreach($records as $rec) {
 			$this->deleteQuery('../sites/form/web_folder_user.tform.php', $rec['web_folder_user_id']);
 			//$app->db->datalogDelete('web_folder_user','web_folder_user_id',$rec['web_folder_user_id']);
@@ -865,11 +864,11 @@
 			} else {
 				$status = 'n';
 			}
-			$app->remoting_lib->loadFormDef('../sites/form/web_domain.tform.php');
+			$app->remoting_lib->loadFormDef('../sites/form/web_vhost_domain.tform.php');
 			$params = $app->remoting_lib->getDataRecord($primary_id);
 			$params['active'] = $status;
 			
-			$affected_rows = $this->updateQuery('../sites/form/web_domain.tform.php', 0, $primary_id, $params);
+			$affected_rows = $this->updateQuery('../sites/form/web_vhost_domain.tform.php', 0, $primary_id, $params);
 			return $affected_rows;
 		} else {
 			throw new SoapFault('status_undefined', 'The status is not available');
@@ -889,8 +888,8 @@
 			return false;
 		}
 		$client_id = $app->functions->intval($client_id);
-		$sql = "SELECT d.database_id, d.database_name, d.database_user_id, d.database_ro_user_id, du.database_user, du.database_password FROM web_database d LEFT JOIN web_database_user du ON (du.database_user_id = d.database_user_id) INNER JOIN sys_user s on(d.sys_groupid = s.default_group) WHERE client_id = $client_id";
-		$all = $app->db->queryAllRecords($sql);
+		$sql = "SELECT d.database_id, d.database_name, d.database_user_id, d.database_ro_user_id, du.database_user, du.database_password FROM web_database d LEFT JOIN web_database_user du ON (du.database_user_id = d.database_user_id) INNER JOIN sys_user s on(d.sys_groupid = s.default_group) WHERE client_id = ?";
+		$all = $app->db->queryAllRecords($sql, $client_id);
 		return $all;
 	}
 	
@@ -904,7 +903,7 @@
 			return false;
 		}
 		
-		$result = $app->db->queryAllRecords("SELECT * FROM web_backup".(($site_id != null)?' WHERE parent_domain_id = ?':''), $app->functions->intval($site_id));
+		$result = $app->db->queryAllRecords("SELECT * FROM web_backup".(($site_id != null)?' WHERE parent_domain_id = ?':''), $site_id);
 		return $result;
 	}
 	
@@ -966,6 +965,34 @@
 		return $app->quota_lib->get_quota_data($client_id, false);
 	}
 	
+	public function trafficquota_get_by_user($session_id, $client_id, $lastdays = 0)
+	{
+		global $app;
+		$app->uses('quota_lib');
+		
+		if(!$this->checkPerm($session_id, 'trafficquota_get_by_user')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		if ($client_id != null)
+			$client_id = $app->functions->intval($client_id);
+		
+		return $app->quota_lib->get_trafficquota_data($client_id, $lastdays);
+	}
+	
+	public function databasequota_get_by_user($session_id, $client_id)
+	{
+		global $app;
+		$app->uses('quota_lib');
+	
+		if(!$this->checkPerm($session_id, 'databasequota_get_by_user')) {
+			$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+	
+		return $app->quota_lib->get_databasequota_data($client_id, false);
+	}
+	
 	
 }
 
diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php
index f42d22b..204aebb 100644
--- a/interface/lib/classes/remoting.inc.php
+++ b/interface/lib/classes/remoting.inc.php
@@ -90,15 +90,12 @@
 		}
 
 		//* Delete old remoting sessions
-		$sql = "DELETE FROM remote_session WHERE tstamp < ".time();
+		$sql = "DELETE FROM remote_session WHERE tstamp < UNIX_TIMSTAMP()";
 		$app->db->query($sql);
 
-		$username = $app->db->quote($username);
-		$password = $app->db->quote($password);
-
 		if($client_login == true) {
-			$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username'";
-			$user = $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM sys_user WHERE USERNAME = ?";
+			$user = $app->db->queryOneRecord($sql, $username);
 			if($user) {
 				$saved_password = stripslashes($user['passwort']);
 
@@ -127,7 +124,7 @@
 			}
 
 			// now we need the client data
-			$client = $app->db->queryOneRecord("SELECT client.can_use_api FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = " . $app->functions->intval($user['default_group']));
+			$client = $app->db->queryOneRecord("SELECT client.can_use_api FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $user['default_group']);
 			if(!$client || $client['can_use_api'] != 'y') {
 				throw new SoapFault('client_login_failed', 'The login failed. Client may not use api.');
 				return false;
@@ -140,13 +137,12 @@
 			$remote_functions = '';
 			$tstamp = time() + $this->session_timeout;
 			$sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,client_login,tstamp'
-				.') VALUES ('
-				." '$remote_session',$remote_userid,'$remote_functions',1,$tstamp)";
-			$app->db->query($sql);
+				.') VALUES (?, ?, ?, 1, $tstamp)';
+			$app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp);
 			return $remote_session;
 		} else {
-			$sql = "SELECT * FROM remote_user WHERE remote_username = '$username' and remote_password = md5('$password')";
-			$remote_user = $app->db->queryOneRecord($sql);
+			$sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = md5(?)";
+			$remote_user = $app->db->queryOneRecord($sql, $username, $password);
 			if($remote_user['remote_userid'] > 0) {
 				//* Create a remote user session
 				//srand ((double)microtime()*1000000);
@@ -155,9 +151,8 @@
 				$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);
+					.') VALUES (?, ?, ?, ?)';
+				$app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp);
 				return $remote_session;
 			} else {
 				throw new SoapFault('login_failed', 'The login failed. Username or password wrong.');
@@ -177,10 +172,8 @@
 			return false;
 		}
 
-		$session_id = $app->db->quote($session_id);
-
-		$sql = "DELETE FROM remote_session WHERE remote_session = '$session_id'";
-		if($app->db->query($sql) != false) {
+		$sql = "DELETE FROM remote_session WHERE remote_session = ?";
+		if($app->db->query($sql, $session_id) != false) {
 			return true;
 		} else {
 			return false;
@@ -203,8 +196,8 @@
 		$sql = $app->remoting_lib->getSQL($params, 'INSERT', 0);
 
 		//* Check if no system user with that username exists
-		$username = $app->db->quote($params["username"]);
-		$tmp = $app->db->queryOneRecord("SELECT count(userid) as number FROM sys_user WHERE username = '$username'");
+		$username = $params["username"];
+		$tmp = $app->db->queryOneRecord("SELECT count(userid) as number FROM sys_user WHERE username = ?", $username);
 		if($tmp['number'] > 0) $app->remoting_lib->errorMessage .= "Duplicate username<br />";
 
 		//* Stop on error while preparing the sql query
@@ -238,7 +231,7 @@
 
 		/* copied from the client_edit php */
 		exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f /tmp/id_rsa -N ""');
-		$app->db->query("UPDATE client SET created_at = ".time().", id_rsa = '".$app->db->quote(@file_get_contents('/tmp/id_rsa'))."', ssh_rsa = '".$app->db->quote(@file_get_contents('/tmp/id_rsa.pub'))."' WHERE client_id = ".$this->id);
+		$app->db->query("UPDATE client SET created_at = UNIX_TIMSTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", @file_get_contents('/tmp/id_rsa'), @file_get_contents('/tmp/id_rsa.pub'), $this->id);
 		exec('rm -f /tmp/id_rsa /tmp/id_rsa.pub');
 
 
@@ -251,10 +244,10 @@
 			$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);
+				$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);
+				$app->db->query("UPDATE client SET parent_client_id = ? WHERE client_id = ?", $reseller_id, $insert_id);
 			}
 
 		}
@@ -347,6 +340,7 @@
 
 		//* Get the SQL query
 		$sql = $app->remoting_lib->getSQL($params, 'UPDATE', $primary_id);
+		
 		// throw new SoapFault('debug', $sql);
 		if($app->remoting_lib->errorMessage != '') {
 			throw new SoapFault('data_processing_error', $app->remoting_lib->errorMessage);
@@ -473,11 +467,8 @@
 			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);
+		$sql = "SELECT * FROM remote_session WHERE remote_session = ? AND tstamp >= UNIX_TIMSTAMP()";
+		$session = $app->db->queryOneRecord($sql, $session_id);
 		if($session['remote_userid'] > 0) {
 			return $session;
 		} else {
diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php
index d85612b..9ee3ca5 100644
--- a/interface/lib/classes/remoting_lib.inc.php
+++ b/interface/lib/classes/remoting_lib.inc.php
@@ -110,7 +110,7 @@
 		if(isset($_SESSION['client_login']) && isset($_SESSION['client_sys_userid']) && $_SESSION['client_login'] == 1) {
 			$client_sys_userid = $app->functions->intval($_SESSION['client_sys_userid']);
 
-			$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_user, client WHERE sys_user.client_id = client.client_id and sys_user.userid = " . $client_sys_userid);
+			$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_user, client WHERE sys_user.client_id = client.client_id and sys_user.userid = ?", $client_sys_userid);
 
 			$this->client_id = $client['client_id'];
 			$client_login = true;
@@ -125,23 +125,11 @@
 			$this->sys_groups            = 1;
 			$_SESSION["s"]["user"]["typ"] = 'admin';
 		} else {
-			//* load system user - try with sysuser and before with userid (workarrond)
-			/*
-				$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE sysuser_id = $client_id");
-				if(empty($user["userid"])) {
-						$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $client_id");
-						if(empty($user["userid"])) {
-								$this->errorMessage .= "No sysuser with the ID $client_id found.";
-								return false;
-						}
-				}*/
-
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE client_id = $this->client_id");
+			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE client_id = ?", $this->client_id);
 			$this->sys_username         = $user['username'];
 			$this->sys_userid            = $user['userid'];
 			$this->sys_default_group     = $user['default_group'];
 			$this->sys_groups             = $user['groups'];
-			// $_SESSION["s"]["user"]["typ"] = $user['typ'];
 			// we have to force admin priveliges for the remoting API as some function calls might fail otherwise.
 			if($client_login == false) $_SESSION["s"]["user"]["typ"] = 'admin';
 		}
@@ -186,12 +174,11 @@
 	 /**
 	 * Rewrite the record data to be stored in the database
 	 * and check values with regular expressions.
-	 * dummy parameter is only there for compatibility with params of base class
 	 *
 	 * @param record = Datensatz als Array
 	 * @return record
 	 */
-	function encode($record, $dbencode = true, $dummy = '') {
+	function encode($record, $tab = '', $dbencode = true) {
 		$new_record = $this->_encode($record, '', $dbencode, true);
 		if(isset($record['_ispconfig_pw_crypted'])) $new_record['_ispconfig_pw_crypted'] = $record['_ispconfig_pw_crypted']; // this one is not in form definitions!
 
@@ -240,8 +227,8 @@
 				return parent::getDataRecord($primary_id);
 			} elseif($primary_id == -1) {
 				// Return a array with all records
-				$sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape;
-				return $app->db->queryAllRecords($sql);
+				$sql = "SELECT * FROM ??";
+				return $app->db->queryAllRecords($sql, $this->formDef['db_table']);
 			} else {
 				throw new SoapFault('invalid_id', 'The ID has to be > 0 or -1.');
 				return array();
@@ -251,22 +238,23 @@
 			$sql_offset = 0;
 			$sql_limit = 0;
 			$sql_where = '';
+			$params = array($this->formDef['db_table']);
 			foreach($primary_id as $key => $val) {
-				$key = $app->db->quote($key);
-				$val = $app->db->quote($val);
 				if($key == '#OFFSET#') $sql_offset = $app->functions->intval($val);
 				elseif($key == '#LIMIT#') $sql_limit = $app->functions->intval($val);
 				elseif(stristr($val, '%')) {
-					$sql_where .= "$key like '$val' AND ";
+					$sql_where .= "? like ? AND ";
 				} else {
-					$sql_where .= "$key = '$val' AND ";
+					$sql_where .= "? = ? AND ";
 				}
+				$params[] = $key;
+				$params[] = $val;
 			}
 			$sql_where = substr($sql_where, 0, -5);
 			if($sql_where == '') $sql_where = '1';
-			$sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$sql_where. " AND " . $this->getAuthSQL('r', $this->formDef['db_table']);
+			$sql = "SELECT * FROM ?? WHERE ".$sql_where. " AND " . $this->getAuthSQL('r', $this->formDef['db_table']);
 			if($sql_offset >= 0 && $sql_limit > 0) $sql .= ' LIMIT ' . $sql_offset . ',' . $sql_limit;
-			return $app->db->queryAllRecords($sql);
+			return $app->db->queryAllRecords($sql, true, $params);
 		} else {
 			$this->errorMessage = 'The ID must be either an integer or an array.';
 			return array();
@@ -275,12 +263,12 @@
 
 	function ispconfig_sysuser_add($params, $insert_id){
 		global $conf, $app, $sql1;
-		$username = $app->db->quote($params["username"]);
-		$password = $app->db->quote($params["password"]);
+		$username = $params["username"];
+		$password = $params["password"];
 		if(!isset($params['modules'])) {
 			$modules = $conf['interface_modules_enabled'];
 		} else {
-			$modules = $app->db->quote($params['modules']);
+			$modules = $params['modules'];
 		}
 		if(isset($params['limit_client']) && $params['limit_client'] > 0) {
 			$modules .= ',client';
@@ -289,44 +277,51 @@
 		if(!isset($params['startmodule'])) {
 			$startmodule = 'dashboard';
 		} else {
-			$startmodule = $app->db->quote($params["startmodule"]);
+			$startmodule = $params["startmodule"];
 			if(!preg_match('/'.$startmodule.'/', $modules)) {
 				$_modules = explode(',', $modules);
 				$startmodule=$_modules[0];
 			}
 		}
-		$usertheme = $app->db->quote($params["usertheme"]);
+		$usertheme = $params["usertheme"];
 		$type = 'user';
 		$active = 1;
 		$insert_id = $app->functions->intval($insert_id);
-		$language = $app->db->quote($params["language"]);
-		$groupid = $app->db->datalogInsert('sys_group', "(name,description,client_id) VALUES ('$username','','$insert_id')", 'groupid');
+		$language = $params["language"];
+		$groupid = $app->db->datalogInsert('sys_group', array("name" => $username, "description" => "", "client_id" => $insert_id), 'groupid');
 		$groups = $groupid;
 		if(!isset($params['_ispconfig_pw_crypted']) || $params['_ispconfig_pw_crypted'] != 1) $password = $app->auth->crypt_password(stripslashes($password));
 		$sql1 = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
-			VALUES ('$username','$password','$modules','$startmodule','$usertheme','$type','$active','$language',$groups,$groupid,$insert_id)";
-		$app->db->query($sql1);
+			VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+		$app->db->query($sql1, $username,$password,$modules,$startmodule,$usertheme,$type,$active,$language,$groups,$groupid,$insert_id);
 	}
 
 	function ispconfig_sysuser_update($params, $client_id){
 		global $app;
-		$username = $app->db->quote($params["username"]);
-		$clear_password = $app->db->quote($params["password"]);
+		$username = $params["username"];
+		$clear_password = $params["password"];
 		$client_id = $app->functions->intval($client_id);
 		if(!isset($params['_ispconfig_pw_crypted']) || $params['_ispconfig_pw_crypted'] != 1) $password = $app->auth->crypt_password(stripslashes($clear_password));
 		else $password = $clear_password;
-		if ($clear_password) $pwstring = ", passwort = '$password'"; else $pwstring ="" ;
-		$sql = "UPDATE sys_user set username = '$username' $pwstring WHERE client_id = $client_id";
-		$app->db->query($sql);
+		$params = array($username);
+		if ($clear_password) {
+			$pwstring = ", passwort = ?";
+			$params[] = $password;
+		} else {
+			$pwstring ="" ;
+		}
+		$params[] = $client_id;
+		$sql = "UPDATE sys_user set username = ? $pwstring WHERE client_id = ?";
+		$app->db->query($sql, true, $params);
 	}
 
 	function ispconfig_sysuser_delete($client_id){
 		global $app;
 		$client_id = $app->functions->intval($client_id);
-		$sql = "DELETE FROM sys_user WHERE client_id = $client_id";
-		$app->db->query($sql);
-		$sql = "DELETE FROM sys_group WHERE client_id = $client_id";
-		$app->db->query($sql);
+		$sql = "DELETE FROM sys_user WHERE client_id = ?";
+		$app->db->query($sql, $client_id);
+		$sql = "DELETE FROM sys_group WHERE client_id = ?";
+		$app->db->query($sql, $client_id);
 	}
 
 }
diff --git a/interface/lib/classes/searchform.inc.php b/interface/lib/classes/searchform.inc.php
index cfa8f28..0a290c1 100644
--- a/interface/lib/classes/searchform.inc.php
+++ b/interface/lib/classes/searchform.inc.php
@@ -177,7 +177,7 @@
 		if($this->searchChanged == 1)   $_SESSION['search'][$list_name]['page'] = 0;
 
 		$sql_von = $_SESSION['search'][$list_name]['page'] * $records_per_page;
-		$record_count = $app->db->queryOneRecord("SELECT count(*) AS anzahl FROM $table WHERE $sql_where");
+		$record_count = $app->db->queryOneRecord("SELECT count(*) AS anzahl FROM ?? WHERE $sql_where", $table);
 		$pages = $app->functions->intval(($record_count['anzahl'] - 1) / $records_per_page);
 
 		$vars['list_file']      = $this->listDef['file'];
@@ -247,7 +247,7 @@
 		$list_name = $this->listDef['name'];
 		$settings = $_SESSION['search'][$list_name];
 		unset($settings['page']);
-		$data = $app->db->quote(serialize($settings));
+		$data = serialize($settings);
 
 		$userid = $_SESSION['s']['user']['userid'];
 		$groupid = $_SESSION['s']['user']['default_group'];
@@ -260,9 +260,8 @@
 
 		$sql = 'INSERT INTO `searchform` ( '
 			.'`sys_userid` , `sys_groupid` , `sys_perm_user` , `sys_perm_group` , `sys_perm_other` , `module` , `searchform` , `title` , `data` '
-			.')VALUES ('
-			."'$userid', '$groupid', '$sys_perm_user', '$sys_perm_group', '$sys_perm_other', '$module', '$searchform', '$title', '$data')";
-		$app->db->query($sql);
+			.')VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)';
+		$app->db->query($sql, $userid, $groupid, $sys_perm_user, $sys_perm_group, $sys_perm_other, $module, $searchform, $title, $data);
 	}
 
 	public function decode($record)
@@ -303,6 +302,7 @@
 		return $record;
 	}
 
+	/* TODO: check for double quoting mysql value */
 	public function encode($record)
 	{
 		global $app;
diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php
index 8b3a7cf..bef2a10 100644
--- a/interface/lib/classes/session.inc.php
+++ b/interface/lib/classes/session.inc.php
@@ -66,9 +66,9 @@
 	function read ($session_id) {
 		
 		if($this->timeout > 0) {
-			$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."' AND (`permanent` = 'y' OR last_updated >= DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE))");
+			$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = ? AND (`permanent` = 'y' OR last_updated >= DATE_SUB(NOW(), INTERVAL ? MINUTE))", $session_id, $this->timeout);
 		} else {
-			$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."'");
+			$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = ?", $session_id);
 		}
 
 		if (is_array($rec)) {
@@ -87,23 +87,18 @@
 
 		// 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);
-			$this->db->query("UPDATE sys_session SET last_updated = NOW() WHERE session_id = '$session_id'");
+			$this->db->query("UPDATE sys_session SET last_updated = NOW() WHERE session_id = ?", $session_id);
 			return true;
 		}
 
 
 		if (@$this->session_array['session_id'] == '') {
-			$session_id   = $this->db->quote($session_id);
-			$session_data = $this->db->quote($session_data);
-			$sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id',NOW(),NOW(),'$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
-			$this->db->query($sql);
+			$sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES (?,NOW(),NOW(),'$session_data',?)";
+			$this->db->query($sql, $session_id, ($this->permanent ? 'y' : 'n'));
 
 		} else {
-			$session_id   = $this->db->quote($session_id);
-			$session_data = $this->db->quote($session_data);
-			$sql = "UPDATE sys_session SET last_updated = NOW(), session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
-			$this->db->query($sql);
+			$sql = "UPDATE sys_session SET last_updated = NOW(), session_data = ?" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = ?";
+			$this->db->query($sql, $session_data, $session_id);
 
 		}
 
@@ -112,25 +107,20 @@
 
 	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);
+		$sql = "DELETE FROM sys_session WHERE session_id = ?";
+		$this->db->query($sql, $session_id);
 
 		return true;
 	}
 
 	function gc ($max_lifetime) {
 
-		/*if($this->timeout > 0) {
-			$this->db->query("DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE)");
-		} else {*/
-			$sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($max_lifetime) . " SECOND) AND `permanent` != 'y'";
-			$this->db->query($sql);
+		$sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL ? SECOND) AND `permanent` != 'y'";
+		$this->db->query($sql, intval($max_lifetime));
 			
-			/* delete very old even if they are permanent */
-			$sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL 1 YEAR)";
-			$this->db->query($sql);
-		//}
+		/* delete very old even if they are permanent */
+		$sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL 1 YEAR)";
+		$this->db->query($sql);
 
 		return true;
 
diff --git a/interface/lib/classes/sites_database_plugin.inc.php b/interface/lib/classes/sites_database_plugin.inc.php
index bf53c61..89cb7ce 100644
--- a/interface/lib/classes/sites_database_plugin.inc.php
+++ b/interface/lib/classes/sites_database_plugin.inc.php
@@ -40,15 +40,15 @@
 		global $app;
 
 		if($form_page->dataRecord["parent_domain_id"] > 0) {
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($form_page->dataRecord["parent_domain_id"]));
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $form_page->dataRecord["parent_domain_id"]);
 
 			//* The Database user shall be owned by the same group then the website
 			$sys_groupid = $app->functions->intval($web['sys_groupid']);
-			$backup_interval = $app->db->quote($web['backup_interval']);
+			$backup_interval = $web['backup_interval'];
 			$backup_copies = $app->functions->intval($web['backup_copies']);
 
-			$sql = "UPDATE web_database SET sys_groupid = '$sys_groupid', backup_interval = '$backup_interval', backup_copies = '$backup_copies' WHERE database_id = ".$form_page->id;
-			$app->db->query($sql);
+			$sql = "UPDATE web_database SET sys_groupid = ?, backup_interval = ?, backup_copies = ? WHERE database_id = ?";
+			$app->db->query($sql, $sys_groupid, $backup_interval, $backup_copies, $form_page->id);
 		}
 	}
 
diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index 7912f53..1376d7d 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -79,8 +79,8 @@
 				$escape = '`';
 			}
 
-			$sql = "SELECT ".$this->formDef['db_table_idx']." FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$record_id." AND ".$this->getAuthSQL($perm);
-			if($record = $app->db->queryOneRecord($sql)) {
+			$sql = "SELECT ?? FROM ?? WHERE ?? = ? AND ".$this->getAuthSQL($perm);
+			if($record = $app->db->queryOneRecord($sql, $this->formDef['db_table_idx'], $this->formDef['db_table'], $this->formDef['db_table_idx'], $record_id)) {
 				return true;
 			} else {
 				return false;
@@ -133,8 +133,8 @@
 			$escape = '`';
 		}
 
-		$sql = "SELECT sys_userid FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id;
-		$record = $app->db->queryOneRecord($sql);
+		$sql = "SELECT sys_userid FROM ?? WHERE ?? = ?";
+		$record = $app->db->queryOneRecord($sql, $this->formDef['db_table'], $this->formDef['db_table_idx'], $primary_id);
 
 		// return true if the readonly flag of the form is set and the current loggedin user is not the owner of the record.
 		if(isset($this->formDef['tabs'][$tab]['readonly']) && $this->formDef['tabs'][$tab]['readonly'] == true && $record['sys_userid'] != $_SESSION["s"]["user"]["userid"]) {
@@ -161,18 +161,17 @@
 		global $app;
 
 		$check_passed = true;
-		$limit_name = $app->db->quote($limit_name);
 		if($limit_name == '') $app->error('Limit name missing in function checkClientLimit.');
 
 		// Get the limits of the client that is currently logged in
 		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-		$client = $app->db->queryOneRecord("SELECT $limit_name as number, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		$client = $app->db->queryOneRecord("SELECT ?? as number, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $limit_name, $client_group_id);
 
 		// Check if the user may add another item
 		if($client["number"] >= 0) {
-			$sql = "SELECT count(".$this->formDef['db_table_idx'].") as number FROM ".$this->formDef['db_table']." WHERE ".$this->getAuthSQL('u');
+			$sql = "SELECT count(??) as number FROM ?? WHERE ".$this->getAuthSQL('u');
 			if($sql_where != '') $sql .= ' and '.$sql_where;
-			$tmp = $app->db->queryOneRecord($sql);
+			$tmp = $app->db->queryOneRecord($sql, $this->formDef['db_table_idx'], $this->formDef['db_table']);
 			if($tmp["number"] >= $client["number"]) $check_passed = false;
 		}
 
@@ -183,30 +182,29 @@
 		global $app;
 
 		$check_passed = true;
-		$limit_name = $app->db->quote($limit_name);
 		if($limit_name == '') $app->error('Limit name missing in function checkClientLimit.');
 
 		// Get the limits of the client that is currently logged in
 		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-		$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 		//* If the client belongs to a reseller, we will check against the reseller Limit too
 		if($client['parent_client_id'] != 0) {
 
 			//* first we need to know the groups of this reseller
-			$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ".$client['parent_client_id']);
+			$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ?", $client['parent_client_id']);
 			$reseller_groups = $tmp["groups"];
 			$reseller_userid = $tmp["userid"];
 
 			// Get the limits of the reseller of the logged in client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$reseller = $app->db->queryOneRecord("SELECT $limit_name as number FROM client WHERE client_id = ".$client['parent_client_id']);
+			$reseller = $app->db->queryOneRecord("SELECT $limit_name as number FROM client WHERE client_id = ?", $client['parent_client_id']);
 
 			// Check if the user may add another item
 			if($reseller["number"] >= 0) {
-				$sql = "SELECT count(".$this->formDef['db_table_idx'].") as number FROM ".$this->formDef['db_table']." WHERE (sys_groupid IN (".$reseller_groups.") or sys_userid = ".$reseller_userid.")";
+				$sql = "SELECT count(??) as number FROM ?? WHERE (sys_groupid IN ? or sys_userid = ?)";
 				if($sql_where != '') $sql .= ' and '.$sql_where;
-				$tmp = $app->db->queryOneRecord($sql);
+				$tmp = $app->db->queryOneRecord($sql, $this->formDef['db_table_idx'], $this->formDef['db_table'], explode(',', $reseller_groups), $reseller_userid);
 				if($tmp["number"] >= $reseller["number"]) $check_passed = false;
 			}
 		}
@@ -257,9 +255,13 @@
 		if ($display_seconds === true) {
 			$dselect[] = 'second';
 		}
+		
+		$tmp_dt = strtr($this->datetimeformat,array('d' => 'dd', 'm' => 'mm', 'Y' => 'yyyy', 'y' => 'yy', 'H' => 'hh', 'h' => 'HH', 'i' => 'ii')) . ($display_seconds ? ':ss' : '');
 
 		$out = '';
-
+		
+		return '<input type="text" class="form-control" name="' . $form_element . '" value="' . ($_showdate ? date($this->datetimeformat . ($display_seconds ? ':s' : ''), $_datetime) : '') . '"  data-input-element="datetime" data-date-format="' . $tmp_dt . '" />'; 
+/*
 		foreach ($dselect as $dt_element)
 		{
 			$dt_options = array();
@@ -320,7 +322,7 @@
 				$selected_value = (int)floor(date('s', $_datetime));
 				break;
 			}
-
+	
 			$out .= "<select name=\"".$form_element."[$dt_element]\" id=\"".$form_element."_$dt_element\" class=\"selectInput\" style=\"width: auto; float: none;\">";
 			if (!$_showdate) {
 				$out .= "<option value=\"-\" selected=\"selected\">--</option>" . PHP_EOL;
@@ -339,7 +341,7 @@
 			$out .= '</select>' . str_repeat('&nbsp;', $dt_space);
 		}
 
-		return $out;
+		return $out;*/
 	}
 
 }
diff --git a/interface/lib/classes/tform_actions.inc.php b/interface/lib/classes/tform_actions.inc.php
index dfc943c..f172fea 100644
--- a/interface/lib/classes/tform_actions.inc.php
+++ b/interface/lib/classes/tform_actions.inc.php
@@ -82,7 +82,7 @@
 		// check if the client is locked - he may not change anything, then.
 		if(!$app->auth->is_admin()) {
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client.locked FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ".$app->functions->intval($client_group_id));
+			$client = $app->db->queryOneRecord("SELECT client.locked FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			if(is_array($client) && $client['locked'] == 'y') {
 				$app->tform->errorMessage .= $app->lng("client_you_are_locked")."<br />";
 			}
@@ -311,7 +311,6 @@
 				if($app->tform->checkPerm($this->id, 'd') == false) $app->error($app->lng('error_no_delete_permission'));
 			}
 
-			//$this->dataRecord = $app->db->queryOneRecord("SELECT * FROM ".$liste["table"]." WHERE ".$liste["table_idx"]." = ".$this->id);
 			$this->dataRecord = $app->tform->getDataRecord($this->id);
 
 			$app->plugin->raiseEvent($_SESSION['s']['module']['name'].':'.$app->tform->formDef['name'].':'.'on_check_delete', $this);
@@ -324,7 +323,7 @@
 				$app->tform->datalogSave('DELETE', $this->id, $this->dataRecord, array());
 			}
 
-			$app->db->query("DELETE FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." LIMIT 1");
+			$app->db->query("DELETE FROM ?? WHERE ?? = ? LIMIT 1", $app->tform->formDef['db_table'], $app->tform->formDef['db_table_idx'], $this->id);
 
 
 			// loading plugins
@@ -379,11 +378,11 @@
 		$app->tpl->setInclude("content_tpl", $app->tform->formDef['template_print']);
 
 		if($app->tform->formDef['auth'] == 'no') {
-			$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
+			$sql = "SELECT * FROM ?? WHERE ?? = ?";
 		} else {
-			$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
+			$sql = "SELECT * FROM ?? WHERE ?? = ? AND ".$app->tform->getAuthSQL('r');
 		}
-		if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
+		if(!$record = $app->db->queryOneRecord($sql, $app->tform->formDef['db_table'], $app->tform->formDef['db_table_idx'], $this->id)) $app->error($app->lng('error_no_view_permission'));
 
 		$record["datum"] = date("d.m.Y");
 
@@ -423,11 +422,11 @@
 			$app->tpl->setInclude("content_tpl", $app->tform->formDef['template_mailsend']);
 			$app->tpl->setVar('show_mail', 1);
 			if($app->tform->formDef['auth'] == 'no') {
-				$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
+				$sql = "SELECT * FROM ?? WHERE ?? = ?";
 			} else {
-				$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
+				$sql = "SELECT * FROM ?? WHERE ?? = ? AND ".$app->tform->getAuthSQL('r');
 			}
-			if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
+			if(!$record = $app->db->queryOneRecord($sql, $app->tform->formDef['db_table'], $app->tform->formDef['db_table_idx'], $this->id)) $app->error($app->lng('error_no_view_permission'));
 
 			$record["datum"] = date("d.m.Y");
 			$record["mailmessage"] = $_POST["message"];
@@ -459,11 +458,11 @@
 
 
 		if($app->tform->formDef['auth'] == 'no') {
-			$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
+			$sql = "SELECT * FROM ?? WHERE ?? = ?";
 		} else {
-			$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
+			$sql = "SELECT * FROM ?? WHERE ?? = ? AND ".$app->tform->getAuthSQL('r');
 		}
-		if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
+		if(!$record = $app->db->queryOneRecord($sql, $app->tform->formDef['db_table'], $app->tform->formDef['db_table_idx'], $this->id)) $app->error($app->lng('error_no_view_permission'));
 
 		$record["datum"] = date("d.m.Y");
 
@@ -560,11 +559,11 @@
 		// bestehenden Datensatz anzeigen
 		if($app->tform->errorMessage == '') {
 			if($app->tform->formDef['auth'] == 'yes' && $_SESSION["s"]["user"]["typ"] != 'admin') {
-				$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
+				$sql = "SELECT * FROM ?? WHERE ?? = ? AND ".$app->tform->getAuthSQL('r');
 			} else {
-				$sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
+				$sql = "SELECT * FROM ?? WHERE ?? = ?";
 			}
-			if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
+			if(!$record = $app->db->queryOneRecord($sql, $app->tform->formDef['db_table'], $app->tform->formDef['db_table_idx'], $this->id)) $app->error($app->lng('error_no_view_permission'));
 		} else {
 			// $record = $app->tform->encode($_POST,$this->active_tab);
 			$record = $app->tform->encode($this->dataRecord, $this->active_tab, false);
diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index e27940d..749ea5c 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -98,6 +98,7 @@
 	var $errorMessage = '';
 
 	var $dateformat = "d.m.Y";
+	var $datetimeformat = 'd.m.Y H:i';
 	var $formDef = array();
 	var $wordbook;
 	var $module;
@@ -153,6 +154,7 @@
 		$this->wordbook = $wb;
 
 		$this->dateformat = $app->lng('conf_format_dateshort');
+		$this->datetimeformat = $app->lng('conf_format_datetime');
 
 		return true;
 	}
@@ -347,7 +349,7 @@
 				return $values;
 			} else {
 				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 				$allowed = explode(',', $client['lm']);
 			}
 		}
@@ -359,19 +361,19 @@
 			} else {
 				//* Get the limits of the client that is currently logged in
 				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 				//echo "SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
 				//* If the client belongs to a reseller, we will check against the reseller Limit too
 				if($client['parent_client_id'] != 0) {
 
 					//* first we need to know the groups of this reseller
-					$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ".$client['parent_client_id']);
+					$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ?", $client['parent_client_id']);
 					$reseller_groups = $tmp["groups"];
 					$reseller_userid = $tmp["userid"];
 
 					// Get the limits of the reseller of the logged in client
 					$client_group_id = $_SESSION["s"]["user"]["default_group"];
-					$reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ".$client['parent_client_id']);
+					$reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ?", $client['parent_client_id']);
 					$allowed = explode(',', $reseller['lm']);
 				} else {
 					return $values;
@@ -708,13 +710,8 @@
 					if($record[$key] != '' && $record[$key] != '0000-00-00') {
 						if(function_exists('date_parse_from_format')) {
 							$date_parts = date_parse_from_format($this->dateformat, $record[$key]);
-							//list($tag,$monat,$jahr) = explode('.',$record[$key]);
-							$new_record[$key] = $date_parts['year'].'-'.$date_parts['month'].'-'.$date_parts['day'];
-							//$tmp = strptime($record[$key],$this->dateformat);
-							//$new_record[$key] = ($tmp['tm_year']+1900).'-'.($tmp['tm_mon']+1).'-'.$tmp['tm_mday'];
+							$new_record[$key] = $date_parts['year'].'-'.str_pad($date_parts['month'], 2, "0", STR_PAD_LEFT).'-'.str_pad($date_parts['day'], 2, "0", STR_PAD_LEFT);
 						} else {
-							//$tmp = strptime($record[$key],$this->dateformat);
-							//$new_record[$key] = ($tmp['tm_year']+1900).'-'.($tmp['tm_mon']+1).'-'.$tmp['tm_mday'];
 							$tmp = strtotime($record[$key]);
 							$new_record[$key] = date('Y-m-d', $tmp);
 						}
@@ -724,8 +721,6 @@
 					break;
 				case 'INTEGER':
 					$new_record[$key] = (isset($record[$key]))?$app->functions->intval($record[$key]):0;
-					//if($new_record[$key] != $record[$key]) $new_record[$key] = $field['default'];
-					//if($key == 'refresh') die($record[$key]);
 					break;
 				case 'DOUBLE':
 					$new_record[$key] = $record[$key];
@@ -735,7 +730,7 @@
 					break;
 
 				case 'DATETIME':
-					if (is_array($record[$key]))
+					/*if (is_array($record[$key]))
 					{
 						$filtered_values = array_map(create_function('$item', 'return (int)$item;'), $record[$key]);
 						extract($filtered_values, EXTR_PREFIX_ALL, '_dt');
@@ -743,7 +738,14 @@
 						if ($_dt_day != 0 && $_dt_month != 0 && $_dt_year != 0) {
 							$new_record[$key] = date( 'Y-m-d H:i:s', mktime($_dt_hour, $_dt_minute, $_dt_second, $_dt_month, $_dt_day, $_dt_year) );
 						}
-					}
+					} else {*/
+						if($record[$key] != '' && $record[$key] != '0000-00-00 00:00:00') {
+							$tmp = strtotime($record[$key]);
+							$new_record[$key] = date($this->datetimeformat, $tmp);
+						} else {
+							$new_record[$key] = '0000-00-00 00:00:00';
+						}
+					/*}*/
 					break;
 				}
 
@@ -810,6 +812,9 @@
 				case 'IDNTOUTF8':
 					$returnval = $app->functions->idn_decode($returnval);
 					break;
+				case 'TRIM':
+					$returnval = trim($returnval);
+					break;
 				default:
 					$this->errorMessage .= "Unknown Filter: ".$filter['type'];
 					break;
@@ -853,7 +858,7 @@
 				if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
 				if($validator['allowempty'] == 'n' || ($validator['allowempty'] == 'y' && $field_value != '')){
 					if($this->action == 'NEW') {
-						$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."'");
+						$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ?? WHERE ?? = ?", $this->formDef['db_table'], $field_name, $field_value);
 						if($num_rec["number"] > 0) {
 							$errmsg = $validator['errmsg'];
 							if(isset($this->wordbook[$errmsg])) {
@@ -863,7 +868,7 @@
 							}
 						}
 					} else {
-						$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."' AND ".$this->formDef['db_table_idx']." != ".$this->primary_id);
+						$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ?? WHERE ?? = ? AND ?? != ?", $this->formDef['db_table'], $field_name, $field_value, $this->formDef['db_table_idx'], $this->primary_id);
 						if($num_rec["number"] > 0) {
 							$errmsg = $validator['errmsg'];
 							if(isset($this->wordbook[$errmsg])) {
@@ -1108,6 +1113,7 @@
 	 * @param primary_id
 	 * @return record
 	 */
+	 /* TODO: check for double quoting */
 	protected function _getSQL($record, $tab, $action = 'INSERT', $primary_id = 0, $sql_ext_where = '', $api = false) {
 
 		global $app;
@@ -1139,7 +1145,7 @@
 								$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
 								$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
 							} elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
-								$tmp = $app->db->queryOneRecord("SELECT PASSWORD('".$app->db->quote(stripslashes($record[$key]))."') as `crypted`");
+								$tmp = $app->db->queryOneRecord("SELECT PASSWORD(?) as `crypted`", stripslashes($record[$key]));
 								$record[$key] = $tmp['crypted'];
 								$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
 							} else {
@@ -1167,7 +1173,7 @@
 								$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
 								$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
 							} elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
-								$tmp = $app->db->queryOneRecord("SELECT PASSWORD('".$app->db->quote(stripslashes($record[$key]))."') as `crypted`");
+								$tmp = $app->db->queryOneRecord("SELECT PASSWORD(?) as `crypted`", stripslashes($record[$key]));
 								$record[$key] = $tmp['crypted'];
 								$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
 							} else {
@@ -1359,8 +1365,8 @@
 	function getDataRecord($primary_id) {
 		global $app;
 		$escape = '`';
-		$sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id." AND ".$this->getAuthSQL('r', $this->formDef['db_table']);
-		return $app->db->queryOneRecord($sql);
+		$sql = "SELECT * FROM ?? WHERE ?? = ? AND ".$this->getAuthSQL('r', $this->formDef['db_table']);
+		return $app->db->queryOneRecord($sql, $this->formDef['db_table'], $this->formDef['db_table_idx'], $primary_id);
 	}
 
 
diff --git a/interface/lib/classes/tform_tpl_generator.inc.php b/interface/lib/classes/tform_tpl_generator.inc.php
index 49fd274..b759e51 100644
--- a/interface/lib/classes/tform_tpl_generator.inc.php
+++ b/interface/lib/classes/tform_tpl_generator.inc.php
@@ -136,8 +136,8 @@
     <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','".$module."/".$formDef["action"]."');\"><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('".$module."/".$formDef["list_default"]."');\"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+      <button class=\"positive iconstxt icoPositive\" type=\"button\" value=\"{tmpl_var name='btn_save_txt'}\" onclick=\"ISPConfig.submitForm('pageForm','".$module."/".$formDef["action"]."');\"><span>{tmpl_var name='btn_save_txt'}</span></button>
+      <button class=\"negative iconstxt icoNegative\" type=\"button\" value=\"{tmpl_var name='btn_cancel_txt'}\" data-load-content=\"".$module."/".$formDef["list_default"]."\"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
     </div>
   </div>
 
diff --git a/interface/lib/classes/tools_monitor.inc.php b/interface/lib/classes/tools_monitor.inc.php
index db8c91e..bd1a969 100644
--- a/interface/lib/classes/tools_monitor.inc.php
+++ b/interface/lib/classes/tools_monitor.inc.php
@@ -33,7 +33,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'server_load' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'server_load' AND server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
@@ -80,7 +80,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'disk_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'disk_usage' AND server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
@@ -91,16 +91,18 @@
 			$html =
 				'<div class="systemmonitor-state state-'.$record['state'].'">
                 <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
-                <table>
+                <table class="table">
+                <thead class="dark">
                 <tr>
-                <td>'.$app->lng("monitor_diskusage_filesystem_txt").'</td>
-            <td>'.$app->lng("monitor_diskusage_type_txt").'</td>
-                <td>'.$app->lng("monitor_diskusage_size_txt").'</td>
-                <td>'.$app->lng("monitor_diskusage_used_txt").'</td>
-                <td>'.$app->lng("monitor_diskusage_available_txt").'</td>
-                <td>'.$app->lng("monitor_diskusage_usage_txt").'</td>
-                <td>'.$app->lng("monitor_diskusage_mounted_txt").'</td>
-                </tr>';
+                <th>'.$app->lng("monitor_diskusage_filesystem_txt").'</th>
+            <th class="small-col">'.$app->lng("monitor_diskusage_type_txt").'</th>
+                <th class="tiny-col">'.$app->lng("monitor_diskusage_size_txt").'</th>
+                <th class="tiny-col">'.$app->lng("monitor_diskusage_used_txt").'</th>
+                <th class="tiny-col">'.$app->lng("monitor_diskusage_available_txt").'</th>
+                <th class="tiny-col">'.$app->lng("monitor_diskusage_usage_txt").'</th>
+                <th>'.$app->lng("monitor_diskusage_mounted_txt").'</th>
+                </tr></thead>
+                <tbody>';
 			foreach($data as $line) {
 				$html .= '<tr>';
 				foreach ($line as $item) {
@@ -108,7 +110,7 @@
 				}
 				$html .= '</tr>';
 			}
-			$html .= '</table>';
+			$html .= '</tbody></table>';
 			$html .= '</div></div>';
 		} else {
 			$html = '<p>'.$app->lng("no_data_diskusage_txt").'</p>';
@@ -121,28 +123,31 @@
 	function showDatabaseSize () {
 		global $app;
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'database_size' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'database_size' AND server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
 			//* format the data
 			$html =
 				'<div class="systemmonitor-state state-'.$record['state'].'">
 	                <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
-                	<table><thead><tr>
-                	<td>'.$app->lng("monitor_database_name_txt").'</td>
-	                <td>'.$app->lng("monitor_database_size_txt").'</td>
-        	        <td>'.$app->lng("monitor_database_client_txt").'</td>
-					<td>'.$app->lng("monitor_database_domain_txt").'</td>
-                	</tr>';
+                	<table class="table"><thead class="dark"><tr>
+                	<th>'.$app->lng("monitor_database_name_txt").'</th>
+	                <th class="tiny-col">'.$app->lng("monitor_database_size_txt").'</th>
+        	        <th>'.$app->lng("monitor_database_client_txt").'</th>
+					<th>'.$app->lng("monitor_database_domain_txt").'</th>
+                	</tr></thead>
+                	<tbody>';
 			foreach($data as $line) {
 				$html .= '<tr>';
 				if ($line['size'] > 0) $line['size'] = $app->functions->formatBytes($line['size']);
 
 				//* get the client
-				$line['client']=$app->db->queryOneRecord("SELECT client.username FROM web_database, sys_group, client WHERE web_database.sys_groupid = sys_group.groupid AND sys_group.client_id = client.client_id AND web_database.database_name='".$line['database_name']."'")['username'];
+				$tmp = $app->db->queryOneRecord("SELECT client.username FROM web_database, sys_group, client WHERE web_database.sys_groupid = sys_group.groupid AND sys_group.client_id = client.client_id AND web_database.database_name=?", $line['database_name']);
+				$line['client'] = $tmp['username'];
 
 				//* get the domain
-				$line['domain']=$app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id=(SELECT parent_domain_id FROM web_database WHERE database_name='".$line['database_name']."')")['domain'];
+				$tmp = $app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id=(SELECT parent_domain_id FROM web_database WHERE database_name=?", $line['database_name']);
+				$line['domain'] = $tmp['domain'];
 
 				//* remove the sys_groupid from output
 				unset($line['sys_groupid']);
@@ -150,7 +155,7 @@
 				foreach ($line as $item) {
 					$html .= '<td>' . $item . '</td>';
 				}
-				$html .= '</tr></tmpl loop>';
+				$html .= '</tr>';
 			}
 			$html .= '</tbody></table></div></div>';
 		} else {
@@ -163,7 +168,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mem_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mem_usage' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
@@ -174,7 +179,8 @@
 			$html =
 				'<div class="systemmonitor-state state-'.$record['state'].'">
                 <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
-                <table>';
+                <table class="table">
+                <tbody>';
 
 			foreach($data as $key => $value) {
 				if ($key != '') {
@@ -184,7 +190,7 @@
                         </tr>';
 				}
 			}
-			$html .= '</table>';
+			$html .= '</tbody></table>';
 			$html .= '</div></div>';
 
 		} else {
@@ -198,7 +204,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'cpu_info' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'cpu_info' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
@@ -209,7 +215,8 @@
 			$html =
 				'<div class="systemmonitor-state state-'.$record['state'].'">
                 <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
-                <table>';
+                <table class="table">
+                <tbody>';
 			foreach($data as $key => $value) {
 				if ($key != '') {
 					$html .= '<tr>
@@ -218,7 +225,7 @@
                         </tr>';
 				}
 			}
-			$html .= '</table>';
+			$html .= '</tbody></table>';
 			$html .= '</div></div>';
 		} else {
 			$html = '<p>'.$app->lng("no_data_cpuinfo_txt").'</p>';
@@ -231,7 +238,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'services' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'services' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
@@ -242,7 +249,8 @@
 			$html =
 				'<div class="systemmonitor-state state-'.$record['state'].'">
                 <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
-                <table>';
+                <table class="table">
+                <tbody>';
 
 			if($data['webserver'] != -1) {
 				if($data['webserver'] == 1) {
@@ -330,7 +338,7 @@
 			}
 
 
-			$html .= '</table></div></div>';
+			$html .= '</tbody></table></div></div>';
 		} else {
 			$html = '<p>'.$app->lng("no_data_services_txt").'</p>';
 		}
@@ -343,7 +351,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'system_update' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'system_update' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$html =
@@ -373,7 +381,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'openvz_beancounter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'openvz_beancounter' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$html =
@@ -402,7 +410,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'raid_state' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'raid_state' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$html =
@@ -435,7 +443,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'rkhunter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'rkhunter' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$html =
@@ -466,7 +474,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'log_fail2ban' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'log_fail2ban' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$html =
@@ -480,7 +488,7 @@
 			$data = unserialize($record['data']);
 			if ($data == '') {
 				$html .= '<p>'.
-					'fail2ban is not installed at this server.<br />' .
+					'fail2ban is not installed on this server.<br />' .
 					'See more (for debian) <a href="http://www.howtoforge.com/fail2ban_debian_etch" target="htf">here...</a>'.
 					'</p>';
 			}
@@ -500,7 +508,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'log_mongodb' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'log_mongodb' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$html =
@@ -514,8 +522,7 @@
 			$data = unserialize($record['data']);
 			if ($data == '') {
 				$html .= '<p>'.
-					'MongoDB is not installed at this server.<br />' .
-					'See more (for debian) <a href="http://www.howtoforge.com/fail2ban_debian_etch" target="htf">here...</a>'.
+					'MongoDB is not installed on this server.<br />' .
 					'</p>';
 			}
 			else {
@@ -532,7 +539,7 @@
 
 	function showIPTables() {
 		global $app;
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'iptables_rules' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'iptables_rules' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 		if(isset($record['data'])) {
 			$html =
 				'<div class="systemmonitor-state state-'.$record['state'].'">
@@ -556,7 +563,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mailq' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mailq' and server_id = ? ORDER BY created DESC", $_SESSION['monitor']['server_id']);
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
@@ -572,7 +579,7 @@
 		global $app;
 
 		/* fetch the Data from the DB */
-		$record = $app->db->queryOneRecord("SELECT created FROM monitor_data WHERE type = '" . $type . "' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+		$record = $app->db->queryOneRecord("SELECT created FROM monitor_data WHERE type = ? and server_id = ? ORDER BY created DESC", $type, $_SESSION['monitor']['server_id']);
 
 		/* TODO: datetimeformat should be set somewhat other way */
 		$dateTimeFormat = $app->lng("monitor_settings_datetimeformat_txt");
diff --git a/interface/lib/classes/tools_sites.inc.php b/interface/lib/classes/tools_sites.inc.php
index 3400c5b..b2881f5 100644
--- a/interface/lib/classes/tools_sites.inc.php
+++ b/interface/lib/classes/tools_sites.inc.php
@@ -87,7 +87,7 @@
 			if(isset($dataRecord['client_group_id'])) {
 				$client_group_id = $dataRecord['client_group_id'];
 			} elseif (isset($dataRecord['parent_domain_id'])) {
-				$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = " . $dataRecord['parent_domain_id']);
+				$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = ?", $dataRecord['parent_domain_id']);
 				$client_group_id = $tmp['sys_groupid'];
 			} elseif(isset($dataRecord['sys_groupid'])) {
 				$client_group_id = $dataRecord['sys_groupid'];
@@ -96,7 +96,7 @@
 			}
 		}
 
-		$tmp = $app->db->queryOneRecord("SELECT name FROM sys_group WHERE groupid = " . $app->functions->intval($client_group_id));
+		$tmp = $app->db->queryOneRecord("SELECT name FROM sys_group WHERE groupid = ?", $client_group_id);
 		$clientName = $tmp['name'];
 		if ($clientName == "") $clientName = 'default';
 		$clientName = $this->convertClientName($clientName);
@@ -114,7 +114,7 @@
 			if(isset($dataRecord['client_group_id'])) {
 				$client_group_id = $dataRecord['client_group_id'];
 			} elseif (isset($dataRecord['parent_domain_id']) && $dataRecord['parent_domain_id'] != 0) {
-				$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = " . $dataRecord['parent_domain_id']);
+				$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = ?", $dataRecord['parent_domain_id']);
 				$client_group_id = $tmp['sys_groupid'];
 			} elseif(isset($dataRecord['sys_groupid'])) {
 				$client_group_id = $dataRecord['sys_groupid'];
@@ -122,7 +122,7 @@
 				return '[CLIENTID]';
 			}
 		}
-		$tmp = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = " . $app->functions->intval($client_group_id));
+		$tmp = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $client_group_id);
 		$clientID = $tmp['client_id'];
 		if ($clientID == '') $clientID = '0';
 		return $clientID;
@@ -144,6 +144,7 @@
 		return $res;
 	}
 
+	/* TODO: rewrite SQL */
 	function getDomainModuleDomains($not_used_in_table = null, $selected_domain = null) {
 		global $app;
 
@@ -168,6 +169,7 @@
 		return $app->db->queryAllRecords($sql, $not_used_in_table, $selected_domain);
 	}
 
+	/* TODO: rewrite SQL */
 	function checkDomainModuleDomain($domain_id) {
 		global $app;
 
@@ -180,7 +182,8 @@
 		if(!$domain || !$domain['domain_id']) return false;
 		return $domain['domain'];
 	}
-
+	
+	/* TODO: rewrite SQL */
 	function getClientIdForDomain($domain_id) {
 		global $app;
 
diff --git a/interface/lib/classes/validate_client.inc.php b/interface/lib/classes/validate_client.inc.php
index 0f90a5b..db55b04 100644
--- a/interface/lib/classes/validate_client.inc.php
+++ b/interface/lib/classes/validate_client.inc.php
@@ -43,7 +43,7 @@
 		}
 
 		if($client_id == 0) {
-			$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM sys_user WHERE username = '".$app->db->quote($field_value)."'");
+			$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM sys_user WHERE username = ?", $field_value);
 			if($num_rec["number"] > 0) {
 				$errmsg = $validator['errmsg'];
 				if(isset($app->tform->wordbook[$errmsg])) {
@@ -53,7 +53,7 @@
 				}
 			}
 		} else {
-			$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM sys_user WHERE username = '".$app->db->quote($field_value)."' AND client_id != ".$app->functions->intval($client_id));
+			$num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM sys_user WHERE username = ? AND client_id != ?", $field_value, $client_id);
 			if($num_rec["number"] > 0) {
 				$errmsg = $validator['errmsg'];
 				if(isset($app->tform->wordbook[$errmsg])) {
@@ -108,20 +108,24 @@
 			switch ($field_name)
 			{
 			case 'web_servers':
-				$used_servers = $app->db->queryAllRecords('SELECT domain_id FROM web_domain INNER JOIN sys_user ON web_domain.sys_userid = sys_user.userid WHERE client_id = ' . $client_id . ' AND server_id NOT IN (' . implode(', ', $field_value) . ');');
+				$used_servers = $app->db->queryAllRecords('SELECT domain_id FROM web_domain INNER JOIN sys_user ON web_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value);
 				break;
 
 			case 'dns_servers':
-				$used_servers = $app->db->queryAllRecords('SELECT id FROM dns_rr INNER JOIN sys_user ON dns_rr.sys_userid = sys_user.userid WHERE client_id = ' . $client_id . ' AND server_id NOT IN (' . implode(', ', $field_value) . ');');
+				$used_servers = $app->db->queryAllRecords('SELECT id FROM dns_rr INNER JOIN sys_user ON dns_rr.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value);
 				break;
 
 			case 'db_servers':
-				$used_servers = $app->db->queryAllRecords('SELECT database_id FROM web_database INNER JOIN sys_user ON web_database.sys_userid = sys_user.userid WHERE client_id = ' . $client_id . ' AND server_id NOT IN (' . implode(', ', $field_value) . ');');
+				$used_servers = $app->db->queryAllRecords('SELECT database_id FROM web_database INNER JOIN sys_user ON web_database.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value);
 				break;
 
 			case 'mail_servers':
-				$used_servers = $app->db->queryAllRecords('SELECT domain_id FROM mail_domain INNER JOIN sys_user ON mail_domain.sys_userid = sys_user.userid WHERE client_id = ' . $client_id . ' AND server_id NOT IN (' . implode(', ', $field_value) . ');');
+				$used_servers = $app->db->queryAllRecords('SELECT domain_id FROM mail_domain INNER JOIN sys_user ON mail_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value);
 				break;
+
+            case 'xmpp_servers':
+                $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM xmpp_domain INNER JOIN sys_user ON xmpp_domain.sys_userid = sys_user.userid WHERE client_id = ? AND server_id NOT IN ?', $client_id, $field_value);
+                break;
 			}
 
 			if ($used_servers === null || count($used_servers))
@@ -136,7 +140,87 @@
 		}
 	}
 
+	function check_vat_id ($field_name, $field_value, $validator){
+		global $app, $page;
+		
+		$vatid = trim($field_value);
+		if(isset($app->remoting_lib->primary_id)) {
+			$country = $app->remoting_lib->dataRecord['country'];
+		} else {
+			$country = $page->dataRecord['country'];
+		}
+		
+		// check if country is member of EU
+		$country_details = $app->db->queryOneRecord("SELECT * FROM country WHERE iso = ?", $country);
+		if($country_details['eu'] == 'y' && $vatid != ''){
+		
+			$vatid = preg_replace('/\s+/', '', $vatid);
+			$vatid = str_replace(array('.', '-', ','), '', $vatid);
+			$cc = substr($vatid, 0, 2);
+			$vn = substr($vatid, 2);
 
+			// Test if the country of the VAT-ID matches the country of the customer
+			if($country != ''){
+				// Greece
+				if($country == 'GR') $country = 'EL';
+				if(strtoupper($cc) != $country){
+					$errmsg = $validator['errmsg'];
+					if(isset($app->tform->wordbook[$errmsg])) {
+						return $app->tform->wordbook[$errmsg]."<br>\r\n";
+					} else {
+						return $errmsg."<br>\r\n";
+					}
+				}
+			}
+
+			$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
+
+			if($client){
+				$params = array('countryCode' => $cc, 'vatNumber' => $vn);
+				try{
+					$r = $client->checkVat($params);
+					if($r->valid == true){
+					} else {
+						$errmsg = $validator['errmsg'];
+							if(isset($app->tform->wordbook[$errmsg])) {
+								return $app->tform->wordbook[$errmsg]."<br>\r\n";
+							} else {
+								return $errmsg."<br>\r\n";
+							}
+					}
+
+					// This foreach shows every single line of the returned information
+					/*
+					foreach($r as $k=>$prop){
+						echo $k . ': ' . $prop;
+					}
+					*/
+
+				} catch(SoapFault $e) {
+					//echo 'Error, see message: '.$e->faultstring;
+					switch ($e->faultstring) {
+						case 'INVALID_INPUT':
+							$errmsg = $validator['errmsg'];
+							if(isset($app->tform->wordbook[$errmsg])) {
+								return $app->tform->wordbook[$errmsg]."<br>\r\n";
+							} else {
+								return $errmsg."<br>\r\n";
+							}
+							break;
+						// the following cases shouldn't be the user's fault, so we return no error
+						case 'SERVICE_UNAVAILABLE':
+						case 'MS_UNAVAILABLE':
+						case 'TIMEOUT':
+						case 'SERVER_BUSY':
+							break;
+					}
+				}
+			} else {
+				// Connection to host not possible, europe.eu down?
+				// this shouldn't be the user's fault, so we return no error
+			}
+		}
+	}
 
 
 }
diff --git a/interface/lib/classes/validate_dkim.inc.php b/interface/lib/classes/validate_dkim.inc.php
index 71fd8c5..5d7fb8f 100644
--- a/interface/lib/classes/validate_dkim.inc.php
+++ b/interface/lib/classes/validate_dkim.inc.php
@@ -62,8 +62,10 @@
 	 */
 	function check_template($field_name, $field_value, $validator) {
 		$dkim=false;
-		foreach($field_value as $field ) { if($field == 'DKIM') $dkim=true; }
-		if ($dkim && $field_value[0]!='DOMAIN') return $this->get_error($validator['errmsg']);
+		if(is_array($field_value) && !empty($field_value)){
+			foreach($field_value as $field ) { if($field == 'DKIM') $dkim=true; }
+			if ($dkim && $field_value[0]!='DOMAIN') return $this->get_error($validator['errmsg']);
+		}
 	}
 
 
diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php
index 212c4d7..a6920e0 100644
--- a/interface/lib/classes/validate_dns.inc.php
+++ b/interface/lib/classes/validate_dns.inc.php
@@ -104,7 +104,7 @@
 		}
 
 		if(substr($field, -1) == '.' && $area == 'Name'){
-			$soa = $app->db->queryOneRecord("SELECT * FROM soa WHERE id = ".intval($zoneid));
+			$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";
 		}
 
diff --git a/interface/lib/classes/validate_domain.inc.php b/interface/lib/classes/validate_domain.inc.php
index a072412..fde14b0 100644
--- a/interface/lib/classes/validate_domain.inc.php
+++ b/interface/lib/classes/validate_domain.inc.php
@@ -88,8 +88,8 @@
 		$app->uses('ini_parser,getconf');
 		$settings = $app->getconf->get_global_config('domains');
 		if ($settings['use_domain_module'] == 'y') {
-			$sql = "SELECT domain_id, domain FROM domain WHERE domain_id = " . $app->functions->intval($check_domain);
-			$domain_check = $app->db->queryOneRecord($sql);
+			$sql = "SELECT domain_id, domain FROM domain WHERE domain_id = ?";
+			$domain_check = $app->db->queryOneRecord($sql, $check_domain);
 			if(!$domain_check) return;
 			$check_domain = $domain_check['domain'];
 		}
@@ -157,24 +157,31 @@
 
 		if($domain['ip_address'] == '' || $domain['ipv6_address'] == ''){
 			if($domain['parent_domain_id'] > 0){
-				$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($domain['parent_domain_id']));
+				$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $domain['parent_domain_id']);
+				if(is_array($parent_domain) && !empty($parent_domain)){
+					$domain['ip_address'] = $parent_domain['ip_address'];
+					$domain['ipv6_address'] = $parent_domain['ipv6_address'];
+				}
 			}
 		}
 
 		// check if domain has alias/subdomains - if we move a web to another IP, make sure alias/subdomains are checked as well
-		$aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain' OR type = 'vhostsubdomain')");
+		$aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ? AND (type = 'alias' OR type = 'subdomain' OR type = 'vhostsubdomain')", $primary_id);
 		$additional_sql1 = '';
 		$additional_sql2 = '';
+		$domain_params = array();
 		if(is_array($aliassubdomains) && !empty($aliassubdomains)){
 			foreach($aliassubdomains as $aliassubdomain){
-				$additional_sql1 .= " OR d.domain = '".$app->db->quote($aliassubdomain['domain'])."'";
-				$additional_sql2 .= " OR CONCAT(d.subdomain, '.', d.domain) = '".$app->db->quote($aliassubdomain['domain'])."'";
+				$additional_sql1 .= " OR d.domain = ?";
+				$additional_sql2 .= " OR CONCAT(d.subdomain, '.', d.domain) = ?";
+				$domain_params[] = $aliassubdomain['domain'];
 			}
 		}
 		
 		
-		$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (d.domain = '" . $app->db->quote($domain_name) . "'" . $additional_sql1 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . ($primary_id ? " AND d.parent_domain_id != " . $app->functions->intval($primary_id) : "");
-		$checks = $app->db->queryAllRecords($qrystr);
+		$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (d.domain = ?" . $additional_sql1 . ") AND d.server_id = ? AND d.domain_id != ?" . ($primary_id ? " AND d.parent_domain_id != ?" : "");
+		$params = array($domain_name) + $domain_params + array($domain['server_id'], $primary_id, $primary_id);
+		$checks = $app->db->queryAllRecords($qrystr, true, $params);
 		if(is_array($checks) && !empty($checks)){
 			foreach($checks as $check){
 				if($domain['ip_address'] == '*') return false;
@@ -185,8 +192,9 @@
 		}
 		
 		if($only_domain == false) {
-			$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (CONCAT(d.subdomain, '.', d.domain)= '" . $app->db->quote($domain_name) . "'" . $additional_sql2 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . ($primary_id ? " AND d.parent_domain_id != " . $app->functions->intval($primary_id) : "");
-			$checks = $app->db->queryAllRecords($qrystr);
+			$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (CONCAT(d.subdomain, '.', d.domain)= ?" . $additional_sql2 . ") AND d.server_id = ? AND d.domain_id != ?" . ($primary_id ? " AND d.parent_domain_id != ?" : "");
+			$params = array($domain_name) + $domain_params + array($domain['server_id'], $primary_id, $primary_id);
+			$checks = $app->db->queryAllRecords($qrystr, true, $params);
 			if(is_array($checks) && !empty($checks)){
 				foreach($checks as $check){
 					if($domain['ip_address'] == '*') return false;
@@ -207,7 +215,7 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_wildcard FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_wildcard FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			if($client["limit_wildcard"] == 'y') return true;
 			else return false;
diff --git a/interface/lib/classes/validate_ftpuser.inc.php b/interface/lib/classes/validate_ftpuser.inc.php
index 8e0663e..da8c100 100644
--- a/interface/lib/classes/validate_ftpuser.inc.php
+++ b/interface/lib/classes/validate_ftpuser.inc.php
@@ -50,7 +50,7 @@
 
 		if($primary_id > 0) {
 			//* get parent_domain_id from website
-			$ftp_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM ftp_user WHERE ftp_user_id = '".$app->db->quote($primary_id)."'");
+			$ftp_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM ftp_user WHERE ftp_user_id = ?", $primary_id);
 			if(!is_array($ftp_data) || $ftp_data["parent_domain_id"] < 1) {
 				$errmsg = $validator['errmsg'];
 				if(isset($app->tform->wordbook[$errmsg])) {
@@ -66,7 +66,7 @@
 			$parent_domain_id = $app->functions->intval($app->remoting_lib->dataRecord['parent_domain_id']);
 		}
 
-		$domain_data = $app->db->queryOneRecord("SELECT domain_id, document_root FROM web_domain WHERE domain_id = '".$app->db->quote($parent_domain_id)."'");
+		$domain_data = $app->db->queryOneRecord("SELECT domain_id, document_root FROM web_domain WHERE domain_id = ?", $parent_domain_id);
 		if(!is_array($domain_data) || $domain_data["domain_id"] < 1) {
 			$errmsg = $validator['errmsg'];
 			if(isset($app->tform->wordbook[$errmsg])) {
diff --git a/interface/lib/classes/validate_systemuser.inc.php b/interface/lib/classes/validate_systemuser.inc.php
index 2cab1cf..74824b7 100644
--- a/interface/lib/classes/validate_systemuser.inc.php
+++ b/interface/lib/classes/validate_systemuser.inc.php
@@ -95,7 +95,7 @@
 
 		if($primary_id > 0) {
 			//* get parent_domain_id from website
-			$shell_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM shell_user WHERE shell_user_id = '".$app->db->quote($primary_id)."'");
+			$shell_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM shell_user WHERE shell_user_id = ?", $primary_id);
 			if(!is_array($shell_data) || $shell_data["parent_domain_id"] < 1) {
 				$errmsg = $validator['errmsg'];
 				if(isset($app->tform->wordbook[$errmsg])) {
@@ -111,7 +111,7 @@
 			$parent_domain_id = $app->functions->intval($app->remoting_lib->dataRecord['parent_domain_id']);
 		}
 
-		$domain_data = $app->db->queryOneRecord("SELECT domain_id, document_root FROM web_domain WHERE domain_id = '".$app->db->quote($parent_domain_id)."'");
+		$domain_data = $app->db->queryOneRecord("SELECT domain_id, document_root FROM web_domain WHERE domain_id = ?", $parent_domain_id);
 		if(!is_array($domain_data) || $domain_data["domain_id"] < 1) {
 			$errmsg = $validator['errmsg'];
 			if(isset($app->tform->wordbook[$errmsg])) {
diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php
index 7b5dace..907f372 100644
--- a/interface/lib/config.inc.php
+++ b/interface/lib/config.inc.php
@@ -51,6 +51,7 @@
 //** Database
 $conf['db_type'] = 'mysql';
 $conf['db_host'] = 'localhost';
+$conf['db_port'] = 3306;
 $conf['db_database'] = 'ispconfig3_305';
 $conf['db_user'] = 'root';
 $conf['db_password'] = '';
@@ -60,6 +61,7 @@
 
 define('DB_TYPE', $conf['db_type']);
 define('DB_HOST', $conf['db_host']);
+define('DB_PORT', $conf['db_port']);
 define('DB_DATABASE', $conf['db_database']);
 define('DB_USER', $conf['db_user']);
 define('DB_PASSWORD', $conf['db_password']);
@@ -69,6 +71,7 @@
 //** Database settings for the master DB. This setting is only used in multiserver setups
 $conf['dbmaster_type']   = 'mysql';
 $conf['dbmaster_host']   = '{mysql_master_server_host}';
+$conf['dbmaster_port']   = '{mysql_master_server_port}';
 $conf['dbmaster_database']  = '{mysql_master_server_database}';
 $conf['dbmaster_user']   = '{mysql_master_server_ispconfig_user}';
 $conf['dbmaster_password']  = '{mysql_master_server_ispconfig_password}';
diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng
index c89c97a..3c2bfaf 100644
--- a/interface/lib/lang/en.lng
+++ b/interface/lib/lang/en.lng
@@ -26,7 +26,7 @@
 $wb['filter_txt'] = "Filter";
 $wb['add_new_record_txt'] = "Add new record";
 $wb['btn_save_txt'] = "Save";
-$wb['btn_cancel_txt'] = "Back";
+$wb['btn_cancel_txt'] = "Cancel";
 $wb['top_menu_system'] = 'System';
 $wb['top_menu_client'] = 'Client';
 $wb['top_menu_email'] = 'Email';
diff --git a/interface/lib/plugins/dns_dns_slave_plugin.inc.php b/interface/lib/plugins/dns_dns_slave_plugin.inc.php
index aa2e20f..8f49ce6 100644
--- a/interface/lib/plugins/dns_dns_slave_plugin.inc.php
+++ b/interface/lib/plugins/dns_dns_slave_plugin.inc.php
@@ -30,19 +30,19 @@
 		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$page_form->id);
+			$app->db->query("UPDATE dns_slave SET sys_groupid = ? WHERE id = ?", $client_group_id, $page_form->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE dns_slave SET sys_groupid = $client_group_id WHERE id = ".$page_form->id);
+			$app->db->query("UPDATE dns_slave SET sys_groupid = ? WHERE id = ?", $client_group_id, $page_form->id);
 		}
 
 		//** When the client group has changed, change also the owner of the record if the owner is not the admin user
 		if($page_form->oldDataRecord && $page_form->oldDataRecord["client_group_id"] != $page_form->dataRecord["client_group_id"] && $page_form->dataRecord["sys_userid"] != 1) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$tmp = $app->db->queryOneREcord("SELECT userid FROM sys_user WHERE default_group = ".$client_group_id);
+			$tmp = $app->db->queryOneREcord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id);
 			if($tmp["userid"] > 0) {
-				$app->db->query("UPDATE dns_slave SET sys_userid = ".$tmp["userid"]." WHERE id = ".$page_form->id);
+				$app->db->query("UPDATE dns_slave SET sys_userid = ? WHERE id = ?", $tmp["userid"], $page_form->id);
 			}
 		}
 	}
diff --git a/interface/lib/plugins/dns_dns_soa_plugin.inc.php b/interface/lib/plugins/dns_dns_soa_plugin.inc.php
index 1cada0e..8f047be 100644
--- a/interface/lib/plugins/dns_dns_soa_plugin.inc.php
+++ b/interface/lib/plugins/dns_dns_soa_plugin.inc.php
@@ -31,17 +31,17 @@
 			$tmp = $app->db->diffrec($page_form->oldDataRecord, $app->tform->getDataRecord($page_form->id));
 			if($tmp['diff_num'] > 0) {
 				// Update the serial number of the SOA record
-				$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ".$page_form->id);
-				$app->db->query("UPDATE dns_soa SET serial = '".$app->validate_dns->increase_serial($soa["serial"])."' WHERE id = ".$page_form->id);
+				$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ?", $page_form->id);
+				$app->db->query("UPDATE dns_soa SET serial = ? WHERE id = ?", $app->validate_dns->increase_serial($soa["serial"]), $page_form->id);
 			}
 
 			//** When the client group has changed, change also the owner of the record if the owner is not the admin user
 			if($page_form->oldDataRecord["client_group_id"] != $page_form->dataRecord["client_group_id"] && $page_form->dataRecord["sys_userid"] != 1) {
 				$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-				$tmp = $app->db->queryOneREcord("SELECT userid FROM sys_user WHERE default_group = ".$client_group_id);
+				$tmp = $app->db->queryOneREcord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id);
 				if($tmp["userid"] > 0) {
-					$app->db->query("UPDATE dns_soa SET sys_userid = ".$tmp["userid"]." WHERE id = ".$page_form->id);
-					$app->db->query("UPDATE dns_rr SET sys_userid = ".$tmp["userid"]." WHERE zone = ".$page_form->id);
+					$app->db->query("UPDATE dns_soa SET sys_userid = ? WHERE id = ?", $tmp["userid"], $page_form->id);
+					$app->db->query("UPDATE dns_rr SET sys_userid = ? WHERE zone = ?", $tmp["userid"], $page_form->id);
 				}
 			}
 		}
@@ -49,15 +49,15 @@
 		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE id = ".$page_form->id);
+			$app->db->query("UPDATE dns_soa SET sys_groupid = ?, sys_perm_group = 'ru' WHERE id = ?", $client_group_id, $page_form->id);
 			// And we want to update all rr records too, that belong to this record
-			$app->db->query("UPDATE dns_rr SET sys_groupid = $client_group_id WHERE zone = ".$page_form->id);
+			$app->db->query("UPDATE dns_rr SET sys_groupid = ? WHERE zone = ?", $client_group_id, $page_form->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE id = ".$page_form->id);
+			$app->db->query("UPDATE dns_soa SET sys_groupid = ?, sys_perm_group = 'riud' WHERE id = ?", $client_group_id, $page_form->id);
 			// And we want to update all rr records too, that belong to this record
-			$app->db->query("UPDATE dns_rr SET sys_groupid = $client_group_id WHERE zone = ".$page_form->id);
+			$app->db->query("UPDATE dns_rr SET sys_groupid = ? WHERE zone = ?", $client_group_id, $page_form->id);
 		}
 	}
 
diff --git a/interface/lib/plugins/mail_mail_domain_plugin.inc.php b/interface/lib/plugins/mail_mail_domain_plugin.inc.php
index 13f6009..90b1ac1 100644
--- a/interface/lib/plugins/mail_mail_domain_plugin.inc.php
+++ b/interface/lib/plugins/mail_mail_domain_plugin.inc.php
@@ -31,23 +31,29 @@
 		// also make sure that the user can not delete entry created by an admin
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$updates = "sys_groupid = $client_group_id, sys_perm_group = 'ru'";
+			$updates = "sys_groupid = ?, sys_perm_group = 'ru'";
+			$update_params = array($client_group_id);
 			if ($event_name == 'mail:mail_domain:on_after_update') {
-				$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id);
 				$client_user_id = ($tmp['userid'] > 0)?$tmp['userid']:1;
-				$updates = "sys_userid = $client_user_id, $updates";
+				$updates .= ", sys_userid = ?";
+				$update_params[] = $client_user_id;
 			}
-			$app->db->query("UPDATE mail_domain SET $updates WHERE domain_id = ".$page_form->id);
+			$update_params[] = $page_form->id;
+			$app->db->query("UPDATE mail_domain SET " . $updates . " WHERE domain_id = ?", true, $update_params);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
 			$updates = "sys_groupid = $client_group_id, sys_perm_group = 'riud'";
+			$update_params = array($client_group_id);
 			if ($event_name == 'mail:mail_domain:on_after_update') {
-				$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id);
 				$client_user_id = ($tmp['userid'] > 0)?$tmp['userid']:1;
-				$updates = "sys_userid = $client_user_id, $updates";
+				$updates .= ", sys_userid = ?";
+				$update_params[] = $client_user_id;
 			}
-			$app->db->query("UPDATE mail_domain SET $updates WHERE domain_id = ".$page_form->id);
+			$update_params[] = $page_form->id;
+			$app->db->query("UPDATE mail_domain SET " . $updates . " WHERE domain_id = ?", true, $update_params);
 		}
 
 		//** If the domain name or owner has been changed, change the domain and owner in all mailbox records
@@ -57,9 +63,9 @@
 			$mail_config = $app->getconf->get_server_config($page_form->dataRecord["server_id"], 'mail');
 
 			//* Update the mailboxes
-			$mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like '%@".$app->db->quote($page_form->oldDataRecord['domain'])."'");
+			$mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like ?", "%@" . $page_form->oldDataRecord['domain']);
 			$sys_groupid = $app->functions->intval((isset($page_form->dataRecord['client_group_id']))?$page_form->dataRecord['client_group_id']:$page_form->oldDataRecord['sys_groupid']);
-			$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = $sys_groupid");
+			$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $sys_groupid);
 			$client_user_id = $app->functions->intval(($tmp['userid'] > 0)?$tmp['userid']:1);
 			if(is_array($mailusers)) {
 				foreach($mailusers as $rec) {
@@ -67,46 +73,45 @@
 					$mail_parts = explode("@", $rec['email']);
 					$maildir = str_replace("[domain]", $page_form->dataRecord['domain'], $mail_config["maildir_path"]);
 					$maildir = str_replace("[localpart]", $mail_parts[0], $maildir);
-					$maildir = $app->db->quote($maildir);
-					$email = $app->db->quote($mail_parts[0].'@'.$page_form->dataRecord['domain']);
-					$app->db->datalogUpdate('mail_user', "maildir = '$maildir', email = '$email', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailuser_id', $rec['mailuser_id']);
+					$email = $mail_parts[0].'@'.$page_form->dataRecord['domain'];
+					$app->db->datalogUpdate('mail_user', array("maildir" => $maildir, "email" => $email, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailuser_id', $rec['mailuser_id']);
 				}
 			}
 
 			//* Update the aliases
-			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like '%@".$app->db->quote($page_form->oldDataRecord['domain'])."' OR destination like '%@".$app->db->quote($page_form->oldDataRecord['domain'])."'");
+			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $page_form->oldDataRecord['domain'], "%@" . $page_form->oldDataRecord['domain']);
 			if(is_array($forwardings)) {
 				foreach($forwardings as $rec) {
-					$destination = $app->db->quote(str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['destination']));
-					$source = $app->db->quote(str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['source']));
-					$app->db->datalogUpdate('mail_forwarding', "source = '$source', destination = '$destination', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'forwarding_id', $rec['forwarding_id']);
+					$destination = str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['destination']);
+					$source = str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['source']);
+					$app->db->datalogUpdate('mail_forwarding', array("source" => $source, "destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'forwarding_id', $rec['forwarding_id']);
 				}
 			}
 
 			//* Update the mailinglist
-			$mailing_lists = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = '".$app->db->quote($page_form->oldDataRecord['domain'])."'");
+			$mailing_lists = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = ?", $page_form->oldDataRecord['domain']);
 			if(is_array($mailing_lists)) {
 				foreach($mailing_lists as $rec) {
-					$app->db->datalogUpdate('mail_mailinglist', "sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailinglist_id', $rec['mailinglist_id']);
+					$app->db->datalogUpdate('mail_mailinglist', array("sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailinglist_id', $rec['mailinglist_id']);
 				}
 			}
 
 			//* Update the mailget records
-			$mail_gets = $app->db->queryAllRecords("SELECT mailget_id, destination FROM mail_get WHERE destination LIKE '%@".$app->db->quote($page_form->oldDataRecord['domain'])."'");
+			$mail_gets = $app->db->queryAllRecords("SELECT mailget_id, destination FROM mail_get WHERE destination LIKE ?", "%@" . $page_form->oldDataRecord['domain']);
 			if(is_array($mail_gets)) {
 				foreach($mail_gets as $rec) {
-					$destination = $app->db->quote(str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['destination']));
-					$app->db->datalogUpdate('mail_get', "destination = '$destination', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailget_id', $rec['mailget_id']);
+					$destination = str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['destination']);
+					$app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']);
 				}
 			}
 
 			if ($page_form->oldDataRecord["domain"] != $page_form->dataRecord['domain']) {
 				//* Delete the old spamfilter record
-				$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($page_form->oldDataRecord["domain"])."'");
+				$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", "@" . $page_form->oldDataRecord["domain"]);
 				$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
 				unset($tmp);
 			}
-			$app->db->query("UPDATE spamfilter_users SET email=REPLACE(email, '".$app->db->quote($page_form->oldDataRecord['domain'])."', '".$app->db->quote($page_form->dataRecord['domain'])."'), sys_userid = $client_user_id, sys_groupid = $sys_groupid WHERE email LIKE '%@".$app->db->quote($page_form->oldDataRecord['domain'])."'");
+			$app->db->query("UPDATE spamfilter_users SET email=REPLACE(email, ?, ?), sys_userid = ?, sys_groupid = ? WHERE email LIKE ?", $page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $client_user_id, $sys_groupid, "%@" . $page_form->oldDataRecord['domain']);
 
 		} // end if domain name changed
 	}
diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php
index 8faeab5..e831789 100644
--- a/interface/lib/plugins/mail_user_filter_plugin.inc.php
+++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php
@@ -61,7 +61,7 @@
 	function mail_user_filter_edit($event_name, $page_form) {
 		global $app, $conf;
 
-		$mailuser = $app->db->queryOneRecord("SELECT custom_mailfilter FROM mail_user WHERE mailuser_id = ".$page_form->dataRecord["mailuser_id"]);
+		$mailuser = $app->db->queryOneRecord("SELECT custom_mailfilter FROM mail_user WHERE mailuser_id = ?", $page_form->dataRecord["mailuser_id"]);
 		$skip = false;
 		$lines = explode("\n", $mailuser['custom_mailfilter']);
 		$out = '';
@@ -86,8 +86,7 @@
 			$out = $new_rule . $out;
 		}
 
-		$out = $app->db->quote($out);
-		$app->db->datalogUpdate('mail_user', "custom_mailfilter = '$out'", 'mailuser_id', $page_form->dataRecord["mailuser_id"]);
+		$app->db->datalogUpdate('mail_user', array("custom_mailfilter" => $out), 'mailuser_id', $page_form->dataRecord["mailuser_id"]);
 
 
 	}
@@ -95,7 +94,7 @@
 	function mail_user_filter_del($event_name, $page_form) {
 		global $app, $conf;
 
-		$mailuser = $app->db->queryOneRecord("SELECT custom_mailfilter FROM mail_user WHERE mailuser_id = ".$page_form->dataRecord["mailuser_id"]);
+		$mailuser = $app->db->queryOneRecord("SELECT custom_mailfilter FROM mail_user WHERE mailuser_id = ?", $page_form->dataRecord["mailuser_id"]);
 		$skip = false;
 		$lines = explode("\n", $mailuser['custom_mailfilter']);
 		$out = '';
@@ -111,8 +110,7 @@
 			}
 		}
 
-		$out = $app->db->quote($out);
-		$app->db->datalogUpdate('mail_user', "custom_mailfilter = '$out'", 'mailuser_id', $page_form->dataRecord["mailuser_id"]);
+		$app->db->datalogUpdate('mail_user', array("custom_mailfilter" => $out), 'mailuser_id', $page_form->dataRecord["mailuser_id"]);
 	}
 
 
@@ -124,7 +122,7 @@
 		global $app, $conf;
 
 		$app->uses("getconf");
-		$mailuser_rec = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE mailuser_id = ".$app->functions->intval($page_form->dataRecord["mailuser_id"]));
+		$mailuser_rec = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE mailuser_id = ?", $page_form->dataRecord["mailuser_id"]);
 		$mail_config = $app->getconf->get_server_config($app->functions->intval($mailuser_rec["server_id"]), 'mail');
 
 		if($mail_config['mail_filter_syntax'] == 'sieve') {
@@ -137,41 +135,69 @@
 			$content .= '### BEGIN FILTER_ID:'.$page_form->id."\n";
 
 			//$content .= 'require ["fileinto", "regex", "vacation"];'."\n";
+			
+			if($page_form->dataRecord["op"] == 'domain') {
+				$content .= 'if address :domain :is "'.strtolower($page_form->dataRecord["source"]).'" "'.$page_form->dataRecord["searchterm"].'" {'."\n";
+			} elseif ($page_form->dataRecord["op"] == 'localpart') {
+				$content .= 'if address :localpart :is "'.strtolower($page_form->dataRecord["source"]).'" "'.$page_form->dataRecord["searchterm"].'" {'."\n";
+			} elseif ($page_form->dataRecord["source"] == 'Size') {
+				if(substr(trim($page_form->dataRecord["searchterm"]),-1) == 'k' || substr(trim($page_form->dataRecord["searchterm"]),-1) == 'K') {
+					$unit = 'k';
+				} else {
+					$unit = 'm';
+				}
+				$content .= 'if size :over '.intval($page_form->dataRecord["searchterm"]).$unit.' {'."\n";
+			} else {
+			
+				if($page_form->dataRecord["source"] == 'Header') {
+					$parts = explode(':',trim($page_form->dataRecord["searchterm"]));
+					$page_form->dataRecord["source"] = trim($parts[0]);
+					unset($parts[0]);
+					$page_form->dataRecord["searchterm"] = trim(implode(':',$parts));
+					unset($parts);
+				}
 
-			$content .= 'if header :regex    ["'.strtolower($page_form->dataRecord["source"]).'"] ["';
+				$content .= 'if header :regex    ["'.strtolower($page_form->dataRecord["source"]).'"] ["';
 
-			$searchterm = preg_quote($page_form->dataRecord["searchterm"]);
-			$searchterm = str_replace(
-				array(
-					'"',
-					'\\[',
-					'\\]'
-				),
-				array(
-					'\\"',
-					'\\\\[',
-					'\\\\]'
-				), $searchterm);
+				$searchterm = preg_quote($page_form->dataRecord["searchterm"]);
+				$searchterm = str_replace(
+					array(
+						'"',
+						'\\[',
+						'\\]'
+					),
+					array(
+						'\\"',
+						'\\\\[',
+						'\\\\]'
+					), $searchterm);
 
-			if($page_form->dataRecord["op"] == 'contains') {
-				$content .= ".*".$searchterm;
-			} elseif ($page_form->dataRecord["op"] == 'is') {
-				$content .= "^".$searchterm."$";
-			} elseif ($page_form->dataRecord["op"] == 'begins') {
-				$content .= "^".$searchterm.".*";
-			} elseif ($page_form->dataRecord["op"] == 'ends') {
-				$content .= ".*".$searchterm."$";
+				if($page_form->dataRecord["op"] == 'contains') {
+					$content .= ".*".$searchterm;
+				} elseif ($page_form->dataRecord["op"] == 'is') {
+					$content .= "^".$searchterm."$";
+				} elseif ($page_form->dataRecord["op"] == 'begins') {
+					$content .= " ".$searchterm."";
+				} elseif ($page_form->dataRecord["op"] == 'ends') {
+					$content .= ".*".$searchterm."$";
+				}
+
+				$content .= '"] {'."\n";
 			}
-
-			$content .= '"] {'."\n";
 
 			if($page_form->dataRecord["action"] == 'move') {
-				$content .= '    fileinto "'.$page_form->dataRecord["target"].'";' . "\n";
+				$content .= '    fileinto "'.$page_form->dataRecord["target"].'";' . "\n    stop;\n";
+			} elseif ($page_form->dataRecord["action"] == 'keep') {
+				$content .= "    keep;\n";
+			} elseif ($page_form->dataRecord["action"] == 'stop') {
+				$content .= "    stop;\n";
+			} elseif ($page_form->dataRecord["action"] == 'reject') {
+				$content .= '    reject "'.$page_form->dataRecord["target"].'";    stop;\n\n';
 			} else {
-				$content .= "    discard;\n";
+				$content .= "    discard;\n    stop;\n";
 			}
 
-			$content .= "    stop;\n}\n";
+			$content .= "}\n";
 
 			$content .= '### END FILTER_ID:'.$page_form->id."\n";
 
diff --git a/interface/lib/plugins/sites_web_database_user_plugin.inc.php b/interface/lib/plugins/sites_web_database_user_plugin.inc.php
index 1a880a1..754c249 100644
--- a/interface/lib/plugins/sites_web_database_user_plugin.inc.php
+++ b/interface/lib/plugins/sites_web_database_user_plugin.inc.php
@@ -31,13 +31,12 @@
 		// also make sure that the user can not delete entry created by an admin
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_database_user SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE database_user_id = ".$page_form->id);
+			$app->db->query("UPDATE web_database_user SET sys_groupid = ?, sys_perm_group = 'ru' WHERE database_user_id = ?", $client_group_id, $page_form->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_database_user SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_user_id = ".$page_form->id);
+			$app->db->query("UPDATE web_database_user SET sys_groupid = ?, sys_perm_group = 'riud' WHERE database_user_id = ?", $client_group_id, $page_form->id);
 		}
-		//$app->db->query("UPDATE web_database_user SET server_id = '" . $app->functions->intval($conf['server_id']) . "' WHERE database_user_id = ".$page_form->id);
 	}
 
 }
diff --git a/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php b/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
index d063fbb..aeb5623 100644
--- a/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
+++ b/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
@@ -51,11 +51,11 @@
 		// also make sure that the user can not delete domain created by a admin
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$page_form->id);
+			$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $page_form->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$page_form->id);
+			$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'riud' WHERE domain_id = ?", $client_group_id, $page_form->id);
 		}
 		// Get configuration for the web system
 		$app->uses("getconf");
@@ -73,15 +73,15 @@
 			// get the ID of the client
 			if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $client_group_id);
 				$client_id = $app->functions->intval($client["client_id"]);
 			} elseif (isset($page_form->dataRecord["client_group_id"])) {
 				$client_group_id = $page_form->dataRecord["client_group_id"];
-				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".$app->functions->intval(@$page_form->dataRecord["client_group_id"]));
+				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $app->functions->intval(@$page_form->dataRecord["client_group_id"]));
 				$client_id = $app->functions->intval($client["client_id"]);
 			} else {
 				$client_group_id = $page_form->dataRecord["client_group_id"];
-				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".$app->functions->intval($page_form->dataRecord["client_group_id"]));
+				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $app->functions->intval($page_form->dataRecord["client_group_id"]));
 				$client_id = $app->functions->intval($client["client_id"]);
 			}
 
@@ -89,81 +89,81 @@
 			$client_user_id = $app->functions->intval(($tmp['userid'] > 0)?$tmp['userid']:1);
 
 			// Set the values for document_root, system_user and system_group
-			$system_user     = $app->db->quote('web'.$page_form->id);
-			$system_group     = $app->db->quote('client'.$client_id);
+			$system_user     = 'web'.$page_form->id;
+			$system_group     = 'client'.$client_id;
 
 			$document_root     = str_replace("[client_id]", $client_id, $document_root);
 			$document_root    = str_replace("[client_idhash_1]", $this->id_hash($client_id, 1), $document_root);
 			$document_root    = str_replace("[client_idhash_2]", $this->id_hash($client_id, 2), $document_root);
 			$document_root    = str_replace("[client_idhash_3]", $this->id_hash($client_id, 3), $document_root);
 			$document_root    = str_replace("[client_idhash_4]", $this->id_hash($client_id, 4), $document_root);
-			$document_root     = $app->db->quote($document_root);
 			
 			if($event_name == 'sites:web_vhost_domain:on_after_update') {
 				if(($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) &&  isset($page_form->dataRecord["client_group_id"]) && $page_form->dataRecord["client_group_id"] != $page_form->oldDataRecord["sys_groupid"]) {
 
-					$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root' WHERE domain_id = ".$page_form->id;
-					$app->db->query($sql);
+					$sql = "UPDATE web_domain SET system_user = ?, system_group = ?, document_root = ? WHERE domain_id = ?";
+					$app->db->query($sql, $system_user, $system_group, $document_root, $page_form->id);
 
 					// Update the FTP user(s) too
-					$records = $app->db->queryAllRecords("SELECT ftp_user_id FROM ftp_user WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT ftp_user_id FROM ftp_user WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('ftp_user', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."', uid = '$system_user', gid = '$system_group', dir = '$document_root'", 'ftp_user_id', $app->functions->intval($rec['ftp_user_id']));
+						$app->db->datalogUpdate('ftp_user', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid'], "uid" => $system_user, "gid" => $system_group, "dir" => $document_root), 'ftp_user_id', $app->functions->intval($rec['ftp_user_id']));
 					}
 					unset($records);
 					unset($rec);
 
 					// Update the webdav user(s) too
-					$records = $app->db->queryAllRecords("SELECT webdav_user_id FROM webdav_user WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT webdav_user_id FROM webdav_user WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('webdav_user', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'webdav_user_id', $app->functions->intval($rec['webdav_user_id']));
+						$app->db->datalogUpdate('webdav_user', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']), 'webdav_user_id', $app->functions->intval($rec['webdav_user_id']));
 					}
 					unset($records);
 					unset($rec);
 
 					// Update the web folder(s) too
-					$records = $app->db->queryAllRecords("SELECT web_folder_id FROM web_folder WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT web_folder_id FROM web_folder WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_folder', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'web_folder_id', $app->functions->intval($rec['web_folder_id']));
+						$app->db->datalogUpdate('web_folder', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']), 'web_folder_id', $app->functions->intval($rec['web_folder_id']));
 					}
 					unset($records);
 					unset($rec);
 
 					//* Update all web folder users
-					$records = $app->db->queryAllRecords("SELECT web_folder_user.web_folder_user_id FROM web_folder_user, web_folder WHERE web_folder_user.web_folder_id = web_folder.web_folder_id AND web_folder.parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT web_folder_user.web_folder_user_id FROM web_folder_user, web_folder WHERE web_folder_user.web_folder_id = web_folder.web_folder_id AND web_folder.parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_folder_user', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'web_folder_user_id', $app->functions->intval($rec['web_folder_user_id']));
+						$app->db->datalogUpdate('web_folder_user', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']), 'web_folder_user_id', $app->functions->intval($rec['web_folder_user_id']));
 					}
 					unset($records);
 					unset($rec);
 
 					// Update the Shell user(s) too
-					$records = $app->db->queryAllRecords("SELECT shell_user_id FROM shell_user WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT shell_user_id FROM shell_user WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('shell_user', "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."', puser = '$system_user', pgroup = '$system_group', dir = '$document_root'", 'shell_user_id', $app->functions->intval($rec['shell_user_id']));
+						$app->db->datalogUpdate('shell_user', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid'], "puser" => $system_user, "pgroup" => $system_group, "dir" => $document_root), 'shell_user_id', $app->functions->intval($rec['shell_user_id']));
 					}
 					unset($records);
 					unset($rec);
 
 					// Update the cron(s) too
-					$records = $app->db->queryAllRecords("SELECT id FROM cron WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT id FROM cron WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('cron', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'id', $app->functions->intval($rec['id']));
+						$app->db->datalogUpdate('cron', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']), 'id', $app->functions->intval($rec['id']));
 					}
 					unset($records);
 					unset($rec);
 
 					//* Update all subdomains and alias domains
-					$records = $app->db->queryAllRecords("SELECT domain_id, `domain`, `type`, `web_folder` FROM web_domain WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT domain_id, `domain`, `type`, `web_folder` FROM web_domain WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$update_columns = "sys_userid = '".$web_rec['sys_userid']."', sys_groupid = '".$web_rec['sys_groupid']."'";
+						$update_columns = array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']);
 						if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
 							$php_open_basedir = str_replace("[website_path]/web", $document_root.'/'.$rec['web_folder'], $web_config["php_open_basedir"]);
 							$php_open_basedir = str_replace("[website_domain]/web", $rec['domain'].'/'.$rec['web_folder'], $php_open_basedir);
 							$php_open_basedir = str_replace("[website_path]", $document_root, $php_open_basedir);
-							$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $rec['domain'], $php_open_basedir));
+							$php_open_basedir = str_replace("[website_domain]", $rec['domain'], $php_open_basedir);
 
-							$update_columns .= ", document_root = '".$document_root."', `php_open_basedir` = '".$php_open_basedir."'";
+							$update_columns["document_root"] = $document_root;
+							$update_columns["php_open_basedir"] = $php_open_basedir;
 						}
 						$app->db->datalogUpdate('web_domain', $update_columns, 'domain_id', $rec['domain_id']);
 					}
@@ -171,24 +171,24 @@
 					unset($rec);
 
 					//* Update all databases
-					$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_database', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'database_id', $app->functions->intval($rec['database_id']));
+						$app->db->datalogUpdate('web_database', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']), 'database_id', $app->functions->intval($rec['database_id']));
 					}
 
 					//* Update all database users
-					$records = $app->db->queryAllRecords("SELECT web_database_user.database_user_id FROM web_database_user, web_database WHERE web_database_user.database_user_id IN (web_database.database_user_id, web_database.database_ro_user_id) AND web_database.parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT web_database_user.database_user_id FROM web_database_user, web_database WHERE web_database_user.database_user_id IN (web_database.database_user_id, web_database.database_ro_user_id) AND web_database.parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_database_user', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."'", 'database_user_id', $app->functions->intval($rec['database_user_id']));
+						$app->db->datalogUpdate('web_database_user', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid']), 'database_user_id', $app->functions->intval($rec['database_user_id']));
 					}
 					unset($records);
 					unset($rec);
 
 					// Update APS instances
-					$records = $app->db->queryAllRecords("SELECT instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = '".$app->db->quote($page_form->oldDataRecord["domain"])."'");
+					$records = $app->db->queryAllRecords("SELECT instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = ?", $page_form->oldDataRecord["domain"]);
 					if(is_array($records) && !empty($records)){
 						foreach($records as $rec){
-							$app->db->datalogUpdate('aps_instances', "sys_userid = '".$app->functions->intval($web_rec['sys_userid'])."', sys_groupid = '".$app->functions->intval($web_rec['sys_groupid'])."', customer_id = '".$app->functions->intval($client_id)."'", 'id', $rec['instance_id']);
+							$app->db->datalogUpdate('aps_instances', array("sys_userid" => $web_rec['sys_userid'], "sys_groupid" => $web_rec['sys_groupid'], "customer_id" => $client_id), 'id', $rec['instance_id']);
 						}
 					}
 					unset($records);
@@ -198,22 +198,20 @@
 
 				//* If the domain name has been changed, we will have to change all subdomains + APS instances
 				if(!empty($page_form->dataRecord["domain"]) && !empty($page_form->oldDataRecord["domain"]) && $page_form->dataRecord["domain"] != $page_form->oldDataRecord["domain"]) {
-					$records = $app->db->queryAllRecords("SELECT domain_id,domain FROM web_domain WHERE (type = 'subdomain' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND domain LIKE '%.".$app->db->quote($page_form->oldDataRecord["domain"])."'");
+					$records = $app->db->queryAllRecords("SELECT domain_id,domain FROM web_domain WHERE (type = 'subdomain' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND domain LIKE ?", "%." . $page_form->oldDataRecord["domain"]);
 					foreach($records as $rec) {
-						$subdomain = $app->db->quote(str_replace($page_form->oldDataRecord["domain"], $page_form->dataRecord["domain"], $rec['domain']));
-						$app->db->datalogUpdate('web_domain', "domain = '".$subdomain."'", 'domain_id', $rec['domain_id']);
+						$subdomain = str_replace($page_form->oldDataRecord["domain"], $page_form->dataRecord["domain"], $rec['domain']);
+						$app->db->datalogUpdate('web_domain', array("domain" => $subdomain), 'domain_id', $rec['domain_id']);
 					}
 					unset($records);
 					unset($rec);
 					unset($subdomain);
 
 					// Update APS instances
-					$records = $app->db->queryAllRecords("SELECT id, instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = '".$app->db->quote($page_form->oldDataRecord["domain"])."'");
+					$records = $app->db->queryAllRecords("SELECT id, instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = ?", $page_form->oldDataRecord["domain"]);
 					if(is_array($records) && !empty($records)){
 						foreach($records as $rec){
-							$app->db->datalogUpdate('aps_instances_settings', "value = '".$app->db->quote($page_form->dataRecord["domain"])."'", 'id', $rec['id']);
-							// Reinstall of package needed?
-							//$app->db->datalogUpdate('aps_instances', "instance_status = '1'", 'id', $rec['instance_id']);
+							$app->db->datalogUpdate('aps_instances_settings', array("value" => $page_form->dataRecord["domain"]), 'id', $rec['id']);
 						}
 					}
 					unset($records);
@@ -222,35 +220,35 @@
 
 				//* Set allow_override if empty
 				if($web_rec['allow_override'] == '') {
-					$sql = "UPDATE web_domain SET allow_override = '".$app->db->quote($web_config["htaccess_allow_override"])."' WHERE domain_id = ".$page_form->id;
-					$app->db->query($sql);
+					$sql = "UPDATE web_domain SET allow_override = ? WHERE domain_id = ?";
+					$app->db->query($sql, $web_config["htaccess_allow_override"], $page_form->id);
 				}
 
 				//* Set php_open_basedir if empty or domain or client has been changed
 				if(empty($web_rec['php_open_basedir']) ||
 					(!empty($page_form->dataRecord["domain"]) && !empty($page_form->oldDataRecord["domain"]) && $page_form->dataRecord["domain"] != $page_form->oldDataRecord["domain"])) {
 					$php_open_basedir = $web_rec['php_open_basedir'];
-					$php_open_basedir = $app->db->quote(str_replace($page_form->oldDataRecord['domain'], $web_rec['domain'], $php_open_basedir));
-					$sql = "UPDATE web_domain SET php_open_basedir = '$php_open_basedir' WHERE domain_id = ".$page_form->id;
-					$app->db->query($sql);
+					$php_open_basedir = str_replace($page_form->oldDataRecord['domain'], $web_rec['domain'], $php_open_basedir);
+					$sql = "UPDATE web_domain SET php_open_basedir = ? WHERE domain_id = ?";
+					$app->db->query($sql, $php_open_basedir, $page_form->id);
 				}
 				if(empty($web_rec['php_open_basedir']) ||
 					(isset($page_form->dataRecord["client_group_id"]) && $page_form->dataRecord["client_group_id"] != $page_form->oldDataRecord["sys_groupid"])) {
-					$document_root = $app->db->quote(str_replace("[client_id]", $client_id, $document_root));
+					$document_root = str_replace("[client_id]", $client_id, $document_root);
 					$php_open_basedir = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
-					$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir));
-					$sql = "UPDATE web_domain SET php_open_basedir = '$php_open_basedir' WHERE domain_id = ".$page_form->id;
-					$app->db->query($sql);
+					$php_open_basedir = str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir);
+					$sql = "UPDATE web_domain SET php_open_basedir = ? WHERE domain_id = ?";
+					$app->db->query($sql, $php_open_basedir, $page_form->id);
 				}
 
 				//* Change database backup options when web backup options have been changed
 				if(isset($page_form->dataRecord['backup_interval']) && ($page_form->dataRecord['backup_interval'] != $page_form->oldDataRecord['backup_interval'] || $page_form->dataRecord['backup_copies'] != $page_form->oldDataRecord['backup_copies'])) {
 					//* Update all databases
-					$backup_interval = $app->db->quote($page_form->dataRecord['backup_interval']);
+					$backup_interval = $page_form->dataRecord['backup_interval'];
 					$backup_copies = $app->functions->intval($page_form->dataRecord['backup_copies']);
 					$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_database', "backup_interval = '$backup_interval', backup_copies = '$backup_copies'", 'database_id', $rec['database_id']);
+						$app->db->datalogUpdate('web_database', array("backup_interval" => $backup_interval, "backup_copies" => $backup_copies), 'database_id', $rec['database_id']);
 					}
 					unset($records);
 					unset($rec);
@@ -260,36 +258,36 @@
 
 				//* Change vhost subdomain and alias ip/ipv6 if domain ip/ipv6 has changed
 				if(isset($page_form->dataRecord['ip_address']) && ($page_form->dataRecord['ip_address'] != $page_form->oldDataRecord['ip_address'] || $page_form->dataRecord['ipv6_address'] != $page_form->oldDataRecord['ipv6_address'])) {
-					$records = $app->db->queryAllRecords("SELECT domain_id FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ".$page_form->id);
+					$records = $app->db->queryAllRecords("SELECT domain_id FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ?", $page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_domain', "ip_address = '".$app->db->quote($web_rec['ip_address'])."', ipv6_address = '".$app->db->quote($web_rec['ipv6_address'])."'", 'domain_id', $rec['domain_id']);
+						$app->db->datalogUpdate('web_domain', array("ip_address" => $web_rec['ip_address'], "ipv6_address" => $web_rec['ipv6_address']), 'domain_id', $rec['domain_id']);
 					}
 					unset($records);
 					unset($rec);
 				}
 			} else {
 				$php_open_basedir    = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
-				$php_open_basedir    = $app->db->quote(str_replace("[website_domain]", $page_form->dataRecord['domain'], $php_open_basedir));
-
-				$htaccess_allow_override  = $app->db->quote($web_config["htaccess_allow_override"]);
-				$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir'  WHERE domain_id = ".$page_form->id;
-				$app->db->query($sql);
+				$php_open_basedir    = str_replace("[website_domain]", $page_form->dataRecord['domain'], $php_open_basedir);
+				$htaccess_allow_override  = $web_config["htaccess_allow_override"];
+				
+				$sql = "UPDATE web_domain SET system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?  WHERE domain_id = ?";
+				$app->db->query($sql, $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $page_form->id);
 			}
 		} else {
 			if(isset($page_form->dataRecord["parent_domain_id"]) && $page_form->dataRecord["parent_domain_id"] != $page_form->oldDataRecord["parent_domain_id"]) {
-				$parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = '" . $app->functions->intval($page_form->dataRecord['parent_domain_id']) . "'");
+				$parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ?", $page_form->dataRecord['parent_domain_id']);
 
 				// Set the values for document_root, system_user and system_group
-				$system_user = $app->db->quote($parent_domain['system_user']);
-				$system_group = $app->db->quote($parent_domain['system_group']);
-				$document_root = $app->db->quote($parent_domain['document_root']);
+				$system_user = $parent_domain['system_user'];
+				$system_group = $parent_domain['system_group'];
+				$document_root = $parent_domain['document_root'];
 				$php_open_basedir = str_replace("[website_path]/web", $document_root.'/'.$page_form->dataRecord['web_folder'], $web_config["php_open_basedir"]);
 				$php_open_basedir = str_replace("[website_domain]/web", $page_form->dataRecord['domain'].'/'.$page_form->dataRecord['web_folder'], $php_open_basedir);
 				$php_open_basedir = str_replace("[website_path]", $document_root, $php_open_basedir);
-				$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $page_form->dataRecord['domain'], $php_open_basedir));
-				$htaccess_allow_override = $app->db->quote($parent_domain['allow_override']);
-				$sql = "UPDATE web_domain SET sys_groupid = ".$app->functions->intval($parent_domain['sys_groupid']).",system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir'  WHERE domain_id = ".$page_form->id;
-				$app->db->query($sql);
+				$php_open_basedir = str_replace("[website_domain]", $page_form->dataRecord['domain'], $php_open_basedir);
+				$htaccess_allow_override = $parent_domain['allow_override'];
+				$sql = "UPDATE web_domain SET sys_groupid = ?,system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ? WHERE domain_id = ?";
+				$app->db->query($sql, $parent_domain['sys_groupid'], $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $page_form->id);
 			}
 		}
 	}
diff --git a/interface/lib/plugins/vm_openvz_plugin.inc.php b/interface/lib/plugins/vm_openvz_plugin.inc.php
index fd44205..73cc9cd 100644
--- a/interface/lib/plugins/vm_openvz_plugin.inc.php
+++ b/interface/lib/plugins/vm_openvz_plugin.inc.php
@@ -41,24 +41,24 @@
 		// 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 = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE openvz_vm SET sys_groupid = $client_group_id WHERE vm_id = ".$this->id);
+			$app->db->query("UPDATE openvz_vm SET sys_groupid = ? WHERE vm_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE openvz_vm SET sys_groupid = $client_group_id WHERE vm_id = ".$this->id);
+			$app->db->query("UPDATE openvz_vm SET sys_groupid = ? WHERE vm_id = ?", $client_group_id, $this->id);
 		}
 
 		// Set the VEID
 		$tmp = $app->db->queryOneRecord('SELECT MAX(veid) + 1 as newveid FROM openvz_vm');
 		$veid = ($tmp['newveid'] > 100)?$tmp['newveid']:101;
-		$app->db->query("UPDATE openvz_vm SET veid = ".$veid." WHERE vm_id = ".$this->id);
+		$app->db->query("UPDATE openvz_vm SET veid = ? WHERE vm_id = ?", $veid, $this->id);
 		unset($tmp);
 
 		// Apply template values to the advanced tab settings
 		$this->applyTemplate();
 
 		// Set the IP address
-		$app->db->query("UPDATE openvz_ip SET vm_id = ".$this->id." WHERE ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."'");
+		$app->db->query("UPDATE openvz_ip SET vm_id = ? WHERE ip_address = ?", $this->id, $this->dataRecord['ip_address']);
 
 		// Create the OpenVZ config file and store it in config field
 		$this->makeOpenVZConfig();
@@ -82,11 +82,11 @@
 		// 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 = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE openvz_vm SET sys_groupid = $client_group_id WHERE vm_id = ".$this->id);
+			$app->db->query("UPDATE openvz_vm SET sys_groupid = ? WHERE vm_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE openvz_vm SET sys_groupid = $client_group_id WHERE vm_id = ".$this->id);
+			$app->db->query("UPDATE openvz_vm SET sys_groupid = ? WHERE vm_id = ?", $client_group_id, $this->id);
 		}
 
 		if(isset($this->dataRecord["ostemplate_id"]) && $this->oldDataRecord["ostemplate_id"] != $this->dataRecord["ostemplate_id"]) {
@@ -94,7 +94,7 @@
 		}
 
 		// Set the IP address
-		if(isset($this->dataRecord['ip_address'])) $app->db->query("UPDATE openvz_ip SET vm_id = ".$this->id." WHERE ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."'");
+		if(isset($this->dataRecord['ip_address'])) $app->db->query("UPDATE openvz_ip SET vm_id = ? WHERE ip_address = ?", $this->id, $this->dataRecord['ip_address']);
 
 		// Create the OpenVZ config file and store it in config field
 		$this->makeOpenVZConfig();
@@ -111,8 +111,8 @@
 		global $app, $conf;
 
 		//* Free the IP address
-		$tmp = $app->db->queryOneRecord("SELECT ip_address_id FROM openvz_ip WHERE vm_id = ".$app->functions->intval($page_form->id));
-		$app->db->datalogUpdate('openvz_ip', 'vm_id = 0', 'ip_address_id', $tmp['ip_address_id']);
+		$tmp = $app->db->queryOneRecord("SELECT ip_address_id FROM openvz_ip WHERE vm_id = ?", $page_form->id);
+		$app->db->datalogUpdate('openvz_ip', array('vm_id' => 0), 'ip_address_id', $tmp['ip_address_id']);
 		unset($tmp);
 
 	}
@@ -120,29 +120,31 @@
 	private function applyTemplate() {
 		global $app, $conf;
 
-		$tpl = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = ".$app->functions->intval($this->dataRecord["template_id"]));
+		$tpl = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = ?", $this->dataRecord["template_id"]);
 
 		$sql = "UPDATE openvz_vm SET ";
-		$sql .= "diskspace = '".$app->db->quote($tpl['diskspace'])."', ";
-		$sql .= "ram = '".$app->db->quote($tpl['ram'])."', ";
-		$sql .= "ram_burst = '".$app->db->quote($tpl['ram_burst'])."', ";
-		$sql .= "cpu_units = '".$app->db->quote($tpl['cpu_units'])."', ";
-		$sql .= "cpu_num = '".$app->db->quote($tpl['cpu_num'])."', ";
-		$sql .= "cpu_limit = '".$app->db->quote($tpl['cpu_limit'])."', ";
-		$sql .= "io_priority = '".$app->db->quote($tpl['io_priority'])."', ";
-		$sql .= "nameserver = '".$app->db->quote($tpl['nameserver'])."', ";
-		$sql .= "create_dns = '".$app->db->quote($tpl['create_dns'])."', ";
-		$sql .= "capability = '".$app->db->quote($tpl['capability'])."' ";
-		$sql .= "WHERE vm_id = ".$app->functions->intval($this->id);
-		$app->db->query($sql);
+		$sql .= "diskspace = ?, ";
+		$sql .= "ram = ?, ";
+		$sql .= "ram_burst = ?, ";
+		$sql .= "cpu_units = ?, ";
+		$sql .= "cpu_num = ?, ";
+		$sql .= "cpu_limit = ?, ";
+		$sql .= "io_priority = ?, ";
+		$sql .= "nameserver = ?, ";
+		$sql .= "create_dns = ?, ";
+		$sql .= "capability = ?, ";
+		$sql .= "features = ?, ";
+		$sql .= "iptables = ? ";
+		$sql .= "WHERE vm_id = ?";
+		$app->db->query($sql, $tpl['diskspace'], $tpl['ram'], $tpl['ram_burst'], $tpl['cpu_units'], $tpl['cpu_num'], $tpl['cpu_limit'], $tpl['io_priority'], $tpl['nameserver'], $tpl['create_dns'], $tpl['capability'], $tpl['features'], $tpl['iptables'], $this->id);
 
 	}
 
 	private function makeOpenVZConfig() {
 		global $app, $conf;
 
-		$vm = $app->db->queryOneRecord("SELECT * FROM openvz_vm WHERE vm_id = ".$app->functions->intval($this->id));
-		$vm_template = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = ".$app->functions->intval($vm['template_id']));
+		$vm = $app->db->queryOneRecord("SELECT * FROM openvz_vm WHERE vm_id = ?",$app->functions->intval($this->id));
+		$vm_template = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = ?",$app->functions->intval($vm['template_id']));
 		$burst_ram = $vm['ram_burst']*256;
 		$guar_ram = $vm['ram']*256;
 
@@ -193,13 +195,15 @@
 		$tpl->setVar('ip_address', $vm['ip_address']);
 		$tpl->setVar('nameserver', $vm['nameserver']);
 		$tpl->setVar('capability', $vm['capability']);
+		$tpl->setVar('features', $vm['features']);
+		$tpl->setVar('iptables', $vm['iptables']);
 
-		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ".$app->functions->intval($vm['ostemplate_id']));
+		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ?", $app->functions->intval($vm['ostemplate_id']));
 		$tpl->setVar('ostemplate', $tmp['template_file']);
 		unset($tmp);
 
-		$openvz_config = $app->db->quote($tpl->grab());
-		$app->db->query("UPDATE openvz_vm SET config = '".$openvz_config."' WHERE vm_id = ".$app->functions->intval($this->id));
+		$openvz_config = $tpl->grab();
+		$app->db->query("UPDATE openvz_vm SET config = ? WHERE vm_id = ?", $openvz_config, $app->functions->intval($this->id));
 
 		unset($tpl);
 
@@ -208,23 +212,23 @@
 	private function createDNS() {
 		global $app, $conf;
 
-		$vm = $app->db->queryOneRecord("SELECT * FROM openvz_vm WHERE vm_id = ".$app->functions->intval($this->id));
+		$vm = $app->db->queryOneRecord("SELECT * FROM openvz_vm WHERE vm_id = ?", $app->functions->intval($this->id));
 
 		if($vm['create_dns'] != 'y') return;
 
 		$full_hostname = str_replace('{VEID}', $vm['veid'], $vm['hostname']);
 		$hostname_parts = explode('.', $full_hostname);
-		$hostname = $app->db->quote($hostname_parts[0]);
+		$hostname = $hostname_parts[0];
 		unset($hostname_parts[0]);
-		$zone = $app->db->quote((implode('.', $hostname_parts)));
+		$zone = implode('.', $hostname_parts);
 		unset($hostname_parts);
 
 		// Find the dns zone
-		$zone_rec = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE origin = '".$app->db->quote($zone).".'");
-		$rr_rec = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = '".$app->functions->intval($zone_rec['id'])."' AND name = '".$app->db->quote($hostname)."'");
+		$zone_rec = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE origin = ?", $zone);
+		$rr_rec = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND name = ?", $zone_rec['id'], $hostname);
 
 		if($zone_rec['id'] > 0) {
-			$ip_address = $app->db->quote($vm['ip_address']);
+			$ip_address = $vm['ip_address'];
 			$sys_userid = $app->functions->intval($zone_rec['sys_userid']);
 			$sys_groupid = $app->functions->intval($zone_rec['sys_groupid']);
 			$server_id = $app->functions->intval($zone_rec['server_id']);
@@ -232,12 +236,25 @@
 
 			if($rr_rec['id'] > 0) {
 				$app->uses('validate_dns');
-				$app->db->datalogUpdate('dns_rr', "data = '$ip_address'", 'id', $app->functions->intval($rr_rec['id']));
+				$app->db->datalogUpdate('dns_rr', array("data" => $ip_address), 'id', $app->functions->intval($rr_rec['id']));
 				$serial = $app->validate_dns->increase_serial($zone_rec['serial']);
-				$app->db->datalogUpdate('dns_soa', "serial = '$serial'", 'id', $app->functions->intval($zone_rec['id']));
+				$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $app->functions->intval($zone_rec['id']));
 			} else {
-				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES
-				('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '$hostname', 'A', '$ip_address', '0', '3600', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $sys_userid,
+					"sys_groupid" => $sys_groupid,
+					"sys_perm_user" => 'riud',
+					"sys_perm_group" => 'riud',
+					"sys_perm_other" => '',
+					"server_id" => $server_id,
+					"zone" => $dns_soa_id,
+					"name" => $hostname,
+					"type" => 'A',
+					"data" => $ip_address,
+					"aux" => '0',
+					"ttl" => '3600',
+					"active" => 'Y'
+				);
 				$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 			}
 
diff --git a/interface/web/admin/firewall_edit.php b/interface/web/admin/firewall_edit.php
index 6c29f76..4dd26af 100644
--- a/interface/web/admin/firewall_edit.php
+++ b/interface/web/admin/firewall_edit.php
@@ -56,7 +56,7 @@
 		//* 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 from firewall WHERE firewall_id = ".$this->id);
+			$rec = $app->db->queryOneRecord("SELECT server_id from firewall WHERE firewall_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.');
diff --git a/interface/web/admin/form/directive_snippets.tform.php b/interface/web/admin/form/directive_snippets.tform.php
index 2af05af..0c2502c 100644
--- a/interface/web/admin/form/directive_snippets.tform.php
+++ b/interface/web/admin/form/directive_snippets.tform.php
@@ -93,12 +93,29 @@
 			'maxlength' => '255',
 			'searchable' => 2
 		),
+		'customer_viewable' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		'active' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'required_php_snippets' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOXARRAY',
+			'default' => '',
+			'datasource' => array (  'type' => 'SQL',
+				'querystring' => "SELECT directive_snippets_id,name FROM directive_snippets WHERE type = 'php' AND active = 'y'ORDER BY name",
+				'keyfield' => 'directive_snippets_id',
+				'valuefield' => 'name'
+			),
+			'separator' => ',',
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/admin/form/server.tform.php b/interface/web/admin/form/server.tform.php
index a2eac6c..1bf079e 100644
--- a/interface/web/admin/form/server.tform.php
+++ b/interface/web/admin/form/server.tform.php
@@ -102,6 +102,12 @@
 			'default' => '0',
 			'value'  => array(0 => 0, 1 => 1)
 		),
+		'xmpp_server' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'CHECKBOX',
+			'default' => '0',
+			'value'  => array(0 => 0, 1 => 1)
+		),
 		'mirror_server_id' => array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index aa9adc5..a03636a 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -182,7 +182,7 @@
 		'backup_dir_is_mount' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
-			'default' => 'n',
+			'default' => 'y',
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		'backup_mode' => array(
@@ -295,6 +295,12 @@
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'maildir_format' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => '20',
+			'value' => array('maildir' => 'Maildir', 'mdbox' => 'mdbox')
+		),
 		'homedir_path' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -320,8 +326,8 @@
 		'dkim_strength' => array(
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
-			'default' => '1024',
-			'value' => array('1024' => 'normal (1024)', '2048' => 'strong (2048)', '4096' => 'very strong (4096)')
+			'default' => '2048',
+			'value' => array('1024' => 'weak (1024)', '2048' => 'normal (2048)', '4096' => 'strong (4096)')
 		),
         'relayhost_password' => array(
             'datatype' => 'VARCHAR',
@@ -433,6 +439,12 @@
 			'value' => '',
 			'width' => '40',
 			'maxlength' => '255'
+		),
+		'reject_sender_login_mismatch' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
 		),
 		'mailbox_size_limit' => array(
 			'datatype' => 'INTEGER',
@@ -604,14 +616,12 @@
 			'width' => '40',
 			'maxlength' => '255'
 		),
-		/*
-'vhost_rewrite_v6' => array (
-'datatype' => 'VARCHAR',
-'formtype' => 'CHECKBOX',
-'default' => 'n',
-'value' => array(0 => 'n',1 => 'y')
-),
-*/
+		'vhost_rewrite_v6' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n',1 => 'y')
+		),
 		'vhost_conf_dir' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -993,7 +1003,7 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => 'fast-cgi',
-			'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM'),
+			'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
 		'nginx_cgi_socket' => array(
@@ -1020,6 +1030,15 @@
 			'value' => '',
 			'width' => '40',
 			'maxlength' => '255'
+		),
+		'enable_spdy' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'y',
+			'value' => array (
+				0 => 'n',
+				1 => 'y'
+			)
 		),
 		'apps_vhost_port' => array(
 			'datatype' => 'VARCHAR',
@@ -1309,6 +1328,86 @@
 );
 
 
+$form["tabs"]['xmpp'] = array(
+    'title' => "XMPP",
+    'width' => 80,
+    'template' => "templates/server_config_xmpp_edit.htm",
+    'fields' => array(
+        //#################################
+        // Begin Datatable fields
+        //#################################
+        'xmpp_use_ipv6' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value' => array(0 => 'n', 1 => 'y')
+        ),
+        'xmpp_bosh_max_inactivity' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '30',
+            'validators' => array(0 => array('type' => 'ISINT',
+                'errmsg' => 'ip_address_error_wrong'),
+                array('type'=>'RANGE', 'range'=>'15:360', 'errmsg' => 'xmpp_bosh_timeout_range_wrong')
+            ),
+            'value' => '',
+            'width' => '15'
+        ),
+
+        'xmpp_server_admins' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => 'admin@service.com, superuser@service.com',
+            'value' => '',
+            'width' => '15'
+        ),
+
+        'xmpp_modules_enabled' => array(
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXT',
+            'default' => "saslauth, tls, dialback, disco, discoitems, version, uptime, time, ping, admin_adhoc, admin_telnet, bosh, posix, announce, offline, webpresence, mam, stream_management, message_carbons",
+            'value' => '',
+            'separator' => ","
+        ),
+
+        'xmpp_port_http' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5290',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5290',
+            'width' => '15'
+        ),
+        'xmpp_port_https' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5291',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5291',
+            'width' => '15'
+        ),
+        'xmpp_port_pastebin' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5292',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5292',
+            'width' => '15'
+        ),
+        'xmpp_port_bosh' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '5280',
+            'validators' => array(0 => array('type' => 'ISINT')),
+            'value' => '5280',
+            'width' => '15'
+        ),
+        //#################################
+        // ENDE Datatable fields
+        //#################################
+    )
+);
+
 $form["tabs"]['jailkit'] = array(
 	'title' => "Jailkit",
 	'width' => 80,
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 28aa42b..fabc180 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -166,6 +166,12 @@
 			'default' => 'n',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'backups_include_into_web_quota' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		'reseller_can_use_options' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index 9ee2970..6a23559 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -260,6 +260,19 @@
 			'maxlength' => '2',
 			'rows'  => '',
 			'cols'  => ''
+		),
+		'lost_password_function' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'CHECKBOX',
+			'regex'  => '',
+			'errmsg' => '',
+			'default' => 1,
+			'value'  => array(0 => 0, 1 => 1),
+			'separator' => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'rows'  => '',
+			'cols'  => ''
 		)
 		//#################################
 		// ENDE Datenbankfelder
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index f42dbc9..b03eaeb 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Module';
 $wb['maildir_path_txt'] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Path';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 766c55b..61f7a79 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index e6f6e03..10fbc0b 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -17,6 +17,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Модул';
 $wb['maildir_path_txt'] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Path';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -30,6 +31,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP адрес';
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index cde9ab7..a88c2ce 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 14e59fa..8946db1 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -18,6 +18,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Módulo';
 $wb['maildir_path_txt'] = 'Caminho do diretório Maildir';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Caminho do diretório Home';
 $wb['mailuser_uid_txt'] = 'UID usuário de email';
 $wb['mailuser_gid_txt'] = 'GID usuário de email';
@@ -31,6 +32,7 @@
 $wb['relayhost_txt'] = 'Host Relay';
 $wb['relayhost_user_txt'] = 'Usuário do Host Relay';
 $wb['relayhost_password_txt'] = 'Senha do Host Relay';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Tamanho máximo da Caixa Postal';
 $wb['message_size_limit_txt'] = 'Tamanho máximo de mensagem';
 $wb['ip_address_txt'] = 'Endereço IP';
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index c0caf05..2a72018 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index a1edf0d..c5a3dbc 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI cesta k binarnímu balíčku';
 $wb['module_txt'] = 'Modul';
 $wb['maildir_path_txt'] = 'Cesta k mail adresáři';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Cesta k domácímu adresáři';
 $wb['mailuser_uid_txt'] = 'Mail uživatel UID';
 $wb['mailuser_gid_txt'] = 'Mail uživatel GID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost uživatel';
 $wb['relayhost_password_txt'] = 'Relayhost heslo';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Limit velikosti mailboxu';
 $wb['message_size_limit_txt'] = 'Limit velikosti zprávy';
 $wb['ip_address_txt'] = 'IP adresa';
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index 13a202f..ec1fae3 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Použití indikátoru zatížení';
 $wb['f5_to_reload_js_txt'] = 'Pokud vypnete tuto volbu, zřejmě budete muset používat klávesu F5, aby internetový prohlížeč znovu načetl JavaScript knihovny nebo budete muset ručně vyprázdňovat mezipaměť (cache) vašeho internetového prohlížeče.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show Autoresponder tab in Mailbox detail';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show Mail Filter tab in Mailbox detail';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show Custom Rules tab in Mailbox detail';
diff --git a/interface/web/admin/lib/lang/de_directive_snippets.lng b/interface/web/admin/lib/lang/de_directive_snippets.lng
index 18ce2d5..83a6b3c 100644
--- a/interface/web/admin/lib/lang/de_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/de_directive_snippets.lng
@@ -7,4 +7,5 @@
 $wb['directive_snippets_name_empty'] = 'Bitte geben Sie einen Namen für den Schnipsel an.';
 $wb['directive_snippets_name_error_unique'] = 'Es existiert schon ein Direktiven-Schnipsel mit diesem Namen.';
 $wb['variables_txt'] = 'Variablen';
+$wb['customer_viewable_txt'] = 'Sichtbar für Kunden';
 ?>
diff --git a/interface/web/admin/lib/lang/de_directive_snippets_list.lng b/interface/web/admin/lib/lang/de_directive_snippets_list.lng
index a19d5e8..469489c 100644
--- a/interface/web/admin/lib/lang/de_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/de_directive_snippets_list.lng
@@ -4,4 +4,5 @@
 $wb['name_txt'] = 'Name des Schnipsels';
 $wb['type_txt'] = 'Typ';
 $wb['add_new_record_txt'] = 'Direktiven Schnipsel hinzufügen';
+$wb['customer_viewable_txt'] = 'Sichtbar für Kunden';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 9afd35c..336cea8 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -18,6 +18,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modul';
 $wb['maildir_path_txt'] = 'Maildir Pfad';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Pfad';
 $wb['dkim_path_txt'] = 'DKIM Pfad';
 $wb['mailuser_uid_txt'] = 'Mailbenutzer UID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost Benutzer';
 $wb['relayhost_password_txt'] = 'Relayhost Passwort';
+$wb['reject_sender_login_mismatch_txt'] = 'Zurückweisen von Mails, wenn Sender nicht gleich Login';
 $wb['mailbox_size_limit_txt'] = 'E-Mailkonto Beschränkung';
 $wb['message_size_limit_txt'] = 'E-Mailgrößen Beschränkung';
 $wb['ip_address_txt'] = 'IP Adresse';
@@ -256,4 +258,11 @@
 $wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
 $wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 $wb['network_filesystem_txt'] = 'Netzwerk-Dateisystem';
+$wb['overquota_db_notify_admin_txt'] = 'Datenbank-Quota-Warnungen an den Administrator senden';
+$wb['overquota_db_notify_client_txt'] = 'Datenbank-Quota-Warnungen an den Kunden senden';
+$wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderungen';
+$wb['php_ini_check_minutes_error_empty'] = 'Bitte geben Sie einen Wert an, wie oft die php.ini auf Änderungen geprüft werden soll.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
+$wb['php_handler_txt'] = 'Standard-PHP-Handler';
+$wb['enable_spdy_txt'] = 'Stellt SPDY zur Verfügung';
 ?>
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index b0f612a..862fb56 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -48,6 +48,7 @@
 $wb['f5_to_reload_js_txt'] = 'Wenn Sie den Wert ändern, müssen Sie F5 drücken, damit der Browser die JavaScript Bibliotheken neu lädt, oder Ihren Browser Cache leeren.';
 $wb['phpmyadmin_url_error_regex'] = 'Falsche phpMyAdmin URL';
 $wb['client_username_web_check_disabled_txt'] = 'Deaktiviere die Kunden Benutzernamen Überprüfung für den Begriff <b>web<b>.';
+$wb['backups_include_into_web_quota_txt'] = 'Backups in Web Quota hinzuzählen.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Zeige Autoresponder Reiter in E-Mail Kontodetails';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Zeige E-Mail Filter Reiter in E-Mail Kontodetails';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Zeige Benutzerregel Reiter in E-Mail Kontodetails';
diff --git a/interface/web/admin/lib/lang/de_users.lng b/interface/web/admin/lib/lang/de_users.lng
index da26db3..db37a60 100644
--- a/interface/web/admin/lib/lang/de_users.lng
+++ b/interface/web/admin/lib/lang/de_users.lng
@@ -31,4 +31,5 @@
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 $wb['username_error_collision'] = 'Der Benutzername darf nicht <b>web<b> oder <b>web<b> gefolgt von einer Zahl sein.';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
+$wb['lost_password_function_txt'] = 'Passwort vergessen Funktion steht zur Verfügung';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 560e2b8..ca7cf2b 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Άρθρωμα';
 $wb['maildir_path_txt'] = 'Διαδρομή Maildir';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Διαδρομή Homedir';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Χρήστης Relayhost';
 $wb['relayhost_password_txt'] = 'Συνθηματικό Relayhost';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Όριο χώρου θυρίδας';
 $wb['message_size_limit_txt'] = 'Μήνυμα ορίου χώρου';
 $wb['ip_address_txt'] = 'Διεύθυνση IP';
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index fa2cfee..aa97d1e 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Χρήση Load Indicator (ενδεικτή φόρτωσης)';
 $wb['f5_to_reload_js_txt'] = 'Αν το αλλάξετε, ίσως πρέπει να πατήσετε το F5 για να κάνετε τον φυλλομετρητη να ξαναφορτώσει τις βιβλιοθήκες JavaScript ή να αδείασετε την cache του φυλλομετρητή.';
 $wb['client_username_web_check_disabled_txt'] = 'Απενεργοποίηση ελέγχου στο όνομα χρήστη για την λέξη \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Εμφάνιση της καρτέλας Αυτόματης Απάντησης στις λεπτομέρειες του λογαριασμού mail';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Εμφάνιση της καρτέλας Φίλτρα mail στις λεπτομέρειες του λογαριασμού mail';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Εμφάνιση της καρτέλας Προσαρμοσμένοι Κανόνες στις λεπτομέρειες του λογαριασμού mail';
diff --git a/interface/web/admin/lib/lang/en_directive_snippets.lng b/interface/web/admin/lib/lang/en_directive_snippets.lng
index 9d9b0ae..e8733cd 100644
--- a/interface/web/admin/lib/lang/en_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/en_directive_snippets.lng
@@ -7,4 +7,5 @@
 $wb["directive_snippets_name_empty"] = 'Please specify a name for the snippet.';
 $wb["directive_snippets_name_error_unique"] = 'There is already a directive snippet with this name.';
 $wb['variables_txt'] = 'Variables';
+$wb['customer_viewable_txt'] = 'Customer viewable';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_directive_snippets_list.lng b/interface/web/admin/lib/lang/en_directive_snippets_list.lng
index 702e7e2..7a4db54 100644
--- a/interface/web/admin/lib/lang/en_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/en_directive_snippets_list.lng
@@ -4,4 +4,5 @@
 $wb["name_txt"] = 'Name of Snippet';
 $wb["type_txt"] = 'Type';
 $wb["add_new_record_txt"] = 'Add Directive Snippet';
+$wb['customer_viewable_txt'] = 'Customer viewable';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server.lng b/interface/web/admin/lib/lang/en_server.lng
index 4130201..1f36bc7 100644
--- a/interface/web/admin/lib/lang/en_server.lng
+++ b/interface/web/admin/lib/lang/en_server.lng
@@ -12,4 +12,6 @@
 $wb["active_txt"] = 'Active';
 $wb["mirror_server_id_txt"] = 'Is mirror of Server';
 $wb["- None -"] = '- None -';
+// New for XMPP
+$wb['xmpp_server_txt'] = 'XMPP Server';
 ?>
\ 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 dde50a0..2628abf 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -29,6 +29,7 @@
 $wb["fastcgi_bin_txt"] = 'FastCGI Bin';
 $wb["module_txt"] = 'Module';
 $wb["maildir_path_txt"] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb["homedir_path_txt"] = 'Homedir Path';
 $wb["dkim_path_txt"] = 'DKIM Path';
 $wb["mailuser_uid_txt"] = 'Mailuser UID';
@@ -43,6 +44,7 @@
 $wb["relayhost_txt"] = 'Relayhost';
 $wb["relayhost_user_txt"] = 'Relayhost User';
 $wb["relayhost_password_txt"] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb["mailbox_size_limit_txt"] = 'Mailbox Size Limit';
 $wb["message_size_limit_txt"] = 'Message Size Limit';
 $wb["ip_address_txt"] = 'IP Address';
@@ -205,7 +207,7 @@
 $wb["overquota_db_notify_admin_txt"] = 'Send DB quota warnings to admin';
 $wb["overquota_db_notify_client_txt"] = 'Send DB quota warnings to client';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
-$wb['php_handler_txt'] = "PHP Handler";
+$wb['php_handler_txt'] = "Default PHP Handler";
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
@@ -260,4 +262,22 @@
 $wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
 $wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 $wb['network_filesystem_txt'] = 'Network Filesystem';
+$wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
+$wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = no check';
+$wb['enable_spdy_txt'] = 'Makes SPDY available';
+
+// New for XMPP
+$wb['xmpp_server_txt'] = 'XMPP Server';
+$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
+$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
+$wb['xmpp_module_saslauth'] = 'saslauth';
+$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
+$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
+$wb['xmpp_ports_txt'] = 'Component ports';
+$wb['xmpp_port_http_txt'] = 'HTTP';
+$wb['xmpp_port_https_txt'] = 'HTTPS';
+$wb['xmpp_port_pastebin_txt'] = 'Pastebin';
+$wb['xmpp_port_bosh_txt'] = 'BOSH';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_list.lng b/interface/web/admin/lib/lang/en_server_list.lng
index 164468e..89a81fa 100644
--- a/interface/web/admin/lib/lang/en_server_list.lng
+++ b/interface/web/admin/lib/lang/en_server_list.lng
@@ -10,4 +10,6 @@
 $wb["proxy_server_txt"] = 'Proxy';
 $wb["firewall_server_txt"] = 'Firewall';
 $wb["add_new_record_txt"] = 'Add new Server';
+// New for XMPP
+$wb['xmpp_server_txt'] = 'XMPP';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 3fa210f..f446bb3 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -51,6 +51,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/en_users.lng b/interface/web/admin/lib/lang/en_users.lng
index 09b8ac3..9c57f1d 100644
--- a/interface/web/admin/lib/lang/en_users.lng
+++ b/interface/web/admin/lib/lang/en_users.lng
@@ -31,4 +31,5 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_error_collision'] = 'The username may not be web or web plus a number."';
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
+$wb['lost_password_function_txt'] = 'Forgot password function is available';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 83010f9..1c91d0d 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -17,6 +17,7 @@
 $wb['fastcgi_bin_txt'] = 'Binario de FastCGI';
 $wb['module_txt'] = 'Módulo';
 $wb['maildir_path_txt'] = 'Ruta de buzones';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Ruta base de correo';
 $wb['mailuser_uid_txt'] = 'UID del usuario de correo';
 $wb['mailuser_gid_txt'] = 'GID del usuario de correo';
@@ -30,6 +31,7 @@
 $wb['relayhost_txt'] = 'Servidor de retransmisión';
 $wb['relayhost_user_txt'] = 'Usuario de retransmisión';
 $wb['relayhost_password_txt'] = 'Contraseña de retramisión';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Límite de tamaño del buzón';
 $wb['message_size_limit_txt'] = 'Límite de tamaño del mensaje';
 $wb['ip_address_txt'] = 'Dirección IP';
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 41e61bf..e51736b 100644
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -46,6 +46,7 @@
 $wb['use_loadindicator_txt'] = 'Usar indicador de carga';
 $wb['f5_to_reload_js_txt'] = 'Si cambias esto, podrías tener que pulsar F5 para que tu navegador recargue las librerías JavaScript o vacíar la caché del navegador.';
 $wb['client_username_web_check_disabled_txt'] = "Desactivar comprobación de la palabra 'web' en el nombre de cliente.";
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Mostrar pestaña autoresponder en los detalles de la cuenta de correo';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Mostrar pestaña filtro de correo en los detalles de la cuenta de correo';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Mostrar pestaña filtros personalizados en los detalles de la cuenta de correo';
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 4b77dd7..8ece953 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -17,6 +17,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI-binääri';
 $wb['module_txt'] = 'Ohjelmaosio';
 $wb['maildir_path_txt'] = 'Postilaatikon hakemistopolku';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Kotikansion hakemistopolku';
 $wb['mailuser_uid_txt'] = 'Käyttäjätunnus';
 $wb['mailuser_gid_txt'] = 'Käyttäjäryhmä';
@@ -30,6 +31,7 @@
 $wb['relayhost_txt'] = 'Edelleenlähetyspalvelin';
 $wb['relayhost_user_txt'] = 'Edelleenlähetyspalvelimen käyttäjätunnus';
 $wb['relayhost_password_txt'] = 'Edelleenlähetyspalvelimen salasana';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Postilaatikon koko';
 $wb['message_size_limit_txt'] = 'Viestien enimmäiskoko';
 $wb['ip_address_txt'] = 'IP-osoite';
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index 7d840b5..6e1239e 100755
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index a7a71a5..d566538 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -17,6 +17,7 @@
 $wb['fastcgi_bin_txt'] = 'Exétable FastCGI';
 $wb['module_txt'] = 'Module';
 $wb['maildir_path_txt'] = 'Chemin Maildir';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Chemin Homedir';
 $wb['mailuser_uid_txt'] = 'UID de l\'utilisateur mail';
 $wb['mailuser_gid_txt'] = 'GID de l\'utilisateur mail';
@@ -25,6 +26,7 @@
 $wb['relayhost_txt'] = 'Hôde relais';
 $wb['relayhost_user_txt'] = 'Utilisateur du relais';
 $wb['relayhost_password_txt'] = 'Mot de passe du relais';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Taille maximale de la boite mail';
 $wb['message_size_limit_txt'] = 'Taille maximale des messages';
 $wb['ip_address_txt'] = 'Adresse IP';
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index b6db6d7..1fb0643 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 2ebcae6..4a73d3f 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -18,6 +18,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modul';
 $wb['maildir_path_txt'] = 'Put do Maildir-a';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Put do početne stranice';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -31,6 +32,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost korisnik';
 $wb['relayhost_password_txt'] = 'Relayhost šifra';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Dozvoljena veličina mailboxa';
 $wb['message_size_limit_txt'] = 'Dozvoljena veličina emaila';
 $wb['ip_address_txt'] = 'IP adresa';
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index fe9b89f..3827e3a 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index ecbef13..b29b744 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -17,6 +17,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modul';
 $wb['maildir_path_txt'] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Path';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -30,6 +31,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index d6d6224..37ca447 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index f9a26e2..930a58c 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modul';
 $wb['maildir_path_txt'] = 'Path Direktori Mail';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Path Direktori Home';
 $wb['mailuser_uid_txt'] = 'UID Pengguna Mail';
 $wb['mailuser_gid_txt'] = 'GID Pengguna Mail';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Pengguna Relayhost';
 $wb['relayhost_password_txt'] = 'Kata Sandi Relayhost';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Batasan Ukuran Mailbox';
 $wb['message_size_limit_txt'] = 'Batasan Ukuran Pesan';
 $wb['ip_address_txt'] = 'Alamat IP';
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index 7baf017..d4f2625 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 52913e3..cba103f 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -16,6 +16,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Module';
 $wb['maildir_path_txt'] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Path';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -29,6 +30,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'Indirizzo IP';
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index 9f151ca..9d00c8d 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 0823ff0..37fb09a 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI実行ファイル';
 $wb['module_txt'] = 'モジュール';
 $wb['maildir_path_txt'] = 'メールディレクトリ';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'ホームディレクトリ';
 $wb['mailuser_uid_txt'] = 'メールユーザーのUID';
 $wb['mailuser_gid_txt'] = 'メールユーザーのGID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'リレーホスト';
 $wb['relayhost_user_txt'] = 'リレーホストユーザー';
 $wb['relayhost_password_txt'] = 'リレーホストパスワード';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'メールボックスのサイズ';
 $wb['message_size_limit_txt'] = 'メッセージの最大サイズ';
 $wb['ip_address_txt'] = 'IPアドレス';
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index 7800e3f..e81768d 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 5027cc3..44eea44 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI bin';
 $wb['module_txt'] = 'Module';
 $wb['maildir_path_txt'] = 'Maildir pad';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir pad';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost gebruiker';
 $wb['relayhost_password_txt'] = 'Relayhost wachtwoord';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox grootte limiet';
 $wb['message_size_limit_txt'] = 'Message grootte limiet';
 $wb['ip_address_txt'] = 'IP adres';
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 07d5bff..6f1a6fb 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -51,6 +51,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 64f41d2..5e17c41 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'Kosz FastCGI';
 $wb['module_txt'] = 'Moduł';
 $wb['maildir_path_txt'] = 'Adres poczty e-mail';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Bazowy adres poczty e-mail';
 $wb['mailuser_uid_txt'] = 'UID użytkownika e-mail';
 $wb['mailuser_gid_txt'] = 'GID użytkownika e-mail';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Adres Relayhost';
 $wb['relayhost_user_txt'] = 'Użytkownik Relayhost';
 $wb['relayhost_password_txt'] = 'Hasło Relayhost';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Maksymalna wielkość skrzynki pocztowej';
 $wb['message_size_limit_txt'] = 'Maksymalna wielkość wiadomości';
 $wb['ip_address_txt'] = 'Adres IP';
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index 792fb89..4023906 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Użyj wskaźnika ładowania';
 $wb['f5_to_reload_js_txt'] = 'Jeżeli zmienisz to, możesz potrzebować wcisnąć F5 lub wyczyścić cache aby przeglądarka przeładowała biblioteki JavaScript.';
 $wb['client_username_web_check_disabled_txt'] = 'Wyłącz sprawdzanie nazwy klienta w poszukiwaniu słowa -web-.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Pokaż zakładkę autorespondera w szczegółach konta email.';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Pokaż zakładkę filtra email w szczegółach konta email.';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Pokaż zakładkę własnych filtrów email w szczegółach konta email.';
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 5315bf9..adf7085 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -18,6 +18,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Módulo';
 $wb['maildir_path_txt'] = 'Pasta do Maildir';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Pasta Home';
 $wb['mailuser_uid_txt'] = 'UID utilizador de email';
 $wb['mailuser_gid_txt'] = 'GID utilizador de email';
@@ -31,6 +32,7 @@
 $wb['relayhost_txt'] = 'Host Relay';
 $wb['relayhost_user_txt'] = 'Utilizador do Host Relay';
 $wb['relayhost_password_txt'] = 'Senha do Host Relay';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Tamanho máximo da Caixa Postal';
 $wb['message_size_limit_txt'] = 'Tamanho máximo de mensagem';
 $wb['ip_address_txt'] = 'Endereço IP';
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index e79ae6a..30d73f4 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 9f06bc6..a7ab9bc 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -18,6 +18,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Module';
 $wb['maildir_path_txt'] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Path';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -31,6 +32,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index a56ea01..d2d9193 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 77fc101..6a4080a 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -16,6 +16,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Модуль';
 $wb['maildir_path_txt'] = 'Путь Maildir';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Путь Homedir';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -29,6 +30,7 @@
 $wb['relayhost_txt'] = 'Relay-хост';
 $wb['relayhost_user_txt'] = 'Логин Relay-хоста';
 $wb['relayhost_password_txt'] = 'Пароль Relay-хоста';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Лимит размера Mailbox';
 $wb['message_size_limit_txt'] = 'Лимит размера сообщения';
 $wb['ip_address_txt'] = 'IP-адрес';
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index fdfb9d0..a3a610c 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index b5d5ea1..5818cfa 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -17,6 +17,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Module';
 $wb['maildir_path_txt'] = 'Maildir Path';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Homedir Path';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -30,6 +31,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 97850cd..0a6a60b 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Använd laddningsindikator';
 $wb['f5_to_reload_js_txt'] = 'Om du ändrar detta kan du behöva trycka F5 för att ladda om javascript, eller rensa din webbläsarcache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Visa autosvarsfliken vid detaljerna för epostkonto';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Visa epostfilterfliken vid detaljerna för epostkonto';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index d480430..392664b 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modul';
 $wb['maildir_path_txt'] = 'Maildir Cesta';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Cesta k domovskému adresáru';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
 $wb['mailuser_gid_txt'] = 'Mailuser GID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost uživateľ';
 $wb['relayhost_password_txt'] = 'Relayhost heslo';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Limit ve?kosti poštovej schránky';
 $wb['message_size_limit_txt'] = 'Limit ve?kosti správy';
 $wb['ip_address_txt'] = 'IP Adresa';
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 8a51291..0a4c0ad 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 8b08efe..60a24ee 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -19,6 +19,7 @@
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modül';
 $wb['maildir_path_txt'] = 'Mail dizini yolu';
+$wb['maildir_format_txt'] = 'Maildir Format';
 $wb['homedir_path_txt'] = 'Kullanıcı dizini yolu';
 $wb['mailuser_uid_txt'] = 'Mail kullanıcısı UID';
 $wb['mailuser_gid_txt'] = 'Mail kullanıcısı GID';
@@ -32,6 +33,7 @@
 $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost Kullanıcı';
 $wb['relayhost_password_txt'] = 'Relayhost Şifre';
+$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
 $wb['mailbox_size_limit_txt'] = 'Mail kutusu boyutu';
 $wb['message_size_limit_txt'] = 'Mesaj boyutu';
 $wb['ip_address_txt'] = 'IP Adresleri';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index 621f821..d652b91 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -48,6 +48,7 @@
 $wb['use_loadindicator_txt'] = 'Use Load Indicator';
 $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
 $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
+$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
 $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
 $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
 $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
diff --git a/interface/web/admin/lib/module.conf.php b/interface/web/admin/lib/module.conf.php
index 7f4d19d..727f7a2 100644
--- a/interface/web/admin/lib/module.conf.php
+++ b/interface/web/admin/lib/module.conf.php
@@ -7,6 +7,7 @@
 $module['template']  = 'module.tpl.htm';
 $module['startpage']  = 'admin/server_list.php';
 $module['tab_width']    = '60';
+$module['order']    = '90';
 
 
 $items[] = array(   'title'     => 'CP Users',
diff --git a/interface/web/admin/list/directive_snippets.list.php b/interface/web/admin/list/directive_snippets.list.php
index 8522e07..078cebf 100644
--- a/interface/web/admin/list/directive_snippets.list.php
+++ b/interface/web/admin/list/directive_snippets.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "name",
@@ -74,5 +74,14 @@
 	'suffix' => "",
 	'width'  => "",
 	'value'  => array('apache' => 'Apache', 'nginx' => 'nginx', 'php' => 'PHP', 'proxy' => 'Proxy'));
+	
+$liste["item"][] = array( 'field'  => "customer_viewable",
+	'datatype' => "VARCHAR",
+	'formtype' => "SELECT",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
+	'width'  => "",
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 ?>
diff --git a/interface/web/admin/list/firewall.list.php b/interface/web/admin/list/firewall.list.php
index 058e86c..786b7b8 100644
--- a/interface/web/admin/list/firewall.list.php
+++ b/interface/web/admin/list/firewall.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "server_id",
 	'datatype' => "VARCHAR",
diff --git a/interface/web/admin/list/iptables.list.php b/interface/web/admin/list/iptables.list.php
index ad487e5..3ad7840 100644
--- a/interface/web/admin/list/iptables.list.php
+++ b/interface/web/admin/list/iptables.list.php
@@ -18,14 +18,14 @@
 	'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>"));
+	'value'  => array("y" => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", "n" => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => "SQL",
 		'querystring' => "SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND db_server = 1 ORDER BY server_name",
 		'keyfield'=> "server_id",
diff --git a/interface/web/admin/list/server.list.php b/interface/web/admin/list/server.list.php
index 0309b7a..9ca54c0 100644
--- a/interface/web/admin/list/server.list.php
+++ b/interface/web/admin/list/server.list.php
@@ -63,7 +63,7 @@
 	'prefix' => '%',
 	'suffix' => '%',
 	'width'  => '',
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste['item'][] = array( 'field'  => 'web_server',
 	'datatype' => 'VARCHAR',
@@ -72,7 +72,7 @@
 	'prefix' => '%',
 	'suffix' => '%',
 	'width'  => '',
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste['item'][] = array( 'field'  => 'dns_server',
 	'datatype' => 'VARCHAR',
@@ -81,7 +81,7 @@
 	'prefix' => '%',
 	'suffix' => '%',
 	'width'  => '',
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste['item'][] = array( 'field'  => 'file_server',
 	'datatype' => 'VARCHAR',
@@ -90,7 +90,7 @@
 	'prefix' => '%',
 	'suffix' => '%',
 	'width'  => '',
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste['item'][] = array( 'field'  => 'db_server',
 	'datatype' => 'VARCHAR',
@@ -99,7 +99,7 @@
 	'prefix' => '%',
 	'suffix' => '%',
 	'width'  => '',
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste['item'][] = array( 'field'  => 'vserver_server',
 	'datatype' => 'VARCHAR',
@@ -108,6 +108,15 @@
 	'prefix' => '%',
 	'suffix' => '%',
 	'width'  => '',
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
+
+$liste['item'][] = array( 'field'  => 'xmpp_server',
+	'datatype' => 'VARCHAR',
+	'formtype' => 'SELECT',
+	'op'  => 'like',
+	'prefix' => '%',
+	'suffix' => '%',
+	'width'  => '',
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 ?>
diff --git a/interface/web/admin/list/server_ip.list.php b/interface/web/admin/list/server_ip.list.php
index dba0c68..41ac76e 100644
--- a/interface/web/admin/list/server_ip.list.php
+++ b/interface/web/admin/list/server_ip.list.php
@@ -45,11 +45,11 @@
 *****************************************************/
 
 $liste['item'][] = array( 'field'  => 'server_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
-	'op'  => 'like',
-	'prefix' => '%',
-	'suffix' => '%',
+	'op'  => '=',
+	'prefix' => '',
+	'suffix' => '',
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -59,11 +59,11 @@
 	'value'  => '');
 
 $liste['item'][] = array( 'field'  => 'client_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
-	'op'  => 'like',
-	'prefix' => '%',
-	'suffix' => '%',
+	'op'  => '=',
+	'prefix' => '',
+	'suffix' => '',
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT client_id,contact_name FROM client WHERE {AUTHSQL} ORDER BY contact_name',
 		'keyfield'=> 'client_id',
@@ -95,7 +95,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 
 $liste['item'][] = array( 'field'  => 'virtualhost_port',
diff --git a/interface/web/admin/list/server_php.list.php b/interface/web/admin/list/server_php.list.php
index ce8944d..2414cb8 100644
--- a/interface/web/admin/list/server_php.list.php
+++ b/interface/web/admin/list/server_php.list.php
@@ -45,11 +45,11 @@
 *****************************************************/
 
 $liste['item'][] = array( 'field'  => 'server_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
-	'op'  => 'like',
-	'prefix' => '%',
-	'suffix' => '%',
+	'op'  => '=',
+	'prefix' => '',
+	'suffix' => '',
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -59,11 +59,11 @@
 	'value'  => '');
 
 $liste['item'][] = array( 'field'  => 'client_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
-	'op'  => 'like',
-	'prefix' => '%',
-	'suffix' => '%',
+	'op'  => '=',
+	'prefix' => '',
+	'suffix' => '',
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT client_id,contact_name FROM client WHERE {AUTHSQL} ORDER BY contact_name',
 		'keyfield'=> 'client_id',
diff --git a/interface/web/admin/list/software_repo.list.php b/interface/web/admin/list/software_repo.list.php
index 2eb3dd5..824c66d 100644
--- a/interface/web/admin/list/software_repo.list.php
+++ b/interface/web/admin/list/software_repo.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "repo_name",
 	'datatype' => "VARCHAR",
diff --git a/interface/web/admin/list/users.list.php b/interface/web/admin/list/users.list.php
index b260c2b..53e3f44 100644
--- a/interface/web/admin/list/users.list.php
+++ b/interface/web/admin/list/users.list.php
@@ -60,7 +60,7 @@
 	'prefix' => "",
 	'suffix' => "",
 	'width' => "",
-	'value' => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value' => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste['item'][] = array(   'field' => 'username',
 	'datatype' => 'VARCHAR',
diff --git a/interface/web/admin/remote_action_ispcupdate.php b/interface/web/admin/remote_action_ispcupdate.php
index 32bf0c4..2634006 100644
--- a/interface/web/admin/remote_action_ispcupdate.php
+++ b/interface/web/admin/remote_action_ispcupdate.php
@@ -80,15 +80,8 @@
 	}
 	foreach ($servers as $serverId) {
 		$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-			"VALUES (".
-			$app->functions->intval($serverId) . ", " .
-			time() . ", " .
-			"'ispc_update', " .
-			"'', " .
-			"'pending', " .
-			"''" .
-			")";
-		$app->db->query($sql);
+			"VALUES (?, UNIX_TIMESTAMP(), 'ispc_update', '', 'pending', '')";
+		$app->db->query($sql, $serverId);
 	}
 	$msg = $wb['action_scheduled'];
 }
diff --git a/interface/web/admin/remote_action_osupdate.php b/interface/web/admin/remote_action_osupdate.php
index 61c6c23..8f48e29 100644
--- a/interface/web/admin/remote_action_osupdate.php
+++ b/interface/web/admin/remote_action_osupdate.php
@@ -76,15 +76,8 @@
 	}
 	foreach ($servers as $serverId) {
 		$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-			"VALUES (".
-			$app->functions->intval($serverId) . ", " .
-			time() . ", " .
-			"'os_update', " .
-			"'', " .
-			"'pending', " .
-			"''" .
-			")";
-		$app->db->query($sql);
+			"VALUES (?, UNIX_TIMESTAMP(), 'os_update', '', 'pending', '')";
+		$app->db->query($sql, $serverId);
 	}
 	$msg = $wb['action_scheduled'];
 }
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index e561b00..d64b6dd 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -96,7 +96,7 @@
 			$server_config_array[$section] = $app->tform->encode($this->dataRecord, $section);
 			$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
 
-			$app->db->datalogUpdate('server', "config = '".$app->db->quote($server_config_str)."'", 'server_id', $server_id);
+			$app->db->datalogUpdate('server', array("config" => $server_config_str), 'server_id', $server_id);
 		}
 	}
 
diff --git a/interface/web/admin/server_edit.php b/interface/web/admin/server_edit.php
index 0adf313..c2e746d 100644
--- a/interface/web/admin/server_edit.php
+++ b/interface/web/admin/server_edit.php
@@ -55,8 +55,8 @@
 		global $app, $conf;
 
 		// Getting Servers
-		$sql = "SELECT server_id,server_name FROM server WHERE server_id != ".$app->functions->intval($this->id)." ORDER BY server_name";
-		$mirror_servers = $app->db->queryAllRecords($sql);
+		$sql = "SELECT server_id,server_name FROM server WHERE server_id != ? ORDER BY server_name";
+		$mirror_servers = $app->db->queryAllRecords($sql, $this->id);
 		$mirror_server_select = '<option value="0">'.$app->tform->lng('- None -').'</option>';
 		if(is_array($mirror_servers)) {
 			foreach( $mirror_servers as $mirror_server) {
diff --git a/interface/web/admin/server_ip_edit.php b/interface/web/admin/server_ip_edit.php
index c20f752..f7872f4 100644
--- a/interface/web/admin/server_ip_edit.php
+++ b/interface/web/admin/server_ip_edit.php
@@ -57,7 +57,7 @@
 		//* 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 from server_ip WHERE server_ip_id = ".$app->functions->intval($this->id));
+			$rec = $app->db->queryOneRecord("SELECT server_id from server_ip WHERE server_ip_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.');
diff --git a/interface/web/admin/server_php_edit.php b/interface/web/admin/server_php_edit.php
index f60ae99..12aacf6 100644
--- a/interface/web/admin/server_php_edit.php
+++ b/interface/web/admin/server_php_edit.php
@@ -57,7 +57,7 @@
 		//* 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'])) && isset($this->dataRecord["server_id"])) {
-			$rec = $app->db->queryOneRecord("SELECT server_id from server_php WHERE server_php_id = ".$app->functions->intval($this->id));
+			$rec = $app->db->queryOneRecord("SELECT server_id from server_php WHERE server_php_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.');
diff --git a/interface/web/admin/software_package_install.php b/interface/web/admin/software_package_install.php
index 0fd5881..ccbfd73 100644
--- a/interface/web/admin/software_package_install.php
+++ b/interface/web/admin/software_package_install.php
@@ -38,11 +38,11 @@
 //* This is only allowed for administrators
 if(!$app->auth->is_admin()) die('only allowed for administrators.');
 
-$package_name = $app->db->quote($_REQUEST['package']);
+$package_name = $_REQUEST['package'];
 $install_server_id = $app->functions->intval($_REQUEST['server_id']);
-$install_key = $app->db->quote(trim($_REQUEST['install_key']));
+$install_key = trim($_REQUEST['install_key']);
 
-$package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = '$package_name'");
+$package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = ?", $package_name);
 
 $install_key_verified = false;
 $message_err = '';
@@ -51,7 +51,7 @@
 //* verify the key
 if($package['package_installable'] == 'key' && $install_key != '') {
 
-	$repo = $app->db->queryOneRecord("SELECT * FROM software_repo WHERE software_repo_id = ".$app->db->quote($package['software_repo_id']));
+	$repo = $app->db->queryOneRecord("SELECT * FROM software_repo WHERE software_repo_id = ?", $package['software_repo_id']);
 
 	$client = new SoapClient(null, array('location' => $repo['repo_url'],
 			'uri'      => $repo['repo_url']));
@@ -63,7 +63,7 @@
 		$message_err = 'Verification of the key failed.';
 	} else {
 		// Store the verified key into the database
-		$app->db->datalogUpdate('software_package', "package_key = '".$app->db->quote($install_key)."'", 'package_id', $package['package_id']);
+		$app->db->datalogUpdate('software_package', array("package_key" => $install_key), 'package_id', $package['package_id']);
 	}
 } else {
 	$message_ok = 'Please enter the software key for the package.';
@@ -71,8 +71,8 @@
 
 //* Install packages, if all requirements are fullfilled.
 if($install_server_id > 0 && $package_name != '' && ($package['package_installable'] == 'yes' || $install_key_verified == true)) {
-	$sql = "SELECT software_update_id, package_name, update_title FROM software_update WHERE type = 'full' AND package_name = '".$app->db->quote($package_name)."' ORDER BY v1 DESC, v2 DESC, v3 DESC, v4 DESC LIMIT 0,1";
-	$tmp = $app->db->queryOneRecord($sql);
+	$sql = "SELECT software_update_id, package_name, update_title FROM software_update WHERE type = 'full' AND package_name = ? ORDER BY v1 DESC, v2 DESC, v3 DESC, v4 DESC LIMIT 0,1";
+	$tmp = $app->db->queryOneRecord($sql, $package_name);
 	$software_update_id = $tmp['software_update_id'];
 
 	//* if package requires a DB and there is no data for a db in config, then we create this data now
@@ -91,7 +91,7 @@
 				'database_host' => 'localhost');
 			$package_config_str = $app->ini_parser->get_ini_string($package_config_array);
 			$package['package_config'] = $package_config_str;
-			$app->db->datalogUpdate('software_package', "package_config = '".$app->db->quote($package_config_str)."'", 'package_id', $package['package_id']);
+			$app->db->datalogUpdate('software_package', array("package_config" => $package_config_str), 'package_id', $package['package_id']);
 		}
 	}
 
@@ -105,7 +105,7 @@
 		if(!isset($package_config_array['remote_api'])) {
 			$remote_user = 'ispapp'.$package['package_id'];
 			$remote_password = md5(mt_rand());
-			$remote_functions = $app->db->quote($package['package_remote_functions']);
+			$remote_functions = $package['package_remote_functions'];
 
 			$package_config_array['remote_api'] = array(
 				'remote_hostname' => $_SERVER['HTTP_HOST'],
@@ -116,21 +116,25 @@
 			$package_config_str = $app->ini_parser->get_ini_string($package_config_array);
 			$package['package_config'] = $package_config_str;
 			$remote_password_md5 = md5($remote_password);
-			$app->db->datalogUpdate('software_package', "package_config = '".$app->db->quote($package_config_str)."'", 'package_id', $package['package_id']);
+			$app->db->datalogUpdate('software_package', array("package_config" => $package_config_str), 'package_id', $package['package_id']);
 
 			$sql = "INSERT INTO `remote_user` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `remote_username`, `remote_password`, `remote_functions`) VALUES
-					(1, 1, 'riud', 'riud', '', '".$app->db->quote($remote_user)."', '".$app->db->quote($remote_password_md5)."', '".$app->db->quote($remote_functions)."');";
-
-			$app->db->query($sql);
+					(1, 1, 'riud', 'riud', '', ?, ?, ?)";
+			$app->db->query($sql, $remote_user, $remote_password_md5, $remote_functions);
 
 		}
 
 	}
 
 	//* Add the record to start the install process
-	$insert_data = "(package_name, server_id, software_update_id, status) VALUES ('".$app->db->quote($package_name)."', '".$app->db->quote($install_server_id)."', '".$app->db->quote($software_update_id)."','installing')";
+	$insert_data = array(
+		"package_name" => $package_name,
+		"server_id" => $install_server_id,
+		"software_update_id" => $software_update_id,
+		"status" => 'installing'
+	);
 	$app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
-	$message_ok = 'Starting package installation '."<a href=\"#\" onclick=\"submitForm('pageForm','admin/software_package_list.php');\">".$app->lng('next')."</a>";
+	$message_ok = 'Starting package installation '."<a href=\"#\" onclick=\"ISPConfig.submitForm('pageForm','admin/software_package_list.php');\">".$app->lng('next')."</a>";
 
 }
 
diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php
index 489b6fb..5e552db 100644
--- a/interface/web/admin/software_package_list.php
+++ b/interface/web/admin/software_package_list.php
@@ -48,27 +48,40 @@
 		$packages = $client->get_packages($repo['repo_username'], $repo['repo_password']);
 		if(is_array($packages)) {
 			foreach($packages as $p) {
-				$package_name = $app->db->quote($p['name']);
-				$tmp = $app->db->queryOneRecord("SELECT package_id FROM software_package WHERE package_name = '".$app->db->quote($package_name)."'");
+				$package_name = $p['name'];
+				$tmp = $app->db->queryOneRecord("SELECT package_id FROM software_package WHERE package_name = ?", $package_name);
 
-				$package_title = $app->db->quote($p['title']);
-				$package_description = $app->db->quote($p['description']);
+				$package_title = $p['title'];
+				$package_description = $p['description'];
 				$software_repo_id = $app->functions->intval($repo['software_repo_id']);
-				$package_type = $app->db->quote($p['type']);
-				$package_installable = $app->db->quote($p['installable']);
-				$package_requires_db = $app->db->quote($p['requires_db']);
-				$package_remote_functions = $app->db->quote($p['remote_functions']);
+				$package_type = $p['type'];
+				$package_installable = $p['installable'];
+				$package_requires_db = $p['requires_db'];
+				$package_remote_functions = $p['remote_functions'];
 
 				if(empty($tmp['package_id'])) {
-					//$sql = "INSERT INTO software_package (software_repo_id, package_name, package_title, package_description,package_type,package_installable,package_requires_db) VALUES ($software_repo_id, '$package_name', '$package_title', '$package_description','$package_type','$package_installable','$package_requires_db')";
-					//$app->db->query($sql);
-					$insert_data = "(software_repo_id, package_name, package_title, package_description,package_type,package_installable,package_requires_db,package_remote_functions) VALUES ($software_repo_id, '$package_name', '$package_title', '$package_description','$package_type','$package_installable','$package_requires_db','$package_remote_functions')";
+					$insert_data = array(
+						"software_repo_id" => $software_repo_id,
+						"package_name" => $package_name, 
+						"package_title" => $package_title, 
+						"package_description" => $package_description,
+						"package_type" => $package_type,
+						"package_installable" => $package_installable,
+						"package_requires_db" => $package_requires_db,
+						"package_remote_functions" => $package_remote_functions
+						);
 					$app->db->datalogInsert('software_package', $insert_data, 'package_id');
 					$packages_added++;
 				} else {
-					//$sql = "UPDATE software_package SET software_repo_id = $software_repo_id, package_title = '$package_title', package_description = '$package_description', package_type = '$package_type', package_installable = '$package_installable', package_requires_db = '$package_requires_db' WHERE package_name = '$package_name'";
-					//$app->db->query($sql);
-					$update_data = "software_repo_id = $software_repo_id, package_title = '$package_title', package_description = '$package_description', package_type = '$package_type', package_installable = '$package_installable', package_requires_db = '$package_requires_db', package_remote_functions = '$package_remote_functions'";
+					$update_data = array(
+						"software_repo_id" => $software_repo_id,
+						"package_title" => $package_title, 
+						"package_description" => $package_description,
+						"package_type" => $package_type,
+						"package_installable" => $package_installable,
+						"package_requires_db" => $package_requires_db,
+						"package_remote_functions" => $package_remote_functions
+						);
 					//echo $update_data;
 					$app->db->datalogUpdate('software_package', $update_data, 'package_id', $tmp['package_id']);
 				}
@@ -91,25 +104,31 @@
 						$v3 = $app->functions->intval($version_array[2]);
 						$v4 = $app->functions->intval($version_array[3]);
 
-						$package_name = $app->db->quote($u['package_name']);
+						$package_name = $u['package_name'];
 						$software_repo_id = $app->functions->intval($repo['software_repo_id']);
-						$update_url = $app->db->quote($u['url']);
-						$update_md5 = $app->db->quote($u['md5']);
-						$update_dependencies = (isset($u['dependencies']))?$app->db->quote($u['dependencies']):'';
-						$update_title = $app->db->quote($u['title']);
-						$type = $app->db->quote($u['type']);
+						$update_url = $u['url'];
+						$update_md5 = $u['md5'];
+						$update_dependencies = (isset($u['dependencies']))?$u['dependencies']:'';
+						$update_title = $u['title'];
+						$type = $u['type'];
 
 						// Check that we do not have this update in the database yet
-						$sql = "SELECT * FROM software_update WHERE package_name = '$package_name' and v1 = '$v1' and v2 = '$v2' and v3 = '$v3' and v4 = '$v4'";
-						$tmp = $app->db->queryOneRecord($sql);
+						$sql = "SELECT * FROM software_update WHERE package_name = ? and v1 = ? and v2 = ? and v3 = ? and v4 = ?";
+						$tmp = $app->db->queryOneRecord($sql, $package_name, $v1, $v2, $v3, $v4);
 						if(!isset($tmp['software_update_id'])) {
-							// Insert the update in the datbase
-							//$sql = "INSERT INTO software_update (software_repo_id, package_name, update_url, update_md5, update_dependencies, update_title, v1, v2, v3, v4, type)
-							//VALUES ($software_repo_id, '$package_name', '$update_url', '$update_md5', '$update_dependencies', '$update_title', '$v1', '$v2', '$v3', '$v4', '$type')";
-							//die($sql);
-							//$app->db->query($sql);
-							$insert_data = "(software_repo_id, package_name, update_url, update_md5, update_dependencies, update_title, v1, v2, v3, v4, type)
-                            VALUES ($software_repo_id, '$package_name', '$update_url', '$update_md5', '$update_dependencies', '$update_title', '$v1', '$v2', '$v3', '$v4', '$type')";
+							$insert_data = array(
+								"software_repo_id" => $software_repo_id,
+								"package_name" => $package_name,
+								"update_url" => $update_url,
+								"update_md5" => $update_md5,
+								"update_dependencies" => $update_dependencies,
+								"update_title" => $update_title,
+								"v1" => $v1,
+								"v2" => $v2,
+								"v3" => $v3,
+								"v4" => $v4,
+								"type" => $type
+							);
 							$app->db->datalogInsert('software_update', $insert_data, 'software_update_id');
 						}
 
@@ -119,23 +138,6 @@
 		}
 	}
 }
-
-//* Install packages, if GET Request
-/*
-if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] != '' && $_GET['server_id'] > 0) {
-	$package_name = $app->db->quote($_GET['package']);
-	$server_id = $app->functions->intval($_GET['server_id']);
-	$sql = "SELECT software_update_id, package_name, update_title FROM software_update WHERE type = 'full' AND package_name = '$package_name' ORDER BY v1 DESC, v2 DESC, v3 DESC, v4 DESC LIMIT 0,1";
-	$tmp = $app->db->queryOneRecord($sql);
-	$software_update_id = $tmp['software_update_id'];
-
-	$insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
-	// $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
-	$app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
-}
-*/
-
-
 
 // Show the list in the interface
 // Loading the template
@@ -150,7 +152,7 @@
 	foreach($packages as $key => $p) {
 		$installed_txt = '';
 		foreach($servers as $s) {
-			$inst = $app->db->queryOneRecord("SELECT * FROM software_update, software_update_inst WHERE software_update_inst.software_update_id = software_update.software_update_id AND software_update_inst.package_name = '".$app->db->quote($p["package_name"])."' AND server_id = '".$app->functions->intval($s["server_id"])."'");
+			$inst = $app->db->queryOneRecord("SELECT * FROM software_update, software_update_inst WHERE software_update_inst.software_update_id = software_update.software_update_id AND software_update_inst.package_name = ? AND server_id = ?", $p["package_name"], $s["server_id"]);
 			$version = $inst['v1'].'.'.$inst['v2'].'.'.$inst['v3'].'.'.$inst['v4'];
 
 			if($inst['status'] == 'installed') {
@@ -165,7 +167,7 @@
 				if($p['package_installable'] == 'no') {
 					$installed_txt .= $s['server_name'].": ".$app->lng("Package can not be installed.")."<br />";
 				} else {
-					$installed_txt .= $s['server_name'].": <a href=\"#\" onclick=\"loadContent('admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."');\">Install now</a><br />";
+					$installed_txt .= $s['server_name'].": <a href=\"#\" data-load-content=\"admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."\">Install now</a><br />";
 				}
 			}
 		}
diff --git a/interface/web/admin/software_update_list.php b/interface/web/admin/software_update_list.php
index 8bc8b79..c987e9e 100644
--- a/interface/web/admin/software_update_list.php
+++ b/interface/web/admin/software_update_list.php
@@ -72,23 +72,23 @@
 						$v3 = $app->functions->intval($version_array[2]);
 						$v4 = $app->functions->intval($version_array[3]);
 
-						$package_name = $app->db->quote($u['package_name']);
+						$package_name = $u['package_name'];
 						$software_repo_id = $app->functions->intval($repo['software_repo_id']);
-						$update_url = $app->db->quote($u['url']);
-						$update_md5 = $app->db->quote($u['md5']);
-						$update_dependencies = (isset($u['dependencies']))?$app->db->quote($u['dependencies']):'';
-						$update_title = $app->db->quote($u['title']);
-						$type = $app->db->quote($u['type']);
+						$update_url = $u['url'];
+						$update_md5 = $u['md5'];
+						$update_dependencies = (isset($u['dependencies']))?$u['dependencies']:'';
+						$update_title = $u['title'];
+						$type = $u['type'];
 
 						// Check that we do not have this update in the database yet
-						$sql = "SELECT * FROM software_update WHERE package_name = '$package_name' and v1 = '$v1' and v2 = '$v2' and v3 = '$v3' and v4 = '$v4'";
-						$tmp = $app->db->queryOneRecord($sql);
+						$sql = "SELECT * FROM software_update WHERE package_name = ? and v1 = ? and v2 = ? and v3 = ? and v4 = ?";
+						$tmp = $app->db->queryOneRecord($sql, $package_name, $v1, $v2, $v3, $v4);
 						if(!isset($tmp['software_update_id'])) {
 							// Insert the update in the datbase
 							$sql = "INSERT INTO software_update (software_repo_id, package_name, update_url, update_md5, update_dependencies, update_title, v1, v2, v3, v4, type)
-							VALUES ($software_repo_id, '$package_name', '$update_url', '$update_md5', '$update_dependencies', '$update_title', '$v1', '$v2', '$v3', '$v4', '$type')";
+							VALUES ($software_repo_id, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 							//die($sql);
-							$app->db->query($sql);
+							$app->db->query($sql, $package_name, $update_url, $update_md5, $update_dependencies, $update_title, $v1, $v2, $v3, $v4, $type);
 						}
 
 					}
@@ -101,12 +101,16 @@
 
 //* Install packages, if GET Request
 if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] != '' && $_GET['server_id'] > 0) {
-	$package_name = $app->db->quote($_GET['package']);
+	$package_name = $_GET['package'];
 	$server_id = $app->functions->intval($_GET['server_id']);
 	$software_update_id = $app->functions->intval($_GET['id']);
 
-	$insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
-	// $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
+	$insert_data = array(
+		"package_name" => $package_name,
+		"server_id" => $server_id,
+		"software_update_id" => $software_update_id,
+		"status" => 'installing'
+	);
 	$app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
 
 }
@@ -162,12 +166,12 @@
 	foreach($installed_packages as $ip) {
 
 		// Get version number of the latest installed version
-		$sql = "SELECT v1, v2, v3, v4 FROM software_update, software_update_inst WHERE software_update.software_update_id = software_update_inst.software_update_id AND server_id = ".$app->functions->intval($server_id)." ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC LIMIT 0,1";
-		$lu = $app->db->queryOneRecord($sql);
+		$sql = "SELECT v1, v2, v3, v4 FROM software_update, software_update_inst WHERE software_update.software_update_id = software_update_inst.software_update_id AND server_id = ? ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC LIMIT 0,1";
+		$lu = $app->db->queryOneRecord($sql, $server_id);
 
 		// Get all installable updates
-		$sql = "SELECT * FROM software_update WHERE v1 >= ".$app->functions->intval($lu['v1'])." AND v2 >= ".$app->functions->intval($lu['v2'])." AND v3 >= ".$app->functions->intval($lu['v3'])." AND v4 >= ".$app->functions->intval($lu['v4'])." AND package_name = '".$app->db->quote($ip['package_name'])."' ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC";
-		$updates = $app->db->queryAllRecords($sql);
+		$sql = "SELECT * FROM software_update WHERE v1 >= ? AND v2 >= ? AND v3 >= ? AND v4 >= ? AND package_name = ? ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC";
+		$updates = $app->db->queryAllRecords($sql, $lu['v1'], $lu['v2'], $lu['v3'], $lu['v4'], $ip['package_name']);
 		//die($sql);
 
 		if(is_array($updates)) {
@@ -176,37 +180,13 @@
 
 			foreach($updates as $key => $u) {
 				$version = $u['v1'].'.'.$u['v2'].'.'.$u['v3'].'.'.$u['v4'];
-				$installed_txt = "<a href=\"#\" onclick=\"loadContent('admin/software_update_list.php?action=install&package=".$u["package_name"]."&id=".$u["software_update_id"]."&server_id=".$server_id."');\">Install Update</a><br />";
+				$installed_txt = "<a href=\"#\" data-load-content=\"admin/software_update_list.php?action=install&package=".$u["package_name"]."&id=".$u["software_update_id"]."&server_id=".$server_id."\">Install Update</a><br />";
 				$records_out[] = array('version' => $version, 'update_title' => $u["update_title"], 'installed' => $installed_txt);
 
 			}
 		}
 	}
 }
-
-/*
-$updates = $app->db->queryAllRecords('SELECT software_update.update_title, software_update.software_update_id, software_update.package_name, v1, v2, v3, v4, software_update_inst.status
-		FROM software_update LEFT JOIN software_update_inst ON ( software_update.software_update_id = software_update_inst.software_update_id )
-		WHERE server_id = '.$server_id.'
-		GROUP BY software_update.package_name
-		ORDER BY software_update.package_name ASC, v1 DESC , v2 DESC , v3 DESC , v4 DESC');
-
-if(is_array($updates)) {
-	foreach($updates as $key => $u) {
-		$installed_txt = '';
-
-		$version = $u['v1'].'.'.$u['v2'].'.'.$u['v3'].'.'.$u['v4'];
-		$updates[$key]['version'] = $version;
-		if($u['status'] == 'installed' || $u['status'] == 'installing' || $u['status'] == 'deleting') {
-			$installed_txt .= "Installed version $version<br />";
-		} else {
-			$installed_txt .= "<a href=\"#\" onclick=\"loadContent('admin/software_update_list.php?action=install&package=".$u["package_name"]."&id=".$u["software_update_id"]."&server_id=".$server_id."');\">Install now</a><br />";
-		}
-		$updates[$key]['installed'] = $installed_txt;
-
-	}
-}
-*/
 
 
 
diff --git a/interface/web/admin/system_config_edit.php b/interface/web/admin/system_config_edit.php
index 7108f27..f48f11b 100644
--- a/interface/web/admin/system_config_edit.php
+++ b/interface/web/admin/system_config_edit.php
@@ -89,13 +89,24 @@
 		$available_dashlets_txt = '';
 		$handle = @opendir(ISPC_WEB_PATH.'/dashboard/dashlets');
 		while ($file = @readdir($handle)) {
-			if ($file != '.' && $file != '..' && !is_dir($file)) {
+			if ($file != '.' && $file != '..' && !is_dir(ISPC_WEB_PATH.'/dashboard/dashlets/'.$file)) {
 				$available_dashlets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.substr($file, 0, -4).']<pre class="addPlaceholderContent" style="display:none;">['.substr($file, 0, -4).'],</pre></a> ';
 			}
 		}
 
 		if($available_dashlets_txt == '') $available_dashlets_txt = '------';
 		$app->tpl->setVar("available_dashlets_txt", $available_dashlets_txt);
+		
+		// Logo
+		$sys_ini = $app->db->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = ?", $this->id);
+		if($sys_ini['custom_logo'] != ''){
+			$logo = '<img src="'.$sys_ini['custom_logo'].'" />&nbsp;&nbsp;<a href="#" class="btn btn-default formbutton-danger formbutton-narrow" style="margin:5px" id="del_custom_logo"><span class="icon icon-delete"></span></a>';
+		} else {
+			$logo = '<img src="'.$sys_ini['default_logo'].'" />';
+		}
+		$default_logo = '<img src="'.$sys_ini['default_logo'].'" />';
+		$app->tpl->setVar("used_logo", $logo);
+		$app->tpl->setVar("default_logo", $default_logo);
 
 		parent::onShowEnd();
 	}
@@ -165,9 +176,7 @@
 		$server_config_array[$section] = $new_config;
 		$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
 
-		//$sql = "UPDATE sys_ini SET config = '".$app->db->quote($server_config_str)."' WHERE sysini_id = 1";
-		//if($conf['demo_mode'] != true) $app->db->query($sql);
-		if($conf['demo_mode'] != true) $app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($server_config_str)."'", 'sysini_id', 1);
+		if($conf['demo_mode'] != true) $app->db->datalogUpdate('sys_ini', array("config" => $server_config_str), 'sysini_id', 1);
 
 		/*
 		 * If we should use the domain-module, we have to insert all existing domains into the table
@@ -185,26 +194,28 @@
 				"FROM web_domain WHERE type NOT IN ('subdomain','vhostsubdomain')";
 			$app->db->query($sql);
 		}
+		
+		//die(print_r($_FILES));
+		// Logo
+		/*
+		if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])){
+			//print_r($_FILES);
+			
+			$path= $_FILES['file']['tmp_name'];
+			$type = pathinfo($path, PATHINFO_EXTENSION);
+			$data = file_get_contents($path);
+			$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
+			$app->db->query("UPDATE sys_ini SET custom_logo = ? WHERE sysini_id = ?", $base64, $this->id);
+		}
+		*/
 
 		// Maintenance mode
 		if($server_config_array['misc']['maintenance_mode'] == 'y'){
 			//print_r($_SESSION);
 			//echo $_SESSION['s']['id'];
-			$app->db->query("DELETE FROM sys_session WHERE session_id != '".$app->db->quote($_SESSION['s']['id'])."'");
+			$app->db->query("DELETE FROM sys_session WHERE session_id != ?", $_SESSION['s']['id']);
 		}
 	}
-
-	/*
-	function onAfterUpdate() {
-        if($this->_js_changed == true) {
-            // not the best way, but it works
-            header('Content-Type: text/html');
-            print '<script type="text/javascript">document.location.reload(true);</script>';
-            exit;
-        }
-    }
-	*/
-
 }
 
 $app->tform_actions = new page_action;
diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm
index 7a17cb6..21b7686 100644
--- a/interface/web/admin/templates/directive_snippets_edit.htm
+++ b/interface/web/admin/templates/directive_snippets_edit.htm
@@ -1,41 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_directive_snippets">
-  
-    <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" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="type">{tmpl_var name='type_txt'}</label>
-                <select name="type" id="type" class="selectInput">
+
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="snippet">{tmpl_var name='snippet_txt'}</label>
-                <textarea name="snippet" id="snippet" rows='10' cols='50' style="width:400px;">{tmpl_var name='snippet'}</textarea><span class="nginx"> &nbsp; {tmpl_var name='variables_txt'}: </span><a href="javascript:void(0);" class="addPlaceholder nginx">{DOCROOT}</a><span class="nginx">, </span><a href="javascript:void(0);" class="addPlaceholder nginx">{FASTCGIPASS}</a>
+			<div class="form-group">
+                <label for="snippet" class="col-sm-3 control-label">{tmpl_var name='snippet_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="snippet" id="snippet" rows='10' cols='50'>{tmpl_var name='snippet'}</textarea></div><span class="nginx"> &nbsp; {tmpl_var name='variables_txt'}: </span><a href="javascript:void(0);" class="addPlaceholder nginx">{DOCROOT}</a><span class="nginx">, </span><a href="javascript:void(0);" class="addPlaceholder nginx">{FASTCGIPASS}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+			<div class="form-group php">
+                <label class="col-sm-3 control-label">{tmpl_var name='required_php_snippets_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='required_php_snippets'}
+                </div>
+            </div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='customer_viewable_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='customer_viewable'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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/directive_snippets_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/directive_snippets_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/directive_snippets_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/directive_snippets_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
 		
     if(jQuery('#type').val() == 'nginx'){
@@ -43,8 +51,23 @@
     } else {
         jQuery('.nginx:visible').hide();
     }
+	
+	if (jQuery('#type').val() != 'nginx' && jQuery('#type').val() != 'apache') {
+		jQuery('#customer_viewable').closest('div.ctrlHolder:visible').hide();
+		jQuery('.php:visible').hide();
+	} else {
+		jQuery('#customer_viewable').closest('div.ctrlHolder:hidden').show();
+		jQuery('.php:hidden').show();
+	}
     
     jQuery('#type').change(function(){
+		if (jQuery(this).val() != 'nginx' && jQuery(this).val() != 'apache') {
+			jQuery('#customer_viewable').closest('div.ctrlHolder:visible').hide();
+			jQuery('.php:visible').hide();
+		} else {
+			jQuery('#customer_viewable').closest('div.ctrlHolder:hidden').show();
+			jQuery('.php:hidden').show();
+		}
         if(jQuery(this).val() == 'nginx'){
             jQuery('.nginx:hidden').show();
         } else {
diff --git a/interface/web/admin/templates/directive_snippets_list.htm b/interface/web/admin/templates/directive_snippets_list.htm
index 32a10dd..bf43d42 100644
--- a/interface/web/admin/templates/directive_snippets_list.htm
+++ b/interface/web/admin/templates/directive_snippets_list.htm
@@ -1,62 +1,59 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_directive_snippets">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/directive_snippets_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
-
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                        <th class="tbl_col_type" scope="col"><tmpl_var name="type_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/directive_snippets_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th data-column="type"><tmpl_var name="type_txt"></th>
+						<th data-column="customer_viewable"><tmpl_var name="customer_viewable_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_type"><select name="search_type">{tmpl_var name='search_type'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/directive_snippets_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td><select class="form-control" name="search_type">{tmpl_var name='search_type'}</select></td>
+						<td><select class="form-control" name="search_customer_viewable">{tmpl_var name='search_customer_viewable'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/directive_snippets_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('admin/directive_snippets_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_name"><a href="#" onclick="loadContent('admin/directive_snippets_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                            <td class="tbl_col_type"><a href="#" onclick="loadContent('admin/directive_snippets_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="type"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/directive_snippets_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                            <td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
+							<td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_viewable"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/directive_snippets_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
                         <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                            <td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                         </tr>
                     </tmpl_unless>
                 </tbody>
 
                 <tfoot>
                     <tr>
-                    <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                    <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/firewall_edit.htm b/interface/web/admin/templates/firewall_edit.htm
index b297f0a..cd643a8 100644
--- a/interface/web/admin/templates/firewall_edit.htm
+++ b/interface/web/admin/templates/firewall_edit.htm
@@ -1,38 +1,33 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="tcp_port" class="col-sm-3 control-label">{tmpl_var name='tcp_port_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="tcp_port" id="tcp_port" value="{tmpl_var name='tcp_port'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="udp_port" class="col-sm-3 control-label">{tmpl_var name='udp_port_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="udp_port" id="udp_port" value="{tmpl_var name='udp_port'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/firewall_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/firewall_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/firewall_list.htm b/interface/web/admin/templates/firewall_list.htm
index 44c7f34..ac85f7e 100644
--- a/interface/web/admin/templates/firewall_list.htm
+++ b/interface/web/admin/templates/firewall_list.htm
@@ -1,48 +1,46 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_firewall">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/firewall_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/firewall_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_tcp_port" scope="col"><tmpl_var name="tcp_port_txt"></th>
-                        <th class="tbl_col_udp_port" scope="col"><tmpl_var name="udp_port_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="tcp_port"><tmpl_var name="tcp_port_txt"></th>
+                        <th data-column="udp_port"><tmpl_var name="udp_port_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_tcp_port"><input type="text" name="search_tcp_port" value="{tmpl_var name='search_tcp_port'}" /></td>
-                        <td class="tbl_col_udp_port"><input type="text" name="search_udp_port" value="{tmpl_var name='search_udp_port'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/firewall_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_tcp_port" value="{tmpl_var name='search_tcp_port'}" /></td>
+                        <td><input class="form-control" type="text" name="search_udp_port" value="{tmpl_var name='search_udp_port'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/firewall_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('admin/firewall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('admin/firewall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_tcp_port"><a href="#" onclick="loadContent('admin/firewall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="tcp_port"}</a></td>
-                            <td class="tbl_col_udp_port"><a href="#" onclick="loadContent('admin/firewall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="udp_port"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/firewall_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="tcp_port"}</a></td>
+                            <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="udp_port"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/firewall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -55,11 +53,10 @@
 
                 <tfoot>
                     <tr>
-                    <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                    <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/groups_edit.htm b/interface/web/admin/templates/groups_edit.htm
index c383172..d12c006 100644
--- a/interface/web/admin/templates/groups_edit.htm
+++ b/interface/web/admin/templates/groups_edit.htm
@@ -1,26 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="description" class="col-sm-3 control-label">{tmpl_var name='description_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="description" id="description" rows='5' cols='30'>{tmpl_var name='description'}</textarea></div>
             </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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/groups_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/groups_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/groups_list.htm b/interface/web/admin/templates/groups_list.htm
index dc68562..d53ee58 100644
--- a/interface/web/admin/templates/groups_list.htm
+++ b/interface/web/admin/templates/groups_list.htm
@@ -1,43 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_groups">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/groups_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/groups_edit.php">{tmpl_var name="add_new_record_txt"}</button>
                 <p><tmpl_var name="warning_txt"></p>
-            </div>
-        </fieldset>
-    </div>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                        <th class="tbl_col_description" scope="col"><tmpl_var name="description_txt"></th>
-                        <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th data-column="description"><tmpl_var name="description_txt"></th>
+                        <th class="text-right">&nbsp;</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_description"><input type="text" name="search_description" value="{tmpl_var name='search_description'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/groups_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_description" value="{tmpl_var name='search_description'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/groups_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_name"><a href="#" onclick="loadContent('admin/groups_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                            <td class="tbl_col_description"><a href="#" onclick="loadContent('admin/groups_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="description"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/groups_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/groups_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                            <td><a href="#" data-load-content="admin/groups_edit.php?id={tmpl_var name='id'}">{tmpl_var name="description"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/groups_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -49,11 +47,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/iptables_edit.htm b/interface/web/admin/templates/iptables_edit.htm
index 23228d4..e2fff03 100644
--- a/interface/web/admin/templates/iptables_edit.htm
+++ b/interface/web/admin/templates/iptables_edit.htm
@@ -1,67 +1,57 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
-<div class="panel panel_iptables">
-    
-    <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">
+
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="table">{tmpl_var name='table_txt'}</label>
-                <select name="table" id="table" class="selectInput formLengthLimit">
+            <div class="form-group">
+                <label for="table" class="col-sm-3 control-label">{tmpl_var name='table_txt'}</label>
+                <div class="col-sm-9"><select name="table" id="table" class="form-control">
                     {tmpl_var name='table'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="protocol">{tmpl_var name='protocol_txt'}</label>
-                <select name="protocol" id="protocol" class="selectInput formLengthLimit">
+            <div class="form-group">
+                <label for="protocol" class="col-sm-3 control-label">{tmpl_var name='protocol_txt'}</label>
+                <div class="col-sm-9"><select name="protocol" id="protocol" class="form-control">
                     {tmpl_var name='protocol'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="singleport">{tmpl_var name='singleport_txt'}</label>
-                <input name="singleport" id="singleport" value="{tmpl_var name='singleport'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="multiport">{tmpl_var name='multiport_txt'}</label>
-                <input name="multiport" id="multiport" value="{tmpl_var name='multiport'}" size="20" maxlength="40" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="destination_ip">{tmpl_var name='destination_ip_txt'}</label>
-                <input name="destination_ip" id="destination_ip" value="{tmpl_var name='destination_ip'}" size="16" maxlength="20" type="text" class="textInput formLengthIPv4" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="source_ip">{tmpl_var name='source_ip_txt'}</label>
-                <input name="source_ip" id="source_ip" value="{tmpl_var name='source_ip'}" size="16" maxlength="20" type="text" class="textInput formLengthIPv4" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="state">{tmpl_var name='state_txt'}</label>
-                <input name="state" id="state" value="{tmpl_var name='state'}" size="16" maxlength="20" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="target">{tmpl_var name='target_txt'}</label>
-                <select name="target" id="target" class="selectInput formLengthLimit">
+            <div class="form-group">
+                <label for="singleport" class="col-sm-3 control-label">{tmpl_var name='singleport_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="singleport" id="singleport" value="{tmpl_var name='singleport'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="multiport" class="col-sm-3 control-label">{tmpl_var name='multiport_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="multiport" id="multiport" value="{tmpl_var name='multiport'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="destination_ip" class="col-sm-3 control-label">{tmpl_var name='destination_ip_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="destination_ip" id="destination_ip" value="{tmpl_var name='destination_ip'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="source_ip" class="col-sm-3 control-label">{tmpl_var name='source_ip_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="source_ip" id="source_ip" value="{tmpl_var name='source_ip'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="state" class="col-sm-3 control-label">{tmpl_var name='state_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="state" id="state" value="{tmpl_var name='state'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="target" class="col-sm-3 control-label">{tmpl_var name='target_txt'}</label>
+                <div class="col-sm-9"><select name="target" id="target" class="form-control">
                     {tmpl_var name='target'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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/iptables_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/iptables_list.php');">
-                <span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div> 
-    
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/iptables_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/iptables_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/iptables_list.htm b/interface/web/admin/templates/iptables_list.htm
index 523ec67..e1fcb3d 100644
--- a/interface/web/admin/templates/iptables_list.htm
+++ b/interface/web/admin/templates/iptables_list.htm
@@ -1,59 +1,57 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_iptables">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>Tools</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/iptables_edit.php');">
-                    <span>{tmpl_var name="add_new_rule_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">Tools</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/iptables_edit.php">{tmpl_var name="add_new_rule_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_table" scope="col"><tmpl_var name="table_txt"></th>
-                        <th class="tbl_col_protocol" scope="col"><tmpl_var name="protocol_txt"></th>
-                        <th class="tbl_col_port" scope="col"><tmpl_var name="singleport_txt"></th>
-                        <th class="tbl_col_port" scope="col"><tmpl_var name="multiport_txt"></th>
-                        <th class="tbl_col_state" scope="col"><tmpl_var name="state_txt"></th>
-                        <th class="tbl_col_target" scope="col"><tmpl_var name="target_txt"></th>
-                        <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="table"><tmpl_var name="table_txt"></th>
+                        <th data-column="protocol"><tmpl_var name="protocol_txt"></th>
+                        <th data-column="singleport"><tmpl_var name="singleport_txt"></th>
+                        <th data-column="multiport"><tmpl_var name="multiport_txt"></th>
+                        <th data-column="state"><tmpl_var name="state_txt"></th>
+                        <th data-column="target"><tmpl_var name="target_txt"></th>
+                        <th class="text-right">&nbsp;</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_table"></td>
-                        <td class="tbl_col_protocol"><select name="search_protocol">{tmpl_var name='search_protocol'}</select></td>
-                        <td class="tbl_col_singleport"></td>
-                        <td class="tbl_col_multiport"></td>
-                        <td class="tbl_col_state"></td>
-                        <td class="tbl_col_target"><select name="search_target">{tmpl_var name='search_target'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/iptables_list.php');"><span>{tmpl_var name="filter_txt"}filter_txt</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td></td>
+                        <td><select class="form-control" name="search_protocol">{tmpl_var name='search_protocol'}</select></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td><select class="form-control" name="search_target">{tmpl_var name='search_target'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/iptables_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_table"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="table"}</a></td>
-                            <td class="tbl_col_protocol"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="protocol"}</a></td>
-                            <td class="tbl_col_singleport"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="singleport"}</a></td>
-                            <td class="tbl_col_multiport"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="multiport"}</a></td>
-                            <td class="tbl_col_state"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="state"}</a></td>
-                            <td class="tbl_col_target"><a href="#" onclick="loadContent('admin/iptables_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="target"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/iptables_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="table"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="protocol"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="singleport"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="multiport"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="state"}</a></td>
+                            <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="target"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/iptables_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -65,10 +63,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="9"><tmpl_var name="paging"></td>
+                        <td colspan="9"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/language_add.htm b/interface/web/admin/templates/language_add.htm
index 0cab8ab..e124abf 100644
--- a/interface/web/admin/templates/language_add.htm
+++ b/interface/web/admin/templates/language_add.htm
@@ -1,29 +1,25 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 flags">
+        <legend>Language Add</legend>
+            <div class="form-group">
+                <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
+                <div class="col-sm-9"><select name="lng_select" id="language" class="form-control flags">
                     {tmpl_var name='language_option'}
-                </select>
+                </select></div>
             </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 class="form-group">
+                <label for="lng_new" class="col-sm-3 control-label">{tmpl_var name='language_new_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="lng_new" id="lng_new" value="" class="form-control" /></div><p class="formHint">{tmpl_var name='language_new_hint_txt'}</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','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>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_add.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/language_complete.htm b/interface/web/admin/templates/language_complete.htm
index 4f1fd64..5205b28 100644
--- a/interface/web/admin/templates/language_complete.htm
+++ b/interface/web/admin/templates/language_complete.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_language_complete">
@@ -11,18 +13,18 @@
     </tmpl_if>
 
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Language Complete</legend>
-            <div class="ctrlHolder">
-                <label for="lng_select">{tmpl_var name='language_select_txt'}</label>
-                <select name="lng_select" id="language" class="selectInput flags">
+        <legend>Language Complete</legend>
+            <div class="form-group">
+                <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
+                <div class="col-sm-9"><select name="lng_select" id="language" class="form-control flags">
                     {tmpl_var name='language_option'}
-                </select>
+                </select></div>
             </div>
-			<div class="buttonHolder buttons">
-				<button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','admin/language_complete.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 class="clear"><div class="right">
+				<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_complete.php">{tmpl_var name='btn_save_txt'}</button>
+				<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+			</div></div>
+        
 
         
     </div>
diff --git a/interface/web/admin/templates/language_edit.htm b/interface/web/admin/templates/language_edit.htm
index 30bd927..d383049 100644
--- a/interface/web/admin/templates/language_edit.htm
+++ b/interface/web/admin/templates/language_edit.htm
@@ -1,16 +1,15 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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" >
-                    </span> 
+                        <div class="col-sm-9"><input class="form-control" type="text" id="records[{tmpl_var name="key"}]" name="records[{tmpl_var name="key"}]" value="{tmpl_var name='val'}" ></div></span> 
                 </tmpl_loop>
             </span>
         </fieldset>  
@@ -21,9 +20,6 @@
         <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>
\ No newline at end of file
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php?lng_select={tmpl_var name='lang'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/language_export.htm b/interface/web/admin/templates/language_export.htm
index 98be4b5..b00a204 100644
--- a/interface/web/admin/templates/language_export.htm
+++ b/interface/web/admin/templates/language_export.htm
@@ -1,15 +1,15 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_language_export">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Language Export</legend>
-            <div class="ctrlHolder">
-                <label for="lng_select">{tmpl_var name='language_select_txt'}</label>
-                <select name="lng_select" id="lng_select" class="selectInput flags">
+
+        <legend>Language Export</legend>
+            <div class="form-group">
+                <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
+                <div class="col-sm-9"><select name="lng_select" id="lng_select" class="form-control flags">
                     {tmpl_var name='language_option'}
-                </select>
+                </select></div>
             </div>
                 
                 
@@ -19,13 +19,7 @@
                 
             <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_export.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>
+            <div class="clear"><div class="right">
+                <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_export.php">{tmpl_var name='btn_save_txt'}</button>
+                <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+            </div></div>
diff --git a/interface/web/admin/templates/language_import.htm b/interface/web/admin/templates/language_import.htm
index d674b20..8bd653c 100644
--- a/interface/web/admin/templates/language_import.htm
+++ b/interface/web/admin/templates/language_import.htm
@@ -1,25 +1,21 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_language_import">
-  
-    <div class="pnl_formsarea">
-		<fieldset class="inlineLabels"><legend>Language Import</legend>
-            <div class="ctrlHolder">
-                <label for="lng_select">{tmpl_var name='language_import_txt'}</label>
+
+		<legend>Language Import</legend>
+            <div class="form-group">
+                <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_import_txt'}</label>
                 <input name="file" id="file" size="30" type="file" class="fileUpload" />
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='language_overwrite_txt'}</p>
-                <div class="multiField">
-                    <input id="overwrite" type="checkbox" value="1" name="overwrite"/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='language_overwrite_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="checkbox" id="overwrite" value="1" name="overwrite"/></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ignore_version_txt'}</p>
-                <div class="multiField">
-                    <input id="ignore_version" type="checkbox" value="1" name="ignore_version"/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ignore_version_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="checkbox" id="ignore_version" value="1" name="ignore_version"/></div>
             </div>
                 
                 
@@ -27,18 +23,12 @@
                 <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>
+                <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
             </tmpl_if>
                 
             <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="submitUploadForm('pageForm','admin/language_import.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>
\ No newline at end of file
+            <div class="clear"><div class="right">
+                <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/language_import.php" data-form-upload="true">{tmpl_var name='btn_save_txt'}</button>
+                <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/language_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+            </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/language_list.htm b/interface/web/admin/templates/language_list.htm
index ce1bf64..33897be 100644
--- a/interface/web/admin/templates/language_list.htm
+++ b/interface/web/admin/templates/language_list.htm
@@ -1,47 +1,46 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 flags" onChange="submitForm('pageForm','admin/language_list.php');">
+        <legend>Tools</legend>
+            
+                <div class="form-group">
+                    <label for="lng_select" class="col-sm-3 control-label">{tmpl_var name='language_select_txt'}</label>
+                    <div class="col-sm-9"><select name="lng_select" id="language" class="form-control flags" onChange="ISPConfig.submitForm('pageForm','admin/language_list.php');">
                         {tmpl_var name='language_option'}
-                    </select>
-                </div>
-            </div>
-        </fieldset>
+                    </select></div>
+                
+        
     </div>
   
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_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 class="tbl_col_limit" scope="col"><tmpl_var name="lang_file_date_txt"></th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="module"><tmpl_var name="module_txt"></th>
+                        <th data-column="lang_file"><tmpl_var name="lang_file_txt"></th>
+                        <th class="small-col text-right" data-column="lang_file_date"><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>
+                            <td><a href="#" data-load-content="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><a href="#" data-load-content="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="#" data-load-content="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>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-  
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/remote_action_ispcupdate.htm b/interface/web/admin/templates/remote_action_ispcupdate.htm
index 219c6fd..cbd2899 100644
--- a/interface/web/admin/templates/remote_action_ispcupdate.htm
+++ b/interface/web/admin/templates/remote_action_ispcupdate.htm
@@ -1,32 +1,36 @@
 <!--
-<h2><tmpl_var name="do_ispcupdate_caption"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="do_ispcupdate_caption"></h1>
+</div>
 <p><tmpl_var name="do_ispcupdate_desc"></p>
 -->
 
-<h2><tmpl_var name="ispconfig_update_title"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="ispconfig_update_title"></h1>
+</div>
 <p style="margin-top:50px; font-size:14px;"><tmpl_var name="ispconfig_update_text"></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'; ">
+          <legend>{tmpl_var name='do_ispcupdate_caption'}</legend>
+            <div class="form-group">
+              <label for="server_select" class="col-sm-3 control-label">{tmpl_var name='select_server_txt'}</label>
+              <div class="col-sm-9"><select name="server_select" id="server" class="form-control" onchange="document.getElementById('OKMsg').style.visibility = 'hidden'; ">
                                               {tmpl_var name='server_option'}
-                                      </select>
+                                      </select></div>
             </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 class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_do_txt'}" data-submit-form="pageForm" data-form-action="admin/remote_action_ispcupdate.php">{tmpl_var name='btn_do_txt'}</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 b941b83..d5fa2ff 100644
--- a/interface/web/admin/templates/remote_action_osupdate.htm
+++ b/interface/web/admin/templates/remote_action_osupdate.htm
@@ -1,25 +1,22 @@
-<h2><tmpl_var name="do_osupdate_caption"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="do_osupdate_caption"></h1>
+</div>
 <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="$('#OKMsg').hide(); ">
+
+        <legend>{tmpl_var name='do_osupdate_caption'}</legend>
+            <div class="form-group">
+                <label for="server_select" class="col-sm-3 control-label">{tmpl_var name='select_server_txt'}</label>
+                <div class="col-sm-9"><select name="server_select" id="server" class="form-control" onchange="$('#OKMsg').hide(); ">
                     {tmpl_var name='server_option'}
-                </select>
+                </select></div>
             </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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_do_txt'}" data-submit-form="pageForm" data-form-action="admin/remote_action_osupdate.php">{tmpl_var name='btn_do_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/remote_user_edit.htm b/interface/web/admin/templates/remote_user_edit.htm
index 347835f..3ab0bb2 100644
--- a/interface/web/admin/templates/remote_user_edit.htm
+++ b/interface/web/admin/templates/remote_user_edit.htm
@@ -1,47 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="remote_username">{tmpl_var name='username_txt'}</label>
-                <p class="prefix">{tmpl_var name='username_prefix'}</p>
-                <input name="remote_username" id="username" value="{tmpl_var name='remote_username'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
+        
+            <div class="form-group">
+                <label for="remote_username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
+                <div class="col-sm-2">{tmpl_var name='username_prefix'}</div>
+                <div class="col-sm-7"><input type="text" name="remote_username" id="username" value="{tmpl_var name='remote_username'}" class="form-control" /></div></div>
                 
-            <div class="ctrlHolder">
-                <label for="remote_password">{tmpl_var name='password_txt'}</label>
-                <input name="remote_password" id="password" value="{tmpl_var name='remote_password'}" size="30" maxlength="255" type="password" class="textInput" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            <div class="form-group">
+                <label for="remote_password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="remote_password" id="password" value="{tmpl_var name='remote_password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='function_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='function_txt'}</label>
+                <div class="col-sm-9">
                     &nbsp; {tmpl_var name='remote_functions'}
                 </div>
             </div>
                 
-        </fieldset>
+        
             
         <input type="hidden" name="remote_userid" value="{tmpl_var name='id'}">
         <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/remote_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('admin/remote_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/remote_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/remote_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/remote_user_list.htm b/interface/web/admin/templates/remote_user_list.htm
index 88ddf6a..de65c64 100644
--- a/interface/web/admin/templates/remote_user_list.htm
+++ b/interface/web/admin/templates/remote_user_list.htm
@@ -1,41 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
-<div class="panel panel_list_users">
+
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/remote_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
     
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/remote_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
     
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_remote_userid" scope="col"><tmpl_var name="parent_remote_userid_txt"></th>
-                        <th class="tbl_col_remote_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="parent_remote_userid"><tmpl_var name="parent_remote_userid_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_remote_userid">&nbsp;</td>           
-                        <td class="tbl_col_remote_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/remote_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td>&nbsp;</td>           
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/remote_user_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_remote_userid"><a href="#" onclick="loadContent('admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}');">{tmpl_var name="remote_userid"}</a></td>
-                            <td class="tbl_col_remote_username"><a href="#" onclick="loadContent('admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}');">{tmpl_var name="remote_username"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/remote_user_del.php?id={tmpl_var name='remote_userid'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}">{tmpl_var name="remote_userid"}</a></td>
+                            <td><a href="#" data-load-content="admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}">{tmpl_var name="remote_username"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/remote_user_del.php?id={tmpl_var name='remote_userid'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -47,11 +45,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_cron_edit.htm b/interface/web/admin/templates/server_config_cron_edit.htm
index 4f9d283..908e624 100644
--- a/interface/web/admin/templates/server_config_cron_edit.htm
+++ b/interface/web/admin/templates/server_config_cron_edit.htm
@@ -1,30 +1,24 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+
+        
+            <div class="form-group">
+                <label for="init_script" class="col-sm-3 control-label">{tmpl_var name='init_script_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="init_script" id="init_script" value="{tmpl_var name='init_script'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="crontab_dir" class="col-sm-3 control-label">{tmpl_var name='crontab_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="crontab_dir" id="crontab_dir" value="{tmpl_var name='crontab_dir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="wget" class="col-sm-3 control-label">{tmpl_var name='wget_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="wget" id="wget" value="{tmpl_var name='wget'}" class="form-control" /></div></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_dns_edit.htm b/interface/web/admin/templates/server_config_dns_edit.htm
index 541c9d7..19f020a 100644
--- a/interface/web/admin/templates/server_config_dns_edit.htm
+++ b/interface/web/admin/templates/server_config_dns_edit.htm
@@ -1,38 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="bind_user">{tmpl_var name='bind_user_txt'}</label>
-                <input name="bind_user" id="bind_user" value="{tmpl_var name='bind_user'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bind_group">{tmpl_var name='bind_group_txt'}</label>
-                <input name="bind_group" id="bind_group" value="{tmpl_var name='bind_group'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bind_zonefiles_dir">{tmpl_var name='bind_zonefiles_dir_txt'}</label>
-                <input name="bind_zonefiles_dir" id="bind_zonefiles_dir" value="{tmpl_var name='bind_zonefiles_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="named_conf_path">{tmpl_var name='named_conf_path_txt'}</label>
-                <input name="named_conf_path" id="named_conf_path" value="{tmpl_var name='named_conf_path'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="named_conf_local_path">{tmpl_var name='named_conf_local_path_txt'}</label>
-                <input name="named_conf_local_path" id="named_conf_local_path" value="{tmpl_var name='named_conf_local_path'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-        </fieldset>
+
+        
+            <div class="form-group">
+                <label for="bind_user" class="col-sm-3 control-label">{tmpl_var name='bind_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bind_user" id="bind_user" value="{tmpl_var name='bind_user'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bind_group" class="col-sm-3 control-label">{tmpl_var name='bind_group_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bind_group" id="bind_group" value="{tmpl_var name='bind_group'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bind_zonefiles_dir" class="col-sm-3 control-label">{tmpl_var name='bind_zonefiles_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bind_zonefiles_dir" id="bind_zonefiles_dir" value="{tmpl_var name='bind_zonefiles_dir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="named_conf_path" class="col-sm-3 control-label">{tmpl_var name='named_conf_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="named_conf_path" id="named_conf_path" value="{tmpl_var name='named_conf_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="named_conf_local_path" class="col-sm-3 control-label">{tmpl_var name='named_conf_local_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="named_conf_local_path" id="named_conf_local_path" value="{tmpl_var name='named_conf_local_path'}" class="form-control" /></div></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_fastcgi_edit.htm b/interface/web/admin/templates/server_config_fastcgi_edit.htm
index 88d06d7..b4c5cac 100644
--- a/interface/web/admin/templates/server_config_fastcgi_edit.htm
+++ b/interface/web/admin/templates/server_config_fastcgi_edit.htm
@@ -1,52 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
-            <div class="ctrlHolder">
-                <label for="fastcgi_config_syntax">{tmpl_var name='fastcgi_config_syntax_txt'}</label>
-                <select name="fastcgi_config_syntax" id="fastcgi_config_syntax" class="selectInput">
+
+        
+            <div class="form-group">
+                <label for="fastcgi_starter_path" class="col-sm-3 control-label">{tmpl_var name='fastcgi_starter_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_starter_path" id="fastcgi_starter_path" value="{tmpl_var name='fastcgi_starter_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_starter_script" class="col-sm-3 control-label">{tmpl_var name='fastcgi_starter_script_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_starter_script" id="fastcgi_starter_script" value="{tmpl_var name='fastcgi_starter_script'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_alias" class="col-sm-3 control-label">{tmpl_var name='fastcgi_alias_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_alias" id="fastcgi_alias" value="{tmpl_var name='fastcgi_alias'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_phpini_path" class="col-sm-3 control-label">{tmpl_var name='fastcgi_phpini_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_phpini_path" id="fastcgi_phpini_path" value="{tmpl_var name='fastcgi_phpini_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_children" class="col-sm-3 control-label">{tmpl_var name='fastcgi_children_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_children" id="fastcgi_children" value="{tmpl_var name='fastcgi_children'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_max_requests" class="col-sm-3 control-label">{tmpl_var name='fastcgi_max_requests_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_max_requests" id="fastcgi_max_requests" value="{tmpl_var name='fastcgi_max_requests'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_bin" class="col-sm-3 control-label">{tmpl_var name='fastcgi_bin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fastcgi_bin" id="fastcgi_bin" value="{tmpl_var name='fastcgi_bin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fastcgi_config_syntax" class="col-sm-3 control-label">{tmpl_var name='fastcgi_config_syntax_txt'}</label>
+                <div class="col-sm-9"><select name="fastcgi_config_syntax" id="fastcgi_config_syntax" class="form-control">
                     {tmpl_var name='fastcgi_config_syntax'}
-                </select>
+                </select></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_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_getmail_edit.htm b/interface/web/admin/templates/server_config_getmail_edit.htm
index 8dc900d..406dff4 100644
--- a/interface/web/admin/templates/server_config_getmail_edit.htm
+++ b/interface/web/admin/templates/server_config_getmail_edit.htm
@@ -1,22 +1,18 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+
+        
+            <div class="form-group">
+                <label for="getmail_config_dir" class="col-sm-3 control-label">{tmpl_var name='getmail_config_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="getmail_config_dir" id="getmail_config_dir" value="{tmpl_var name='getmail_config_dir'}" class="form-control" /></div></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_jailkit_edit.htm b/interface/web/admin/templates/server_config_jailkit_edit.htm
index 9d7864b..3371fd8 100644
--- a/interface/web/admin/templates/server_config_jailkit_edit.htm
+++ b/interface/web/admin/templates/server_config_jailkit_edit.htm
@@ -1,34 +1,27 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+
+        
+            <div class="form-group">
+                <label for="jailkit_chroot_home" class="col-sm-3 control-label">{tmpl_var name='jailkit_chroot_home_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="jailkit_chroot_home" id="jailkit_chroot_home" value="{tmpl_var name='jailkit_chroot_home'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="jailkit_chroot_app_sections" class="col-sm-3 control-label">{tmpl_var name='jailkit_chroot_app_sections_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="jailkit_chroot_app_sections" id="jailkit_chroot_app_sections" value="{tmpl_var name='jailkit_chroot_app_sections'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="jailkit_chroot_app_programs" class="col-sm-3 control-label">{tmpl_var name='jailkit_chroot_app_programs_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="jailkit_chroot_app_programs" id="jailkit_chroot_app_programs" value="{tmpl_var name='jailkit_chroot_app_programs'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="jailkit_chroot_cron_programs" class="col-sm-3 control-label">{tmpl_var name='jailkit_chroot_cron_programs_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="jailkit_chroot_cron_programs" id="jailkit_chroot_cron_programs" value="{tmpl_var name='jailkit_chroot_cron_programs'}" class="form-control" /></div></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_list.htm b/interface/web/admin/templates/server_config_list.htm
index d5b4219..ef09355 100644
--- a/interface/web/admin/templates/server_config_list.htm
+++ b/interface/web/admin/templates/server_config_list.htm
@@ -1,29 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_server_config">
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="server_name"><tmpl_var name="server_name_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/server_config_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/server_config_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_server_name"><a href="#" onclick="loadContent('admin/server_config_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/server_config_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/server_config_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -35,11 +36,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="2"><tmpl_var name="paging"></td>
+                        <td colspan="2"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    </div>
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm
index 54d6014..926be8e 100644
--- a/interface/web/admin/templates/server_config_mail_edit.htm
+++ b/interface/web/admin/templates/server_config_mail_edit.htm
@@ -1,134 +1,127 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="module">{tmpl_var name='module_txt'}</label>
-                <select name="module" id="module" class="selectInput formLengthHalf">
+
+        
+            <div class="form-group">
+                <label for="module" class="col-sm-3 control-label">{tmpl_var name='module_txt'}</label>
+                <div class="col-sm-9"><select name="module" id="module" class="form-control">
                     {tmpl_var name='module'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="maildir_path">{tmpl_var name='maildir_path_txt'}</label>
-                <input name="maildir_path" id="maildir_path" value="{tmpl_var name='maildir_path'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="homedir_path">{tmpl_var name='homedir_path_txt'}</label>
-                <input name="homedir_path" id="homedir_path" value="{tmpl_var name='homedir_path'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="dkim_path">{tmpl_var name='dkim_path_txt'}</label>
-                <input name="dkim_path" id="dkim_path" value="{tmpl_var name='dkim_path'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-				<p class="label">{tmpl_var name='dkim_strength_txt'}</p>
-				<div class="multiField">
-					<select name="dkim_strength" id="dkim_strength" class="selectInput">
-						{tmpl_var name='dkim_strength'}
-					</select>
-				</div>
+            <div class="form-group">
+                <label for="maildir_path" class="col-sm-3 control-label">{tmpl_var name='maildir_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="maildir_path" id="maildir_path" value="{tmpl_var name='maildir_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='maildir_format_txt'}</label>
+				<div class="col-sm-9"><select name="maildir_format" id="maildir_format" class="form-control">
+						{tmpl_var name='maildir_format'}
+					</select></div>
 			</div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='pop3_imap_daemon_txt'}</p>
-                <div class="multiField">
-                    <select name="pop3_imap_daemon" id="pop3_imap_daemon" class="selectInput">
+            <div class="form-group">
+                <label for="homedir_path" class="col-sm-3 control-label">{tmpl_var name='homedir_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="homedir_path" id="homedir_path" value="{tmpl_var name='homedir_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dkim_path" class="col-sm-3 control-label">{tmpl_var name='dkim_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dkim_path" id="dkim_path" value="{tmpl_var name='dkim_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='dkim_strength_txt'}</label>
+				<div class="col-sm-9"><select name="dkim_strength" id="dkim_strength" class="form-control">
+						{tmpl_var name='dkim_strength'}
+					</select></div>
+			</div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='pop3_imap_daemon_txt'}</label>
+                <div class="col-sm-9"><select name="pop3_imap_daemon" id="pop3_imap_daemon" class="form-control">
                         {tmpl_var name='pop3_imap_daemon'}
-                    </select>
-                </div>
+                    </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mail_filter_syntax_txt'}</p>
-                <div class="multiField">
-                    <select name="mail_filter_syntax" id="mail_filter_syntax" class="selectInput">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mail_filter_syntax_txt'}</label>
+                <div class="col-sm-9"><select name="mail_filter_syntax" id="mail_filter_syntax" class="form-control">
                         {tmpl_var name='mail_filter_syntax'}
-                    </select>
-                </div>
+                    </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="mailuser_uid">{tmpl_var name='mailuser_uid_txt'}</label>
-                <input name="mailuser_uid" id="mailuser_uid" value="{tmpl_var name='mailuser_uid'}" size="10" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="mailuser_gid">{tmpl_var name='mailuser_gid_txt'}</label>
-                <input name="mailuser_gid" id="mailuser_gid" value="{tmpl_var name='mailuser_gid'}" size="10" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="mailuser_name">{tmpl_var name='mailuser_name_txt'}</label>
-                <input name="mailuser_name" id="mailuser_name" value="{tmpl_var name='mailuser_name'}" size="10" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="mailuser_group">{tmpl_var name='mailuser_group_txt'}</label>
-                <input name="mailuser_group" id="mailuser_group" value="{tmpl_var name='mailuser_group'}" size="10" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailbox_virtual_uidgid_maps_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="mailuser_uid" class="col-sm-3 control-label">{tmpl_var name='mailuser_uid_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mailuser_uid" id="mailuser_uid" value="{tmpl_var name='mailuser_uid'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="mailuser_gid" class="col-sm-3 control-label">{tmpl_var name='mailuser_gid_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mailuser_gid" id="mailuser_gid" value="{tmpl_var name='mailuser_gid'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="mailuser_name" class="col-sm-3 control-label">{tmpl_var name='mailuser_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mailuser_name" id="mailuser_name" value="{tmpl_var name='mailuser_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="mailuser_group" class="col-sm-3 control-label">{tmpl_var name='mailuser_group_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mailuser_group" id="mailuser_group" value="{tmpl_var name='mailuser_group'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailbox_virtual_uidgid_maps_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailbox_virtual_uidgid_maps'}&nbsp;{tmpl_var name='mailbox_virtual_uidgid_maps_info_txt'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="relayhost">{tmpl_var name='relayhost_txt'}</label>
-                <input name="relayhost" id="relayhost" value="{tmpl_var name='relayhost'}" size="40" maxlength="255" type="text" class="textInput formLengthHalf" />
+            <div class="form-group">
+                <label for="relayhost" class="col-sm-3 control-label">{tmpl_var name='relayhost_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="relayhost" id="relayhost" value="{tmpl_var name='relayhost'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="relayhost_user" class="col-sm-3 control-label">{tmpl_var name='relayhost_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="relayhost_user" id="relayhost_user" value="{tmpl_var name='relayhost_user'}" autocomplete="off" class="form-control" autocomplete="off" /></div></div>
+            <div class="form-group">
+                <label for="relayhost_password" class="col-sm-3 control-label">{tmpl_var name='relayhost_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="relayhost_password" id="relayhost_password" value="{tmpl_var name='relayhost_password'}" autocomplete="off" class="form-control" autocomplete="off" /></div></div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='reject_sender_login_mismatch_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='reject_sender_login_mismatch'}
+                </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="relayhost_user">{tmpl_var name='relayhost_user_txt'}</label>
-                <input name="relayhost_user" id="relayhost_user" value="{tmpl_var name='relayhost_user'}" size="40" maxlength="255" type="text" autocomplete="off" class="textInput formLengthHalf" autocomplete="off" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="relayhost_password">{tmpl_var name='relayhost_password_txt'}</label>
-                <input name="relayhost_password" id="relayhost_password" value="{tmpl_var name='relayhost_password'}" size="40" maxlength="255" type="password" autocomplete="off" class="textInput formLengthHalf" autocomplete="off" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="mailbox_size_limit">{tmpl_var name='mailbox_size_limit_txt'}</label>
-                <input name="mailbox_size_limit" id="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}" size="10" maxlength="15" type="text" class="textInput formLengthLimit" />&nbsp;MB
-            </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="15" type="text" class="textInput formLengthLimit" />&nbsp;MB
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailbox_quota_stats_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="mailbox_size_limit" class="col-sm-3 control-label">{tmpl_var name='mailbox_size_limit_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="mailbox_size_limit" id="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+            </div></div>
+            <div class="form-group">
+                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailbox_quota_stats_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailbox_quota_stats'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="realtime_blackhole_list">{tmpl_var name='realtime_blackhole_list_txt'}</label>
-                <input name="realtime_blackhole_list" id="realtime_blackhole_list" value="{tmpl_var name='realtime_blackhole_list'}" size="40" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='realtime_blackhole_list_note_txt'}
-            </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overquota_notify_admin_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="realtime_blackhole_list" class="col-sm-3 control-label">{tmpl_var name='realtime_blackhole_list_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="realtime_blackhole_list" id="realtime_blackhole_list" value="{tmpl_var name='realtime_blackhole_list'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='realtime_blackhole_list_note_txt'}
+            </div></div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_admin_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_admin'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overquota_notify_client_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_client_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_client'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="overquota_notify_freq">{tmpl_var name='overquota_notify_freq_txt'}</label>
-                <input name="overquota_notify_freq" id="overquota_notify_freq" value="{tmpl_var name='overquota_notify_freq'}" size="40" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='overquota_notify_freq_note_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overquota_notify_onok_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="overquota_notify_freq" class="col-sm-3 control-label">{tmpl_var name='overquota_notify_freq_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="overquota_notify_freq" id="overquota_notify_freq" value="{tmpl_var name='overquota_notify_freq'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='overquota_notify_freq_note_txt'}
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_onok_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_onok'}
                 </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_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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/admin/templates/server_config_rescue_edit.htm b/interface/web/admin/templates/server_config_rescue_edit.htm
index 28b5cb4..8bb9e3b 100644
--- a/interface/web/admin/templates/server_config_rescue_edit.htm
+++ b/interface/web/admin/templates/server_config_rescue_edit.htm
@@ -1,50 +1,47 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_config">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Rescue</legend>
-            <div class="ctrlHolder">
-                <p class="label" style="width:300px">{tmpl_var name='try_rescue_txt'}</p>
-                <div class="multiField" style="width:100px">
+        <legend>Rescue</legend>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='try_rescue_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='try_rescue'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label" style="width:300px">{tmpl_var name='do_not_try_rescue_httpd_txt'}</p>
-                <div class="multiField" style="width:100px">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='do_not_try_rescue_httpd_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='do_not_try_rescue_httpd'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label" style="width:300px">{tmpl_var name='do_not_try_rescue_mongodb_txt'}</p>
-                <div class="multiField" style="width:100px">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='do_not_try_rescue_mongodb_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='do_not_try_rescue_mongodb'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label" style="width:300px">{tmpl_var name='do_not_try_rescue_mysql_txt'}</p>
-                <div class="multiField" style="width:100px">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='do_not_try_rescue_mysql_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='do_not_try_rescue_mysql'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label" style="width:300px">{tmpl_var name='do_not_try_rescue_mail_txt'}</p>
-                <div class="multiField" style="width:100px">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='do_not_try_rescue_mail_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='do_not_try_rescue_mail'}
                 </div>
             </div>
-        </fieldset>
+        
 
         <tmpl_var name="rescue_description_txt">
 
             <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>
+            <div class="clear"><div class="right">
+                <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+                <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+            </div></div>
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index 2c08129..5de8154 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -1,119 +1,105 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_config">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='auto_network_configuration_txt'}</p>
-                <div class="multiField">
+
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='auto_network_configuration_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='auto_network_configuration'} {tmpl_var name='network_config_warning_txt'}
                 </div>
             </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="255" type="text" class="textInput formLengthIPv4" />
+            <div class="form-group">
+                <label for="ip_address" class="col-sm-3 control-label">{tmpl_var name='ip_address_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ip_address" id="ip_address" value="{tmpl_var name='ip_address'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="netmask" class="col-sm-3 control-label">{tmpl_var name='netmask_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="netmask" id="netmask" value="{tmpl_var name='netmask'}" class="form-control" /></div></div>
+	    <div class="form-group">
+		<label for="v6_prefix" class="col-sm-3 control-label">{tmpl_var name='v6_prefix_txt'}</label>
+		<div class="col-sm-9"><input type="text" name="v6_prefix" id="v6_prefix" value="{tmpl_var name='v6_prefix'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="gateway" class="col-sm-3 control-label">{tmpl_var name='gateway_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="gateway" id="gateway" value="{tmpl_var name='gateway'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="hostname" class="col-sm-3 control-label">{tmpl_var name='hostname_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="hostname" id="hostname" value="{tmpl_var name='hostname'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="nameservers" class="col-sm-3 control-label">{tmpl_var name='nameservers_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="nameservers" id="nameservers" value="{tmpl_var name='nameservers'}" class="form-control" /></div><p class="formHint">{tmpl_var name='nameservers_hint_txt'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="netmask">{tmpl_var name='netmask_txt'}</label>
-                <input name="netmask" id="netmask" value="{tmpl_var name='netmask'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
-            </div>
-	    <div class="ctrlHolder">
-		<label for="v6_prefix">{tmpl_var name='v6_prefix_txt'}</label>
-		<input name="v6_prefix" id="v6_prefix" value="{tmpl_var name='v6_prefix'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="gateway">{tmpl_var name='gateway_txt'}</label>
-                <input name="gateway" id="gateway" value="{tmpl_var name='gateway'}" size="15" maxlength="255" type="text" class="textInput formLengthIPv4" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="hostname">{tmpl_var name='hostname_txt'}</label>
-                <input name="hostname" id="hostname" value="{tmpl_var name='hostname'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="nameservers">{tmpl_var name='nameservers_txt'}</label>
-                <input name="nameservers" id="nameservers" value="{tmpl_var name='nameservers'}" size="40" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">{tmpl_var name='nameservers_hint_txt'}</p>
-            </div>
-            <div class="ctrlHolder">
-                <label for="firewall">{tmpl_var name='firewall_txt'}</label>
-                <select name="firewall" id="firewall" class="selectInput">
+            <div class="form-group">
+                <label for="firewall" class="col-sm-3 control-label">{tmpl_var name='firewall_txt'}</label>
+                <div class="col-sm-9"><select name="firewall" id="firewall" class="form-control">
                     {tmpl_var name='firewall'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="loglevel">{tmpl_var name='loglevel_txt'}</label>
-                <select name="loglevel" id="loglevel" class="selectInput">
+            <div class="form-group">
+                <label for="loglevel" class="col-sm-3 control-label">{tmpl_var name='loglevel_txt'}</label>
+                <div class="col-sm-9"><select name="loglevel" id="loglevel" class="form-control">
                     {tmpl_var name='loglevel'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="admin_notify_events">{tmpl_var name='admin_notify_events_txt'}</label>
-                <select name="admin_notify_events" id="admin_notify_events" class="selectInput">
+			<div class="form-group">
+                <label for="admin_notify_events" class="col-sm-3 control-label">{tmpl_var name='admin_notify_events_txt'}</label>
+                <div class="col-sm-9"><select name="admin_notify_events" id="admin_notify_events" class="form-control">
                     {tmpl_var name='admin_notify_events'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="backup_dir">{tmpl_var name='backup_dir_txt'}</label>
-                <input name="backup_dir" id="backup_dir" value="{tmpl_var name='backup_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='backup_dir_is_mount_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="backup_dir" class="col-sm-3 control-label">{tmpl_var name='backup_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="backup_dir" id="backup_dir" value="{tmpl_var name='backup_dir'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='backup_dir_is_mount_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='backup_dir_is_mount'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="backup_mode">{tmpl_var name='backup_mode_txt'}</label>
-                <select name="backup_mode" id="backup_mode" class="selectInput">
+            <div class="form-group">
+                <label for="backup_mode" class="col-sm-3 control-label">{tmpl_var name='backup_mode_txt'}</label>
+                <div class="col-sm-9"><select name="backup_mode" id="backup_mode" class="form-control">
                     {tmpl_var name='backup_mode'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='backup_delete_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='backup_delete_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='backup_delete'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <label for="monit_url">{tmpl_var name='monit_url_txt'}</label>
-                <input name="monit_url" id="monit_url" value="{tmpl_var name='monit_url'}" size="40" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='monit_url_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>
+			<div class="form-group">
+                <label for="monit_url" class="col-sm-3 control-label">{tmpl_var name='monit_url_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="monit_url" id="monit_url" value="{tmpl_var name='monit_url'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='monit_url_note_txt'} </div><a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>
             </div>
-			<div class="ctrlHolder">
-                <label for="monit_user">{tmpl_var name='monit_user_txt'}</label>
-                <input name="monit_user" id="monit_user" value="{tmpl_var name='monit_user'}" size="40" maxlength="255" type="text" class="textInput" />
+			<div class="form-group">
+                <label for="monit_user" class="col-sm-3 control-label">{tmpl_var name='monit_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="monit_user" id="monit_user" value="{tmpl_var name='monit_user'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="monit_password" class="col-sm-3 control-label">{tmpl_var name='monit_password_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="monit_password" id="monit_password" value="{tmpl_var name='monit_password'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="munin_url" class="col-sm-3 control-label">{tmpl_var name='munin_url_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="munin_url" id="munin_url" value="{tmpl_var name='munin_url'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='munin_url_note_txt'} </div><a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>
             </div>
-			<div class="ctrlHolder">
-                <label for="monit_password">{tmpl_var name='monit_password_txt'}</label>
-                <input name="monit_password" id="monit_password" value="{tmpl_var name='monit_password'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="munin_url">{tmpl_var name='munin_url_txt'}</label>
-                <input name="munin_url" id="munin_url" value="{tmpl_var name='munin_url'}" size="40" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='munin_url_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>
-            </div>
-			<div class="ctrlHolder">
-                <label for="munin_user">{tmpl_var name='munin_user_txt'}</label>
-                <input name="munin_user" id="munin_user" value="{tmpl_var name='munin_user'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="munin_password">{tmpl_var name='munin_password_txt'}</label>
-                <input name="munin_password" id="munin_password" value="{tmpl_var name='munin_password'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='monitor_system_updates_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label for="munin_user" class="col-sm-3 control-label">{tmpl_var name='munin_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="munin_user" id="munin_user" value="{tmpl_var name='munin_user'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="munin_password" class="col-sm-3 control-label">{tmpl_var name='munin_password_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="munin_password" id="munin_password" value="{tmpl_var name='munin_password'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='monitor_system_updates_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='monitor_system_updates'}
                 </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_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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/admin/templates/server_config_ufw_edit.htm b/interface/web/admin/templates/server_config_ufw_edit.htm
index 12a94ae..e84260b 100644
--- a/interface/web/admin/templates/server_config_ufw_edit.htm
+++ b/interface/web/admin/templates/server_config_ufw_edit.htm
@@ -1,66 +1,63 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_config">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>UFW Firewall</legend>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ufw_enable_txt'}</p>
-                <div class="multiField">
+        <legend>UFW Firewall</legend>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ufw_enable_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='ufw_enable'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ufw_manage_builtins_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ufw_manage_builtins_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='ufw_manage_builtins'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ufw_ipv6_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ufw_ipv6_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='ufw_ipv6'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ufw_default_input_policy">{tmpl_var name='ufw_default_input_policy_txt'}</label>
-                <select name="ufw_default_input_policy" id="ufw_default_input_policy" class="selectInput">
+            <div class="form-group">
+                <label for="ufw_default_input_policy" class="col-sm-3 control-label">{tmpl_var name='ufw_default_input_policy_txt'}</label>
+                <div class="col-sm-9"><select name="ufw_default_input_policy" id="ufw_default_input_policy" class="form-control">
                     {tmpl_var name='ufw_default_input_policy'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ufw_default_output_policy">{tmpl_var name='ufw_default_output_policy_txt'}</label>
-                <select name="ufw_default_output_policy" id="ufw_default_output_policy" class="selectInput">
+            <div class="form-group">
+                <label for="ufw_default_output_policy" class="col-sm-3 control-label">{tmpl_var name='ufw_default_output_policy_txt'}</label>
+                <div class="col-sm-9"><select name="ufw_default_output_policy" id="ufw_default_output_policy" class="form-control">
                     {tmpl_var name='ufw_default_output_policy'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ufw_default_forward_policy">{tmpl_var name='ufw_default_forward_policy_txt'}</label>
-                <select name="ufw_default_forward_policy" id="ufw_default_forward_policy" class="selectInput">
+            <div class="form-group">
+                <label for="ufw_default_forward_policy" class="col-sm-3 control-label">{tmpl_var name='ufw_default_forward_policy_txt'}</label>
+                <div class="col-sm-9"><select name="ufw_default_forward_policy" id="ufw_default_forward_policy" class="form-control">
                     {tmpl_var name='ufw_default_forward_policy'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ufw_default_application_policy">{tmpl_var name='ufw_default_application_policy_txt'}</label>
-                <select name="ufw_default_application_policy" id="ufw_default_application_policy" class="selectInput">
+            <div class="form-group">
+                <label for="ufw_default_application_policy" class="col-sm-3 control-label">{tmpl_var name='ufw_default_application_policy_txt'}</label>
+                <div class="col-sm-9"><select name="ufw_default_application_policy" id="ufw_default_application_policy" class="form-control">
                     {tmpl_var name='ufw_default_application_policy'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ufw_log_level">{tmpl_var name='ufw_log_level_txt'}</label>
-                <select name="ufw_log_level" id="ufw_log_level" class="selectInput">
+            <div class="form-group">
+                <label for="ufw_log_level" class="col-sm-3 control-label">{tmpl_var name='ufw_log_level_txt'}</label>
+                <div class="col-sm-9"><select name="ufw_log_level" id="ufw_log_level" class="form-control">
                     {tmpl_var name='ufw_log_level'}
-                </select>
+                </select></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_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_vlogger_edit.htm b/interface/web/admin/templates/server_config_vlogger_edit.htm
index 9f6c028..edcbaed 100644
--- a/interface/web/admin/templates/server_config_vlogger_edit.htm
+++ b/interface/web/admin/templates/server_config_vlogger_edit.htm
@@ -1,22 +1,18 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+
+        
+            <div class="form-group">
+                <label for="config_dir" class="col-sm-3 control-label">{tmpl_var name='config_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="config_dir" id="config_dir" value="{tmpl_var name='config_dir'}" class="form-control" /></div></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 04a8c22..9f8f9d8 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -1,301 +1,269 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_config">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='server_type_txt'}</p>
-                <div class="multiField">
-                    <select name="server_type" id="server_type" class="selectInput">
+
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='server_type_txt'}</label>
+                <div class="col-sm-9"><select name="server_type" id="server_type" class="form-control">
                         {tmpl_var name='server_type'}
-                    </select>
-                </div>
+                    </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="website_basedir">{tmpl_var name='website_basedir_txt'}</label>
-                <input name="website_basedir" id="website_basedir" value="{tmpl_var name='website_basedir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="website_path">{tmpl_var name='website_path_txt'}</label>
-                <input name="website_path" id="website_path" value="{tmpl_var name='website_path'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="website_symlinks">{tmpl_var name='website_symlinks_txt'}</label>
-                <input name="website_symlinks" id="website_symlinks" value="{tmpl_var name='website_symlinks'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="website_symlinks_rel">{tmpl_var name='website_symlinks_rel_txt'}</label>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="website_basedir" class="col-sm-3 control-label">{tmpl_var name='website_basedir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="website_basedir" id="website_basedir" value="{tmpl_var name='website_basedir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="website_path" class="col-sm-3 control-label">{tmpl_var name='website_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="website_path" id="website_path" value="{tmpl_var name='website_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="website_symlinks" class="col-sm-3 control-label">{tmpl_var name='website_symlinks_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="website_symlinks" id="website_symlinks" value="{tmpl_var name='website_symlinks'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="website_symlinks_rel" class="col-sm-3 control-label">{tmpl_var name='website_symlinks_rel_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='website_symlinks_rel'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <label for="website_symlinks_rel">{tmpl_var name='network_filesystem_txt'}</label>
-                <div class="multiField">
+			<div class="form-group">
+                <label for="website_symlinks_rel" class="col-sm-3 control-label">{tmpl_var name='network_filesystem_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='network_filesystem'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="website_autoalias">{tmpl_var name='website_autoalias_txt'}</label>
-                <input name="website_autoalias" id="website_autoalias" value="{tmpl_var name='website_autoalias'}" size="40" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='website_autoalias_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[client_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[client_username]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_domain]</a>
+            <div class="form-group">
+                <label for="website_autoalias" class="col-sm-3 control-label">{tmpl_var name='website_autoalias_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="website_autoalias" id="website_autoalias" value="{tmpl_var name='website_autoalias'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='website_autoalias_note_txt'} </div><a href="javascript:void(0);" class="addPlaceholder">[client_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[client_username]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_id]</a>, <a href="javascript:void(0);" class="addPlaceholder">[website_domain]</a>
             </div>
-		<div class="ctrlHolder apache">
-			<label for="vhost_rewrite_v6">{tmpl_var name='vhost_rewrite_v6_txt'}</label>
-			<div class="multiField">
+		<div class="form-group apache">
+			<label for="vhost_rewrite_v6" class="col-sm-3 control-label">{tmpl_var name='vhost_rewrite_v6_txt'}</label>
+			<div class="col-sm-9">
 				{tmpl_var name='vhost_rewrite_v6'}
 			</div>
 		</div>
-            <div class="ctrlHolder apache">
-                <label for="vhost_conf_dir">{tmpl_var name='vhost_conf_dir_txt'}</label>
-                <input name="vhost_conf_dir" id="vhost_conf_dir" value="{tmpl_var name='vhost_conf_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder apache">
-                <label for="vhost_conf_enabled_dir">{tmpl_var name='vhost_conf_enabled_dir_txt'}</label>
-                <input name="vhost_conf_enabled_dir" id="vhost_conf_enabled_dir" value="{tmpl_var name='vhost_conf_enabled_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder nginx">
-                <label for="nginx_vhost_conf_dir">{tmpl_var name='nginx_vhost_conf_dir_txt'}</label>
-                <input name="nginx_vhost_conf_dir" id="nginx_vhost_conf_dir" value="{tmpl_var name='nginx_vhost_conf_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder nginx">
-                <label for="nginx_vhost_conf_enabled_dir">{tmpl_var name='nginx_vhost_conf_enabled_dir_txt'}</label>
-                <input name="nginx_vhost_conf_enabled_dir" id="nginx_vhost_conf_enabled_dir" value="{tmpl_var name='nginx_vhost_conf_enabled_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='security_level_txt'}</p>
-                <div class="multiField">
-                    <select name="security_level" id="security_level" class="selectInput">
+            <div class="form-group apache">
+                <label for="vhost_conf_dir" class="col-sm-3 control-label">{tmpl_var name='vhost_conf_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="vhost_conf_dir" id="vhost_conf_dir" value="{tmpl_var name='vhost_conf_dir'}" class="form-control" /></div></div>
+            <div class="form-group apache">
+                <label for="vhost_conf_enabled_dir" class="col-sm-3 control-label">{tmpl_var name='vhost_conf_enabled_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="vhost_conf_enabled_dir" id="vhost_conf_enabled_dir" value="{tmpl_var name='vhost_conf_enabled_dir'}" class="form-control" /></div></div>
+            <div class="form-group nginx">
+                <label for="nginx_vhost_conf_dir" class="col-sm-3 control-label">{tmpl_var name='nginx_vhost_conf_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="nginx_vhost_conf_dir" id="nginx_vhost_conf_dir" value="{tmpl_var name='nginx_vhost_conf_dir'}" class="form-control" /></div></div>
+            <div class="form-group nginx">
+                <label for="nginx_vhost_conf_enabled_dir" class="col-sm-3 control-label">{tmpl_var name='nginx_vhost_conf_enabled_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="nginx_vhost_conf_enabled_dir" id="nginx_vhost_conf_enabled_dir" value="{tmpl_var name='nginx_vhost_conf_enabled_dir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='security_level_txt'}</label>
+                <div class="col-sm-9"><select name="security_level" id="security_level" class="form-control">
                         {tmpl_var name='security_level'}
-                    </select>
-                </div>
+                    </select></div>
             </div>
-            <div class="ctrlHolder apache">
-                <p class="label">{tmpl_var name='check_apache_config_txt'}</p>
-                <div class="multiField">
+            <div class="form-group apache">
+                <label class="col-sm-3 control-label">{tmpl_var name='check_apache_config_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='check_apache_config'}
                 </div>
             </div>
-            <div class="ctrlHolder apache">
-                <label for="user">{tmpl_var name='web_user_txt'}</label>
-                <input name="user" id="user" value="{tmpl_var name='user'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder apache">
-                <label for="group">{tmpl_var name='web_group_txt'}</label>
-                <input name="group" id="group" value="{tmpl_var name='group'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder nginx">
-                <label for="nginx_user">{tmpl_var name='nginx_user_txt'}</label>
-                <input name="nginx_user" id="nginx_user" value="{tmpl_var name='nginx_user'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder nginx">
-                <label for="nginx_group">{tmpl_var name='nginx_group_txt'}</label>
-                <input name="nginx_group" id="nginx_group" value="{tmpl_var name='nginx_group'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder nginx">
-                <label for="nginx_cgi_socket">{tmpl_var name='nginx_cgi_socket_txt'}</label>
-                <input name="nginx_cgi_socket" id="nginx_cgi_socket" value="{tmpl_var name='nginx_cgi_socket'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder apache">
-                <label for="htaccess_allow_override">{tmpl_var name='htaccess_allow_override_txt'}</label>
-                <input name="htaccess_allow_override" id="htaccess_allow_override" value="{tmpl_var name='htaccess_allow_override'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='enable_ip_wildcard_txt'}</p>
-                <div class="multiField">
+            <div class="form-group apache">
+                <label for="user" class="col-sm-3 control-label">{tmpl_var name='web_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="user" id="user" value="{tmpl_var name='user'}" class="form-control" /></div></div>
+            <div class="form-group apache">
+                <label for="group" class="col-sm-3 control-label">{tmpl_var name='web_group_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="group" id="group" value="{tmpl_var name='group'}" class="form-control" /></div></div>
+            <div class="form-group nginx">
+                <label for="nginx_user" class="col-sm-3 control-label">{tmpl_var name='nginx_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="nginx_user" id="nginx_user" value="{tmpl_var name='nginx_user'}" class="form-control" /></div></div>
+            <div class="form-group nginx">
+                <label for="nginx_group" class="col-sm-3 control-label">{tmpl_var name='nginx_group_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="nginx_group" id="nginx_group" value="{tmpl_var name='nginx_group'}" class="form-control" /></div></div>
+            <div class="form-group nginx">
+                <label for="nginx_cgi_socket" class="col-sm-3 control-label">{tmpl_var name='nginx_cgi_socket_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="nginx_cgi_socket" id="nginx_cgi_socket" value="{tmpl_var name='nginx_cgi_socket'}" class="form-control" /></div></div>
+            <div class="form-group apache">
+                <label for="htaccess_allow_override" class="col-sm-3 control-label">{tmpl_var name='htaccess_allow_override_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="htaccess_allow_override" id="htaccess_allow_override" value="{tmpl_var name='htaccess_allow_override'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='enable_ip_wildcard_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='enable_ip_wildcard'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overtraffic_notify_admin_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overtraffic_notify_admin_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overtraffic_notify_admin'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overtraffic_notify_client_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overtraffic_notify_client_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overtraffic_notify_client'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overquota_notify_admin_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_admin_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_admin'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overquota_notify_client_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_client_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_client'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='overquota_db_notify_admin_txt'}</p>
-				<div class="multiField">
+			<div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_admin_txt'}</label>
+				<div class="col-sm-9">
 					{tmpl_var name='overquota_db_notify_admin'}
 				 </div>
 			</div>
-			<div class="ctrlHolder">
-				<p class="label">{tmpl_var name='overquota_db_notify_client_txt'}</p>
-				<div class="multiField">
+			<div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_client_txt'}</label>
+				<div class="col-sm-9">
 					{tmpl_var name='overquota_db_notify_client'}	
 				 </div>
 			</div>
-            <div class="ctrlHolder">
-                <label for="overquota_notify_freq">{tmpl_var name='overquota_notify_freq_txt'}</label>
-                <input name="overquota_notify_freq" id="overquota_notify_freq" value="{tmpl_var name='overquota_notify_freq'}" size="40" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='overquota_notify_freq_note_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='overquota_notify_onok_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="overquota_notify_freq" class="col-sm-3 control-label">{tmpl_var name='overquota_notify_freq_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="overquota_notify_freq" id="overquota_notify_freq" value="{tmpl_var name='overquota_notify_freq'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='overquota_notify_freq_note_txt'}
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_onok_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_onok'}
                 </div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='ssl_settings_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='enable_sni_txt'}</p>
-                    <div class="multiField">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-ssl-settings" aria-expanded="false" aria-controls="toggle-ssl-settings">{tmpl_var name='ssl_settings_txt'}</button></div>
+            <div id="toggle-ssl-settings" class="collapse">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='enable_sni_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='enable_sni'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <label for="CA_path">{tmpl_var name='CA_path_txt'}</label>
-                    <input name="CA_path" id="CA_path" value="{tmpl_var name='CA_path'}" size="40" maxlength="255" type="text" autocomplete="off" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="CA_pass">{tmpl_var name='CA_pass_txt'}</label>
-                    <input name="CA_pass" id="CA_pass" value="{tmpl_var name='CA_pass'}" size="40" maxlength="255" type="password" autocomplete="off" class="textInput" />
-                </div>
+				<div class="form-group">
+					<label class="col-sm-3 control-label">
+						<tmpl_var name="enable_spdy_txt">
+					</label>
+					<div class="col-sm-9">
+						<tmpl_var name="enable_spdy">
+					</div>
+				</div>
+                <div class="form-group">
+                    <label for="CA_path" class="col-sm-3 control-label">{tmpl_var name='CA_path_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="CA_path" id="CA_path" value="{tmpl_var name='CA_path'}" autocomplete="off" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="CA_pass" class="col-sm-3 control-label">{tmpl_var name='CA_pass_txt'}</label>
+                    <div class="col-sm-9"><input type="password" name="CA_pass" id="CA_pass" value="{tmpl_var name='CA_pass'}" autocomplete="off" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='permissions_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='set_folder_permissions_on_update_txt'}</p>
-                    <div class="multiField">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-permissions" aria-expanded="false" aria-controls="toggle-permissions">{tmpl_var name='permissions_txt'}</button></div>
+            <div id="toggle-permissions" class="collapse">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='set_folder_permissions_on_update_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='set_folder_permissions_on_update'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='web_folder_protection_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='web_folder_protection_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='web_folder_protection'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='add_web_users_to_sshusers_group_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='add_web_users_to_sshusers_group_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='add_web_users_to_sshusers_group'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='connect_userid_to_webid_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='connect_userid_to_webid_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='connect_userid_to_webid'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <label for="connect_userid_to_webid_start">{tmpl_var name='connect_userid_to_webid_start_txt'}</label>
-                    <input name="connect_userid_to_webid_start" id="connect_userid_to_webid_start" value="{tmpl_var name='connect_userid_to_webid_start'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
+                <div class="form-group">
+                    <label for="connect_userid_to_webid_start" class="col-sm-3 control-label">{tmpl_var name='connect_userid_to_webid_start_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="connect_userid_to_webid_start" id="connect_userid_to_webid_start" value="{tmpl_var name='connect_userid_to_webid_start'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='php_settings_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder apache">
-                    <label for="php_ini_path_apache">{tmpl_var name='php_ini_path_apache_txt'}</label>
-                    <input name="php_ini_path_apache" id="php_ini_path_apache" value="{tmpl_var name='php_ini_path_apache'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder apache">
-                    <label for="php_ini_path_cgi">{tmpl_var name='php_ini_path_cgi_txt'}</label>
-                    <input name="php_ini_path_cgi" id="php_ini_path_cgi" value="{tmpl_var name='php_ini_path_cgi'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_fpm_init_script">{tmpl_var name='php_fpm_init_script_txt'}</label>
-                    <input name="php_fpm_init_script" id="php_fpm_init_script" value="{tmpl_var name='php_fpm_init_script'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_fpm_ini_path">{tmpl_var name='php_fpm_ini_path_txt'}</label>
-                    <input name="php_fpm_ini_path" id="php_fpm_ini_path" value="{tmpl_var name='php_fpm_ini_path'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_fpm_pool_dir">{tmpl_var name='php_fpm_pool_dir_txt'}</label>
-                    <input name="php_fpm_pool_dir" id="php_fpm_pool_dir" value="{tmpl_var name='php_fpm_pool_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_fpm_start_port">{tmpl_var name='php_fpm_start_port_txt'}</label>
-                    <input name="php_fpm_start_port" id="php_fpm_start_port" value="{tmpl_var name='php_fpm_start_port'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_fpm_socket_dir">{tmpl_var name='php_fpm_socket_dir_txt'}</label>
-                    <input name="php_fpm_socket_dir" id="php_fpm_socket_dir" value="{tmpl_var name='php_fpm_socket_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
-                    <input name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" size="40" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_ini_check_minutes">{tmpl_var name='php_ini_check_minutes_txt'}</label>
-                    <input name="php_ini_check_minutes" id="php_ini_check_minutes" value="{tmpl_var name='php_ini_check_minutes'}" size="40" type="text" class="textInput" /> {tmpl_var name='php_ini_check_minutes_info_txt'}
-                </div>
-                <div class="ctrlHolder">
-                    <label for="php_handler">{tmpl_var name='php_handler_txt'}</label>
-                    <div class="multiField">
-                        <select name="php_handler" id="php_handler" class="selectInput">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-php_settings" aria-expanded="false" aria-controls="toggle-php_settings">{tmpl_var name='php_settings_txt'}</button></div>
+            <div id="toggle-php_settings" class="collapse">
+                <div class="form-group apache">
+                    <label for="php_ini_path_apache" class="col-sm-3 control-label">{tmpl_var name='php_ini_path_apache_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_ini_path_apache" id="php_ini_path_apache" value="{tmpl_var name='php_ini_path_apache'}" class="form-control" /></div></div>
+                <div class="form-group apache">
+                    <label for="php_ini_path_cgi" class="col-sm-3 control-label">{tmpl_var name='php_ini_path_cgi_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_ini_path_cgi" id="php_ini_path_cgi" value="{tmpl_var name='php_ini_path_cgi'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_fpm_init_script" class="col-sm-3 control-label">{tmpl_var name='php_fpm_init_script_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_fpm_init_script" id="php_fpm_init_script" value="{tmpl_var name='php_fpm_init_script'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_fpm_ini_path" class="col-sm-3 control-label">{tmpl_var name='php_fpm_ini_path_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_fpm_ini_path" id="php_fpm_ini_path" value="{tmpl_var name='php_fpm_ini_path'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_fpm_pool_dir" class="col-sm-3 control-label">{tmpl_var name='php_fpm_pool_dir_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_fpm_pool_dir" id="php_fpm_pool_dir" value="{tmpl_var name='php_fpm_pool_dir'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_fpm_start_port" class="col-sm-3 control-label">{tmpl_var name='php_fpm_start_port_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_fpm_start_port" id="php_fpm_start_port" value="{tmpl_var name='php_fpm_start_port'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_fpm_socket_dir" class="col-sm-3 control-label">{tmpl_var name='php_fpm_socket_dir_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_fpm_socket_dir" id="php_fpm_socket_dir" value="{tmpl_var name='php_fpm_socket_dir'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_open_basedir" class="col-sm-3 control-label">{tmpl_var name='php_open_basedir_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="php_ini_check_minutes" class="col-sm-3 control-label">{tmpl_var name='php_ini_check_minutes_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="php_ini_check_minutes" id="php_ini_check_minutes" value="{tmpl_var name='php_ini_check_minutes'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;{tmpl_var name='php_ini_check_minutes_info_txt'}
+                </div></div>
+                <div class="form-group">
+                    <label for="php_handler" class="col-sm-3 control-label">{tmpl_var name='php_handler_txt'}</label>
+                    <div class="col-sm-9"><select name="php_handler" id="php_handler" class="form-control">
                             {tmpl_var name='php_handler'}
-                        </select>
-                    </div>
+                        </select></div>
                 </div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='apps_vhost_settings_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="apps_vhost_port">{tmpl_var name='apps_vhost_port_txt'}</label>
-                    <input name="apps_vhost_port" id="apps_vhost_port" value="{tmpl_var name='apps_vhost_port'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="apps_vhost_ip">{tmpl_var name='apps_vhost_ip_txt'}</label>
-                    <input name="apps_vhost_ip" id="apps_vhost_ip" value="{tmpl_var name='apps_vhost_ip'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="apps_vhost_servername">{tmpl_var name='apps_vhost_servername_txt'}</label>
-                    <input name="apps_vhost_servername" id="apps_vhost_servername" value="{tmpl_var name='apps_vhost_servername'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-apps_vhost_settings" aria-expanded="false" aria-controls="toggle-apps_vhost_settings">{tmpl_var name='apps_vhost_settings_txt'}</button></div>
+            <div id="toggle-apps_vhost_settings" class="collapse">
+                <div class="form-group">
+                    <label for="apps_vhost_port" class="col-sm-3 control-label">{tmpl_var name='apps_vhost_port_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="apps_vhost_port" id="apps_vhost_port" value="{tmpl_var name='apps_vhost_port'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="apps_vhost_ip" class="col-sm-3 control-label">{tmpl_var name='apps_vhost_ip_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="apps_vhost_ip" id="apps_vhost_ip" value="{tmpl_var name='apps_vhost_ip'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="apps_vhost_servername" class="col-sm-3 control-label">{tmpl_var name='apps_vhost_servername_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="apps_vhost_servername" id="apps_vhost_servername" value="{tmpl_var name='apps_vhost_servername'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='awstats_settings_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="awstats_conf_dir">{tmpl_var name='awstats_conf_dir_txt'}</label>
-                    <input name="awstats_conf_dir" id="awstats_conf_dir" value="{tmpl_var name='awstats_conf_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="awstats_data_dir">{tmpl_var name='awstats_data_dir_txt'}</label>
-                    <input name="awstats_data_dir" id="awstats_data_dir" value="{tmpl_var name='awstats_data_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="awstats_pl">{tmpl_var name='awstats_pl_txt'}</label>
-                    <input name="awstats_pl" id="awstats_pl" value="{tmpl_var name='awstats_pl'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="awstats_buildstaticpages_pl">{tmpl_var name='awstats_buildstaticpages_pl_txt'}</label>
-                    <input name="awstats_buildstaticpages_pl" id="awstats_buildstaticpages_pl" value="{tmpl_var name='awstats_buildstaticpages_pl'}" size="40" maxlength="255" type="text" class="textInput" />
-                </div>
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-awstats_settings" aria-expanded="false" aria-controls="toggle-awstats_settings">{tmpl_var name='awstats_settings_txt'}</button></div>
+            <div id="toggle-awstats_settings" class="collapse">
+                <div class="form-group">
+                    <label for="awstats_conf_dir" class="col-sm-3 control-label">{tmpl_var name='awstats_conf_dir_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="awstats_conf_dir" id="awstats_conf_dir" value="{tmpl_var name='awstats_conf_dir'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="awstats_data_dir" class="col-sm-3 control-label">{tmpl_var name='awstats_data_dir_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="awstats_data_dir" id="awstats_data_dir" value="{tmpl_var name='awstats_data_dir'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="awstats_pl" class="col-sm-3 control-label">{tmpl_var name='awstats_pl_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="awstats_pl" id="awstats_pl" value="{tmpl_var name='awstats_pl'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="awstats_buildstaticpages_pl" class="col-sm-3 control-label">{tmpl_var name='awstats_buildstaticpages_pl_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="awstats_buildstaticpages_pl" id="awstats_buildstaticpages_pl" value="{tmpl_var name='awstats_buildstaticpages_pl'}" class="form-control" /></div></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_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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     var serverType = jQuery('#server_type').val();
-    jQuery('#server_type').replaceWith('<label for="server_Type">'+serverType+'</label><input type="hidden" name="server_type" value="'+serverType+'">');
+    jQuery('#server_type').replaceWith('<label for="server_Type" class="col-sm-3 control-label">'+serverType+'</label><input type="hidden" name="server_type" value="'+serverType+'">');
     adjustForm();
     jQuery('#server_type').change(function(){
         serverType = $(this).val();
diff --git a/interface/web/admin/templates/server_config_xmpp_edit.htm b/interface/web/admin/templates/server_config_xmpp_edit.htm
new file mode 100644
index 0000000..acf019b
--- /dev/null
+++ b/interface/web/admin/templates/server_config_xmpp_edit.htm
@@ -0,0 +1,73 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_use_ipv6_txt'}</label>
+    <div class="col-sm-9">
+        {tmpl_var name='xmpp_use_ipv6'}
+    </div>
+</div>
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_bosh_max_inactivity_txt'}</label>
+    <div class="col-sm-3">
+        <input type="number" name="xmpp_bosh_max_inactivity" id="xmpp_bosh_max_inactivity" value="{tmpl_var name='xmpp_bosh_max_inactivity'}" class="form-control" />
+    </div>
+</div>
+
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_server_admins_txt'}</label>
+    <div class="col-sm-9">
+        <input type="text" name="xmpp_server_admins" id="xmpp_server_admins" value="{tmpl_var name='xmpp_server_admins'}" class="form-control" />
+    </div>
+</div>
+
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_modules_enabled_txt'}</label>
+    <div class="col-sm-9"><textarea class="form-control" name="xmpp_modules_enabled" id="xmpp_modules_enabled" rows='3' cols='30'>{tmpl_var name='xmpp_modules_enabled'}</textarea></div>
+</div>
+<div class="col-sm-12">
+    <h4>{tmpl_var name='xmpp_ports_txt'}</h4>
+    <div class="col-sm-6">
+        <div class="form-group">
+            <label class="col-sm-6 control-label">{tmpl_var name='xmpp_port_http_txt'}</label>
+            <div class="col-sm-6">
+                <input type="number" name="xmpp_port_http" id="xmpp_port_http" value="{tmpl_var name='xmpp_port_http'}" class="form-control" />
+            </div>
+        </div>
+    </div>
+    <div class="col-sm-6">
+        <div class="form-group">
+            <label class="col-sm-6 control-label">{tmpl_var name='xmpp_port_https_txt'}</label>
+            <div class="col-sm-6">
+                <input type="number" name="xmpp_port_https" id="xmpp_port_https" value="{tmpl_var name='xmpp_port_https'}" class="form-control" />
+            </div>
+        </div>
+    </div>
+    <div class="col-sm-6">
+        <div class="form-group">
+            <label class="col-sm-6 control-label">{tmpl_var name='xmpp_port_pastebin_txt'}</label>
+            <div class="col-sm-6">
+                <input type="number" name="xmpp_port_pastebin" id="xmpp_port_pastebin" value="{tmpl_var name='xmpp_port_pastebin'}" class="form-control" />
+            </div>
+        </div>
+    </div>
+    <div class="col-sm-6">
+        <div class="form-group">
+            <label class="col-sm-6 control-label">{tmpl_var name='xmpp_port_bosh_txt'}</label>
+            <div class="col-sm-6">
+                <input type="number" name="xmpp_port_bosh" id="xmpp_port_bosh" value="{tmpl_var name='xmpp_port_bosh'}" class="form-control" />
+            </div>
+        </div>
+    </div>
+</div>
+
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+<div class="clear"><div class="right">
+    <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+    <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
diff --git a/interface/web/admin/templates/server_edit_config.htm b/interface/web/admin/templates/server_edit_config.htm
index d6ad468..45ef391 100644
--- a/interface/web/admin/templates/server_edit_config.htm
+++ b/interface/web/admin/templates/server_edit_config.htm
@@ -1,22 +1,19 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label for="config" class="col-sm-3 control-label">{tmpl_var name='config_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="config" id="config" rows='20' cols='40'>{tmpl_var name='config'}</textarea></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_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_edit_services.htm b/interface/web/admin/templates/server_edit_services.htm
index 595f16d..4a648f4 100644
--- a/interface/web/admin/templates/server_edit_services.htm
+++ b/interface/web/admin/templates/server_edit_services.htm
@@ -1,70 +1,72 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="server_name">{tmpl_var name='server_name_txt'}</label>
-                <input name="server_name" id="server_name" value="{tmpl_var name='server_name'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mail_server_txt'}</p>
-                <div class="multiField">
+
+        
+            <div class="form-group">
+                <label for="server_name" class="col-sm-3 control-label">{tmpl_var name='server_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="server_name" id="server_name" value="{tmpl_var name='server_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mail_server_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mail_server'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='web_server_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='web_server_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='web_server'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='dns_server_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='dns_server_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='dns_server'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='file_server_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='file_server_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='file_server'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='db_server_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='db_server_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='db_server'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='vserver_server_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='vserver_server_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='vserver_server'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="mirror_server_id">{tmpl_var name='mirror_server_id_txt'}</label>
-                <select name="mirror_server_id" id="server_id" class="selectInput">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='xmpp_server_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='xmpp_server'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="mirror_server_id" class="col-sm-3 control-label">{tmpl_var name='mirror_server_id_txt'}</label>
+                <div class="col-sm-9"><select name="mirror_server_id" id="server_id" class="form-control">
                     {tmpl_var name='mirror_server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="active">{tmpl_var name='active_txt'}</label>
-                <select name="active" id="active" class="selectInput formLengthBool">
+            <div class="form-group">
+                <label for="active" class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9"><select name="active" id="active" class="form-control">
                     {tmpl_var name='active'}
-                </select>
+                </select></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_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_ip_edit.htm b/interface/web/admin/templates/server_ip_edit.htm
index 09055c4..9e895ea 100644
--- a/interface/web/admin/templates/server_ip_edit.htm
+++ b/interface/web/admin/templates/server_ip_edit.htm
@@ -1,50 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_ip">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>IP Address</legend>
-            <div class="ctrlHolder">
-                <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                <select name="server_id" id="server_id" class="selectInput">
+        <legend>IP Address</legend>
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="client_id">{tmpl_var name='client_id_txt'}</label>
-                <select name="client_id" id="client_id" class="selectInput">
+            <div class="form-group">
+                <label for="client_id" class="col-sm-3 control-label">{tmpl_var name='client_id_txt'}</label>
+                <div class="col-sm-9"><select name="client_id" id="client_id" class="form-control">
                     {tmpl_var name='client_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ip_type">{tmpl_var name='ip_type_txt'}</label>
-                <select name="ip_type" id="ip_type" class="selectInput">
+            <div class="form-group">
+                <label for="ip_type" class="col-sm-3 control-label">{tmpl_var name='ip_type_txt'}</label>
+                <div class="col-sm-9"><select name="ip_type" id="ip_type" class="form-control">
                     {tmpl_var name='ip_type'}
-                </select>
+                </select></div>
             </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="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='virtualhost_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="ip_address" class="col-sm-3 control-label">{tmpl_var name='ip_address_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ip_address" id="ip_address" value="{tmpl_var name='ip_address'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='virtualhost_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='virtualhost'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="virtualhost_port">{tmpl_var name='virtualhost_port_txt'}</label>
-                <input name="virtualhost_port" id="virtualhost_port" value="{tmpl_var name='virtualhost_port'}" size="15" maxlength="15" type="text" class="textInput" />
-            </div>
-        </fieldset>
+            <div class="form-group">
+                <label for="virtualhost_port" class="col-sm-3 control-label">{tmpl_var name='virtualhost_port_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virtualhost_port" id="virtualhost_port" value="{tmpl_var name='virtualhost_port'}" class="form-control" /></div></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_ip_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_ip_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_ip_list.htm b/interface/web/admin/templates/server_ip_list.htm
index d83724c..373bc4c 100644
--- a/interface/web/admin/templates/server_ip_list.htm
+++ b/interface/web/admin/templates/server_ip_list.htm
@@ -1,53 +1,51 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_server_ip">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/server_ip_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/server_ip_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
-                        <th class="tbl_col_ip_type" scope="col"><tmpl_var name="ip_type_txt"></th>
-                        <th class="tbl_col_ip_address" scope="col"><tmpl_var name="ip_address_txt"></th>
-                        <th class="tbl_col_virtualhost" scope="col"><tmpl_var name="virtualhost_txt"></th>
-                        <th class="tbl_col_virtualhost_port" scope="col"><tmpl_var name="virtualhost_port_txt"></th>
-                        <th class="tbl_col_buttons" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th class="small-col" data-column="client_id"><tmpl_var name="client_id_txt"></th>
+                        <th data-column="ip_type"><tmpl_var name="ip_type_txt"></th>
+                        <th data-column="ip_address"><tmpl_var name="ip_address_txt"></th>
+                        <th data-column="virtualhost"><tmpl_var name="virtualhost_txt"></th>
+                        <th data-column="virtualhost_port"><tmpl_var name="virtualhost_port_txt"></th>
+                        <th class="text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_client_id"><select name="search_client_id">{tmpl_var name='search_client_id'}</select></td>
-                        <td class="tbl_col_ip_type"><select name="search_ip_type">{tmpl_var name='search_ip_type'}</select></td>
-                        <td class="tbl_col_ip_address"><input type="text" name="search_ip_address" value="{tmpl_var name='search_ip_address'}" /></td>
-                        <td class="tbl_col_virtualhost"><select name="search_virtualhost">{tmpl_var name='search_virtualhost'}</select></td>
-                        <td class="tbl_col_virtualhost_port"><input type="text" name="search_virtualhost_port" value="{tmpl_var name='search_virtualhost_port'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/server_ip_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_client_id">{tmpl_var name='search_client_id'}</select></td>
+                        <td><select class="form-control" name="search_ip_type">{tmpl_var name='search_ip_type'}</select></td>
+                        <td><input class="form-control" type="text" name="search_ip_address" value="{tmpl_var name='search_ip_address'}" /></td>
+                        <td><select class="form-control" name="search_virtualhost">{tmpl_var name='search_virtualhost'}</select></td>
+                        <td><input class="form-control" type="text" name="search_virtualhost_port" value="{tmpl_var name='search_virtualhost_port'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/server_ip_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('admin/server_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_client_id"><a href="#" onclick="loadContent('admin/server_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
-                            <td class="tbl_col_ip_type"><a href="#" onclick="loadContent('admin/server_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ip_type"}</a></td>
-                            <td class="tbl_col_ip_address"><a href="#" onclick="loadContent('admin/server_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ip_address"}</a></td>
-                            <td class="tbl_col_virtualhost"><a href="#" onclick="loadContent('admin/server_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="virtualhost"}</a></td>
-                            <td class="tbl_col_virtualhost_port"><a href="#" onclick="loadContent('admin/server_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="virtualhost_port"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/server_ip_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_type"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost_port"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -59,11 +57,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                        <td colspan="7"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_list.htm b/interface/web/admin/templates/server_list.htm
index 3545e32..893872e 100644
--- a/interface/web/admin/templates/server_list.htm
+++ b/interface/web/admin/templates/server_list.htm
@@ -1,63 +1,66 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_server">
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
-                        <th class="tbl_col_mail_server" scope="col"><tmpl_var name="mail_server_txt"></th>
-                        <th class="tbl_col_web_server" scope="col"><tmpl_var name="web_server_txt"></th>
-                        <th class="tbl_col_dns_server" scope="col"><tmpl_var name="dns_server_txt"></th>
-                        <th class="tbl_col_file_server" scope="col"><tmpl_var name="file_server_txt"></th>
-                        <th class="tbl_col_db_server" scope="col"><tmpl_var name="db_server_txt"></th>
-                        <th class="tbl_col_vserver_server" scope="col"><tmpl_var name="vserver_server_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="server_name"><tmpl_var name="server_name_txt"></th>
+                        <th data-column="mail_server"><tmpl_var name="mail_server_txt"></th>
+                        <th data-column="web_server"><tmpl_var name="web_server_txt"></th>
+                        <th data-column="dns_server"><tmpl_var name="dns_server_txt"></th>
+                        <th data-column="file_server"><tmpl_var name="file_server_txt"></th>
+                        <th data-column="db_server"><tmpl_var name="db_server_txt"></th>
+                        <th data-column="vserver_server"><tmpl_var name="vserver_server_txt"></th>
+                        <th data-column="vserver_server"><tmpl_var name="xmpp_server_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
-                        <td class="tbl_col_mail_server"><select name="search_active">{tmpl_var name='search_mail_server'}</select></td>
-                        <td class="tbl_col_web_server"><select name="search_active">{tmpl_var name='search_web_server'}</select></td>
-                        <td class="tbl_col_dns_server"><select name="search_active">{tmpl_var name='search_dns_server'}</select></td>
-                        <td class="tbl_col_file_server"><select name="search_active">{tmpl_var name='search_file_server'}</select></td>
-                        <td class="tbl_col_db_server"><select name="search_active">{tmpl_var name='search_db_server'}</select></td>
-                        <td class="tbl_col_vserver_server"><select name="search_active">{tmpl_var name='search_vserver_server'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/server_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_mail_server'}</select></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_web_server'}</select></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_dns_server'}</select></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_file_server'}</select></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_db_server'}</select></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_vserver_server'}</select></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_xmpp_server'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/server_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_server_name"><a href="#" onclick="loadContent('admin/server_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
-                            <td class="tbl_col_mail_server">{tmpl_var name="mail_server"}</td>
-                            <td class="tbl_col_web_server">{tmpl_var name="web_server"}</td>
-                            <td class="tbl_col_dns_server">{tmpl_var name="dns_server"}</td>
-                            <td class="tbl_col_file_server">{tmpl_var name="file_server"}</td>
-                            <td class="tbl_col_db_server">{tmpl_var name="db_server"}</td>
-                            <td class="tbl_col_vserver_server">{tmpl_var name="vserver_server"}</td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/server_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/server_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
+                            <td>{tmpl_var name="mail_server"}</td>
+                            <td>{tmpl_var name="web_server"}</td>
+                            <td>{tmpl_var name="dns_server"}</td>
+                            <td>{tmpl_var name="file_server"}</td>
+                            <td>{tmpl_var name="db_server"}</td>
+                            <td>{tmpl_var name="vserver_server"}</td>
+                            <td>{tmpl_var name="xmpp_server"}</td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
                         <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td colspan="8">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                            <td colspan="7">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                         </tr>
                     </tmpl_unless>
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
+                        <td colspan="7"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_php_fastcgi_edit.htm b/interface/web/admin/templates/server_php_fastcgi_edit.htm
index bfc2978..99a3eeb 100644
--- a/interface/web/admin/templates/server_php_fastcgi_edit.htm
+++ b/interface/web/admin/templates/server_php_fastcgi_edit.htm
@@ -1,26 +1,21 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_php">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="php_fastcgi_binary">{tmpl_var name='php_fastcgi_binary_txt'}</label>
-                <input name="php_fastcgi_binary" id="php_fastcgi_binary" value="{tmpl_var name='php_fastcgi_binary'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="php_fastcgi_ini_dir">{tmpl_var name='php_fastcgi_ini_dir_txt'}</label>
-                <input name="php_fastcgi_ini_dir" id="php_fastcgi_ini_dir" value="{tmpl_var name='php_fastcgi_ini_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-        </fieldset>
+        
+            <div class="form-group">
+                <label for="php_fastcgi_binary" class="col-sm-3 control-label">{tmpl_var name='php_fastcgi_binary_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="php_fastcgi_binary" id="php_fastcgi_binary" value="{tmpl_var name='php_fastcgi_binary'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="php_fastcgi_ini_dir" class="col-sm-3 control-label">{tmpl_var name='php_fastcgi_ini_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="php_fastcgi_ini_dir" id="php_fastcgi_ini_dir" value="{tmpl_var name='php_fastcgi_ini_dir'}" class="form-control" /></div></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/server_php_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_php_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_php_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_php_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_php_fpm_edit.htm b/interface/web/admin/templates/server_php_fpm_edit.htm
index 869af3c..4186584 100644
--- a/interface/web/admin/templates/server_php_fpm_edit.htm
+++ b/interface/web/admin/templates/server_php_fpm_edit.htm
@@ -1,30 +1,24 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_php">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="php_fpm_init_script">{tmpl_var name='php_fpm_init_script_txt'}</label>
-                <input name="php_fpm_init_script" id="php_fpm_init_script" value="{tmpl_var name='php_fpm_init_script'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="php_fpm_ini_dir">{tmpl_var name='php_fpm_ini_dir_txt'}</label>
-                <input name="php_fpm_ini_dir" id="php_fpm_ini_dir" value="{tmpl_var name='php_fpm_ini_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="php_fpm_pool_dir">{tmpl_var name='php_fpm_pool_dir_txt'}</label>
-                <input name="php_fpm_pool_dir" id="php_fpm_pool_dir" value="{tmpl_var name='php_fpm_pool_dir'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
-        </fieldset>
+        
+            <div class="form-group">
+                <label for="php_fpm_init_script" class="col-sm-3 control-label">{tmpl_var name='php_fpm_init_script_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="php_fpm_init_script" id="php_fpm_init_script" value="{tmpl_var name='php_fpm_init_script'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="php_fpm_ini_dir" class="col-sm-3 control-label">{tmpl_var name='php_fpm_ini_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="php_fpm_ini_dir" id="php_fpm_ini_dir" value="{tmpl_var name='php_fpm_ini_dir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="php_fpm_pool_dir" class="col-sm-3 control-label">{tmpl_var name='php_fpm_pool_dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="php_fpm_pool_dir" id="php_fpm_pool_dir" value="{tmpl_var name='php_fpm_pool_dir'}" class="form-control" /></div></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/server_php_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_php_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_php_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_php_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_php_list.htm b/interface/web/admin/templates/server_php_list.htm
index f6b989c..0fb9896 100644
--- a/interface/web/admin/templates/server_php_list.htm
+++ b/interface/web/admin/templates/server_php_list.htm
@@ -1,44 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_server_php">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/server_php_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/server_php_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
-                        <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                        <th class="tbl_col_buttons" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th class="small-col" data-column="client_id"><tmpl_var name="client_id_txt"></th>
+                        <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th class="text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_client_id"><select name="search_client_id">{tmpl_var name='search_client_id'}</select></td>
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/server_php_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_client_id">{tmpl_var name='search_client_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/server_php_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('admin/server_php_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_client_id"><a href="#" onclick="loadContent('admin/server_php_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
-                            <td class="tbl_col_name"><a href="#" onclick="loadContent('admin/server_php_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/server_php_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_php_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -50,11 +48,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_php_name_edit.htm b/interface/web/admin/templates/server_php_name_edit.htm
index c1e02a1..067aa71 100644
--- a/interface/web/admin/templates/server_php_name_edit.htm
+++ b/interface/web/admin/templates/server_php_name_edit.htm
@@ -1,34 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_server_php">
 
-    <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">
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="client_id">{tmpl_var name='client_id_txt'}</label>
-                <select name="client_id" id="client_id" class="selectInput">
+            <div class="form-group">
+                <label for="client_id" class="col-sm-3 control-label">{tmpl_var name='client_id_txt'}</label>
+                <div class="col-sm-9"><select name="client_id" id="client_id" class="form-control">
                     {tmpl_var name='client_id'}
-                </select>
+                </select></div>
             </div>
-            <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>
-        </fieldset>
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></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/server_php_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_php_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_php_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_php_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/software_package_edit.htm b/interface/web/admin/templates/software_package_edit.htm
index c2a0254..2569c26 100644
--- a/interface/web/admin/templates/software_package_edit.htm
+++ b/interface/web/admin/templates/software_package_edit.htm
@@ -1,27 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_software_package">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="package_title">{tmpl_var name='package_title_txt'}</label>
+
+        
+            <div class="form-group">
+                <label for="package_title" class="col-sm-3 control-label">{tmpl_var name='package_title_txt'}</label>
                 {tmpl_var name='package_title'}<input name="package_title" id="package_title" value="{tmpl_var name='package_title'}" size="40" maxlength="40" type="hidden" class="textInput" />
             </div>
-            <div class="ctrlHolder">
-                <label for="package_key">{tmpl_var name='package_key_txt'}</label>
-                <input name="package_key" id="package_key" value="{tmpl_var name='package_key'}" size="40" maxlength="40" type="text" class="textInput" />
-            </div>
+            <div class="form-group">
+                <label for="package_key" class="col-sm-3 control-label">{tmpl_var name='package_key_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="package_key" id="package_key" value="{tmpl_var name='package_key'}" class="form-control" /></div></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/software_package_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_package_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-		</fieldset>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/software_package_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/software_package_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/software_package_install.htm b/interface/web/admin/templates/software_package_install.htm
index 3c28144..8524b3c 100644
--- a/interface/web/admin/templates/software_package_install.htm
+++ b/interface/web/admin/templates/software_package_install.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="head_txt"></h1>
+</div>
 <p><tmpl_var name="desc_txt"></p>
 
 <div class="panel panel_software_repo">
@@ -10,21 +12,20 @@
     </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>
+                <div class="form-group">
+                    <label for="install_key" class="col-sm-3 control-label">{tmpl_var name='install_key_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="install_key" id="install_key" value="{tmpl_var name='install_key'}" class="form-control" /></div></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 class="clear"><div class="right">
+                    <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/software_package_install.php">{tmpl_var name='btn_save_txt'}</button>
+                    <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/software_package_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+                </div></div>
+            
         </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 c15b79b..31969c0 100644
--- a/interface/web/admin/templates/software_package_list.htm
+++ b/interface/web/admin/templates/software_package_list.htm
@@ -1,41 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="button iconstxt icoAdd" type="button" onclick="loadContent('admin/software_package_list.php?action=repoupdate');">
-                    <span>{tmpl_var name="repoupdate_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/software_package_list.php?action=repoupdate">{tmpl_var name="repoupdate_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <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_id" scope="col"><tmpl_var name="package_id_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="installed"><tmpl_var name="installed_txt"></th>
+                        <th data-column="package_title"><tmpl_var name="package_title_txt"></th>
+                        <th data-column="package_description"><tmpl_var name="package_description_txt"></th>
+                        <th data-column="package_id"><tmpl_var name="package_id_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
                 </thead>
                 <tbody>
 					<tmpl_loop name="records">
                         <tmpl_if name="has_packages">
-						<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_id">ispapp{tmpl_var name="package_id"}</td>
-							<td class="tbl_col_buttons">
-								<a class="button icons16 icoEdit" href="javascript: loadContent('admin/software_package_edit.php?id={tmpl_var name='package_id'}');"><span>{tmpl_var name='edit_txt'}</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/software_package_del.php?software_update_inst_id={tmpl_var name='software_update_inst_id'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+						<tr>
+                            <td>{tmpl_var name="installed"}</td>
+                            <td>{tmpl_var name="package_title"}</td>
+                            <td>{tmpl_var name="package_description"}</td>
+                            <td>ispapp{tmpl_var name="package_id"}</td>
+							<td class="text-right">
+								<a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="admin/software_package_edit.php?id={tmpl_var name='package_id'}"><span class="icon icon-edit"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_package_del.php?software_update_inst_id={tmpl_var name='software_update_inst_id'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
 						</tmpl_if>
@@ -48,11 +46,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"></td>
+                        <td colspan="5"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-  
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/software_repo_edit.htm b/interface/web/admin/templates/software_repo_edit.htm
index 2efa85e..3aa6c61 100644
--- a/interface/web/admin/templates/software_repo_edit.htm
+++ b/interface/web/admin/templates/software_repo_edit.htm
@@ -1,40 +1,33 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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" autocomplete="off" 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" autocomplete="off" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+
+        
+            <div class="form-group">
+                <label for="repo_name" class="col-sm-3 control-label">{tmpl_var name='repo_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="repo_name" id="repo_name" value="{tmpl_var name='repo_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="repo_url" class="col-sm-3 control-label">{tmpl_var name='repo_url_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="repo_url" id="repo_url" value="{tmpl_var name='repo_url'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="repo_username" class="col-sm-3 control-label">{tmpl_var name='repo_username_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="repo_username" id="repo_username" value="{tmpl_var name='repo_username'}" autocomplete="off" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="repo_password" class="col-sm-3 control-label">{tmpl_var name='repo_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repo_password" id="repo_password" value="{tmpl_var name='repo_password'}" autocomplete="off" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/software_repo_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/software_repo_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/software_repo_list.htm b/interface/web/admin/templates/software_repo_list.htm
index 1a7964b..8b1a48b 100644
--- a/interface/web/admin/templates/software_repo_list.htm
+++ b/interface/web/admin/templates/software_repo_list.htm
@@ -1,45 +1,43 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_software_repo">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/software_repo_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/software_repo_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_repo_name" scope="col"><tmpl_var name="repo_name_txt"></th>
-                        <th class="tbl_col_repo_url" scope="col"><tmpl_var name="repo_url_txt"></th>
-                        <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="repo_name"><tmpl_var name="repo_name_txt"></th>
+                        <th data-column="repo_url"><tmpl_var name="repo_url_txt"></th>
+                        <th class="text-right">&nbsp;</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_repo_name"><input type="text" name="search_repo_name" value="{tmpl_var name='search_repo_name'}" /></td>
-                        <td class="tbl_col_repo_url"><input type="text" name="search_repo_url" value="{tmpl_var name='search_repo_url'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/software_repo_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_repo_name" value="{tmpl_var name='search_repo_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_repo_url" value="{tmpl_var name='search_repo_url'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/software_repo_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('admin/software_repo_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_repo_name"><a href="#" onclick="loadContent('admin/software_repo_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="repo_name"}</a></td>
-                            <td class="tbl_col_repo_url"><a href="#" onclick="loadContent('admin/software_repo_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="repo_url"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('admin/software_repo_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>
+                        <tr>
+                            <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="repo_name"}</a></td>
+                            <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="repo_url"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_repo_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -51,11 +49,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/software_update_list.htm b/interface/web/admin/templates/software_update_list.htm
index 1b49e9e..6776b66 100644
--- a/interface/web/admin/templates/software_update_list.htm
+++ b/interface/web/admin/templates/software_update_list.htm
@@ -1,39 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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');">
+        <legend>Tools</legend>
+            
+                <div class="form-group">
+                    <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_select_txt'}</label>
+                    <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control" onChange="ISPConfig.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>
+                    </select></div>
+                
+        
     </div>
   
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_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>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="installed"><tmpl_var name="installed_txt"></th>
+                        <th data-column="update_title"><tmpl_var name="update_title_txt"></th>
+                        <th data-column="version"><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>
+                            <td>{tmpl_var name="installed"}</td>
+                            <td>{tmpl_var name="update_title"}</td>
+                            <td>{tmpl_var name="version"}</td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
@@ -44,11 +44,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="3"></td>
+                        <td colspan="3"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-  
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/system_config_branding_edit.html b/interface/web/admin/templates/system_config_branding_edit.html
index 2c4c2e1..ac667af 100644
--- a/interface/web/admin/templates/system_config_branding_edit.html
+++ b/interface/web/admin/templates/system_config_branding_edit.html
@@ -14,8 +14,8 @@
         </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/system_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_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="ISPConfig.submitForm('pageForm','admin/system_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'}" data-load-content="admin/server_list.php"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
         </div>
     </div>
     
diff --git a/interface/web/admin/templates/system_config_domains_edit.htm b/interface/web/admin/templates/system_config_domains_edit.htm
index 748729d..c651e42 100644
--- a/interface/web/admin/templates/system_config_domains_edit.htm
+++ b/interface/web/admin/templates/system_config_domains_edit.htm
@@ -1,33 +1,28 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
+<tmpl_if name="list_head_txt">
+<div class='page-header'>
+        <h1><tmpl_var name="list_head_txt"></h1>
+</div>
+</tmpl_if>
+<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
 
-<div class="panel panel_system_config">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
+            <div class="form-group">
                 <div style="float:left;width:100%">
                     <p class="label" style="width:270px">{tmpl_var name='use_domain_module_txt'}</p>
-                    <div class="multiField">
+                    <div class="col-sm-9">
                         {tmpl_var name='use_domain_module'}
                     </div>
                 </div>
                 <div style="float:left;width:500px;margin-top:20px">{tmpl_var name='use_domain_module_hint'}</div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='new_domain_txt'}</p>
-                <div class="multiField">
-                    <textarea name="new_domain_html" id="new_domain_html" style="width: 500px; height: 250px">{tmpl_var name='new_domain_html'}</textarea>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='new_domain_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="new_domain_html" id="new_domain_html" height: 250px">{tmpl_var name='new_domain_html'}</textarea></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/system_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/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/system_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm
index b231495..f0460b3 100644
--- a/interface/web/admin/templates/system_config_mail_edit.htm
+++ b/interface/web/admin/templates/system_config_mail_edit.htm
@@ -1,104 +1,94 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_system_config">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='enable_custom_login_txt'}</p>
-                <div class="multiField">
+
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='enable_custom_login_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='enable_custom_login'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailbox_show_autoresponder_tab_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailbox_show_autoresponder_tab_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailbox_show_autoresponder_tab'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailbox_show_mail_filter_tab_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailbox_show_mail_filter_tab_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailbox_show_mail_filter_tab'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailbox_show_custom_rules_tab_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailbox_show_custom_rules_tab_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailbox_show_custom_rules_tab'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailboxlist_webmail_link_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailboxlist_webmail_link_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailboxlist_webmail_link'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="webmail_url">{tmpl_var name='webmail_url_txt'}</label>
-                <input name="webmail_url" id="webmail_url" value="{tmpl_var name='webmail_url'}" size="30" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='webmail_url_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>
+            <div class="form-group">
+                <label for="webmail_url" class="col-sm-3 control-label">{tmpl_var name='webmail_url_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="webmail_url" id="webmail_url" value="{tmpl_var name='webmail_url'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='webmail_url_note_txt'} </div><a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='mailmailinglist_link_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mailmailinglist_link_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='mailmailinglist_link'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="mailmailinglist_url">{tmpl_var name='mailmailinglist_url_txt'}</label>
-                <input name="mailmailinglist_url" id="mailmailinglist_url" value="{tmpl_var name='mailmailinglist_url'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="admin_mail">{tmpl_var name='admin_mail_txt'}</label>
-                <input name="admin_mail" id="admin_mail" value="{tmpl_var name='admin_mail'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="admin_name">{tmpl_var name='admin_name_txt'}</label>
-                <input name="admin_name" id="admin_name" value="{tmpl_var name='admin_name'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='smtp_enabled_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="mailmailinglist_url" class="col-sm-3 control-label">{tmpl_var name='mailmailinglist_url_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mailmailinglist_url" id="mailmailinglist_url" value="{tmpl_var name='mailmailinglist_url'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="admin_mail" class="col-sm-3 control-label">{tmpl_var name='admin_mail_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="admin_mail" id="admin_mail" value="{tmpl_var name='admin_mail'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="admin_name" class="col-sm-3 control-label">{tmpl_var name='admin_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="admin_name" id="admin_name" value="{tmpl_var name='admin_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='smtp_enabled_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='smtp_enabled'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="smtp_host">{tmpl_var name='smtp_host_txt'}</label>
-                <input name="smtp_host" id="smtp_host" value="{tmpl_var name='smtp_host'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="smtp_port">{tmpl_var name='smtp_port_txt'}</label>
-                <input name="smtp_port" id="smtp_port" value="{tmpl_var name='smtp_port'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="smtp_user">{tmpl_var name='smtp_user_txt'}</label>
-                <input name="smtp_user" id="smtp_user" value="{tmpl_var name='smtp_user'}" size="30" maxlength="255" type="text" autocomplete="off" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="smtp_pass">{tmpl_var name='smtp_pass_txt'}</label>
-                <input name="smtp_pass" id="smtp_pass" value="" size="30" maxlength="255" type="password" autocomplete="off" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="smtp_crypt">{tmpl_var name='smtp_crypt_txt'}</label>
-                <select name="smtp_crypt" id="smtp_crypt" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="smtp_host" class="col-sm-3 control-label">{tmpl_var name='smtp_host_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="smtp_host" id="smtp_host" value="{tmpl_var name='smtp_host'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="smtp_port" class="col-sm-3 control-label">{tmpl_var name='smtp_port_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="smtp_port" id="smtp_port" value="{tmpl_var name='smtp_port'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="smtp_user" class="col-sm-3 control-label">{tmpl_var name='smtp_user_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="smtp_user" id="smtp_user" value="{tmpl_var name='smtp_user'}" autocomplete="off" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="smtp_pass" class="col-sm-3 control-label">{tmpl_var name='smtp_pass_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="smtp_pass" id="smtp_pass" value="" autocomplete="off" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="smtp_crypt" class="col-sm-3 control-label">{tmpl_var name='smtp_crypt_txt'}</label>
+                <div class="col-sm-9"><select name="smtp_crypt" id="smtp_crypt" class="form-control">
                     {tmpl_var name='smtp_crypt'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
-                <select name="default_mailserver" id="default_mailserver" class="selectInput">
+            <div class="form-group">
+                <label for="default_mailserver" class="col-sm-3 control-label">{tmpl_var name='default_mailserver_txt'}</label>
+                <div class="col-sm-9"><select name="default_mailserver" id="default_mailserver" class="form-control">
                     {tmpl_var name='default_mailserver'}
-                </select>
+                </select></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/system_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/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/system_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/admin/templates/system_config_misc_edit.htm b/interface/web/admin/templates/system_config_misc_edit.htm
index 2fd6eef..e8b6889 100644
--- a/interface/web/admin/templates/system_config_misc_edit.htm
+++ b/interface/web/admin/templates/system_config_misc_edit.htm
@@ -1,118 +1,186 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_system_config">
-    
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Misc</legend>
-            <div class="ctrlHolder">
-                <label for="dashboard_atom_url_admin">{tmpl_var name='dashboard_atom_url_admin_txt'}</label>
-                <input name="dashboard_atom_url_admin" id="dashboard_atom_url_admin" value="{tmpl_var name='dashboard_atom_url_admin'}" size="" maxlength="" type="text" class="textInput" />
+			<div class="form-group">
+                <label for="file" class="col-sm-3 control-label">{tmpl_var name='logo_txt'}</label>
+                <div class="col-sm-3 col-text"><input name="file" id="file" size="30" type="file" class="fileUpload" /></div><div class="col-sm-6"><button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" id="start_upload">{tmpl_var name='upload_txt'}</button></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="dashboard_atom_url_reseller">{tmpl_var name='dashboard_atom_url_reseller_txt'}</label>
-                <input name="dashboard_atom_url_reseller" id="dashboard_atom_url_reseller" value="{tmpl_var name='dashboard_atom_url_reseller'}" size="" maxlength="" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="dashboard_atom_url_client">{tmpl_var name='dashboard_atom_url_client_txt'}</label>
-                <input name="dashboard_atom_url_client" id="dashboard_atom_url_client" value="{tmpl_var name='dashboard_atom_url_client'}" size="" maxlength="" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="monitor_key">{tmpl_var name='monitor_key_txt'}</label>
-                <input name="monitor_key" id="monitor_key" value="{tmpl_var name='monitor_key'}" size="" maxlength="" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="admin_dashlets_left">{tmpl_var name='admin_dashlets_left_txt'}</label>
-                <input name="admin_dashlets_left" id="admin_dashlets_left" value="{tmpl_var name='admin_dashlets_left'}" size="" maxlength="" type="text" class="textInput" />&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
-            </div>
-			<div class="ctrlHolder">
-                <label for="admin_dashlets_right">{tmpl_var name='admin_dashlets_right_txt'}</label>
-                <input name="admin_dashlets_right" id="admin_dashlets_right" value="{tmpl_var name='admin_dashlets_right'}" size="" maxlength="" type="text" class="textInput" />&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
-            </div>
-			<div class="ctrlHolder">
-                <label for="reseller_dashlets_left">{tmpl_var name='reseller_dashlets_left_txt'}</label>
-                <input name="reseller_dashlets_left" id="reseller_dashlets_left" value="{tmpl_var name='reseller_dashlets_left'}" size="" maxlength="" type="text" class="textInput" />&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
-            </div>
-			<div class="ctrlHolder">
-                <label for="reseller_dashlets_right">{tmpl_var name='reseller_dashlets_right_txt'}</label>
-                <input name="reseller_dashlets_right" id="reseller_dashlets_right" value="{tmpl_var name='reseller_dashlets_right'}" size="" maxlength="" type="text" class="textInput" />&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
-            </div>
-			<div class="ctrlHolder">
-                <label for="client_dashlets_left">{tmpl_var name='client_dashlets_left_txt'}</label>
-                <input name="client_dashlets_left" id="client_dashlets_left" value="{tmpl_var name='client_dashlets_left'}" size="" maxlength="" type="text" class="textInput" />&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
-            </div>
-			<div class="ctrlHolder">
-                <label for="client_dashlets_right">{tmpl_var name='client_dashlets_right_txt'}</label>
-                <input name="client_dashlets_right" id="client_dashlets_right" value="{tmpl_var name='client_dashlets_right'}" size="" maxlength="" type="text" class="textInput" />&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='tab_change_discard_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label for="dashboard_atom_url_admin" class="col-sm-3 control-label">{tmpl_var name='used_logo_txt'}</label>
+                <div class="col-sm-9" id="used_logo">{tmpl_var name='used_logo'}</div>
+			</div>
+            <div class="form-group">
+                <label for="dashboard_atom_url_admin" class="col-sm-3 control-label">{tmpl_var name='dashboard_atom_url_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dashboard_atom_url_admin" id="dashboard_atom_url_admin" value="{tmpl_var name='dashboard_atom_url_admin'}" size="" maxlength="" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dashboard_atom_url_reseller" class="col-sm-3 control-label">{tmpl_var name='dashboard_atom_url_reseller_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dashboard_atom_url_reseller" id="dashboard_atom_url_reseller" value="{tmpl_var name='dashboard_atom_url_reseller'}" size="" maxlength="" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dashboard_atom_url_client" class="col-sm-3 control-label">{tmpl_var name='dashboard_atom_url_client_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dashboard_atom_url_client" id="dashboard_atom_url_client" value="{tmpl_var name='dashboard_atom_url_client'}" size="" maxlength="" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="monitor_key" class="col-sm-3 control-label">{tmpl_var name='monitor_key_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="monitor_key" id="monitor_key" value="{tmpl_var name='monitor_key'}" size="" maxlength="" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="admin_dashlets_left" class="col-sm-3 control-label">{tmpl_var name='admin_dashlets_left_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="admin_dashlets_left" id="admin_dashlets_left" value="{tmpl_var name='admin_dashlets_left'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
+            </div></div>
+			<div class="form-group">
+                <label for="admin_dashlets_right" class="col-sm-3 control-label">{tmpl_var name='admin_dashlets_right_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="admin_dashlets_right" id="admin_dashlets_right" value="{tmpl_var name='admin_dashlets_right'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
+            </div></div>
+			<div class="form-group">
+                <label for="reseller_dashlets_left" class="col-sm-3 control-label">{tmpl_var name='reseller_dashlets_left_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="reseller_dashlets_left" id="reseller_dashlets_left" value="{tmpl_var name='reseller_dashlets_left'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
+            </div></div>
+			<div class="form-group">
+                <label for="reseller_dashlets_right" class="col-sm-3 control-label">{tmpl_var name='reseller_dashlets_right_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="reseller_dashlets_right" id="reseller_dashlets_right" value="{tmpl_var name='reseller_dashlets_right'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
+            </div></div>
+			<div class="form-group">
+                <label for="client_dashlets_left" class="col-sm-3 control-label">{tmpl_var name='client_dashlets_left_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="client_dashlets_left" id="client_dashlets_left" value="{tmpl_var name='client_dashlets_left'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
+            </div></div>
+			<div class="form-group">
+                <label for="client_dashlets_right" class="col-sm-3 control-label">{tmpl_var name='client_dashlets_right_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="client_dashlets_right" id="client_dashlets_right" value="{tmpl_var name='client_dashlets_right'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='available_dashlets_note_txt'} {tmpl_var name="available_dashlets_txt"}
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='tab_change_discard_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='tab_change_discard'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='tab_change_warning_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='tab_change_warning_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='tab_change_warning'}<br/>{tmpl_var name='tab_change_warning_note_txt'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='use_loadindicator_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='use_loadindicator_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='use_loadindicator'}<br/>{tmpl_var name='f5_to_reload_js_txt'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='use_combobox_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='use_combobox_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='use_combobox'}<br/>{tmpl_var name='f5_to_reload_js_txt'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <label for="customer_no_template">{tmpl_var name='customer_no_template_txt'}</label>
-                <input name="customer_no_template" id="customer_no_template" value="{tmpl_var name='customer_no_template'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="customer_no_start">{tmpl_var name='customer_no_start_txt'}</label>
-                <input name="customer_no_start" id="customer_no_start" value="{tmpl_var name='customer_no_start'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="customer_no_counter">{tmpl_var name='customer_no_counter_txt'}</label>
-                <input name="customer_no_counter" id="customer_no_counter" value="{tmpl_var name='customer_no_counter'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="session_timeout">{tmpl_var name='session_timeout_txt'}</label>
-                <input name="session_timeout" id="session_timeout" value="{tmpl_var name='session_timeout'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='session_allow_endless_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label for="customer_no_template" class="col-sm-3 control-label">{tmpl_var name='customer_no_template_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no_template" id="customer_no_template" value="{tmpl_var name='customer_no_template'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="customer_no_start" class="col-sm-3 control-label">{tmpl_var name='customer_no_start_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no_start" id="customer_no_start" value="{tmpl_var name='customer_no_start'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="customer_no_counter" class="col-sm-3 control-label">{tmpl_var name='customer_no_counter_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no_counter" id="customer_no_counter" value="{tmpl_var name='customer_no_counter'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="session_timeout" class="col-sm-3 control-label">{tmpl_var name='session_timeout_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="session_timeout" id="session_timeout" value="{tmpl_var name='session_timeout'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='session_allow_endless_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='session_allow_endless'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="min_password_length">{tmpl_var name='min_password_length_txt'}</label>
-                <input name="min_password_length" id="min_password_length" value="{tmpl_var name='min_password_length'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="min_password_strength">{tmpl_var name='min_password_strength_txt'}</label>
-                <select name="min_password_strength" id="min_password_strength" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="min_password_length" class="col-sm-3 control-label">{tmpl_var name='min_password_length_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="min_password_length" id="min_password_length" value="{tmpl_var name='min_password_length'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="min_password_strength" class="col-sm-3 control-label">{tmpl_var name='min_password_strength_txt'}</label>
+                <div class="col-sm-9"><select name="min_password_strength" id="min_password_strength" class="form-control">
                     {tmpl_var name='min_password_strength'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <p class="label">{tmpl_var name='maintenance_mode_txt'}</p>
-                <div class="multiField">
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='maintenance_mode_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='maintenance_mode'}
                 </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/system_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_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-    
-</div>
\ No newline at end of file
+			
+			<tmpl_if name="msg">
+                <div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+            </tmpl_if>
+            <tmpl_if name="error">
+                <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
+            </tmpl_if>
+        
+        <input type="hidden" name="id" id="id" value="{tmpl_var name='id'}">
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/system_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
+<script language="JavaScript" type="text/javascript">
+	var defaultLogo = '{tmpl_var name='default_logo'}';
+	$(document).on('click', '#del_custom_logo', function(){
+		delCustomLogo();
+	});
+	
+	function delCustomLogo() {
+        var id = jQuery('input[name="id"]').val();
+        
+        jQuery.getJSON('admin/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {'id': id, 'type': "delcustomlogo"}, function(data) {
+			//console.log(data);
+			$('#used_logo').html(defaultLogo);
+			$('#logo').css({ "background": "url("+data.data+") no-repeat", "width": data.width, "height": data.height });
+        });
+    }
+	
+	// Variable to store your files
+	var files;
+	// Add events
+	$('input[type="file"]').on('change', prepareUpload);
+	$('#start_upload').on('click', uploadFiles);
+	
+	// Grab the files and set them to our variable
+	function prepareUpload(event){
+		files = event.target.files;
+	}
+	
+	// Catch the form submit and upload the files
+	function uploadFiles(event){
+		event.stopPropagation(); // Stop stuff happening
+		event.preventDefault(); // Totally stop stuff happening
+		
+		var id = jQuery('input[name="id"]').val();
+		
+		// Create a formdata object and add the files
+		var data = new FormData();
+		$.each(files, function(key, value){
+			data.append(key, value);
+		});
+		
+		$.ajax({
+			url: 'admin/ajax_get_json.php?id='+id+'&type=uploadfile',
+			type: 'POST',
+			data: data,
+			cache: false,
+			dataType: 'json',
+			processData: false, // Don't process the files
+			contentType: false, // Set content type to false as jQuery will tell the server its a query string request
+			success: function(data, textStatus, jqXHR){
+				if(typeof data.error === 'undefined'){
+					// Success so call function to process the form
+					//console.log(data);
+					$('#used_logo').html('<img src="'+data.data+'" />&nbsp;&nbsp;<a href="#" class="btn btn-default formbutton-danger formbutton-narrow" style="margin:5px" id="del_custom_logo"><span class="icon icon-delete"></span></a>');
+					$('#logo').css({ "background": "url("+data.data+") no-repeat", "width": data.width, "height": data.height });
+				} else {
+					// Handle errors here
+					//console.log(data);
+				}
+			},
+			error: function(jqXHR, textStatus, errorThrown){
+				// Handle errors here
+				//console.log(data);
+			}
+		});
+	}
+	
+</script>
\ No newline at end of file
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index 7811b17..711d433 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -1,88 +1,84 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_system_config">
-	
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="dbname_prefix">{tmpl_var name='dbname_prefix_txt'}</label>
-                <input name="dbname_prefix" id="dbname_prefix" value="{tmpl_var name='dbname_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="dbuser_prefix">{tmpl_var name='dbuser_prefix_txt'}</label>
-                <input name="dbuser_prefix" id="dbuser_prefix" value="{tmpl_var name='dbuser_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ftpuser_prefix">{tmpl_var name='ftpuser_prefix_txt'}</label>
-                <input name="ftpuser_prefix" id="ftpuser_prefix" value="{tmpl_var name='ftpuser_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="shelluser_prefix">{tmpl_var name='shelluser_prefix_txt'}</label>
-                <input name="shelluser_prefix" id="shelluser_prefix" value="{tmpl_var name='shelluser_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="webdavuser_prefix">{tmpl_var name='webdavuser_prefix_txt'}</label>
-                <input name="webdavuser_prefix" id="webdavuser_prefix" value="{tmpl_var name='webdavuser_prefix'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='dblist_phpmyadmin_link_txt'}</p>
-                <div class="multiField">
+
+        
+            <div class="form-group">
+                <label for="dbname_prefix" class="col-sm-3 control-label">{tmpl_var name='dbname_prefix_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dbname_prefix" id="dbname_prefix" value="{tmpl_var name='dbname_prefix'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dbuser_prefix" class="col-sm-3 control-label">{tmpl_var name='dbuser_prefix_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dbuser_prefix" id="dbuser_prefix" value="{tmpl_var name='dbuser_prefix'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ftpuser_prefix" class="col-sm-3 control-label">{tmpl_var name='ftpuser_prefix_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ftpuser_prefix" id="ftpuser_prefix" value="{tmpl_var name='ftpuser_prefix'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="shelluser_prefix" class="col-sm-3 control-label">{tmpl_var name='shelluser_prefix_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="shelluser_prefix" id="shelluser_prefix" value="{tmpl_var name='shelluser_prefix'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="webdavuser_prefix" class="col-sm-3 control-label">{tmpl_var name='webdavuser_prefix_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="webdavuser_prefix" id="webdavuser_prefix" value="{tmpl_var name='webdavuser_prefix'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='dblist_phpmyadmin_link_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='dblist_phpmyadmin_link'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="phpmyadmin_url">{tmpl_var name='phpmyadmin_url_txt'}</label>
-                <input name="phpmyadmin_url" id="phpmyadmin_url" value="{tmpl_var name='phpmyadmin_url'}" size="30" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='phpmyadmin_url_note_txt'} <a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>, <a href="javascript:void(0);" class="addPlaceholder">[DATABASENAME]</a>
+            <div class="form-group">
+                <label for="phpmyadmin_url" class="col-sm-3 control-label">{tmpl_var name='phpmyadmin_url_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="phpmyadmin_url" id="phpmyadmin_url" value="{tmpl_var name='phpmyadmin_url'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='phpmyadmin_url_note_txt'} </div><a href="javascript:void(0);" class="addPlaceholder">[SERVERNAME]</a>, <a href="javascript:void(0);" class="addPlaceholder">[DATABASENAME]</a>
             </div>
-            <div class="ctrlHolder">
-                <label for="webftp_url">{tmpl_var name='webftp_url_txt'}</label>
-                <input name="webftp_url" id="webftp_url" value="{tmpl_var name='webftp_url'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='vhost_subdomains_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="webftp_url" class="col-sm-3 control-label">{tmpl_var name='webftp_url_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="webftp_url" id="webftp_url" value="{tmpl_var name='webftp_url'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='vhost_subdomains_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='vhost_subdomains'}&nbsp;{tmpl_var name='vhost_subdomains_note_txt'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='vhost_aliasdomains_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='vhost_aliasdomains_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='vhost_aliasdomains'}&nbsp;{tmpl_var name='vhost_aliasdomains_note_txt'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='client_username_web_check_disabled_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='client_username_web_check_disabled_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='client_username_web_check_disabled'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='reseller_can_use_options_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='backups_include_into_web_quota_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='backups_include_into_web_quota'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='reseller_can_use_options_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='reseller_can_use_options'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
-                <select name="default_webserver" id="default_webserver" class="selectInput">
+            <div class="form-group">
+                <label for="default_webserver" class="col-sm-3 control-label">{tmpl_var name='default_webserver_txt'}</label>
+                <div class="col-sm-9"><select name="default_webserver" id="default_webserver" class="form-control">
                     {tmpl_var name='default_webserver'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
-                <select name="default_dbserver" id="default_dbserver" class="selectInput">
+            <div class="form-group">
+                <label for="default_dbserver" class="col-sm-3 control-label">{tmpl_var name='default_dbserver_txt'}</label>
+                <div class="col-sm-9"><select name="default_dbserver" id="default_dbserver" class="form-control">
                     {tmpl_var name='default_dbserver'}
-                </select>
+                </select></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/system_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/users_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/system_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/admin/templates/tpl_default_basic.htm b/interface/web/admin/templates/tpl_default_basic.htm
index a525331..29772bc 100644
--- a/interface/web/admin/templates/tpl_default_basic.htm
+++ b/interface/web/admin/templates/tpl_default_basic.htm
@@ -1,23 +1,20 @@
-<h2><tmpl_var name="tpl_default_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="tpl_default_head_txt"></h1>
+</div>
 <p><tmpl_var name="tpl_default_desc_txt"></p>
 
-<div class="panel panel_tools_interface">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="logo_url">{tmpl_var name='logo_url_txt'}Logo URL</label>
-                <input name="logo_url" id="logo_url" value="{tmpl_var name='logo_url'}" size="" maxlength="" type="text" class="textInput" /> 152x46px
-            </div>
-        </fieldset>
+        
+            <div class="form-group">
+                <label for="logo_url" class="col-sm-3 control-label">{tmpl_var name='logo_url_txt'}Logo URL</label>
+                <div class="col-sm-6"><input type="text" name="logo_url" id="logo_url" value="{tmpl_var name='logo_url'}" size="" maxlength="" class="form-control" /></div><div class="col-sm-3 input-sm"> 152x46px
+            </div></div>
+        
         
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="username" value="global">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','admin/tpl_default.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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/tpl_default.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/users_groups_edit.htm b/interface/web/admin/templates/users_groups_edit.htm
index 3d3644d..5f09bfa 100644
--- a/interface/web/admin/templates/users_groups_edit.htm
+++ b/interface/web/admin/templates/users_groups_edit.htm
@@ -1,30 +1,27 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+
+        
+            <div class="form-group">
+                <label for="default_group" class="col-sm-3 control-label">{tmpl_var name='default_group_txt'}</label>
+                <div class="col-sm-9"><select name="default_group" id="default_group" class="form-control">
                     {tmpl_var name='default_group'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='groups_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='groups_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/users_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/admin/templates/users_list.htm b/interface/web/admin/templates/users_list.htm
index cac25f5..b787252 100644
--- a/interface/web/admin/templates/users_list.htm
+++ b/interface/web/admin/templates/users_list.htm
@@ -1,51 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_users">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('admin/users_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="admin/users_edit.php">{tmpl_var name="add_new_record_txt"}</button>
                 <p><tmpl_var name="warning_txt"></p>
-            </div>
-        </fieldset>
-    </div>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_groups" scope="col"><tmpl_var name="groups_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="small-col" data-column="client_id"><tmpl_var name="client_id_txt"></th>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th data-column="groups"><tmpl_var name="groups_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_client_id"><input type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
-                        <td class="tbl_col_groups"><select name="search_groups">{tmpl_var name='search_groups'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','admin/users_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td><select class="form-control" name="search_groups">{tmpl_var name='search_groups'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="admin/users_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_client_id"><a href="#" onclick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_username"><div class="icons16 group-{tmpl_var name="typ"}" title="{tmpl_var name="typ"}"><span>{tmpl_var name="typ"}</span></div> <div class="group-icon"><a href="#" onclick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></div></td>
-                            <td class="tbl_col_groups">{tmpl_var name="groups"}</td>
-                            <td class="tbl_col_buttons">
+                        <tr>
+                            <td><a href="#" data-load-content="admin/users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
+                            <td><a href="#" data-load-content="admin/users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><div class="icons16 group-{tmpl_var name="typ"}" title="{tmpl_var name="typ"}"><span>{tmpl_var name="typ"}</span></div> <div class="group-icon"><a href="#" data-load-content="admin/users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></div></td>
+                            <td>{tmpl_var name="groups"}</td>
+                            <td class="text-right">
                                 <tmpl_if name="username" op="!=" value="admin">
-                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='client_id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
-                                    <a class="button icons16 icoDelete" href="javascript: del_record('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='client_id'}"><span class="icon icon-loginas"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                             </td>
                         </tr>
@@ -58,11 +56,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/admin/templates/users_user_edit.htm b/interface/web/admin/templates/users_user_edit.htm
index b973a34..e0d7c83 100644
--- a/interface/web/admin/templates/users_user_edit.htm
+++ b/interface/web/admin/templates/users_user_edit.htm
@@ -1,73 +1,74 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='passwort_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="passwort" id="passwort" value="{tmpl_var name='passwort'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');"/></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('passwort','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('passwort','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='modules_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='modules_txt'}</label>
+                <div class="col-sm-9">
                     {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">
+            <div class="form-group">
+                <label for="startmodule" class="col-sm-3 control-label">{tmpl_var name='startmodule_txt'}</label>
+                <div class="col-sm-9"><select name="startmodule" id="startmodule" class="form-control">
                     {tmpl_var name='startmodule'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='app_theme_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='app_theme'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='typ_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='typ_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='typ'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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 flags">
+            <div class="form-group">
+                <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
+                <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
                     {tmpl_var name='language'}
-                </select>
+                </select></div>
             </div>
-        </fieldset>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='lost_password_function_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='lost_password_function'}
+                </div>
+            </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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/users_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/admin/tpl_default.php b/interface/web/admin/tpl_default.php
index 57395cf..c7b7911 100644
--- a/interface/web/admin/tpl_default.php
+++ b/interface/web/admin/tpl_default.php
@@ -51,21 +51,6 @@
 
 class page_action extends tform_actions {
 
-	// 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'])) && isset($this->dataRecord["server_id"])) {
-	//   $rec = $app->db->queryOneRecord("SELECT server_id from server_php WHERE server_php_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);
-	//  }
-	// }
 }
 
 $page = new page_action;
diff --git a/interface/web/admin/users_edit.php b/interface/web/admin/users_edit.php
index 0a14ca5..e391964 100644
--- a/interface/web/admin/users_edit.php
+++ b/interface/web/admin/users_edit.php
@@ -96,23 +96,23 @@
 	function onAfterUpdate() {
 		global $app, $conf;
 
-		$client = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = ".$this->id);
+		$client = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = ?", $this->id);
 		$client_id = $app->functions->intval($client['client_id']);
-		$username = $app->db->quote($this->dataRecord["username"]);
-		$old_username = $app->db->quote($this->oldDataRecord['username']);
+		$username = $this->dataRecord["username"];
+		$old_username = $this->oldDataRecord['username'];
 
 		// username changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) {
-			$sql = "UPDATE client SET username = '$username' WHERE client_id = $client_id AND username = '$old_username'";
-			$app->db->query($sql);
-			$tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = $client_id");
-			$app->db->datalogUpdate("sys_group", "name = '$username'", 'groupid', $tmp['groupid']);
+			$sql = "UPDATE client SET username = ? WHERE client_id = ? AND username = ?";
+			$app->db->query($sql, $username, $client_id, $old_username);
+			$tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = ?", $client_id);
+			$app->db->datalogUpdate("sys_group", array("name" => $username), 'groupid', $tmp['groupid']);
 			unset($tmp);
 		}
 
 		// password changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["passwort"]) && $this->dataRecord["passwort"] != '') {
-			$password = $app->db->quote($this->dataRecord["passwort"]);
+			$password = $this->dataRecord["passwort"];
 			$salt="$1$";
 			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
 			for ($n=0;$n<8;$n++) {
@@ -120,28 +120,17 @@
 			}
 			$salt.="$";
 			$password = crypt(stripslashes($password), $salt);
-			$sql = "UPDATE client SET password = '$password' WHERE client_id = $client_id AND username = '$username'";
-			$app->db->query($sql);
+			$sql = "UPDATE client SET password = ? WHERE client_id = ? AND username = ?";
+			$app->db->query($sql, $password, $client_id, $username);
 		}
 
 		// language changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['language']) && $this->dataRecord['language'] != '' && $this->oldDataRecord['language'] != $this->dataRecord['language']) {
-			$language = $app->db->quote($this->dataRecord["language"]);
-			$sql = "UPDATE client SET language = '$language' WHERE client_id = $client_id AND username = '$username'";
-			$app->db->query($sql);
+			$language = $this->dataRecord["language"];
+			$sql = "UPDATE client SET language = ? WHERE client_id = ? AND username = ?";
+			$app->db->query($sql, $language, $client_id, $username);
 		}
 
-		// reseller status changed
-		/*
-		if(isset($this->dataRecord["limit_client"]) && $this->dataRecord["limit_client"] != $this->oldDataRecord["limit_client"]) {
-			$modules = $conf['interface_modules_enabled'];
-			if($this->dataRecord["limit_client"] > 0) $modules .= ',client';
-			$modules = $app->db->quote($modules);
-			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET modules = '$modules' WHERE client_id = $client_id";
-			$app->db->query($sql);
-		}
-		*/
 		parent::onAfterUpdate();
 	}
 
diff --git a/interface/web/capp.php b/interface/web/capp.php
index 2c14318..3939269 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -43,6 +43,7 @@
 }
 
 if(!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.');
+if($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}$/i", $redirect)) die('redirect contains unallowed chars.');
 
 //* Check if user may use the module.
 $user_modules = explode(",", $_SESSION["s"]["user"]["modules"]);
diff --git a/interface/web/client/client_del.php b/interface/web/client/client_del.php
index a8cd7cc..3e0d6bc 100644
--- a/interface/web/client/client_del.php
+++ b/interface/web/client/client_del.php
@@ -74,11 +74,7 @@
 
 			$this->dataRecord = $app->tform->getDataRecord($this->id);
 			$client_id = $app->functions->intval($this->dataRecord['client_id']);
-
-
-			//$parent_client_id = $app->functions->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");
+			$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
 
 			// Get all records (sub-clients, mail, web, etc....)  of this client.
 			$tables = 'cron,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_database_user,web_domain';
@@ -89,7 +85,7 @@
 			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);
+						$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE sys_groupid = ?", $table, $client_group_id);
 						$number = count($records);
 						if($number > 0) $table_list[] = array('table' => $table."(".$number.")");
 					}
@@ -121,15 +117,15 @@
 		if($client_id > 0) {
 			// remove the group of the client from the resellers group
 			$parent_client_id = $app->functions->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");
+			$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");
+			$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");
+			$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_database_user,web_domain,web_folder,web_folder_user,domain';
@@ -138,7 +134,7 @@
 			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);
+						$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE sys_groupid = ?", $table, $client_group_id);
 						//* find the primary ID of the table
 						$table_info = $app->db->tableInfo($table);
 						$index_field = '';
@@ -152,11 +148,11 @@
 									$app->db->datalogDelete($table, $index_field, $rec[$index_field]);
 									//* Delete traffic records that dont have a sys_groupid column
 									if($table == 'web_domain') {
-										$app->db->query("DELETE FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."'");
+										$app->db->query("DELETE FROM web_traffic WHERE hostname = ?", $rec['domain']);
 									}
 									//* Delete mail_traffic records that dont have a sys_groupid
 									if($table == 'mail_user') {
-										$app->db->query("DELETE FROM mail_traffic WHERE mailuser_id = '".$app->db->quote($rec['mailuser_id'])."'");
+										$app->db->query("DELETE FROM mail_traffic WHERE mailuser_id = ?", $rec['mailuser_id']);
 									}
 								}
 							}
diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php
index 5c47fe5..bbeb822 100644
--- a/interface/web/client/client_edit.php
+++ b/interface/web/client/client_edit.php
@@ -59,11 +59,11 @@
 
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another website.
 			if($client["limit_client"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_client"]) {
 					$app->error($app->tform->wordbook["limit_client_txt"]);
 				}
@@ -82,11 +82,11 @@
 
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another website.
 			if($client["limit_client"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_client"]) {
 					$app->error($app->tform->wordbook["limit_client_txt"]);
 				}
@@ -103,7 +103,7 @@
 		}
 
 		if($this->id != 0) {
-			$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ' . $this->id);
+			$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ?', $this->id);
 			if(!is_array($this->oldTemplatesAssigned) || count($this->oldTemplatesAssigned) < 1) {
 				// check previous type of storing templates
 				$tpls = explode('/', $this->oldDataRecord['template_additional']);
@@ -140,7 +140,7 @@
 		$app->tpl->setVar('tpl_add_select', $option);
 
 		// check for new-style records
-		$result = $app->db->queryAllRecords('SELECT assigned_template_id, client_template_id FROM client_template_assigned WHERE client_id = ' . $this->id);
+		$result = $app->db->queryAllRecords('SELECT assigned_template_id, client_template_id FROM client_template_assigned WHERE client_id = ?', $this->id);
 		if($result && count($result) > 0) {
 			// new style
 			$items = array();
@@ -166,8 +166,8 @@
 			unset($tmprec);
 		} else {
 			// old style
-			$sql = "SELECT template_additional FROM client WHERE client_id = " . $this->id;
-			$result = $app->db->queryOneRecord($sql);
+			$sql = "SELECT template_additional FROM client WHERE client_id = ?";
+			$result = $app->db->queryOneRecord($sql, $this->id);
 			$tplAdd = explode("/", $result['template_additional']);
 			$text = '';
 			foreach($tplAdd as $item){
@@ -196,31 +196,18 @@
 					$customer_no = $app->functions->intval($system_config['misc']['customer_no_start']+$system_config['misc']['customer_no_counter']);
 					$customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$system_config['misc']['customer_no_template']);
 					$app->tpl->setVar('customer_no',$customer_no_string);
-				
-					//* save new counter value
-					/*
-					$system_config['misc']['customer_no_counter']++;
-					$system_config_str = $app->ini_parser->get_ini_string($system_config);
-					$app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($system_config_str)."'", 'sysini_id', 1);
-					*/
 				}
 			} else {
 				//* Logged in user must be a reseller
 				//* get the record of the reseller
 				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ".$client_group_id);
+				$reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ?", $client_group_id);
 				
 				if($reseller['customer_no_template'] != '') {
 					//* Set customer no default
 					$customer_no = $app->functions->intval($reseller['customer_no_start']+$reseller['customer_no_counter']);
 					$customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$reseller['customer_no_template']);
 					$app->tpl->setVar('customer_no',$customer_no_string);
-					
-					//* save new counter value
-					/*
-					$customer_no_counter = $app->functions->intval($reseller['customer_no_counter']+1);
-					$app->db->query("UPDATE client SET customer_no_counter = $customer_no_counter WHERE client_id = ".$app->functions->intval($reseller['client_id']));
-					*/
 				}
 			}
 		}
@@ -254,42 +241,42 @@
 	function onAfterInsert() {
 		global $app, $conf;
 		// Create the group for the client
-		$groupid = $app->db->datalogInsert('sys_group', "(name,description,client_id) VALUES ('".$app->db->quote($this->dataRecord["username"])."','',".$this->id.")", 'groupid');
+		$groupid = $app->db->datalogInsert('sys_group', array("name" => $this->dataRecord["username"], "description" => '', "client_id" => $this->id), 'groupid');
 		$groups = $groupid;
 
-		$username = $app->db->quote($this->dataRecord["username"]);
-		$password = $app->db->quote($this->dataRecord["password"]);
+		$username = $this->dataRecord["username"];
+		$password = $this->dataRecord["password"];
 		$modules = $conf['interface_modules_enabled'];
 		if(isset($this->dataRecord["limit_client"]) && $this->dataRecord["limit_client"] > 0) $modules .= ',client';
 		$startmodule = (stristr($modules, 'dashboard'))?'dashboard':'client';
-		$usertheme = $app->db->quote($this->dataRecord["usertheme"]);
+		$usertheme = $this->dataRecord["usertheme"];
 		$type = 'user';
 		$active = 1;
-		$language = $app->db->quote($this->dataRecord["language"]);
+		$language = $this->dataRecord["language"];
 		$password = $app->auth->crypt_password($password);
 
 		// Create the controlpaneluser for the client
 		//Generate ssh-rsa-keys
 		exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f /tmp/id_rsa -N ""');
-		$app->db->query("UPDATE client SET created_at = ".time().", id_rsa = '".$app->db->quote(@file_get_contents('/tmp/id_rsa'))."', ssh_rsa = '".$app->db->quote(@file_get_contents('/tmp/id_rsa.pub'))."' WHERE client_id = ".$this->id);
+		$app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", @file_get_contents('/tmp/id_rsa'), @file_get_contents('/tmp/id_rsa.pub'), $this->id);
 		exec('rm -f /tmp/id_rsa /tmp/id_rsa.pub');
 
 		// Create the controlpaneluser for the client
 		$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
-		VALUES ('$username','$password','$modules','$startmodule','$usertheme','$type','$active','$language',$groups,$groupid,".$this->id.")";
-		$app->db->query($sql);
+		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
 		//* If the user who inserted the client is a reseller (not admin), we will have to add this new client group
 		//* to his groups, so he can administrate the records of this client.
 		if($_SESSION['s']['user']['typ'] == 'user') {
 			$app->auth->add_group_to_user($_SESSION['s']['user']['userid'], $groupid);
-			$app->db->query("UPDATE client SET parent_client_id = ".$app->functions->intval($_SESSION['s']['user']['client_id'])." WHERE client_id = ".$this->id);
+			$app->db->query("UPDATE client SET parent_client_id = ? WHERE client_id = ?", $_SESSION['s']['user']['client_id'], $this->id);
 		} else {
 			if($this->dataRecord['parent_client_id'] > 0) {
 				//* get userid of the reseller and add it to the group of the client
-				$tmp = $app->db->queryOneRecord("SELECT sys_user.userid FROM sys_user,sys_group WHERE sys_user.default_group = sys_group.groupid AND sys_group.client_id = ".$app->functions->intval($this->dataRecord['parent_client_id']));
+				$tmp = $app->db->queryOneRecord("SELECT sys_user.userid FROM sys_user,sys_group WHERE sys_user.default_group = sys_group.groupid AND sys_group.client_id = ?", $this->dataRecord['parent_client_id']);
 				$app->auth->add_group_to_user($tmp['userid'], $groupid);
-				$app->db->query("UPDATE client SET parent_client_id = ".$app->functions->intval($this->dataRecord['parent_client_id'])." WHERE client_id = ".$this->id);
+				$app->db->query("UPDATE client SET parent_client_id = ? WHERE client_id = ?", $this->dataRecord['parent_client_id'], $this->id);
 				unset($tmp);
 			}
 		}
@@ -319,8 +306,8 @@
 			$default_dnsserver = $app->functions->intval($tmp['server_id']);
 		}
 
-		$sql = "UPDATE client SET mail_servers = $default_mailserver, web_servers = $default_webserver, dns_servers = $default_dnsserver, default_slave_dnsserver = $default_dnsserver, db_servers = $default_dbserver WHERE client_id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE client SET mail_servers = ?, web_servers = ?, dns_servers = ?, default_slave_dnsserver = ?, db_servers = ? WHERE client_id = ?";
+		$app->db->query($sql, $default_mailserver, $default_webserver, $default_dnsserver, $default_dnsserver, $default_dbserver, $this->id);
 
 		if(isset($this->dataRecord['template_master'])) {
 			$app->uses('client_templates');
@@ -338,26 +325,26 @@
 					//* save new counter value
 					$system_config['misc']['customer_no_counter']++;
 					$system_config_str = $app->ini_parser->get_ini_string($system_config);
-					$app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($system_config_str)."'", 'sysini_id', 1);
+					$app->db->datalogUpdate('sys_ini', array("config" => $system_config_str), 'sysini_id', 1);
 				}
 			} else {
 				//* Logged in user must be a reseller
 				//* get the record of the reseller
 				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ".$client_group_id);
+				$reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ?", $client_group_id);
 				
 				if($reseller['customer_no_template'] != '') {
 					//* save new counter value
 					$customer_no_counter = $app->functions->intval($reseller['customer_no_counter']+1);
-					$app->db->query("UPDATE client SET customer_no_counter = $customer_no_counter WHERE client_id = ".$app->functions->intval($reseller['client_id']));
+					$app->db->query("UPDATE client SET customer_no_counter = ? WHERE client_id = ?", $customer_no_counter, $reseller['client_id']);
 				}
 			}
 		}
 		
 		//* Send welcome email
 		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-		$sql = "SELECT * FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ".$client_group_id;
-		$email_template = $app->db->queryOneRecord($sql);
+		$sql = "SELECT * FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ?";
+		$email_template = $app->db->queryOneRecord($sql, $client_group_id);
 		$client = $app->tform->getDataRecord($this->id);
 
 		if(is_array($email_template) && $client['email'] != '') {
@@ -387,7 +374,7 @@
 				$from = $system_config['admin_mail'];
 			} else {
 				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$reseller = $app->db->queryOneRecord("SELECT client.email FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ".$client_group_id);
+				$reseller = $app->db->queryOneRecord("SELECT client.email FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ?", $client_group_id);
 				$from = $reseller["email"];
 			}
 
@@ -408,19 +395,19 @@
 		global $app, $conf;
 		// username changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) {
-			$username = $app->db->quote($this->dataRecord["username"]);
+			$username = $this->dataRecord["username"];
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET username = '$username' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET username = ? WHERE client_id = ?";
+			$app->db->query($sql, $username, $client_id);
 
-			$tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = $client_id");
-			$app->db->datalogUpdate("sys_group", "name = '$username'", 'groupid', $tmp['groupid']);
+			$tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = ?", $client_id);
+			$app->db->datalogUpdate("sys_group", array("name" => $username), 'groupid', $tmp['groupid']);
 			unset($tmp);
 		}
 
 		// password changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["password"]) && $this->dataRecord["password"] != '') {
-			$password = $app->db->quote($this->dataRecord["password"]);
+			$password = $this->dataRecord["password"];
 			$salt="$1$";
 			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
 			for ($n=0;$n<8;$n++) {
@@ -429,8 +416,8 @@
 			$salt.="$";
 			$password = crypt(stripslashes($password), $salt);
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET passwort = '$password' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET passwort = ? WHERE client_id = ?";
+			$app->db->query($sql, $password, $client_id);
 		}
 
 		if(!isset($this->dataRecord['locked'])) $this->dataRecord['locked'] = 'n';
@@ -439,7 +426,7 @@
 
 
 			// get tmp_data of client
-			$client_data = $app->db->queryOneRecord('SELECT `tmp_data` FROM `client` WHERE `client_id` = ' . $this->id);
+			$client_data = $app->db->queryOneRecord('SELECT `tmp_data` FROM `client` WHERE `client_id` = ?', $this->id);
 
 			if($client_data['tmp_data'] == '') $tmp_data = array();
 			else $tmp_data = unserialize($client_data['tmp_data']);
@@ -463,8 +450,8 @@
 				'web_folder_user' => 'web_folder_user_id'
 			);
 
-			$udata = $app->db->queryOneRecord('SELECT `userid` FROM `sys_user` WHERE `client_id` = ' . $this->id);
-			$gdata = $app->db->queryOneRecord('SELECT `groupid` FROM `sys_group` WHERE `client_id` = ' . $this->id);
+			$udata = $app->db->queryOneRecord('SELECT `userid` FROM `sys_user` WHERE `client_id` = ?', $this->id);
+			$gdata = $app->db->queryOneRecord('SELECT `groupid` FROM `sys_group` WHERE `client_id` = ?', $this->id);
 			$sys_groupid = $gdata['groupid'];
 			$sys_userid = $udata['userid'];
 
@@ -486,7 +473,7 @@
 					if(!isset($prev_active[$current])) $prev_active[$current] = array();
 					if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array();
 
-					$entries = $app->db->queryAllRecords('SELECT `' . $keycolumn . '` as `id`, `sys_userid`, `' . $active_col . '` FROM `' . $current . '` WHERE `sys_groupid` = ' . $sys_groupid);
+					$entries = $app->db->queryAllRecords('SELECT ?? as `id`, `sys_userid`, ?? FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $active_col, $current, $sys_groupid);
 					foreach($entries as $item) {
 
 						if($item[$active_col] != 'y' && $reverse == false) $prev_active[$current][$item['id']][$active_col] = 'n';
@@ -500,7 +487,7 @@
 
 				$tmp_data['prev_active'] = $prev_active;
 				$tmp_data['prev_sys_userid'] = $prev_sysuser;
-				$app->db->query("UPDATE `client` SET `tmp_data` = '" . $app->db->quote(serialize($tmp_data)) . "' WHERE `client_id` = " . $this->id);
+				$app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id);
 				unset($prev_active);
 				unset($prev_sysuser);
 			} elseif($this->dataRecord['locked'] == 'n') {
@@ -515,7 +502,7 @@
 						$reverse = true;
 					}
 					
-					$entries = $app->db->queryAllRecords('SELECT `' . $keycolumn . '` as `id` FROM `' . $current . '` WHERE `sys_groupid` = ' . $sys_groupid);
+					$entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid);
 					foreach($entries as $item) {
 						$set_active = ($reverse == true ? 'n' : 'y');
 						$set_inactive = ($reverse == true ? 'y' : 'n');
@@ -533,7 +520,7 @@
 					}
 				}
 				if(array_key_exists('prev_active', $tmp_data)) unset($tmp_data['prev_active']);
-				$app->db->query("UPDATE `client` SET `tmp_data` = '" . $app->db->quote(serialize($tmp_data)) . "' WHERE `client_id` = " . $this->id);
+				$app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id);
 			}
 			unset($tmp_data);
 			unset($entries);
@@ -543,43 +530,42 @@
 		if(!isset($this->dataRecord['canceled'])) $this->dataRecord['canceled'] = 'n';
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["canceled"] != $this->oldDataRecord['canceled']) {
 			if($this->dataRecord['canceled'] == 'y') {
-				$sql = "UPDATE sys_user SET active = '0' WHERE client_id = " . $this->id;
-				$app->db->query($sql);
+				$sql = "UPDATE sys_user SET active = '0' WHERE client_id = ?";
+				$app->db->query($sql, $this->id);
 			} elseif($this->dataRecord['canceled'] == 'n') {
-				$sql = "UPDATE sys_user SET active = '1' WHERE client_id = " . $this->id;
-				$app->db->query($sql);
+				$sql = "UPDATE sys_user SET active = '1' WHERE client_id = ?";
+				$app->db->query($sql, $this->id);
 			}
 		}
 
 		// language changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['language']) && $this->dataRecord['language'] != '' && $this->oldDataRecord['language'] != $this->dataRecord['language']) {
-			$language = $app->db->quote($this->dataRecord["language"]);
+			$language = $this->dataRecord["language"];
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET language = '$language' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET language = ? WHERE client_id = ?";
+			$app->db->query($sql, $language, $client_id);
 		}
 
 		//* reseller status changed
 		if(isset($this->dataRecord["limit_client"]) && $this->dataRecord["limit_client"] != $this->oldDataRecord["limit_client"]) {
 			$modules = $conf['interface_modules_enabled'];
 			if($this->dataRecord["limit_client"] > 0) $modules .= ',client';
-			$modules = $app->db->quote($modules);
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET modules = '$modules' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET modules = ? WHERE client_id = ?";
+			$app->db->query($sql, $modules, $client_id);
 		}
 		
 		//* Client has been moved to another reseller
 		if($_SESSION['s']['user']['typ'] == 'admin' && isset($this->dataRecord['parent_client_id']) && $this->dataRecord['parent_client_id'] != $this->oldDataRecord['parent_client_id']) {
 			//* Get groupid of the client
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".intval($this->id));
+			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $this->id);
 			$groupid = $tmp['groupid'];
 			unset($tmp);
 			
 			//* Remove sys_user of old reseller from client group
 			if($this->oldDataRecord['parent_client_id'] > 0) {
 				//* get userid of the old reseller remove it from the group of the client
-				$tmp = $app->db->queryOneRecord("SELECT sys_user.userid FROM sys_user,sys_group WHERE sys_user.default_group = sys_group.groupid AND sys_group.client_id = ".$app->functions->intval($this->oldDataRecord['parent_client_id']));
+				$tmp = $app->db->queryOneRecord("SELECT sys_user.userid FROM sys_user,sys_group WHERE sys_user.default_group = sys_group.groupid AND sys_group.client_id = ?", $this->oldDataRecord['parent_client_id']);
 				$app->auth->remove_group_from_user($tmp['userid'], $groupid);
 				unset($tmp);
 			}
@@ -587,13 +573,13 @@
 			//* Add sys_user of new reseller to client group
 			if($this->dataRecord['parent_client_id'] > 0) {
 				//* get userid of the reseller and add it to the group of the client
-				$tmp = $app->db->queryOneRecord("SELECT sys_user.userid, sys_user.default_group FROM sys_user,sys_group WHERE sys_user.default_group = sys_group.groupid AND sys_group.client_id = ".$app->functions->intval($this->dataRecord['parent_client_id']));
+				$tmp = $app->db->queryOneRecord("SELECT sys_user.userid, sys_user.default_group FROM sys_user,sys_group WHERE sys_user.default_group = sys_group.groupid AND sys_group.client_id = ?", $this->dataRecord['parent_client_id']);
 				$app->auth->add_group_to_user($tmp['userid'], $groupid);
-				$app->db->query("UPDATE client SET sys_userid = ".$app->functions->intval($tmp['userid']).", sys_groupid = ".$app->functions->intval($tmp['default_group']).", parent_client_id = ".$app->functions->intval($this->dataRecord['parent_client_id'])." WHERE client_id = ".$this->id);
+				$app->db->query("UPDATE client SET sys_userid = ?, sys_groupid = ?, parent_client_id = ? WHERE client_id = ?", $tmp['userid'], $tmp['default_group'], $this->dataRecord['parent_client_id'], $this->id);
 				unset($tmp);
 			} else {
 				//* Client is not assigned to a reseller anymore, so we assign it to the admin
-				$app->db->query("UPDATE client SET sys_userid = 1, sys_groupid = 1, parent_client_id = 0 WHERE client_id = ".$this->id);
+				$app->db->query("UPDATE client SET sys_userid = 1, sys_groupid = 1, parent_client_id = 0 WHERE client_id = ?", $this->id);
 			}
 		}
 
diff --git a/interface/web/client/client_list.php b/interface/web/client/client_list.php
index 7d09217..43cc028 100644
--- a/interface/web/client/client_list.php
+++ b/interface/web/client/client_list.php
@@ -19,7 +19,7 @@
 
 $app->listform_actions->SQLOrderBy = 'ORDER BY client.company_name, client.contact_name, client.client_id';
 $app->listform_actions->SQLExtWhere = "client.limit_client = 0";
-$app->listform_actions->SQLExtSelect = ', client.country as countryiso';
+$app->listform_actions->SQLExtSelect = ', LOWER(client.country) as countryiso';
 $app->listform_actions->onLoad();
 
 
diff --git a/interface/web/client/client_message.php b/interface/web/client/client_message.php
index 5707e88..0e3bd2e 100644
--- a/interface/web/client/client_message.php
+++ b/interface/web/client/client_message.php
@@ -60,7 +60,7 @@
 	//* Send message
 	if($error == '') {
 		if($app->functions->intval($_POST['recipient']) > 0){
-			$circle = $app->db->queryOneRecord("SELECT client_ids FROM client_circle WHERE active = 'y' AND circle_id = ".$app->functions->intval($_POST['recipient'])." AND ".$app->tform->getAuthSQL('r'));
+			$circle = $app->db->queryOneRecord("SELECT client_ids FROM client_circle WHERE active = 'y' AND circle_id = ? AND ".$app->tform->getAuthSQL('r'), $_POST['recipient']);
 			if(isset($circle['client_ids']) && $circle['client_ids'] != ''){
 				$tmp_client_ids = explode(',', $circle['client_ids']);
 				$where = array();
@@ -120,8 +120,8 @@
 	if($_SESSION["s"]["user"]["typ"] != 'admin'){
 		$client_id = $app->functions->intval($_SESSION['s']['user']['client_id']);
 		if($client_id > 0){
-			$sql = "SELECT email FROM client WHERE client_id = ".$client_id;
-			$client = $app->db->queryOneRecord($sql);
+			$sql = "SELECT email FROM client WHERE client_id = ?";
+			$client = $app->db->queryOneRecord($sql, $client_id);
 			if($client['email'] != '') $app->tpl->setVar('sender', $client['email']);
 		}
 	}
diff --git a/interface/web/client/client_template_del.php b/interface/web/client/client_template_del.php
index b57224f..1288354 100644
--- a/interface/web/client/client_template_del.php
+++ b/interface/web/client/client_template_del.php
@@ -54,13 +54,13 @@
 		global $app;
 
 		// check new style
-		$rec = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client_template_assigned WHERE client_template_id = ".$this->id);
+		$rec = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client_template_assigned WHERE client_template_id = ?", $this->id);
 		if($rec['number'] > 0) {
 			$app->error($app->tform->lng('template_del_aborted_txt'));
 		}
 
 		// check old style
-		$rec = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE template_master = ".$this->id." OR template_additional like '%/".$this->id."/%'");
+		$rec = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE template_master = ? OR template_additional like ?", $this->id, '%/".$this->id."/%');
 		if($rec['number'] > 0) {
 			$app->error($app->tform->lng('template_del_aborted_txt'));
 		}
diff --git a/interface/web/client/client_template_edit.php b/interface/web/client/client_template_edit.php
index 256ff49..a895105 100644
--- a/interface/web/client/client_template_edit.php
+++ b/interface/web/client/client_template_edit.php
@@ -69,7 +69,7 @@
 
 		if(isset($this->dataRecord['template_type'])) {
 			//* Check if the template_type has been changed
-			$rec = $app->db->queryOneRecord("SELECT template_type from client_template WHERE template_id = ".$this->id);
+			$rec = $app->db->queryOneRecord("SELECT template_type from client_template WHERE template_id = ?", $this->id);
 			if($rec['template_type'] != $this->dataRecord['template_type']) {
 				//* Add a error message and switch back to old server
 				$app->tform->errorMessage .= $app->lng('The template type can not be changed.');
@@ -99,11 +99,12 @@
 		 * the template has changed. apply the new data to all clients
 		 */
 		if ($template_type == 'm'){
-			$sql = "SELECT client_id FROM client WHERE template_master = " . $this->id;
+			$sql = "SELECT client_id FROM client WHERE template_master = ?";
+			$clients = $app->db->queryAllRecords($sql, $this->id);
 		} else {
-			$sql = "SELECT client_id FROM client WHERE template_additional LIKE '%/" . $this->id . "/%' OR template_additional LIKE '" . $this->id . "/%' OR template_additional LIKE '%/" . $this->id . "' UNION SELECT client_id FROM client_template_assigned WHERE client_template_id = " . $this->id;
+			$sql = "SELECT client_id FROM client WHERE template_additional LIKE ? OR template_additional LIKE ? OR template_additional LIKE ? UNION SELECT client_id FROM client_template_assigned WHERE client_template_id = ?";
+			$clients = $app->db->queryAllRecords($sql, '%/' . $this->id . '/%', $this->id . '/%', '%/' . $this->id, $this->id);
 		}
-		$clients = $app->db->queryAllRecords($sql);
 		if (is_array($clients)){
 			foreach ($clients as $client){
 				$app->client_templates->apply_client_templates($client['client_id']);
diff --git a/interface/web/client/domain_del.php b/interface/web/client/domain_del.php
index 6bc07e6..701b449 100644
--- a/interface/web/client/domain_del.php
+++ b/interface/web/client/domain_del.php
@@ -62,26 +62,26 @@
 		 */
 		$domain = $this->dataRecord['domain'];
 
-		$sql = "SELECT id FROM dns_soa WHERE origin = '" . $app->db->quote($domain.".") . "'";
-		$res = $app->db->queryOneRecord($sql);
+		$sql = "SELECT id FROM dns_soa WHERE origin = ?";
+		$res = $app->db->queryOneRecord($sql, $domain.".");
 		if (is_array($res)){
 			$app->error($wb['error_domain_in dnsuse']);
 		}
 
-		$sql = "SELECT id FROM dns_slave WHERE origin = '" . $app->db->quote($domain.".") . "'";
-		$res = $app->db->queryOneRecord($sql);
+		$sql = "SELECT id FROM dns_slave WHERE origin = ?";
+		$res = $app->db->queryOneRecord($sql, $domain.".");
 		if (is_array($res)){
 			$app->error($wb['error_domain_in dnsslaveuse']);
 		}
 
-		$sql = "SELECT domain_id FROM mail_domain WHERE domain = '" . $app->db->quote($domain) . "'";
-		$res = $app->db->queryOneRecord($sql);
+		$sql = "SELECT domain_id FROM mail_domain WHERE domain = ?";
+		$res = $app->db->queryOneRecord($sql, $domain);
 		if (is_array($res)){
 			$app->error($wb['error_domain_in mailuse']);
 		}
 
-		$sql = "SELECT domain_id FROM web_domain WHERE (domain = '" . $app->db->quote($domain) . "' AND type IN ('alias', 'vhost', 'vhostalias')) OR (domain LIKE '%." . $app->db->quote($domain) . "' AND type IN ('subdomain', 'vhostsubdomain'))";
-		$res = $app->db->queryOneRecord($sql);
+		$sql = "SELECT domain_id FROM web_domain WHERE (domain = ? AND type IN ('alias', 'vhost', 'vhostalias')) OR (domain LIKE ? AND type IN ('subdomain', 'vhostsubdomain'))";
+		$res = $app->db->queryOneRecord($sql, $domain, '%.' . $domain);
 		if (is_array($res)){
 			$app->error($wb['error_domain_in webuse']);
 		}
diff --git a/interface/web/client/domain_edit.php b/interface/web/client/domain_edit.php
index 889bb4f..9064581 100644
--- a/interface/web/client/domain_edit.php
+++ b/interface/web/client/domain_edit.php
@@ -97,13 +97,13 @@
 		} else {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 	
 			// Fill the client select field
-			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." ORDER BY client.company_name, client.contact_name, sys_group.name";
+			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
 			//die($sql);
-			$records = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
+			$records = $app->db->queryAllRecords($sql, $client['client_id']);
+			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 			//$tmp_data_record = $app->tform->getDataRecord($this->id);
 			if(is_array($records)) {
@@ -197,7 +197,7 @@
 		// 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"])) || ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid']))) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
+			$app->db->query("UPDATE domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $this->id);
 		}
 	}
 
@@ -206,23 +206,23 @@
 
 		if($_SESSION["s"]["user"]["typ"] != 'admin' && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-			$group = $app->db->queryOneRecord("SELECT sys_group.groupid FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." AND sys_group.groupid = ".$this->dataRecord["client_group_id"]." ORDER BY client.company_name, client.contact_name, sys_group.name");
+			$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+			$group = $app->db->queryOneRecord("SELECT sys_group.groupid FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? AND sys_group.groupid = ? ORDER BY client.company_name, client.contact_name, sys_group.name", $client['client_id'], $this->dataRecord["client_group_id"]);
 			$this->dataRecord["client_group_id"] = $group["groupid"];
-                }
+		}
 
 		// make sure that the record belongs to the client 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(isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
+			$app->db->query("UPDATE domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $this->id);
 
 			$data = new tform_actions();
 			$tform = $app->tform;
 			$app->tform = new tform();
 
 			$app->tform->loadFormDef("../dns/form/dns_soa.tform.php");
-			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE origin LIKE '".$this->dataRecord['domain'].".'");
+			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE origin = ?", $this->dataRecord['domain'].".");
 			if ($data->oldDataRecord) {
 				$data->dataRecord = array_merge($data->oldDataRecord, array('client_group_id' => $this->dataRecord["client_group_id"]));
 				$data->id = $data->dataRecord['id'];
@@ -230,7 +230,7 @@
 			}
 
 			$app->tform->loadFormDef("../dns/form/dns_slave.tform.php");
-			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM dns_slave WHERE origin LIKE '".$this->dataRecord['domain'].".'");
+			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM dns_slave WHERE origin = ?", $this->dataRecord['domain'].".");
 			if ($data->oldDataRecord) {
 				$data->dataRecord = array_merge($data->oldDataRecord, array('client_group_id' => $this->dataRecord["client_group_id"]));
 				$data->id = $data->dataRecord['id'];
@@ -238,7 +238,7 @@
 			}
 
 			$app->tform->loadFormDef("../mail/form/mail_domain.tform.php");
-			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = '".$this->dataRecord['domain']."'");
+			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $this->dataRecord['domain']);
 			if ($data->oldDataRecord) {
 				$data->dataRecord = array_merge($data->oldDataRecord, array('client_group_id' => $this->dataRecord["client_group_id"]));
 				$data->id = $data->dataRecord['domain_id'];
@@ -246,7 +246,7 @@
 			}
 
 			$app->tform->loadFormDef("../sites/form/web_vhost_domain.tform.php");
-			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '".$this->dataRecord['domain']."'");
+			$data->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = ?", $this->dataRecord['domain']);
 			if ($data->oldDataRecord) {
 				$data->dataRecord = array_merge($data->oldDataRecord, array('client_group_id' => $this->dataRecord["client_group_id"]));
 				$data->id = $data->dataRecord['domain_id'];
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 3625452..ef8ce33 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -116,7 +116,10 @@
 			'maxlength' => '255',
 			'rows'  => '',
 			'cols'  => '',
-			'searchable' => 1
+			'searchable' => 1,
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+												'type' => 'TRIM'),
+			),
 		),
 		'contact_name' => array (
 			'datatype' => 'VARCHAR',
@@ -131,7 +134,10 @@
 			'maxlength' => '255',
 			'rows'  => '',
 			'cols'  => '',
-			'searchable' => 1
+			'searchable' => 1,
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+												'type' => 'TRIM'),
+			),
 		),
 		'customer_no' => array (
 			'datatype' => 'VARCHAR',
@@ -367,7 +373,12 @@
 			'width'  => '30',
 			'maxlength' => '255',
 			'rows'  => '',
-			'cols'  => ''
+			'cols'  => '',
+			'validators' => array (  0 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_client',
+					'function' => 'check_vat_id',
+					'errmsg'=> 'invalid_vat_id'),
+				),
 		),
 		'company_id' => array (
 			'datatype' => 'VARCHAR',
@@ -768,6 +779,105 @@
 			'rows'  => '',
 			'cols'  => ''
 		),
+        'default_xmppserver' => array (
+            'datatype' => 'INTEGER',
+            'formtype' => 'SELECT',
+            'default' => '1',
+            'datasource' => array (  'type' => 'CUSTOM',
+                'class'=> 'custom_datasource',
+                'function'=> 'client_servers'
+            ),
+            'value'  => '',
+            'name'  => 'default_xmppserver'
+        ),
+        'xmpp_servers' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'MULTIPLE',
+            'separator' => ',',
+            'default' => '1',
+            'datasource' => array (  'type' => 'CUSTOM',
+                'class'=> 'custom_datasource',
+                'function'=> 'client_servers'
+            ),
+            'validators'    => array (
+                0 => array ( 'type' => 'CUSTOM',
+                    'class' => 'validate_client',
+                    'function' => 'check_used_servers',
+                    'errmsg'=> 'xmpp_servers_used'),
+            ),
+            'value'  => '',
+            'name'  => 'xmpp_servers'
+        ),
+        'limit_xmpp_domain' => array(
+            'datatype' => 'INTEGER',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'ISINT',
+                'errmsg'=> 'limit_xmpp_domain_error_notint'),
+            ),
+            'default' => '-1',
+            'value'  => '',
+            'separator' => '',
+            'width'  => '10',
+            'maxlength' => '10',
+            'rows'  => '',
+            'cols'  => ''
+        ),
+        'limit_xmpp_user' => array(
+            'datatype' => 'INTEGER',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'ISINT',
+                'errmsg'=> 'limit_xmpp_user_error_notint'),
+            ),
+            'default' => '-1',
+            'value'  => '',
+            'separator' => '',
+            'width'  => '10',
+            'maxlength' => '10',
+            'rows'  => '',
+            'cols'  => ''
+        ),
+        'limit_xmpp_muc' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_anon' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_vjud' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_proxy' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_status' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_pastebin' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_httparchive' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
 		'default_webserver' => array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index b1fd7d3..21f8596 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -322,6 +322,105 @@
 			'rows'  => '',
 			'cols'  => ''
 		),
+        'default_xmppserver' => array (
+            'datatype' => 'INTEGER',
+            'formtype' => 'SELECT',
+            'default' => '1',
+            'datasource' => array (  'type' => 'CUSTOM',
+                'class'=> 'custom_datasource',
+                'function'=> 'client_servers'
+            ),
+            'value'  => '',
+            'name'  => 'default_xmppserver'
+        ),
+        'xmpp_servers' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'MULTIPLE',
+            'separator' => ',',
+            'default' => '1',
+            'datasource' => array (  'type' => 'CUSTOM',
+                'class'=> 'custom_datasource',
+                'function'=> 'client_servers'
+            ),
+            'validators'    => array (
+                0 => array ( 'type' => 'CUSTOM',
+                    'class' => 'validate_client',
+                    'function' => 'check_used_servers',
+                    'errmsg'=> 'xmpp_servers_used'),
+            ),
+            'value'  => '',
+            'name'  => 'xmpp_servers'
+        ),
+        'limit_xmpp_domain' => array(
+            'datatype' => 'INTEGER',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'ISINT',
+                'errmsg'=> 'limit_xmpp_domain_error_notint'),
+            ),
+            'default' => '-1',
+            'value'  => '',
+            'separator' => '',
+            'width'  => '10',
+            'maxlength' => '10',
+            'rows'  => '',
+            'cols'  => ''
+        ),
+        'limit_xmpp_user' => array(
+            'datatype' => 'INTEGER',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'ISINT',
+                'errmsg'=> 'limit_xmpp_user_error_notint'),
+            ),
+            'default' => '-1',
+            'value'  => '',
+            'separator' => '',
+            'width'  => '10',
+            'maxlength' => '10',
+            'rows'  => '',
+            'cols'  => ''
+        ),
+        'limit_xmpp_muc' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_anon' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_vjud' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_proxy' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_status' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_pastebin' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_httparchive' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
 		'default_webserver' => array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 8efedf7..822e96a 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -116,7 +116,10 @@
 			'maxlength' => '255',
 			'rows'  => '',
 			'cols'  => '',
-			'searchable' => 1
+			'searchable' => 1,
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+												'type' => 'TRIM'),
+			),
 		),
 		'contact_name' => array (
 			'datatype' => 'VARCHAR',
@@ -131,7 +134,10 @@
 			'maxlength' => '255',
 			'rows'  => '',
 			'cols'  => '',
-			'searchable' => 1
+			'searchable' => 1,
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+												'type' => 'TRIM'),
+			),
 		),
 		'customer_no' => array (
 			'datatype' => 'VARCHAR',
@@ -364,7 +370,12 @@
 			'width'  => '30',
 			'maxlength' => '255',
 			'rows'  => '',
-			'cols'  => ''
+			'cols'  => '',
+			'validators' => array (  0 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_client',
+					'function' => 'check_vat_id',
+					'errmsg'=> 'invalid_vat_id'),
+				),
 		),
 		'company_id' => array (
 			'datatype' => 'VARCHAR',
@@ -764,6 +775,105 @@
 			'rows'  => '',
 			'cols'  => ''
 		),
+        'default_xmppserver' => array (
+            'datatype' => 'INTEGER',
+            'formtype' => 'SELECT',
+            'default' => '1',
+            'datasource' => array (  'type' => 'CUSTOM',
+                'class'=> 'custom_datasource',
+                'function'=> 'client_servers'
+            ),
+            'value'  => '',
+            'name'  => 'default_xmppserver'
+        ),
+        'xmpp_servers' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'MULTIPLE',
+            'separator' => ',',
+            'default' => '1',
+            'datasource' => array (  'type' => 'CUSTOM',
+                'class'=> 'custom_datasource',
+                'function'=> 'client_servers'
+            ),
+            'validators'    => array (
+                0 => array ( 'type' => 'CUSTOM',
+                    'class' => 'validate_client',
+                    'function' => 'check_used_servers',
+                    'errmsg'=> 'xmpp_servers_used'),
+            ),
+            'value'  => '',
+            'name'  => 'xmpp_servers'
+        ),
+        'limit_xmpp_domain' => array(
+            'datatype' => 'INTEGER',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'ISINT',
+                'errmsg'=> 'limit_xmpp_domain_error_notint'),
+            ),
+            'default' => '-1',
+            'value'  => '',
+            'separator' => '',
+            'width'  => '10',
+            'maxlength' => '10',
+            'rows'  => '',
+            'cols'  => ''
+        ),
+        'limit_xmpp_user' => array(
+            'datatype' => 'INTEGER',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'ISINT',
+                'errmsg'=> 'limit_xmpp_user_error_notint'),
+            ),
+            'default' => '-1',
+            'value'  => '',
+            'separator' => '',
+            'width'  => '10',
+            'maxlength' => '10',
+            'rows'  => '',
+            'cols'  => ''
+        ),
+        'limit_xmpp_muc' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_anon' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_vjud' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_proxy' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_status' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_pastebin' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'limit_xmpp_httparchive' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'n',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
 		'default_webserver' => array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index dbaa9a5..7ee7226 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -110,7 +110,7 @@
 $wb['limit_backup_txt'] = 'Backupfunktion verfügbar';
 $wb['limit_dns_slave_zone_error_notint'] = 'Das Secondary DNS Zonen Limit muss eine Zahl sein.';
 $wb['customer_no_txt'] = 'Kundennummer';
-$wb['vat_id_txt'] = 'USt-ID';
+$wb['vat_id_txt'] = 'USt.-ID';
 $wb['required_fields_txt'] = '* Benötigte Felder';
 $wb['limit_mailmailinglist_txt'] = 'Max. Anzahl an Mailinglisten';
 $wb['limit_mailmailinglist_error_notint'] = 'Das Mailinglisten Limit muss eine Zahl sein.';
@@ -151,8 +151,30 @@
 $wb['gender_txt'] = 'Anrede';
 $wb['gender_m_txt'] = 'Herr';
 $wb['gender_f_txt'] = 'Frau';
+$wb["web_servers_txt"] = 'Webserver';
+$wb["web_servers_placeholder"] = 'Webserver auswählen';
+$wb['no_web_server_error'] = 'Bitte wählen Sie mind. einen Webserver aus.';
+$wb['web_servers_used'] = 'Der Server, den Sie entfernen möchten, wird als Webserver verwendet. Bitte stellen Sie sicher, daß dieser Server nicht von diesem Kunden benutzt wird, bevor Sie ihn entfernen.';
+$wb["dns_servers_txt"] = 'DNS-Server';
+$wb["dns_servers_placeholder"] = 'DNS-Server wählen';
+$wb['no_dns_server_error'] = 'Bitte wählen Sie mind. einen DNS-Server aus.';
+$wb['dns_servers_used'] = 'Der Server, den Sie entfernen möchten, wird als DNS-Server verwendet. Bitte stellen Sie sicher, daß dieser Server nicht von diesem Kunden benutzt wird, bevor Sie ihn entfernen.';
+$wb["db_servers_txt"] = 'Datenbank-Server';
+$wb["db_servers_placeholder"] = 'Datenbank-Server wählen';
+$wb['no_db_server_error'] = 'Bitte wählen Sie mind. einen Datenbank-Server aus.';
+$wb['db_servers_used'] = 'Der Server, den Sie entfernen möchten, wird als Datenbank-Server verwendet. Bitte stellen Sie sicher, daß dieser Server nicht von diesem Kunden benutzt wird, bevor Sie ihn entfernen.';
+$wb["mail_servers_txt"] = 'Mailserver';
+$wb["mail_servers_placeholder"] = 'Mailserver wählen';
+$wb['no_mail_server_error'] = 'Bitte wählen Sie mind. einen Mailserver aus.';
+$wb['mail_servers_used'] = 'Der Server, den Sie entfernen möchten, wird als Mailserver verwendet. Bitte stellen Sie sicher, daß dieser Server nicht von diesem Kunden benutzt wird, bevor Sie ihn entfernen.';
 $wb['added_by_txt'] = 'Added by';
 $wb['added_date_txt'] = 'Added date';
-$wb['parent_client_id_txt'] = 'Client of reseller';
-$wb['none_txt'] = 'none';
+$wb['parent_client_id_txt'] = 'Kunde von Reseller';
+$wb['none_txt'] = 'keiner';
+$wb['limit_database_quota_txt'] = 'Datenbank-Quota';
+$wb['limit_database_quota_error_notint'] = 'Das Datenbank-quota muß eine Nummer sein.';
+$wb['reseller_txt'] = 'Reseller';
+$wb['btn_save_txt'] = 'Speichern';
+$wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['invalid_vat_id'] = 'Die USt.-ID ist ungültig.';
 ?>
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index 1595e56..541b5d2 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -106,7 +106,7 @@
 $wb['limit_dns_slave_zone_error_notint'] = 'Das Secondary DNS Zonen Limit muss eine Zahl sein.';
 $wb['limit_dns_record_error_notint'] = 'Das DNS Eintrag Limit muss eine Zahl sein.';
 $wb['customer_no_txt'] = 'Kundennummer';
-$wb['vat_id_txt'] = 'USt-ID';
+$wb['vat_id_txt'] = 'USt.-ID';
 $wb['required_fields_txt'] = '* Benötigte Felder';
 $wb['limit_webdav_user_txt'] = 'Max. Anzahl an WebDAV Benutzern';
 $wb['limit_webdav_user_error_notint'] = 'Das WebDAV Benutzer Limit muss eine Zahl sein.';
@@ -160,4 +160,5 @@
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
 $wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['invalid_vat_id'] = 'Die USt.-ID ist ungültig.';
 ?>
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index d14df62..663d276 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -132,6 +132,7 @@
 $wb["bank_account_swift_txt"] = 'BIC / Swift';
 $wb["web_limits_txt"] = 'Web Limits';
 $wb["email_limits_txt"] = 'Email Limits';
+$wb["xmpp_limits_txt"] = 'XMPP Limits';
 $wb["database_limits_txt"] = 'Database Limits';
 $wb["cron_job_limits_txt"] = 'Cron Job Limits';
 $wb["dns_limits_txt"] = 'DNS Limits';
@@ -155,21 +156,39 @@
 $wb['gender_m_txt'] = 'Mr.';
 $wb['gender_f_txt'] = 'Ms.';
 $wb["web_servers_txt"] = 'Webservers';
-$wb["web_servers_placeholder"] = 'Select Webservers';
+$wb["web_servers_placeholder"] = 'Select webservers';
 $wb['no_web_server_error'] = 'At least one webserver must be selected.';
-$wb['web_servers_used'] = 'The server you are trying to remove from this client is used as a webserver. Be sure that this server is not used by this client before to remove it.';
-$wb["dns_servers_txt"] = 'DNS Server';
-$wb["dns_servers_placeholder"] = 'Select DNS Servers';
+$wb['web_servers_used'] = 'The server you are trying to remove from this client is used as a webserver. Be sure that this server is not used by this client before you remove it.';
+$wb["dns_servers_txt"] = 'DNS servers';
+$wb["dns_servers_placeholder"] = 'Select DNS servers';
 $wb['no_dns_server_error'] = 'At least one DNS server must be selected.';
-$wb['dns_servers_used'] = 'The server you are trying to remove from this client is used as a DNS server. Be sure that this server is not used by this client before to remove it.';
-$wb["db_servers_txt"] = 'Database Server';
-$wb["db_servers_placeholder"] = 'Select Database Servers';
+$wb['dns_servers_used'] = 'The server you are trying to remove from this client is used as a DNS server. Be sure that this server is not used by this client before you remove it.';
+$wb["db_servers_txt"] = 'Database servers';
+$wb["db_servers_placeholder"] = 'Select database servers';
 $wb['no_db_server_error'] = 'At least one Database server must be selected.';
-$wb['db_servers_used'] = 'The server you are trying to remove from this client is used as a Database server. Be sure that this server is not used by this client before to remove it.';
+$wb['db_servers_used'] = 'The server you are trying to remove from this client is used as a Database server. Be sure that this server is not used by this client before you remove it.';
 $wb["mail_servers_txt"] = 'Mailservers';
-$wb["mail_servers_placeholder"] = 'Select Mailservers';
-$wb['no_mail_server_error'] = 'At least one Mailserver must be selected.';
-$wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before to remove it.';
+$wb["mail_servers_placeholder"] = 'Select mailservers';
+$wb['no_mail_server_error'] = 'At least one mailserver must be selected.';
+$wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before you remove it.';
+
+$wb["xmpp_servers_txt"] = 'XMPP Servers';
+$wb["xmpp_servers_placeholder"] = 'Select XMPP Servers';
+$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
+$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
+$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
+$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
+$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
+$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
+$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
+$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
+$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
+$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
+$wb['limit_xmpp_status_txt'] = 'Status host available';
+
+
 $wb['added_by_txt'] = 'Added by';
 $wb['added_date_txt'] = 'Added date';
 $wb['parent_client_id_txt'] = 'Client of reseller';
@@ -177,4 +196,7 @@
 $wb['limit_database_quota_txt'] = 'Database quota';
 $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
 $wb['reseller_txt'] = 'Reseller';
+$wb['btn_save_txt'] = "Save";
+$wb['btn_cancel_txt'] = "Cancel";
+$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
 ?>
diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng
index 9aacf40..a65c1a5 100644
--- a/interface/web/client/lib/lang/en_client_template.lng
+++ b/interface/web/client/lib/lang/en_client_template.lng
@@ -98,4 +98,21 @@
 $wb['client_limits_txt'] = 'Client Limits';
 $wb['limit_database_quota_txt'] = 'Database quota';
 $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
+
+$wb["xmpp_limits_txt"] = 'XMPP Limits';
+$wb["xmpp_servers_txt"] = 'XMPP Servers';
+$wb["xmpp_servers_placeholder"] = 'Select XMPP Servers';
+$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
+$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
+$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
+$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
+$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
+$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
+$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
+$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
+$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
+$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
+$wb['limit_xmpp_status_txt'] = 'Status host available';
 ?>
diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng
index b94c30e..eb47bfd 100644
--- a/interface/web/client/lib/lang/en_reseller.lng
+++ b/interface/web/client/lib/lang/en_reseller.lng
@@ -172,10 +172,29 @@
 $wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
+
+$wb["xmpp_limits_txt"] = 'XMPP Limits';
+$wb["xmpp_servers_txt"] = 'XMPP Servers';
+$wb["xmpp_servers_placeholder"] = 'Select XMPP Servers';
+$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
+$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
+$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
+$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
+$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
+$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
+$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
+$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
+$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
+$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
+$wb['limit_xmpp_status_txt'] = 'Status host available';
+
 $wb['added_by_txt'] = 'Added by';
 $wb['added_date_txt'] = 'Added date';
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
 $wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than "custom" is selected.';
+$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
 ?>
diff --git a/interface/web/client/lib/module.conf.php b/interface/web/client/lib/module.conf.php
index e4bddd7..7d6f1b3 100644
--- a/interface/web/client/lib/module.conf.php
+++ b/interface/web/client/lib/module.conf.php
@@ -5,6 +5,7 @@
 $module["template"]  = "module.tpl.htm";
 $module["startpage"]  = "client/client_list.php";
 $module["tab_width"]    = '';
+$module['order']    = '20';
 
 
 $items[] = array(   'title'  => "Edit Client",
diff --git a/interface/web/client/lib/remote.conf.php b/interface/web/client/lib/remote.conf.php
index fd24dd5..d58029e 100644
--- a/interface/web/client/lib/remote.conf.php
+++ b/interface/web/client/lib/remote.conf.php
@@ -1,8 +1,8 @@
 <?php
 
-$function_list['client_get_all,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_get_emailcontact'] = 'Client functions';
+$function_list['client_get_all,client_get,client_add,client_update,client_delete,client_get_sites_by_user,client_get_by_username,client_get_by_customer_no,client_change_password,client_get_id,client_delete_everything,client_get_emailcontact'] = 'Client functions';
 $function_list['domains_domain_get,domains_domain_add,domains_domain_delete,domains_get_all_by_user'] = 'Domaintool functions';
-$function_list['quota_get_by_user,mailquota_get_by_user'] = 'Quota functions';
+$function_list['quota_get_by_user,trafficquota_get_by_user,mailquota_get_by_user,databasequota_get_by_user'] = 'Quota functions';
 
 
 ?>
diff --git a/interface/web/client/list/client_circle.list.php b/interface/web/client/list/client_circle.list.php
index d1ef3ad..56085c4 100644
--- a/interface/web/client/list/client_circle.list.php
+++ b/interface/web/client/list/client_circle.list.php
@@ -63,7 +63,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "circle_name",
 	'datatype' => "VARCHAR",
diff --git a/interface/web/client/message_template_edit.php b/interface/web/client/message_template_edit.php
index 819e267..7d285ac 100644
--- a/interface/web/client/message_template_edit.php
+++ b/interface/web/client/message_template_edit.php
@@ -56,12 +56,11 @@
 		// Check for duplicates
 		if($this->dataRecord['template_type'] == 'welcome') {
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$sql = "SELECT count(client_message_template_id) as number FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ".$client_group_id;
+			$sql = "SELECT count(client_message_template_id) as number FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ?";
 			if($this->id > 0) {
-				$sql .= " AND client_message_template_id != ".$this->id;
+				$sql .= " AND client_message_template_id != ?";
 			}
-			
-			$tmp = $app->db->queryOneRecord($sql);
+			$tmp = $app->db->queryOneRecord($sql, $client_group_id, $this->id);
 			if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng('duplicate_welcome_error');
 		}
 		
diff --git a/interface/web/client/reseller_del.php b/interface/web/client/reseller_del.php
index e9d1dd3..55872be 100644
--- a/interface/web/client/reseller_del.php
+++ b/interface/web/client/reseller_del.php
@@ -59,7 +59,7 @@
 
 		$client_id = $app->functions->intval($this->dataRecord['client_id']);
 
-		$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE parent_client_id = ".$client_id);
+		$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE parent_client_id = ?", $client_id);
 		if($tmp["number"] > 0) $app->error($app->lng('error_has_clients'));
 
 	}
@@ -74,15 +74,15 @@
 
 			// remove the group of the client from the resellers group
 			$parent_client_id = $app->functions->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");
+			$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");
+			$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");
+			$app->db->query("DELETE FROM sys_user WHERE client_id = ?", $client_id);
 		}
 
 	}
diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php
index 4a7cc87..fff4202 100644
--- a/interface/web/client/reseller_edit.php
+++ b/interface/web/client/reseller_edit.php
@@ -61,11 +61,11 @@
 
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another website.
 			if($client["limit_client"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_client"]) {
 					$app->error($app->tform->wordbook["limit_client_txt"]);
 				}
@@ -84,11 +84,11 @@
 
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another website.
 			if($client["limit_client"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_client"]) {
 					$app->error($app->tform->wordbook["limit_client_txt"]);
 				}
@@ -96,7 +96,7 @@
 		}
 		
 		if($this->id != 0) {
-			$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ' . $this->id);
+			$this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ?', $this->id);
 			if(!is_array($this->oldTemplatesAssigned) || count($this->oldTemplatesAssigned) < 1) {
 				// check previous type of storing templates
 				$tpls = explode('/', $this->oldDataRecord['template_additional']);
@@ -134,7 +134,7 @@
 		$app->tpl->setVar('tpl_add_select', $option);
 
 		// check for new-style records
-		$result = $app->db->queryAllRecords('SELECT assigned_template_id, client_template_id FROM client_template_assigned WHERE client_id = ' . $this->id);
+		$result = $app->db->queryAllRecords('SELECT assigned_template_id, client_template_id FROM client_template_assigned WHERE client_id = ?', $this->id);
 		if($result && count($result) > 0) {
 			// new style
 			$items = array();
@@ -160,8 +160,8 @@
 			unset($tmprec);
 		} else {
 			// old style
-			$sql = "SELECT template_additional FROM client WHERE client_id = " . $this->id;
-			$result = $app->db->queryOneRecord($sql);
+			$sql = "SELECT template_additional FROM client WHERE client_id = ?";
+			$result = $app->db->queryOneRecord($sql, $this->id);
 			$tplAdd = explode("/", $result['template_additional']);
 			$text = '';
 			foreach($tplAdd as $item){
@@ -186,13 +186,6 @@
 				$customer_no = $app->functions->intval($system_config['misc']['customer_no_start']+$system_config['misc']['customer_no_counter']);
 				$customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$system_config['misc']['customer_no_template']);
 				$app->tpl->setVar('customer_no',$customer_no_string);
-				
-				//* save new counter value
-				/*
-				$system_config['misc']['customer_no_counter']++;
-				$system_config_str = $app->ini_parser->get_ini_string($system_config);
-				$app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($system_config_str)."'", 'sysini_id', 1);
-				*/
 			}
 		}
 		
@@ -207,17 +200,17 @@
 	function onAfterInsert() {
 		global $app, $conf;
 		// Create the group for the reseller
-		$groupid = $app->db->datalogInsert('sys_group', "(name,description,client_id) VALUES ('".$app->db->quote($this->dataRecord["username"])."','',".$this->id.")", 'groupid');
+		$groupid = $app->db->datalogInsert('sys_group', array("name" => $this->dataRecord["username"], "description" => '', "client_id" => $this->id), 'groupid');
 		$groups = $groupid;
 
-		$username = $app->db->quote($this->dataRecord["username"]);
-		$password = $app->db->quote($this->dataRecord["password"]);
-		$modules = $app->db->quote($conf['interface_modules_enabled'] . ',client');
+		$username = $this->dataRecord["username"];
+		$password = $this->dataRecord["password"];
+		$modules = $conf['interface_modules_enabled'] . ',client';
 		$startmodule = (stristr($modules, 'dashboard'))?'dashboard':'client';
-		$usertheme = $app->db->quote($this->dataRecord["usertheme"]);
+		$usertheme = $this->dataRecord["usertheme"];
 		$type = 'user';
 		$active = 1;
-		$language = $app->db->quote($this->dataRecord["language"]);
+		$language = $this->dataRecord["language"];
 
 		$salt="$1$";
 		$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
@@ -229,11 +222,11 @@
 
 		// Create the controlpaneluser for the reseller
 		$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
-		VALUES ('$username','$password','$modules','$startmodule','$usertheme','$type','$active','$language',$groups,$groupid,".$this->id.")";
-		$app->db->query($sql);
+		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
 		//* set the number of clients to 1
-		$app->db->query("UPDATE client SET limit_client = 1 WHERE client_id = ".$this->id);
+		$app->db->query("UPDATE client SET limit_client = 1 WHERE client_id = ?", $this->id);
 
 		//* Set the default servers
 		$tmp = $app->db->queryOneRecord('SELECT server_id FROM server WHERE mail_server = 1 LIMIT 0,1');
@@ -245,8 +238,8 @@
 		$tmp = $app->db->queryOneRecord('SELECT server_id FROM server WHERE db_server = 1 LIMIT 0,1');
 		$default_dbserver = $app->functions->intval($tmp['server_id']);
 
-		$sql = "UPDATE client SET default_mailserver = $default_mailserver, default_webserver = $default_webserver, default_dnsserver = $default_dnsserver, default_slave_dnsserver = $default_dnsserver, default_dbserver = $default_dbserver WHERE client_id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE client SET default_mailserver = ?, default_webserver = ?, default_dnsserver = ?, default_slave_dnsserver = ?, default_dbserver = ? WHERE client_id = ?";
+		$app->db->query($sql, $default_mailserver, $default_webserver, $default_dnsserver, $default_dnsserver, $default_dbserver, $this->id);
 		
 		if(isset($this->dataRecord['template_master'])) {
 			$app->uses('client_templates');
@@ -262,15 +255,15 @@
 				//* save new counter value
 				$system_config['misc']['customer_no_counter']++;
 				$system_config_str = $app->ini_parser->get_ini_string($system_config);
-				$app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($system_config_str)."'", 'sysini_id', 1);
+				$app->db->datalogUpdate('sys_ini', array("config" => $system_config_str), 'sysini_id', 1);
 				
 			}
 		}
 		
 		//* Send welcome email
 		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-		$sql = "SELECT * FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ".$client_group_id;
-		$email_template = $app->db->queryOneRecord($sql);
+		$sql = "SELECT * FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ?";
+		$email_template = $app->db->queryOneRecord($sql, $client_group_id);
 		$client = $app->tform->getDataRecord($this->id);
 
 		if(is_array($email_template) && $client['email'] != '') {
@@ -300,7 +293,7 @@
 				$from = $system_config['admin_mail'];
 			} else {
 				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$reseller = $app->db->queryOneRecord("SELECT client.email FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ".$client_group_id);
+				$reseller = $app->db->queryOneRecord("SELECT client.email FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ?", $client_group_id);
 				$from = $reseller["email"];
 			}
 
@@ -321,19 +314,19 @@
 
 		// username changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) {
-			$username = $app->db->quote($this->dataRecord["username"]);
+			$username = $this->dataRecord["username"];
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET username = '$username' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET username = ? WHERE client_id = ?";
+			$app->db->query($sql, $username, $client_id);
 
-			$tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = $client_id");
-			$app->db->datalogUpdate("sys_group", "name = '$username'", 'groupid', $tmp['groupid']);
+			$tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = ?", $client_id);
+			$app->db->datalogUpdate("sys_group", array("name" => $username), 'groupid', $tmp['groupid']);
 			unset($tmp);
 		}
 
 		// password changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["password"]) && $this->dataRecord["password"] != '') {
-			$password = $app->db->quote($this->dataRecord["password"]);
+			$password = $this->dataRecord["password"];
 			$client_id = $this->id;
 			$salt="$1$";
 			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
@@ -342,32 +335,32 @@
 			}
 			$salt.="$";
 			$password = crypt(stripslashes($password), $salt);
-			$sql = "UPDATE sys_user SET passwort = '$password' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET passwort = ? WHERE client_id = ?";
+			$app->db->query($sql, $password, $client_id);
 		}
 
 		// language changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['language']) && $this->dataRecord['language'] != '' && $this->oldDataRecord['language'] != $this->dataRecord['language']) {
-			$language = $app->db->quote($this->dataRecord["language"]);
+			$language = $this->dataRecord["language"];
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET language = '$language' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET language = ? WHERE client_id = ?";
+			$app->db->query($sql, $language, $client_id);
 		}
 
 		// ensure that a reseller is not converted to a client in demo mode when client_id <= 2
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] == true && $this->id <= 2) {
 			if(isset($this->dataRecord["limit_client"]) && $this->dataRecord["limit_client"] != -1) {
-				$app->db->query('UPDATE client set limit_client = -1 WHERE client_id = '.$this->id);
+				$app->db->query('UPDATE client set limit_client = -1 WHERE client_id = ?', $this->id);
 			}
 		}
 
 		// reseller status changed
 		if(isset($this->dataRecord["limit_client"]) && $this->dataRecord["limit_client"] != $this->oldDataRecord["limit_client"]) {
-			$modules = $app->db->quote($conf['interface_modules_enabled'] . ',client');
-			$modules = $app->db->quote($modules);
+			$modules = $conf['interface_modules_enabled'] . ',client';
+			$modules = $modules;
 			$client_id = $this->id;
-			$sql = "UPDATE sys_user SET modules = '$modules' WHERE client_id = $client_id";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET modules = ? WHERE client_id = ?";
+			$app->db->query($sql, $modules, $client_id);
 		}
 		
 		if(isset($this->dataRecord['template_master'])) {
diff --git a/interface/web/client/reseller_list.php b/interface/web/client/reseller_list.php
index 83f5d61..d849ab9 100644
--- a/interface/web/client/reseller_list.php
+++ b/interface/web/client/reseller_list.php
@@ -49,7 +49,7 @@
 
 $app->listform_actions->SQLOrderBy = 'ORDER BY client.company_name, client.contact_name, client.client_id';
 $app->listform_actions->SQLExtWhere = "(client.limit_client > 0 or client.limit_client = -1)";
-$app->listform_actions->SQLExtSelect = ', client.country as countryiso';
+$app->listform_actions->SQLExtSelect = ', LOWER(client.country) as countryiso';
 $app->listform_actions->onLoad();
 
 
diff --git a/interface/web/client/templates/client_circle_edit.htm b/interface/web/client/templates/client_circle_edit.htm
index 95c5f32..0bdf2f4 100644
--- a/interface/web/client/templates/client_circle_edit.htm
+++ b/interface/web/client/templates/client_circle_edit.htm
@@ -1,39 +1,36 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
+<tmpl_if name="list_head_txt">
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+</tmpl_if>
+<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
 
-<div class="panel panel_client">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='circle_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="circle_name">{tmpl_var name='circle_name_txt'}*</label>
-                <input name="circle_name" id="circle_name" value="{tmpl_var name='circle_name'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='client_ids_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="circle_name" class="col-sm-3 control-label">{tmpl_var name='circle_name_txt'}*</label>
+                <div class="col-sm-9"><input type="text" name="circle_name" id="circle_name" value="{tmpl_var name='circle_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='client_ids_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='client_ids'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="description">{tmpl_var name='description_txt'}</label>
-                <textarea name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea>
+            <div class="form-group">
+                <label for="description" class="col-sm-3 control-label">{tmpl_var name='description_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </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_circle_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_circle_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_circle_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_circle_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/client/templates/client_circle_list.htm b/interface/web/client/templates/client_circle_list.htm
index a0d7991..56bce62 100644
--- a/interface/web/client/templates/client_circle_list.htm
+++ b/interface/web/client/templates/client_circle_list.htm
@@ -1,48 +1,46 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_clients">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('client/client_circle_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="client/client_circle_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_circle_id" scope="col"><tmpl_var name="circle_id_txt"></th>
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_circle_name" scope="col"><tmpl_var name="circle_name_txt"></th>
-                        <th class="tbl_col_description" scope="col"><tmpl_var name="description_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="circle_id"><tmpl_var name="circle_id_txt"></th>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="circle_name"><tmpl_var name="circle_name_txt"></th>
+                        <th data-column="description"><tmpl_var name="description_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_circle_pid"><input type="text" name="search_circle_id" value="{tmpl_var name='search_circle_id'}" /></td>
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_circle_name"><input type="text" name="search_circle_name" value="{tmpl_var name='search_circle_name'}" /></td>
-                        <td class="tbl_col_description"><input type="text" name="search_description" value="{tmpl_var name='search_description'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','client/client_circle_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_circle_id" value="{tmpl_var name='search_circle_id'}" /></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_circle_name" value="{tmpl_var name='search_circle_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_description" value="{tmpl_var name='search_description'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="client/client_circle_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_circle_pid"><a href="#" onclick="loadContent('client/client_circle_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="circle_id"}</a></td>
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('client/client_circle_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_circle_name"><a href="#" onclick="loadContent('client/client_circle_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="circle_name"}</a></td>
-                            <td class="tbl_col_description"><a href="#" onclick="loadContent('client/client_circle_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="description"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('client/client_circle_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>
+                        <tr>
+                            <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="circle_id"}</a></td>
+                            <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="circle_name"}</a></td>
+                            <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="description"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_circle_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -54,11 +52,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/client/templates/client_del.htm b/interface/web/client/templates/client_del.htm
index efde39d..2ae0a8e 100644
--- a/interface/web/client/templates/client_del.htm
+++ b/interface/web/client/templates/client_del.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_client_del">
 
-    <div class="pnl_formsarea">
 		
         <div id="OKMsg">
 			<tmpl_if name='number_records'>
@@ -16,14 +16,11 @@
 			</tmpl_if>
         </div>
 		
-        <input type="checkbox" name="confirm" value="yes" /> <b><tmpl_var name="confirm_action_txt"></b>
+        <div class="col-sm-9"><input class="form-control" type="checkbox" name="confirm" value="yes" /></div><b><tmpl_var name="confirm_action_txt"></b>
 
         <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_del.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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_del.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ 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 b3c5757..4069c47 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -1,179 +1,149 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="gender">{tmpl_var name='gender_txt'}</label>
-                <select name="gender" id="gender" class="selectInput">
+        <legend>Address</legend>
+            <div class="form-group">
+                <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="gender" class="col-sm-3 control-label">{tmpl_var name='gender_txt'}</label>
+                <div class="col-sm-9"><select name="gender" id="gender" class="form-control">
                     {tmpl_var name='gender'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="contact_firstname">{tmpl_var name='contact_firstname_txt'}</label>
-                <input name="contact_firstname" id="contact_firstname" value="{tmpl_var name='contact_firstname'}" size="30" maxlength="255" type="text" class="textInput" />
+			<div class="form-group">
+                <label for="contact_firstname" class="col-sm-3 control-label">{tmpl_var name='contact_firstname_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="contact_firstname" id="contact_firstname" value="{tmpl_var name='contact_firstname'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="contact_name" class="col-sm-3 control-label">{tmpl_var name='contact_name_txt'}*</label>
+                <div class="col-sm-9"><input type="text" name="contact_name" id="contact_name" value="{tmpl_var name='contact_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="customer_no" class="col-sm-3 control-label">{tmpl_var name='customer_no_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no" id="customer_no" value="{tmpl_var name='customer_no'}" class="form-control" /></div><input name="customer_no_org" id="customer_no_org" value="{tmpl_var name='customer_no'}" type="hidden" />
             </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 class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}*</label>
+                <div class="col-sm-9"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </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" />
-				<input name="customer_no_org" id="customer_no_org" value="{tmpl_var name='customer_no'}" type="hidden" />
-            </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <label for="language">{tmpl_var name='language_txt'}</label>
-                <select name="language" id="language" class="selectInput flags">
+            <div class="form-group">
+                <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
+                <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
                     {tmpl_var name='language'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="usertheme">{tmpl_var name='usertheme_txt'}</label>
-                <select name="usertheme" id="usertheme" class="selectInput">
+            <div class="form-group">
+                <label for="usertheme" class="col-sm-3 control-label">{tmpl_var name='usertheme_txt'}</label>
+                <div class="col-sm-9"><select name="usertheme" id="usertheme" class="form-control">
                     {tmpl_var name='usertheme'}
-                </select>
+                </select></div>
             </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 flags">
+            <div class="form-group">
+                <label for="street" class="col-sm-3 control-label">{tmpl_var name='street_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="street" id="street" value="{tmpl_var name='street'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="zip" class="col-sm-3 control-label">{tmpl_var name='zip_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="zip" id="zip" value="{tmpl_var name='zip'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="city" class="col-sm-3 control-label">{tmpl_var name='city_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="city" id="city" value="{tmpl_var name='city'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="state" class="col-sm-3 control-label">{tmpl_var name='state_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="state" id="state" value="{tmpl_var name='state'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="country" class="col-sm-3 control-label">{tmpl_var name='country_txt'}</label>
+                <div class="col-sm-9"><select name="country" id="country" class="form-control flags">
                     {tmpl_var name='country'}
-                </select>
+                </select></div>
             </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 class="form-group">
+                <label for="telephone" class="col-sm-3 control-label">{tmpl_var name='telephone_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="telephone" id="telephone" value="{tmpl_var name='telephone'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="mobile" class="col-sm-3 control-label">{tmpl_var name='mobile_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mobile" id="mobile" value="{tmpl_var name='mobile'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fax" class="col-sm-3 control-label">{tmpl_var name='fax_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fax" id="fax" value="{tmpl_var name='fax'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="internet" class="col-sm-3 control-label">{tmpl_var name='internet_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="internet" id="internet" value="{tmpl_var name='internet'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="icq" class="col-sm-3 control-label">{tmpl_var name='icq_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="icq" id="icq" value="{tmpl_var name='icq'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="vat_id" class="col-sm-3 control-label">{tmpl_var name='vat_id_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="vat_id" id="vat_id" value="{tmpl_var name='vat_id'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="company_id" class="col-sm-3 control-label">{tmpl_var name='company_id_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="company_id" id="company_id" value="{tmpl_var name='company_id'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_owner" class="col-sm-3 control-label">{tmpl_var name='bank_account_owner_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_owner" id="bank_account_owner" value="{tmpl_var name='bank_account_owner'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_number" class="col-sm-3 control-label">{tmpl_var name='bank_account_number_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_number" id="bank_account_number" value="{tmpl_var name='bank_account_number'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_code" class="col-sm-3 control-label">{tmpl_var name='bank_code_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_code" id="bank_code" value="{tmpl_var name='bank_code'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_name" class="col-sm-3 control-label">{tmpl_var name='bank_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_name" id="bank_name" value="{tmpl_var name='bank_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_iban" class="col-sm-3 control-label">{tmpl_var name='bank_account_iban_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_iban" id="bank_account_iban" value="{tmpl_var name='bank_account_iban'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_swift" class="col-sm-3 control-label">{tmpl_var name='bank_account_swift_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_swift" id="bank_account_swift" value="{tmpl_var name='bank_account_swift'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="paypal_email" class="col-sm-3 control-label">{tmpl_var name='paypal_email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="paypal_email" id="paypal_email" value="{tmpl_var name='paypal_email'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="added_date" class="col-sm-3 control-label">{tmpl_var name='added_date_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="added_date" id="added_date" value="{tmpl_var name='added_date'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="added_by" class="col-sm-3 control-label">{tmpl_var name='added_by_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="added_by" id="added_by" value="{tmpl_var name='added_by'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="notes" class="col-sm-3 control-label">{tmpl_var name='notes_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea></div>
             </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="bank_account_owner">{tmpl_var name='bank_account_owner_txt'}</label>
-                <input name="bank_account_owner" id="bank_account_owner" value="{tmpl_var name='bank_account_owner'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_account_number">{tmpl_var name='bank_account_number_txt'}</label>
-                <input name="bank_account_number" id="bank_account_number" value="{tmpl_var name='bank_account_number'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_code">{tmpl_var name='bank_code_txt'}</label>
-                <input name="bank_code" id="bank_code" value="{tmpl_var name='bank_code'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_name">{tmpl_var name='bank_name_txt'}</label>
-                <input name="bank_name" id="bank_name" value="{tmpl_var name='bank_name'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_account_iban">{tmpl_var name='bank_account_iban_txt'}</label>
-                <input name="bank_account_iban" id="bank_account_iban" value="{tmpl_var name='bank_account_iban'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_account_swift">{tmpl_var name='bank_account_swift_txt'}</label>
-                <input name="bank_account_swift" id="bank_account_swift" value="{tmpl_var name='bank_account_swift'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="paypal_email">{tmpl_var name='paypal_email_txt'}</label>
-                <input name="paypal_email" id="paypal_email" value="{tmpl_var name='paypal_email'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="added_date">{tmpl_var name='added_date_txt'}</label>
-                <input name="added_date" id="added_date" value="{tmpl_var name='added_date'}" size="10" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="added_by">{tmpl_var name='added_by_txt'}</label>
-                <input name="added_by" id="added_by" value="{tmpl_var name='added_by'}" size="10" 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>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='locked_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='locked_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='locked'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='canceled_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='canceled_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='canceled'}
                 </div>
             </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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm
index 2d40fc4..e7de5c6 100644
--- a/interface/web/client/templates/client_edit_limits.htm
+++ b/interface/web/client/templates/client_edit_limits.htm
@@ -1,321 +1,356 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
+<tmpl_if name="list_head_txt">
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+</tmpl_if>
+<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
 
 <div class="panel panel_client">
-
-        <div class="pnl_toolsarea">
-            <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-                <div class="buttons topbuttons">
-                    <button class="positive iconstxt icoAdd" type="button" value="{tmpl_var name='add_additional_template_txt'}" onclick="addAdditionalTemplate();"><span>{tmpl_var name='add_additional_template_txt'}</span></button>
-                </div>
-            </fieldset>
-        </div>
-
-    <div class="pnl_formsarea">
+    
+	<div class="pnl_formsarea">
         <fieldset class="inlineLabels"><legend>Limits</legend>
-                <div class="ctrlHolder">
-                    <label for="template_master">{tmpl_var name='template_master_txt'}</label>
-                    <select name="template_master" id="template_master" class="selectInput">
+                <div class="form-group">
+                    <label for="template_master" class="col-sm-3 control-label">{tmpl_var name='template_master_txt'}</label>
+                    <div class="col-sm-9"><select name="template_master" id="template_master" class="form-control">
                         {tmpl_var name='template_master'}
-                    </select>
+                    </select></div>
                 </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">
+                <div class="form-group">
+                    <label for="template_additional" class="col-sm-3 control-label">{tmpl_var name='template_additional_txt'}</label>
+                    <div class="col-sm-9"><select name="tpl_add_select" id="tpl_add_select" class="form-control">
                         {tmpl_var name='tpl_add_select'}
-                    </select>
+                    </select></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='active_template_additional_txt'}</p>
-                    <div id="template_additional_list" class="multiField">
+				<div class="clear"><div class="right">
+					<button class="btn btn-default formbutton-success" type="button" onclick="ISPConfig.addAdditionalTemplate();">{tmpl_var name="add_additional_template_txt"}</button>
+				</div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='active_template_additional_txt'}</label>
+                    <div id="template_additional_list" class="col-sm-9 col-text">
                         <ul>
                         {tmpl_var name='template_additional_list'}
                         </ul>
                     </div>
                     <input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
                 </div>
-                <div class="ctrlHolder">
+                <div class="form-group">
                     &nbsp;
                 </div>
 				<tmpl_if name="is_admin">
-                <div class="ctrlHolder">
-                    <label for="parent_client_id_id">{tmpl_var name='parent_client_id_txt'}</label>
-                    <select name="parent_client_id" id="parent_client_id" class="selectInput">
+                <div class="form-group">
+                    <label for="parent_client_id_id" class="col-sm-3 control-label">{tmpl_var name='parent_client_id_txt'}</label>
+                    <div class="col-sm-9"><select name="parent_client_id" id="parent_client_id" class="form-control">
                         {tmpl_var name='parent_client_id'}
-                    </select>
+                    </select></div>
                 </div>
-                <div class="ctrlHolder">
-                    <label for="reseller">{tmpl_var name='reseller_txt'}</label>
-                    <input type="checkbox" name="reseller" value="1" id="reseller" />
-                </div>
+                <div class="form-group">
+                    <label for="reseller" class="col-sm-3 control-label">{tmpl_var name='reseller_txt'}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" name="reseller" value="1" id="reseller" /></div></div>
                 </tmpl_if>
             <div class="subsectiontoggle"><span class="showing"></span>{tmpl_var name='web_limits_txt'}<em class="showing"></em></div>
             <div>
-                <div class="ctrlHolder">
-                    <label for="web_servers">{tmpl_var name='web_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='web_servers_placeholder'}" multiple name="web_servers[]" id="web_servers" class="selectInput chosen-select">
+                <div class="form-group">
+                    <label for="web_servers" class="col-sm-3 control-label">{tmpl_var name='web_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='web_servers_placeholder'}" multiple name="web_servers[]" id="web_servers" class="form-control">
                         {tmpl_var name='web_servers'}
-                    </select>
+                    </select></div>
                 </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_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>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='web_php_options_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label for="limit_web_domain" class="col-sm-3 control-label">{tmpl_var name='limit_web_domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_web_quota" class="col-sm-3 control-label">{tmpl_var name='limit_web_quota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label for="limit_traffic_quota" class="col-sm-3 control-label">{tmpl_var name='limit_traffic_quota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='web_php_options_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='web_php_options'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_cgi_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_cgi_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_cgi'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ssi_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ssi_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ssi'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_perl_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_perl_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_perl'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ruby_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ruby_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ruby'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_python_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_python_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_python'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='force_suexec_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='force_suexec_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='force_suexec'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_hterror_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_hterror_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_hterror'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_wildcard_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_wildcard_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_wildcard'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ssl_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ssl_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ssl'}
                     </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">
+                <div class="form-group">
+                    <label for="limit_web_aliasdomain" class="col-sm-3 control-label">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_web_subdomain" class="col-sm-3 control-label">{tmpl_var name='limit_web_subdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_ftp_user" class="col-sm-3 control-label">{tmpl_var name='limit_ftp_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_shell_user" class="col-sm-3 control-label">{tmpl_var name='limit_shell_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='ssh_chroot_txt'}</label>
+                    <div class="col-sm-9">
                         {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">
-                    <p class="label">{tmpl_var name='limit_backup_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label for="limit_webdav_user" class="col-sm-3 control-label">{tmpl_var name='limit_webdav_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_backup_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_backup'}
                     </div>
                 </div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='email_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="mail_servers">{tmpl_var name='mail_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='mail_servers_placeholder'}" multiple name="mail_servers[]" id="mail_servers" class="selectInput chosen-select">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-email_limits" aria-expanded="false" aria-controls="toggle-email_limits">{tmpl_var name='email_limits_txt'}</button></div>
+            <div id="toggle-email_limits" class="collapse">
+                <div class="form-group">
+                    <label for="mail_servers" class="col-sm-3 control-label">{tmpl_var name='mail_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='mail_servers_placeholder'}" multiple name="mail_servers[]" id="mail_servers" class="form-control">
                         {tmpl_var name='mail_servers'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_maildomain" class="col-sm-3 control-label">{tmpl_var name='limit_maildomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailbox" class="col-sm-3 control-label">{tmpl_var name='limit_mailbox_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailalias" class="col-sm-3 control-label">{tmpl_var name='limit_mailalias_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailaliasdomain" class="col-sm-3 control-label">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailmailinglist" class="col-sm-3 control-label">{tmpl_var name='limit_mailmailinglist_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailforward" class="col-sm-3 control-label">{tmpl_var name='limit_mailforward_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailcatchall" class="col-sm-3 control-label">{tmpl_var name='limit_mailcatchall_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailrouting" class="col-sm-3 control-label">{tmpl_var name='limit_mailrouting_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailfilter" class="col-sm-3 control-label">{tmpl_var name='limit_mailfilter_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_fetchmail" class="col-sm-3 control-label">{tmpl_var name='limit_fetchmail_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailquota" class="col-sm-3 control-label">{tmpl_var name='limit_mailquota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_wblist" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_user" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_policy" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='database_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="db_servers">{tmpl_var name='db_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='db_servers_placeholder'}" multiple name="db_servers[]" id="db_servers" class="selectInput chosen-select">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-xmpp_limits" aria-expanded="false" aria-controls="toggle-xmpp_limits">{tmpl_var name='xmpp_limits_txt'}</button></div>
+            <div id="toggle-xmpp_limits" class="collapse">
+                <div class="form-group">
+                    <label for="xmpp_servers" class="col-sm-3 control-label">{tmpl_var name='xmpp_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='xmpp_servers_placeholder'}" multiple name="xmpp_servers[]" id="xmpp_servers" class="form-control">
+                        {tmpl_var name='xmpp_servers'}
+                    </select></div>
+                </div>
+                <div class="form-group">
+                    <label for="limit_xmpp_domain" class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_xmpp_domain" id="limit_xmpp_domain" value="{tmpl_var name='limit_xmpp_domain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_xmpp_user" class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_xmpp_user" id="limit_xmpp_user" value="{tmpl_var name='limit_xmpp_user'}" class="form-control" /></div></div>
+                <!--<div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_auth_options_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='xmpp_auth_options'}
+                    </div>
+                </div>-->
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_muc_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_muc'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_pastebin_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_pastebin'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_httparchive_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_httparchive'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_anon_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_anon'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_vjud_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_vjud'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_proxy_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_proxy'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_status_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_status'}
+                    </div>
+                </div>
+
+            </div>
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-database_limits" aria-expanded="false" aria-controls="toggle-database_limits">{tmpl_var name='database_limits_txt'}</button></div>
+            <div id="toggle-database_limits" class="collapse">
+                <div class="form-group">
+                    <label for="db_servers" class="col-sm-3 control-label">{tmpl_var name='db_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='db_servers_placeholder'}" multiple name="db_servers[]" id="db_servers" class="form-control">
                         {tmpl_var name='db_servers'}
-                    </select>
+                    </select></div>
                 </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_database_quota">{tmpl_var name='limit_database_quota_txt'}</label>
-					<input name="limit_database_quota" id="limit_database_quota" value="{tmpl_var name='limit_database_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-				</div>
+                <div class="form-group">
+                    <label for="limit_database" class="col-sm-3 control-label">{tmpl_var name='limit_database_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" class="form-control" /></div></div>
+				<div class="form-group">
+					<label for="limit_database_quota" class="col-sm-3 control-label">{tmpl_var name='limit_database_quota_txt'}</label>
+					<div class="col-sm-6"><input type="text" name="limit_database_quota" id="limit_database_quota" value="{tmpl_var name='limit_database_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+				</div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='cron_job_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <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">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-cron_job_limits" aria-expanded="false" aria-controls="toggle-cron_job_limits">{tmpl_var name='cron_job_limits_txt'}</button></div>
+            <div id="toggle-cron_job_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_cron" class="col-sm-3 control-label">{tmpl_var name='limit_cron_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_cron_type" class="col-sm-3 control-label">{tmpl_var name='limit_cron_type_txt'}</label>
+                    <div class="col-sm-9"><select name="limit_cron_type" id="limit_cron_type" class="form-control">
                         {tmpl_var name='limit_cron_type'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_cron_frequency" class="col-sm-3 control-label">{tmpl_var name='limit_cron_frequency_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='dns_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="dns_servers">{tmpl_var name='dns_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='dns_servers_placeholder'}" multiple name="dns_servers[]" id="dns_servers" class="selectInput chosen-select">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-dns_limits" aria-expanded="false" aria-controls="toggle-dns_limits">{tmpl_var name='dns_limits_txt'}</button></div>
+            <div id="toggle-dns_limits" class="collapse">
+                <div class="form-group">
+                    <label for="dns_servers" class="col-sm-3 control-label">{tmpl_var name='dns_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='dns_servers_placeholder'}" multiple name="dns_servers[]" id="dns_servers" class="form-control">
                         {tmpl_var name='dns_servers'}
-                    </select>
+                    </select></div>
                 </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="default_slave_dnsserver">{tmpl_var name='default_slave_dnsserver_txt'}</label>
-                    <select name="default_slave_dnsserver" id="default_slave_dnsserver" class="selectInput">
+                <div class="form-group">
+                    <label for="limit_dns_zone" class="col-sm-3 control-label">{tmpl_var name='limit_dns_zone_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" class="form-control" /></div></div>
+				<div class="form-group">
+                    <label for="default_slave_dnsserver" class="col-sm-3 control-label">{tmpl_var name='default_slave_dnsserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_slave_dnsserver" id="default_slave_dnsserver" class="form-control">
                         {tmpl_var name='default_slave_dnsserver'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_dns_slave_zone" class="col-sm-3 control-label">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_dns_record" class="col-sm-3 control-label">{tmpl_var name='limit_dns_record_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='virtualization_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="limit_openvz_vm">{tmpl_var name='limit_openvz_vm_txt'}</label>
-                    <input name="limit_openvz_vm" id="limit_openvz_vm" value="{tmpl_var name='limit_openvz_vm'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="limit_openvz_vm_template_id">{tmpl_var name='limit_openvz_vm_template_id_txt'}</label>
-                    <select name="limit_openvz_vm_template_id" id="limit_openvz_vm_template_id" class="selectInput">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-virtualization_limits" aria-expanded="false" aria-controls="toggle-virtualization_limits">{tmpl_var name='virtualization_limits_txt'}</button></div>
+            <div id="toggle-virtualization_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_openvz_vm" class="col-sm-3 control-label">{tmpl_var name='limit_openvz_vm_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_openvz_vm" id="limit_openvz_vm" value="{tmpl_var name='limit_openvz_vm'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_openvz_vm_template_id" class="col-sm-3 control-label">{tmpl_var name='limit_openvz_vm_template_id_txt'}</label>
+                    <div class="col-sm-9"><select name="limit_openvz_vm_template_id" id="limit_openvz_vm_template_id" class="form-control">
                         {tmpl_var name='limit_openvz_vm_template_id'}
-                    </select>
+                    </select></div>
                 </div>
             </div>
-			<div class="subsectiontoggle"><span></span>{tmpl_var name='aps_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="limit_aps">{tmpl_var name='limit_aps_txt'}</label>
-                    <input name="limit_aps" id="limit_aps" value="{tmpl_var name='limit_aps'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-                </div>
+			<div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-aps_limits" aria-expanded="false" aria-controls="toggle-aps_limits">{tmpl_var name='aps_limits_txt'}</button></div>
+            <div id="toggle-aps_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_aps" class="col-sm-3 control-label">{tmpl_var name='limit_aps_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_aps" id="limit_aps" value="{tmpl_var name='limit_aps'}" class="form-control" /></div></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','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 class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
     </div>
 
 </div>
@@ -326,13 +361,9 @@
     return ($('#template_master').val() == '0' ? true : false);
 }
 
-$('.subsectiontoggle').on("click", function(){
-    $(this).children().toggleClass('showing').end().next().slideToggle();
-});
-
 $('#template_additional_list').find('li > a').click(function(e) {
     e.preventDefault();
-    delAdditionalTemplate($(this).parent().attr('rel'));
+    ISPConfig.delAdditionalTemplate($(this).parent().attr('rel'));
 });
 
 $('div.panel_client')
diff --git a/interface/web/client/templates/client_message.htm b/interface/web/client/templates/client_message.htm
index 6cff710..e65846c 100644
--- a/interface/web/client/templates/client_message.htm
+++ b/interface/web/client/templates/client_message.htm
@@ -1,39 +1,34 @@
-<h2><tmpl_var name="page_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="page_head_txt"></h1>
+</div>
 <p><tmpl_var name="form_desc_txt"></p>
 
-<div class="panel panel_client">
-    
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='form_legend_txt'}</legend>
+
+        <legend>{tmpl_var name='form_legend_txt'}</legend>
             <tmpl_if name="okmsg">
                 <div id="OKMsg"><p><tmpl_var name="okmsg"></p></div>
             </tmpl_if>
             <tmpl_if name="error">
-                <div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
+                <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="sender">{tmpl_var name='sender_txt'}</label>
-                <input name="sender" id="sender" value="{tmpl_var name='sender'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="recipient">{tmpl_var name='recipient_txt'}</label>
-                <select name="recipient" id="recipient" class="selectInput">
+            <div class="form-group">
+                <label for="sender" class="col-sm-3 control-label">{tmpl_var name='sender_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="sender" id="sender" value="{tmpl_var name='sender'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="recipient" class="col-sm-3 control-label">{tmpl_var name='recipient_txt'}</label>
+                <div class="col-sm-9"><select name="recipient" id="recipient" class="form-control">
                     {tmpl_var name='recipient'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="subject">{tmpl_var name='subject_txt'}</label>
-                <input name="subject" id="subject" value="{tmpl_var name='subject'}" style="width:500px" size="30" maxlength="255" type="text" class="textInput" />
+            <div class="form-group">
+                <label for="subject" class="col-sm-3 control-label">{tmpl_var name='subject_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="subject" id="subject" value="{tmpl_var name='subject'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="message" class="col-sm-3 control-label">{tmpl_var name='message_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="message" id="message">{tmpl_var name='message'}</textarea></div>&nbsp;{tmpl_var name="variables_txt"}&nbsp;{tmpl_var name="message_variables"}
             </div>
-            <div class="ctrlHolder">
-                <label for="message">{tmpl_var name='message_txt'}</label>
-                <textarea name="message" id="message" rows='' cols='' style="width:500px">{tmpl_var name='message'}</textarea>&nbsp;{tmpl_var name="variables_txt"}&nbsp;{tmpl_var name="message_variables"}
-            </div>
-        </fieldset>
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_send_txt'}" onclick="submitForm('pageForm','client/client_message.php');"><span>{tmpl_var name='btn_send_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>
\ No newline at end of file
+        
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_send_txt'}" data-submit-form="pageForm" data-form-action="client/client_message.php">{tmpl_var name='btn_send_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/client/templates/client_message_template_list.htm b/interface/web/client/templates/client_message_template_list.htm
index 95f6f00..46337c5 100644
--- a/interface/web/client/templates/client_message_template_list.htm
+++ b/interface/web/client/templates/client_message_template_list.htm
@@ -1,40 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_client_message_template">
 
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-        <button class="iconstxt icoAdd" type="button" onclick="loadContent('client/message_template_edit.php');">
-          <span>{tmpl_var name="add_new_record_txt"}</span>
-        </button>
-      </div>
-    </fieldset>
-  </div>
+    <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+      
+        <button class="btn btn-default formbutton-success" type="button" data-load-content="client/message_template_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+      
+    
 
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
+  
+    <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+      <div class="table-wrapper marginTop15">
+<table class="table">
+        <thead class="dark form-group-sm">
           <tr>
-            <th class="tbl_col_template_type" scope="col"><tmpl_var name="template_type_txt"></th>
-            <th class="tbl_col_template_name" scope="col"><tmpl_var name="template_name_txt"></th>
-            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+            <th data-column="template_type"><tmpl_var name="template_type_txt"></th>
+            <th data-column="template_name"><tmpl_var name="template_name_txt"></th>
+            <th class="text-right">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_template_type"><select name="search_template_type" onChange="submitForm('pageForm','client/message_template_list.php');">{tmpl_var name='search_template_type'}</select></td>
-            <td class="tbl_col_template_name"><input type="text" name="search_template_name" value="{tmpl_var name='search_template_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','client/message_template_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
+            <td><select class="form-control" name="search_template_type" onChange="ISPConfig.submitForm('pageForm','client/message_template_list.php');">{tmpl_var name='search_template_type'}</select></td>
+            <td><input class="form-control" type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
+            <td class="text-right"><div class="buttons"><button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="client/message_template_list.php"><span class="icon icon-filter"></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_template_type"><a href="#" onclick="loadContent('client/message_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_type"}</a></td>
-            <td class="tbl_col_template_name"><a href="#" onclick="loadContent('client/message_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_name"}</a></td>
-            <td class="tbl_col_buttons">
+          <tr>
+            <td><a href="#" data-load-content="client/message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_type"}</a></td>
+            <td><a href="#" data-load-content="client/message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
+            <td class="text-right">
               <div class="buttons icons16">
-                <a class="button icons16 icoDelete" href="javascript: del_record('client/message_template_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>
+                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/message_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
               </div>
             </td>
           </tr>
@@ -47,11 +45,10 @@
         </tbody>
         <tfoot>
           <tr>
-            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+            <td colspan="3"><tmpl_var name="paging"></td>
           </tr>
         </tfoot>
       </table>
-    </fieldset>
-  </div>
-
 </div>
+    
+  
\ No newline at end of file
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm
index 71ab963..abb6879 100644
--- a/interface/web/client/templates/client_template_edit_limits.htm
+++ b/interface/web/client/templates/client_template_edit_limits.htm
@@ -1,290 +1,322 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_client_template">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Limits</legend>
+        <legend>Limits</legend>
 			<div class="subsectiontoggle"><span class="showing"></span>{tmpl_var name='web_limits_txt'}<em class="showing"></em></div>
             <div>
-                <div class="ctrlHolder">
-                    <label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
-                    <select name="default_webserver" id="default_webserver" class="selectInput">
+                <div class="form-group">
+                    <label for="default_webserver" class="col-sm-3 control-label">{tmpl_var name='default_webserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_webserver" id="default_webserver" class="form-control">
                         {tmpl_var name='default_webserver'}
-                    </select>
+                    </select></div>
                 </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_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>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='web_php_options_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label for="limit_web_domain" class="col-sm-3 control-label">{tmpl_var name='limit_web_domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_web_quota" class="col-sm-3 control-label">{tmpl_var name='limit_web_quota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label for="limit_traffic_quota" class="col-sm-3 control-label">{tmpl_var name='limit_traffic_quota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='web_php_options_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='web_php_options'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_cgi_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_cgi_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_cgi'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ssi_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ssi_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ssi'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_perl_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_perl_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_perl'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ruby_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ruby_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ruby'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_python_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_python_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_python'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='force_suexec_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='force_suexec_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='force_suexec'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_hterror_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_hterror_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_hterror'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_wildcard_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_wildcard_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_wildcard'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ssl_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ssl_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ssl'}
                     </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">
+                <div class="form-group">
+                    <label for="limit_web_aliasdomain" class="col-sm-3 control-label">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_web_subdomain" class="col-sm-3 control-label">{tmpl_var name='limit_web_subdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_ftp_user" class="col-sm-3 control-label">{tmpl_var name='limit_ftp_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_shell_user" class="col-sm-3 control-label">{tmpl_var name='limit_shell_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='ssh_chroot_txt'}</label>
+                    <div class="col-sm-9">
                         {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">
-                    <p class="label">{tmpl_var name='limit_backup_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label for="limit_webdav_user" class="col-sm-3 control-label">{tmpl_var name='limit_webdav_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_backup_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_backup'}
                     </div>
                 </div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='email_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
-                    <select name="default_mailserver" id="default_mailserver" class="selectInput">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-email_limits" aria-expanded="false" aria-controls="toggle-email_limits">{tmpl_var name='email_limits_txt'}</button></div>
+            <div id="toggle-email_limits" class="collapse">
+                <div class="form-group">
+                    <label for="default_mailserver" class="col-sm-3 control-label">{tmpl_var name='default_mailserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_mailserver" id="default_mailserver" class="form-control">
                         {tmpl_var name='default_mailserver'}
-                    </select>
+                    </select></div>
                 </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" />
-                </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="form-group">
+                    <label for="limit_maildomain" class="col-sm-3 control-label">{tmpl_var name='limit_maildomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailbox" class="col-sm-3 control-label">{tmpl_var name='limit_mailbox_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailalias" class="col-sm-3 control-label">{tmpl_var name='limit_mailalias_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailaliasdomain" class="col-sm-3 control-label">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailmailinglist" class="col-sm-3 control-label">{tmpl_var name='limit_mailmailinglist_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailforward" class="col-sm-3 control-label">{tmpl_var name='limit_mailforward_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailcatchall" class="col-sm-3 control-label">{tmpl_var name='limit_mailcatchall_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailrouting" class="col-sm-3 control-label">{tmpl_var name='limit_mailrouting_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailfilter" class="col-sm-3 control-label">{tmpl_var name='limit_mailfilter_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_fetchmail" class="col-sm-3 control-label">{tmpl_var name='limit_fetchmail_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailquota" class="col-sm-3 control-label">{tmpl_var name='limit_mailquota_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_wblist" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_user" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_policy" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='database_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
-                    <select name="default_dbserver" id="default_dbserver" class="selectInput">
+
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-xmpp_limits" aria-expanded="false" aria-controls="toggle-xmpp_limits">{tmpl_var name='xmpp_limits_txt'}</button></div>
+            <div id="toggle-xmpp_limits" class="collapse">
+                <div class="form-group">
+                    <label for="xmpp_servers" class="col-sm-3 control-label">{tmpl_var name='xmpp_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='xmpp_servers_placeholder'}" multiple name="xmpp_servers[]" id="xmpp_servers" class="form-control">
+                        {tmpl_var name='xmpp_servers'}
+                    </select></div>
+                </div>
+                <div class="form-group">
+                    <label for="limit_xmpp_domain" class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_xmpp_domain" id="limit_xmpp_domain" value="{tmpl_var name='limit_xmpp_domain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_xmpp_user" class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_xmpp_user" id="limit_xmpp_user" value="{tmpl_var name='limit_xmpp_user'}" class="form-control" /></div></div>
+                <!--<div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_auth_options_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='xmpp_auth_options'}
+                    </div>
+                </div>-->
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_muc_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_muc'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_pastebin_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_pastebin'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_httparchive_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_httparchive'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_anon_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_anon'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_vjud_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_vjud'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_proxy_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_proxy'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_status_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_status'}
+                    </div>
+                </div>
+
+            </div>
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-database_limits" aria-expanded="false" aria-controls="toggle-database_limits">{tmpl_var name='database_limits_txt'}</button></div>
+            <div id="toggle-database_limits" class="collapse">
+                <div class="form-group">
+                    <label for="default_dbserver" class="col-sm-3 control-label">{tmpl_var name='default_dbserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_dbserver" id="default_dbserver" class="form-control">
                         {tmpl_var name='default_dbserver'}
-                    </select>
+                    </select></div>
                 </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_database_quota">{tmpl_var name='limit_database_quota_txt'}</label>
-					<input name="limit_database_quota" id="limit_database_quota" value="{tmpl_var name='limit_database_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-				</div>
+                <div class="form-group">
+                    <label for="limit_database" class="col-sm-3 control-label">{tmpl_var name='limit_database_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" class="form-control" /></div></div>
+				<div class="form-group">
+					<label for="limit_database_quota" class="col-sm-3 control-label">{tmpl_var name='limit_database_quota_txt'}</label>
+					<div class="col-sm-6"><input type="text" name="limit_database_quota" id="limit_database_quota" value="{tmpl_var name='limit_database_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+				</div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='cron_job_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <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">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-cron_job_limits" aria-expanded="false" aria-controls="toggle-cron_job_limits">{tmpl_var name='cron_job_limits_txt'}</button></div>
+            <div id="toggle-cron_job_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_cron" class="col-sm-3 control-label">{tmpl_var name='limit_cron_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_cron_type" class="col-sm-3 control-label">{tmpl_var name='limit_cron_type_txt'}</label>
+                    <div class="col-sm-9"><select name="limit_cron_type" id="limit_cron_type" class="form-control">
                         {tmpl_var name='limit_cron_type'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_cron_frequency" class="col-sm-3 control-label">{tmpl_var name='limit_cron_frequency_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='dns_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
-                    <select name="default_dnsserver" id="default_dnsserver" class="selectInput">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-dns_limits" aria-expanded="false" aria-controls="toggle-dns_limits">{tmpl_var name='dns_limits_txt'}</button></div>
+            <div id="toggle-dns_limits" class="collapse">
+                <div class="form-group">
+                    <label for="default_dnsserver" class="col-sm-3 control-label">{tmpl_var name='default_dnsserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_dnsserver" id="default_dnsserver" class="form-control">
                         {tmpl_var name='default_dnsserver'}
-                    </select>
+                    </select></div>
                 </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="default_slave_dnsserver">{tmpl_var name='default_slave_dnsserver_txt'}</label>
-                    <select name="default_slave_dnsserver" id="default_slave_dnsserver" class="selectInput">
+                <div class="form-group">
+                    <label for="limit_dns_zone" class="col-sm-3 control-label">{tmpl_var name='limit_dns_zone_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" class="form-control" /></div></div>
+				<div class="form-group">
+                    <label for="default_slave_dnsserver" class="col-sm-3 control-label">{tmpl_var name='default_slave_dnsserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_slave_dnsserver" id="default_slave_dnsserver" class="form-control">
                         {tmpl_var name='default_slave_dnsserver'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_dns_slave_zone" class="col-sm-3 control-label">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_dns_record" class="col-sm-3 control-label">{tmpl_var name='limit_dns_record_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='virtualization_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="limit_openvz_vm">{tmpl_var name='limit_openvz_vm_txt'}</label>
-                    <input name="limit_openvz_vm" id="limit_openvz_vm" value="{tmpl_var name='limit_openvz_vm'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="limit_openvz_vm_template_id">{tmpl_var name='limit_openvz_vm_template_id_txt'}</label>
-                    <select name="limit_openvz_vm_template_id" id="limit_openvz_vm_template_id" class="selectInput">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-virtualization_limits" aria-expanded="false" aria-controls="toggle-virtualization_limits">{tmpl_var name='virtualization_limits_txt'}</button></div>
+            <div id="toggle-virtualization_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_openvz_vm" class="col-sm-3 control-label">{tmpl_var name='limit_openvz_vm_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_openvz_vm" id="limit_openvz_vm" value="{tmpl_var name='limit_openvz_vm'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_openvz_vm_template_id" class="col-sm-3 control-label">{tmpl_var name='limit_openvz_vm_template_id_txt'}</label>
+                    <div class="col-sm-9"><select name="limit_openvz_vm_template_id" id="limit_openvz_vm_template_id" class="form-control">
                         {tmpl_var name='limit_openvz_vm_template_id'}
-                    </select>
+                    </select></div>
                 </div>
             </div>
-			<div class="subsectiontoggle"><span></span>{tmpl_var name='aps_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="limit_aps">{tmpl_var name='limit_aps_txt'}</label>
-                    <input name="limit_aps" id="limit_aps" value="{tmpl_var name='limit_aps'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-                </div>
+			<div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-aps_limits" aria-expanded="false" aria-controls="toggle-aps_limits">{tmpl_var name='aps_limits_txt'}</button></div>
+            <div id="toggle-aps_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_aps" class="col-sm-3 control-label">{tmpl_var name='limit_aps_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_aps" id="limit_aps" value="{tmpl_var name='limit_aps'}" class="form-control" /></div></div>
             </div>
 			<tmpl_if name="is_admin">
-			<div class="subsectiontoggle"><span></span>{tmpl_var name='client_limits_txt'}<em></em></div>
-			<div style="display:none;">
-				<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="limit_domainmodule">{tmpl_var name='limit_domainmodule_txt'}</label>
-					<input name="limit_domainmodule" id="limit_domainmodule" value="{tmpl_var name='limit_domainmodule'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-				</div>
+			<div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-client_limits" aria-expanded="false" aria-controls="toggle-client_limits">{tmpl_var name='client_limits_txt'}</button></div>
+			<div id="toggle-client_limits" class="collapse">
+				<div class="form-group">
+					<label for="limit_client" class="col-sm-3 control-label">{tmpl_var name='limit_client_txt'}</label>
+					<div class="col-sm-9"><input type="text" name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" class="form-control" /></div></div>
+				<div class="form-group">
+					<label for="limit_domainmodule" class="col-sm-3 control-label">{tmpl_var name='limit_domainmodule_txt'}</label>
+					<div class="col-sm-9"><input type="text" name="limit_domainmodule" id="limit_domainmodule" value="{tmpl_var name='limit_domainmodule'}" class="form-control" /></div></div>
 			</div>
 			</tmpl_if>
-        </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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </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 79ea109..e06d077 100644
--- a/interface/web/client/templates/client_template_edit_template.htm
+++ b/interface/web/client/templates/client_template_edit_template.htm
@@ -1,28 +1,26 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
+<tmpl_if name="list_head_txt">
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+</tmpl_if>
+<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
 
-<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">
+        <legend>Template</legend>
+            <div class="form-group">
+                <label for="template_type" class="col-sm-3 control-label">{tmpl_var name='template_type_txt'}</label>
+                <div class="col-sm-9"><select name="template_type" id="template_type" class="form-control">
                     {tmpl_var name='template_type'}
-                </select>
+                </select></div>
             </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>
+            <div class="form-group">
+                <label for="template_name" class="col-sm-3 control-label">{tmpl_var name='template_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="template_name" id="template_name" value="{tmpl_var name='template_name'}" class="form-control" /></div></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','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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/client/templates/client_template_list.htm b/interface/web/client/templates/client_template_list.htm
index 5106aef..37b8aa2 100644
--- a/interface/web/client/templates/client_template_list.htm
+++ b/interface/web/client/templates/client_template_list.htm
@@ -1,45 +1,43 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_limit_template">
 
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-        <button class="button iconstxt icoAdd" type="button" onclick="loadContent('client/client_template_edit.php');">
-          <span>{tmpl_var name="add_new_record_txt"}</span>
-        </button>
-      </div>
-    </fieldset>
-  </div>
+    <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+      
+        <button class="btn btn-default formbutton-success" type="button" data-load-content="client/client_template_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+      
+    
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_template_id" scope="col"><tmpl_var name="template_id_txt"></th>
-                        <th class="tbl_col_template_type" scope="col"><tmpl_var name="template_type_txt"></th>
-                        <th class="tbl_col_template_name" scope="col"><tmpl_var name="template_name_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="template_id"><tmpl_var name="template_id_txt"></th>
+                        <th data-column="template_type"><tmpl_var name="template_type_txt"></th>
+                        <th data-column="template_name"><tmpl_var name="template_name_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_template_id"><input type="text" name="search_template_id" value="{tmpl_var name='search_template_id'}" /></td>
-                        <td class="tbl_col_template_type"><select name="search_template_type">{tmpl_var name='search_template_type'}</select></td>
-                        <td class="tbl_col_template_name"><input type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','client/client_template_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_template_id" value="{tmpl_var name='search_template_id'}" /></td>
+                        <td><select class="form-control" name="search_template_type">{tmpl_var name='search_template_type'}</select></td>
+                        <td><input class="form-control" type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="client/client_template_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_template_id"><a href="#" onclick="loadContent('client/client_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_id"}</a></td>
-                            <td class="tbl_col_template_type"><a href="#" onclick="loadContent('client/client_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_type"}</a></td>
-                            <td class="tbl_col_template_name"><a href="#" onclick="loadContent('client/client_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_name"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('client/client_template_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>
+                        <tr>
+                            <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_id"}</a></td>
+                            <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_type"}</a></td>
+                            <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -51,11 +49,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                        <td colspan="7"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/client/templates/clients_list.htm b/interface/web/client/templates/clients_list.htm
index 820e27c..27d4b7d 100644
--- a/interface/web/client/templates/clients_list.htm
+++ b/interface/web/client/templates/clients_list.htm
@@ -1,62 +1,60 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_clients">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('client/client_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="client/client_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
-                        <th class="tbl_col_company_name" scope="col"><tmpl_var name="company_name_txt"></th>
-                        <th class="tbl_col_contact_name" scope="col"><tmpl_var name="contact_name_txt"></th>
-						<th class="tbl_col_customer_no" scope="col"><tmpl_var name="customer_no_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_city" scope="col"><tmpl_var name="city_txt"></th>
-                        <th class="tbl_col_country" scope="col"><tmpl_var name="country_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="small-col" data-column="client_id"><tmpl_var name="client_id_txt"></th>
+                        <th data-column="company_name"><tmpl_var name="company_name_txt"></th>
+                        <th data-column="contact_name"><tmpl_var name="contact_name_txt"></th>
+						<th data-column="customer_no"><tmpl_var name="customer_no_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th data-column="city"><tmpl_var name="city_txt"></th>
+                        <th data-column="country"><tmpl_var name="country_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_client_pid"><input type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
-                        <td class="tbl_col_company_name"><input type="text" name="search_company_name" value="{tmpl_var name='search_company_name'}" size="10" /></td>
-                        <td class="tbl_col_contact_name"><input type="text" name="search_contact_name" value="{tmpl_var name='search_contact_name'}" size="10" /></td>
-						<td class="tbl_col_customer_no"><input type="text" name="search_customer_no" value="{tmpl_var name='search_customer_no'}" size="10" /></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" size="10" /></td>
-                        <td class="tbl_col_city"><input type="text" name="search_city" value="{tmpl_var name='search_city'}" size="10" /></td>
-                        <td class="tbl_col_country"><select name="search_country">{tmpl_var name='search_country'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','client/client_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
+                        <td><input class="form-control" type="text" name="search_company_name" value="{tmpl_var name='search_company_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_contact_name" value="{tmpl_var name='search_contact_name'}" /></td>
+						<td><input class="form-control" type="text" name="search_customer_no" value="{tmpl_var name='search_customer_no'}" /></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td><input class="form-control" type="text" name="search_city" value="{tmpl_var name='search_city'}" /></td>
+                        <td><select class="form-control" name="search_country">{tmpl_var name='search_country'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="client/client_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_client_pid"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
-                            <td class="tbl_col_company_name"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="company_name"}</a></td>
-                            <td class="tbl_col_contact_name"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="contact_name"}</a></td>
-							<td class="tbl_col_customer_no"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="customer_no"}</a></td>
-                            <td class="tbl_col_username"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
-                            <td class="tbl_col_city"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="city"}</a></td>
-                            <td class="tbl_col_country"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');"><div class="country-{tmpl_var name="countryiso"}" style="float:left"></div>{tmpl_var name="country"}</a></td>
-                            <td class="tbl_col_buttons">
+                        <tr>
+                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
+                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="company_name"}</a></td>
+                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="contact_name"}</a></td>
+							<td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_no"}</a></td>
+                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
+                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="city"}</a></td>
+                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}"><span class="flags flag-{tmpl_var name="countryiso"}">{tmpl_var name="country"}</span></a></td>
+                            <td class="text-right">
                                 <tmpl_if name="is_admin">
-                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
                                 <tmpl_elseif name="is_reseller">
-                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
                                 </tmpl_if>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('client/client_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>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -68,11 +66,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
+                        <td colspan="8"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/client/templates/domain_edit.htm b/interface/web/client/templates/domain_edit.htm
index 551dbbe..97fefc8 100644
--- a/interface/web/client/templates/domain_edit.htm
+++ b/interface/web/client/templates/domain_edit.htm
@@ -1,32 +1,25 @@
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="domain">{tmpl_var name='domain_txt'}</label>
+        
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
                 <tmpl_if name="edit_disabled">
-                <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" readonly="readonly" />
-                <tmpl_else>
-                <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-                </tmpl_if>
+                <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" readonly="readonly" /></div><tmpl_else>
+                <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></tmpl_if>
             </div>
-            <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">
+            <div class="form-group">
+                <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                     {tmpl_var name='client_group_id'}
-                </select>
+                </select></div>
             </div>
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="type" value="local">
 
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','client/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('client/domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/client/templates/domain_list.htm b/interface/web/client/templates/domain_list.htm
index 6224cbc..825b298 100644
--- a/interface/web/client/templates/domain_list.htm
+++ b/interface/web/client/templates/domain_list.htm
@@ -1,40 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_domain">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('client/domain_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="client/domain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-            <thead>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+            <thead class="dark form-group-sm">
                 <tr>
-                    <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                    <th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="user_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+                    <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                    <th data-column="user"><tmpl_var name="user_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</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_user"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
-                    <td class="tbl_col_buttons"><button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name='filter_txt'}" onclick="submitForm('pageForm','client/domain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></td>
+                    <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                    <td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                    <td class="text-right"><button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name='filter_txt'}" data-submit-form="pageForm" data-form-action="client/domain_list.php"><span class="icon icon-filter"></span></button></td>
                 </tr>
             </thead>
             <tbody>
                 <tmpl_loop name="records">
-                <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                    <td class="tbl_col_domain"><a href="#" onclick="loadContent('client/domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
-                    <td class="tbl_col_domain"><a href="#" onclick="loadContent('client/domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
-                    <td class="tbl_col_buttons">
-                        <a class="button icons16 icoDelete" href="javascript: del_record('client/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>
+                <tr>
+                    <td><a href="#" data-load-content="client/domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                    <td><a href="#" data-load-content="client/domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
+                    <td class="text-right">
+                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                     </td>
                 </tr>
                 </tmpl_loop>
@@ -47,11 +45,10 @@
 
             <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                    <td colspan="4"><tmpl_var name="paging"></td>
                 </tr>
             </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/client/templates/message_template.htm b/interface/web/client/templates/message_template.htm
index 4c0c623..aa27d18 100644
--- a/interface/web/client/templates/message_template.htm
+++ b/interface/web/client/templates/message_template.htm
@@ -1,35 +1,36 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_invoice_message_template">
 
   <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Settings</legend>
-      <div class="ctrlHolder">
-      	<label for="template_type">{tmpl_var name='template_type_txt'}</label>
-        <select name="template_type" id="template_type" class="selectInput">
+    <legend>Settings</legend>
+      <div class="form-group">
+      	<label for="template_type" class="col-sm-3 control-label">{tmpl_var name='template_type_txt'}</label>
+        <div class="col-sm-9"><select name="template_type" id="template_type" class="form-control">
 					{tmpl_var name='template_type'}
-				</select>
+				</select></div>
       </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 class="form-group">
+      	<label for="template_name" class="col-sm-3 control-label">{tmpl_var name='template_name_txt'}</label>
+        <div class="col-sm-9"><input type="text" name="template_name" id="template_name" value="{tmpl_var name='template_name'}" class="form-control" /></div></div>
+      <div class="form-group">
+      	<label for="subject" class="col-sm-3 control-label">{tmpl_var name='subject_txt'}</label>
+        <div class="col-sm-9"><input type="text" name="subject" id="subject" value="{tmpl_var name='subject'}" class="form-control" /></div>
+		<div class="col-sm-3 col-text"></div><div class="col-sm-9 col-text">{tmpl_var name='variables_txt'}: {tmpl_var name="message_variables"} <br />{tmpl_var name='variables_description_txt'}</div>
 			</div>
-      <div class="ctrlHolder">
-      	<label for="subject">{tmpl_var name='subject_txt'}</label>
-        <input name="subject" id="subject" value="{tmpl_var name='subject'}" style="width:500px" size="30" maxlength="255" type="text" class="textInput" />
-		<br clear="all">{tmpl_var name='variables_txt'}: {tmpl_var name="message_variables"} <br />{tmpl_var name='variables_description_txt'}
-			</div>
-      <div class="ctrlHolder">
-      	<label for="message">{tmpl_var name='message_txt'}</label>
-        <textarea name="message" id="message" rows='' cols='' style="width:500px">{tmpl_var name='message'}</textarea>
-		<br clear="all">{tmpl_var name='variables_txt'}: {tmpl_var name="message_variables"} <br />{tmpl_var name='variables_description_txt'}
+      <div class="form-group">
+      	<label for="message" class="col-sm-3 control-label">{tmpl_var name='message_txt'}</label>
+        <div class="col-sm-9"><textarea class="form-control" name="message" id="message" style="height:300px">{tmpl_var name='message'}</textarea></div>
+		<div class="col-sm-3 col-text"></div><div class="col-sm-9 col-text">{tmpl_var name='variables_txt'}: {tmpl_var name="message_variables"} <br />{tmpl_var name='variables_description_txt'}</div>
       </div>
-	  <div class="buttonHolder buttons">
-      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/message_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/message_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-    </fieldset>
+	  <div class="clear"><div class="right">
+      <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/message_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
+      <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/message_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+    </div></div>
+    
 
     <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
diff --git a/interface/web/client/templates/message_template_list.htm b/interface/web/client/templates/message_template_list.htm
index 27b0113..70224ab 100644
--- a/interface/web/client/templates/message_template_list.htm
+++ b/interface/web/client/templates/message_template_list.htm
@@ -1,40 +1,38 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_invoice_message_template">
 
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-        <button class="iconstxt icoAdd" type="button" onClick="loadContent('billing/invoice_message_template_edit.php');">
-          <span>{tmpl_var name="add_new_record_txt"}</span>
-        </button>
-      </div>
-    </fieldset>
-  </div>
+    <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+      
+        <button class="btn btn-default formbutton-success" type="button" data-load-content="billing/invoice_message_template_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+      
+    
 
-  <div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-      <table class="list">
-        <thead>
+  
+    <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+      <div class="table-wrapper marginTop15">
+<table class="table">
+        <thead class="dark form-group-sm">
           <tr>
-            <th class="tbl_col_template_type" scope="col"><tmpl_var name="template_type_txt"></th>
-            <th class="tbl_col_template_name" scope="col"><tmpl_var name="template_name_txt"></th>
-            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+            <th data-column="template_type"><tmpl_var name="template_type_txt"></th>
+            <th data-column="template_name"><tmpl_var name="template_name_txt"></th>
+            <th class="text-right">&nbsp;</th>
           </tr>
           <tr>
-            <td class="tbl_col_template_type"><select name="search_template_type" onChange="submitForm('pageForm','billing/invoice_message_template_list.php');">{tmpl_var name='search_template_type'}</select></td>
-            <td class="tbl_col_template_name"><input type="text" name="search_template_name" value="{tmpl_var name='search_template_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','billing/invoice_message_template_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
+            <td><select class="form-control" name="search_template_type" onChange="ISPConfig.submitForm('pageForm','billing/invoice_message_template_list.php');">{tmpl_var name='search_template_type'}</select></td>
+            <td><input class="form-control" type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
+            <td class="text-right"><div class="buttons"><button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="billing/invoice_message_template_list.php"><span class="icon icon-filter"></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_template_type"><a href="#" onClick="loadContent('billing/invoice_message_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_type"}</a></td>
-            <td class="tbl_col_template_name"><a href="#" onClick="loadContent('billing/invoice_message_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_name"}</a></td>
-            <td class="tbl_col_buttons">
+          <tr>
+            <td><a href="#" data-load-content="billing/invoice_message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_type"}</a></td>
+            <td><a href="#" data-load-content="billing/invoice_message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
+            <td class="text-right">
               <div class="buttons icons16">    
-                <a class="button icons16 icoDelete" href="javascript: del_record('billing/invoice_message_template_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>
+                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('billing/invoice_message_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
               </div>
             </td>
           </tr>
@@ -42,11 +40,10 @@
         </tbody>
         <tfoot>
           <tr>
-            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+            <td colspan="3"><tmpl_var name="paging"></td>
           </tr>
         </tfoot>
       </table>
-    </fieldset>
-  </div>
-
 </div>
+    
+  
\ No newline at end of file
diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm
index 41160cf..4cc639a 100644
--- a/interface/web/client/templates/reseller_edit_address.htm
+++ b/interface/web/client/templates/reseller_edit_address.htm
@@ -1,179 +1,149 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="gender">{tmpl_var name='gender_txt'}</label>
-                <select name="gender" id="gender" class="selectInput">
+        <legend>Address</legend>
+            <div class="form-group">
+                <label for="company_name" class="col-sm-3 control-label">{tmpl_var name='company_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="company_name" id="company_name" value="{tmpl_var name='company_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="gender" class="col-sm-3 control-label">{tmpl_var name='gender_txt'}</label>
+                <div class="col-sm-9"><select name="gender" id="gender" class="form-control">
                     {tmpl_var name='gender'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="contact_firstname">{tmpl_var name='contact_firstname_txt'}</label>
-                <input name="contact_firstname" id="contact_firstname" value="{tmpl_var name='contact_firstname'}" size="30" maxlength="255" type="text" class="textInput" />
+			<div class="form-group">
+                <label for="contact_firstname" class="col-sm-3 control-label">{tmpl_var name='contact_firstname_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="contact_firstname" id="contact_firstname" value="{tmpl_var name='contact_firstname'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="contact_name" class="col-sm-3 control-label">{tmpl_var name='contact_name_txt'}*</label>
+                <div class="col-sm-9"><input type="text" name="contact_name" id="contact_name" value="{tmpl_var name='contact_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="customer_no" class="col-sm-3 control-label">{tmpl_var name='customer_no_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no" id="customer_no" value="{tmpl_var name='customer_no'}" class="form-control" /></div><input name="customer_no_org" id="customer_no_org" value="{tmpl_var name='customer_no'}" type="hidden" />
             </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 class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}*</label>
+                <div class="col-sm-9"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </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" />
-				<input name="customer_no_org" id="customer_no_org" value="{tmpl_var name='customer_no'}" type="hidden" />
-            </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <label for="language">{tmpl_var name='language_txt'}</label>
-                <select name="language" id="language" class="selectInput flags">
+            <div class="form-group">
+                <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
+                <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
                     {tmpl_var name='language'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="usertheme">{tmpl_var name='usertheme_txt'}</label>
-                <select name="usertheme" id="usertheme" class="selectInput">
+            <div class="form-group">
+                <label for="usertheme" class="col-sm-3 control-label">{tmpl_var name='usertheme_txt'}</label>
+                <div class="col-sm-9"><select name="usertheme" id="usertheme" class="form-control">
                     {tmpl_var name='usertheme'}
-                </select>
+                </select></div>
             </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 flags">
+            <div class="form-group">
+                <label for="street" class="col-sm-3 control-label">{tmpl_var name='street_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="street" id="street" value="{tmpl_var name='street'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="zip" class="col-sm-3 control-label">{tmpl_var name='zip_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="zip" id="zip" value="{tmpl_var name='zip'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="city" class="col-sm-3 control-label">{tmpl_var name='city_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="city" id="city" value="{tmpl_var name='city'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="state" class="col-sm-3 control-label">{tmpl_var name='state_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="state" id="state" value="{tmpl_var name='state'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="country" class="col-sm-3 control-label">{tmpl_var name='country_txt'}</label>
+                <div class="col-sm-9"><select name="country" id="country" class="form-control flags">
                     {tmpl_var name='country'}
-                </select>
+                </select></div>
             </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 class="form-group">
+                <label for="telephone" class="col-sm-3 control-label">{tmpl_var name='telephone_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="telephone" id="telephone" value="{tmpl_var name='telephone'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="mobile" class="col-sm-3 control-label">{tmpl_var name='mobile_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mobile" id="mobile" value="{tmpl_var name='mobile'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fax" class="col-sm-3 control-label">{tmpl_var name='fax_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fax" id="fax" value="{tmpl_var name='fax'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="internet" class="col-sm-3 control-label">{tmpl_var name='internet_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="internet" id="internet" value="{tmpl_var name='internet'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="icq" class="col-sm-3 control-label">{tmpl_var name='icq_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="icq" id="icq" value="{tmpl_var name='icq'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="vat_id" class="col-sm-3 control-label">{tmpl_var name='vat_id_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="vat_id" id="vat_id" value="{tmpl_var name='vat_id'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="company_id" class="col-sm-3 control-label">{tmpl_var name='company_id_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="company_id" id="company_id" value="{tmpl_var name='company_id'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_owner" class="col-sm-3 control-label">{tmpl_var name='bank_account_owner_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_owner" id="bank_account_owner" value="{tmpl_var name='bank_account_owner'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_number" class="col-sm-3 control-label">{tmpl_var name='bank_account_number_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_number" id="bank_account_number" value="{tmpl_var name='bank_account_number'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_code" class="col-sm-3 control-label">{tmpl_var name='bank_code_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_code" id="bank_code" value="{tmpl_var name='bank_code'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_name" class="col-sm-3 control-label">{tmpl_var name='bank_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_name" id="bank_name" value="{tmpl_var name='bank_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_iban" class="col-sm-3 control-label">{tmpl_var name='bank_account_iban_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_iban" id="bank_account_iban" value="{tmpl_var name='bank_account_iban'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bank_account_swift" class="col-sm-3 control-label">{tmpl_var name='bank_account_swift_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bank_account_swift" id="bank_account_swift" value="{tmpl_var name='bank_account_swift'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="paypal_email" class="col-sm-3 control-label">{tmpl_var name='paypal_email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="paypal_email" id="paypal_email" value="{tmpl_var name='paypal_email'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="added_date" class="col-sm-3 control-label">{tmpl_var name='added_date_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="added_date" id="added_date" value="{tmpl_var name='added_date'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="added_by" class="col-sm-3 control-label">{tmpl_var name='added_by_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="added_by" id="added_by" value="{tmpl_var name='added_by'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="notes" class="col-sm-3 control-label">{tmpl_var name='notes_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea></div>
             </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="bank_account_owner">{tmpl_var name='bank_account_owner_txt'}</label>
-                <input name="bank_account_owner" id="bank_account_owner" value="{tmpl_var name='bank_account_owner'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_account_number">{tmpl_var name='bank_account_number_txt'}</label>
-                <input name="bank_account_number" id="bank_account_number" value="{tmpl_var name='bank_account_number'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_code">{tmpl_var name='bank_code_txt'}</label>
-                <input name="bank_code" id="bank_code" value="{tmpl_var name='bank_code'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_name">{tmpl_var name='bank_name_txt'}</label>
-                <input name="bank_name" id="bank_name" value="{tmpl_var name='bank_name'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_account_iban">{tmpl_var name='bank_account_iban_txt'}</label>
-                <input name="bank_account_iban" id="bank_account_iban" value="{tmpl_var name='bank_account_iban'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="bank_account_swift">{tmpl_var name='bank_account_swift_txt'}</label>
-                <input name="bank_account_swift" id="bank_account_swift" value="{tmpl_var name='bank_account_swift'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="paypal_email">{tmpl_var name='paypal_email_txt'}</label>
-                <input name="paypal_email" id="paypal_email" value="{tmpl_var name='paypal_email'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="added_date">{tmpl_var name='added_date_txt'}</label>
-                <input name="added_date" id="added_date" value="{tmpl_var name='added_date'}" size="10" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="added_by">{tmpl_var name='added_by_txt'}</label>
-                <input name="added_by" id="added_by" value="{tmpl_var name='added_by'}" size="10" 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>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='locked_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='locked_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='locked'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='canceled_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='canceled_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='canceled'}
                 </div>
             </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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/reseller_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/reseller_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm
index 55652d5..d58e284 100644
--- a/interface/web/client/templates/reseller_edit_limits.htm
+++ b/interface/web/client/templates/reseller_edit_limits.htm
@@ -1,332 +1,363 @@
-<h2><tmpl_var name="list_head_txt"></h2>
-<p><tmpl_var name="list_desc_txt"></p>
+<tmpl_if name="list_head_txt">
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+</tmpl_if>
+<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
 
 <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 topbuttons">
-				<button class="positive iconstxt icoAdd" type="button" value="{tmpl_var name='add_additional_template_txt'}" onclick="addAdditionalTemplate();"><span>{tmpl_var name='add_additional_template_txt'}</span></button>
-			</div>
-			</fieldset>
-		</div>
-	</tmpl_if>
-
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Limits</legend>
+        <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">
+                <div class="form-group">
+                    <label for="template_master" class="col-sm-3 control-label">{tmpl_var name='template_master_txt'}</label>
+                    <div class="col-sm-9"><select name="template_master" id="template_master" class="form-control">
                         {tmpl_var name='template_master'}
-                    </select>
+                    </select></div>
                 </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">
+                <div class="form-group">
+                    <label for="template_additional" class="col-sm-3 control-label">{tmpl_var name='template_additional_txt'}</label>
+                    <div class="col-sm-9"><select name="tpl_add_select" id="tpl_add_select" class="form-control">
                         {tmpl_var name='tpl_add_select'}
-                    </select>
+                    </select></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='active_template_additional_txt'}</p>
-                    <div id="template_additional_list" class="multiField">
+				<tmpl_if name="is_admin">
+				<div class="clear"><div class="right">
+					<button class="btn btn-default formbutton-success" type="button" onclick="ISPConfig.addAdditionalTemplate();">{tmpl_var name="add_additional_template_txt"}</button>
+				</div></div>
+				</tmpl_if>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='active_template_additional_txt'}</label>
+                    <div id="template_additional_list" class="col-sm-9 col-text">
                         <ul>
                         {tmpl_var name='template_additional_list'}
                         </ul>
                     </div>
                     <input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
                 </div>
-                <div class="ctrlHolder">
+                <div class="form-group">
                     &nbsp;
                 </div>
             </tmpl_if>
-			<div class="ctrlHolder">
-                <label for="customer_no_template">{tmpl_var name='customer_no_template_txt'}</label>
-                <input name="customer_no_template" id="customer_no_template" value="{tmpl_var name='customer_no_template'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="customer_no_start">{tmpl_var name='customer_no_start_txt'}</label>
-                <input name="customer_no_start" id="customer_no_start" value="{tmpl_var name='customer_no_start'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="customer_no_counter">{tmpl_var name='customer_no_counter_txt'}</label>
-                <input name="customer_no_counter" id="customer_no_counter" value="{tmpl_var name='customer_no_counter'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-            </div>
+			<div class="form-group">
+                <label for="customer_no_template" class="col-sm-3 control-label">{tmpl_var name='customer_no_template_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no_template" id="customer_no_template" value="{tmpl_var name='customer_no_template'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="customer_no_start" class="col-sm-3 control-label">{tmpl_var name='customer_no_start_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no_start" id="customer_no_start" value="{tmpl_var name='customer_no_start'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="customer_no_counter" class="col-sm-3 control-label">{tmpl_var name='customer_no_counter_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="customer_no_counter" id="customer_no_counter" value="{tmpl_var name='customer_no_counter'}" class="form-control" /></div></div>
             <div class="subsectiontoggle"><span class="showing"></span>{tmpl_var name='web_limits_txt'}<em class="showing"></em></div>
             <div>
-                <div class="ctrlHolder">
-                    <label for="web_servers">{tmpl_var name='web_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='web_servers_placeholder'}" multiple name="web_servers[]" id="web_servers" class="selectInput chosen-select">
+                <div class="form-group">
+                    <label for="web_servers" class="col-sm-3 control-label">{tmpl_var name='web_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='web_servers_placeholder'}" multiple name="web_servers[]" id="web_servers" class="form-control">
                         {tmpl_var name='web_servers'}
-                    </select>
+                    </select></div>
                 </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_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>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='web_php_options_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label for="limit_web_domain" class="col-sm-3 control-label">{tmpl_var name='limit_web_domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_web_quota" class="col-sm-3 control-label">{tmpl_var name='limit_web_quota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_web_quota" id="limit_web_quota" value="{tmpl_var name='limit_web_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label for="limit_traffic_quota" class="col-sm-3 control-label">{tmpl_var name='limit_traffic_quota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_traffic_quota" id="limit_traffic_quota" value="{tmpl_var name='limit_traffic_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='web_php_options_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='web_php_options'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_cgi_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_cgi_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_cgi'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ssi_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ssi_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ssi'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_perl_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_perl_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_perl'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ruby_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ruby_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ruby'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_python_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_python_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_python'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='force_suexec_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='force_suexec_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='force_suexec'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_hterror_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_hterror_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_hterror'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_wildcard_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_wildcard_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_wildcard'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='limit_ssl_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_ssl_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_ssl'}
                     </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">
+                <div class="form-group">
+                    <label for="limit_web_aliasdomain" class="col-sm-3 control-label">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_web_subdomain" class="col-sm-3 control-label">{tmpl_var name='limit_web_subdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_ftp_user" class="col-sm-3 control-label">{tmpl_var name='limit_ftp_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_shell_user" class="col-sm-3 control-label">{tmpl_var name='limit_shell_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='ssh_chroot_txt'}</label>
+                    <div class="col-sm-9">
                         {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">
-                    <p class="label">{tmpl_var name='limit_backup_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label for="limit_webdav_user" class="col-sm-3 control-label">{tmpl_var name='limit_webdav_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_webdav_user" id="limit_webdav_user" value="{tmpl_var name='limit_webdav_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_backup_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='limit_backup'}
                     </div>
                 </div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='email_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="mail_servers">{tmpl_var name='mail_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='mail_servers_placeholder'}" multiple name="mail_servers[]" id="mail_servers" class="selectInput chosen-select">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-email_limits" aria-expanded="false" aria-controls="toggle-email_limits">{tmpl_var name='email_limits_txt'}</button></div>
+            <div id="toggle-email_limits" class="collapse">
+                <div class="form-group">
+                    <label for="mail_servers" class="col-sm-3 control-label">{tmpl_var name='mail_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='mail_servers_placeholder'}" multiple name="mail_servers[]" id="mail_servers" class="form-control">
                         {tmpl_var name='mail_servers'}
-                    </select>
+                    </select></div>
                 </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_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_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="form-group">
+                    <label for="limit_maildomain" class="col-sm-3 control-label">{tmpl_var name='limit_maildomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailmailinglist" class="col-sm-3 control-label">{tmpl_var name='limit_mailmailinglist_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailmailinglist" id="limit_mailmailinglist" value="{tmpl_var name='limit_mailmailinglist'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailbox" class="col-sm-3 control-label">{tmpl_var name='limit_mailbox_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailalias" class="col-sm-3 control-label">{tmpl_var name='limit_mailalias_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailaliasdomain" class="col-sm-3 control-label">{tmpl_var name='limit_mailaliasdomain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailaliasdomain" id="limit_mailaliasdomain" value="{tmpl_var name='limit_mailaliasdomain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailforward" class="col-sm-3 control-label">{tmpl_var name='limit_mailforward_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailcatchall" class="col-sm-3 control-label">{tmpl_var name='limit_mailcatchall_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailrouting" class="col-sm-3 control-label">{tmpl_var name='limit_mailrouting_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailfilter" class="col-sm-3 control-label">{tmpl_var name='limit_mailfilter_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_fetchmail" class="col-sm-3 control-label">{tmpl_var name='limit_fetchmail_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_mailquota" class="col-sm-3 control-label">{tmpl_var name='limit_mailquota_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+                </div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_wblist" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_user" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_spamfilter_policy" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='database_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="db_servers">{tmpl_var name='db_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='db_servers_placeholder'}" multiple name="db_servers[]" id="db_servers" class="selectInput chosen-select">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-xmpp_limits" aria-expanded="false" aria-controls="toggle-xmpp_limits">{tmpl_var name='xmpp_limits_txt'}</button></div>
+            <div id="toggle-xmpp_limits" class="collapse">
+                <div class="form-group">
+                    <label for="xmpp_servers" class="col-sm-3 control-label">{tmpl_var name='xmpp_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='xmpp_servers_placeholder'}" multiple name="xmpp_servers[]" id="xmpp_servers" class="form-control">
+                        {tmpl_var name='xmpp_servers'}
+                    </select></div>
+                </div>
+                <div class="form-group">
+                    <label for="limit_xmpp_domain" class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_xmpp_domain" id="limit_xmpp_domain" value="{tmpl_var name='limit_xmpp_domain'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_xmpp_user" class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_user_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_xmpp_user" id="limit_xmpp_user" value="{tmpl_var name='limit_xmpp_user'}" class="form-control" /></div></div>
+                <!--<div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='xmpp_auth_options_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='xmpp_auth_options'}
+                    </div>
+                </div>-->
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_muc_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_muc'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_pastebin_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_pastebin'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_httparchive_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_httparchive'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_anon_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_anon'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_vjud_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_vjud'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_proxy_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_proxy'}
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='limit_xmpp_status_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='limit_xmpp_status'}
+                    </div>
+                </div>
+
+            </div>
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-database_limits" aria-expanded="false" aria-controls="toggle-database_limits">{tmpl_var name='database_limits_txt'}</button></div>
+            <div id="toggle-database_limits" class="collapse">
+                <div class="form-group">
+                    <label for="db_servers" class="col-sm-3 control-label">{tmpl_var name='db_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='db_servers_placeholder'}" multiple name="db_servers[]" id="db_servers" class="form-control">
                         {tmpl_var name='db_servers'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_database" class="col-sm-3 control-label">{tmpl_var name='limit_database_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='cron_job_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <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">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-cron_job_limits" aria-expanded="false" aria-controls="toggle-cron_job_limits">{tmpl_var name='cron_job_limits_txt'}</button></div>
+            <div id="toggle-cron_job_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_cron" class="col-sm-3 control-label">{tmpl_var name='limit_cron_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_cron_type" class="col-sm-3 control-label">{tmpl_var name='limit_cron_type_txt'}</label>
+                    <div class="col-sm-9"><select name="limit_cron_type" id="limit_cron_type" class="form-control">
                         {tmpl_var name='limit_cron_type'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_cron_frequency" class="col-sm-3 control-label">{tmpl_var name='limit_cron_frequency_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='dns_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="dns_servers">{tmpl_var name='dns_servers_txt'}</label>
-                    <select data-placeholder="{tmpl_var name='dns_servers_placeholder'}" multiple name="dns_servers[]" id="dns_servers" class="selectInput chosen-select">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-dns_limits" aria-expanded="false" aria-controls="toggle-dns_limits">{tmpl_var name='dns_limits_txt'}</button></div>
+            <div id="toggle-dns_limits" class="collapse">
+                <div class="form-group">
+                    <label for="dns_servers" class="col-sm-3 control-label">{tmpl_var name='dns_servers_txt'}</label>
+                    <div class="col-sm-9"><select data-placeholder="{tmpl_var name='dns_servers_placeholder'}" multiple name="dns_servers[]" id="dns_servers" class="form-control">
                         {tmpl_var name='dns_servers'}
-                    </select>
+                    </select></div>
                 </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="default_slave_dnsserver">{tmpl_var name='default_slave_dnsserver_txt'}</label>
-                    <select name="default_slave_dnsserver" id="default_slave_dnsserver" class="selectInput">
+                <div class="form-group">
+                    <label for="limit_dns_zone" class="col-sm-3 control-label">{tmpl_var name='limit_dns_zone_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" class="form-control" /></div></div>
+				<div class="form-group">
+                    <label for="default_slave_dnsserver" class="col-sm-3 control-label">{tmpl_var name='default_slave_dnsserver_txt'}</label>
+                    <div class="col-sm-9"><select name="default_slave_dnsserver" id="default_slave_dnsserver" class="form-control">
                         {tmpl_var name='default_slave_dnsserver'}
-                    </select>
+                    </select></div>
                 </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="form-group">
+                    <label for="limit_dns_slave_zone" class="col-sm-3 control-label">{tmpl_var name='limit_dns_slave_zone_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_slave_zone" id="limit_dns_slave_zone" value="{tmpl_var name='limit_dns_slave_zone'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_dns_record" class="col-sm-3 control-label">{tmpl_var name='limit_dns_record_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" class="form-control" /></div></div>
             </div>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='virtualization_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="limit_openvz_vm">{tmpl_var name='limit_openvz_vm_txt'}</label>
-                    <input name="limit_openvz_vm" id="limit_openvz_vm" value="{tmpl_var name='limit_openvz_vm'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder">
-                    <label for="limit_openvz_vm_template_id">{tmpl_var name='limit_openvz_vm_template_id_txt'}</label>
-                    <select name="limit_openvz_vm_template_id" id="limit_openvz_vm_template_id" class="selectInput">
+            <div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-virtualization_limits" aria-expanded="false" aria-controls="toggle-virtualization_limits">{tmpl_var name='virtualization_limits_txt'}</button></div>
+            <div id="toggle-virtualization_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_openvz_vm" class="col-sm-3 control-label">{tmpl_var name='limit_openvz_vm_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_openvz_vm" id="limit_openvz_vm" value="{tmpl_var name='limit_openvz_vm'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label for="limit_openvz_vm_template_id" class="col-sm-3 control-label">{tmpl_var name='limit_openvz_vm_template_id_txt'}</label>
+                    <div class="col-sm-9"><select name="limit_openvz_vm_template_id" id="limit_openvz_vm_template_id" class="form-control">
                         {tmpl_var name='limit_openvz_vm_template_id'}
-                    </select>
+                    </select></div>
                 </div>
             </div>
-			<div class="subsectiontoggle"><span></span>{tmpl_var name='aps_limits_txt'}<em></em></div>
-            <div style="display:none;">
-                <div class="ctrlHolder">
-                    <label for="limit_aps">{tmpl_var name='limit_aps_txt'}</label>
-                    <input name="limit_aps" id="limit_aps" value="{tmpl_var name='limit_aps'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-                </div>
+			<div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-aps_limits" aria-expanded="false" aria-controls="toggle-aps_limits">{tmpl_var name='aps_limits_txt'}</button></div>
+            <div id="toggle-aps_limits" class="collapse">
+                <div class="form-group">
+                    <label for="limit_aps" class="col-sm-3 control-label">{tmpl_var name='limit_aps_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="limit_aps" id="limit_aps" value="{tmpl_var name='limit_aps'}" class="form-control" /></div></div>
             </div>
-			<div class="subsectiontoggle"><span></span>{tmpl_var name='client_limits_txt'}<em></em></div>
-			<div style="display:none;">
-				<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="limit_domainmodule">{tmpl_var name='limit_domainmodule_txt'}</label>
-					<input name="limit_domainmodule" id="limit_domainmodule" value="{tmpl_var name='limit_domainmodule'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-				</div>
+			<div class="col-sm-3"></div><div class="col-sm-9"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-client_limits" aria-expanded="false" aria-controls="toggle-client_limits">{tmpl_var name='client_limits_txt'}</button></div>
+			<div id="toggle-client_limits" class="collapse">
+				<div class="form-group">
+					<label for="limit_client" class="col-sm-3 control-label">{tmpl_var name='limit_client_txt'}</label>
+					<div class="col-sm-9"><input type="text" name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" class="form-control" /></div></div>
+				<div class="form-group">
+					<label for="limit_domainmodule" class="col-sm-3 control-label">{tmpl_var name='limit_domainmodule_txt'}</label>
+					<div class="col-sm-9"><input type="text" name="limit_domainmodule" id="limit_domainmodule" value="{tmpl_var name='limit_domainmodule'}" class="form-control" /></div></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','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 class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/reseller_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/reseller_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
     </div>
 
 </div>
@@ -339,7 +370,7 @@
 
 jQuery('#template_additional_list').find('li > a').click(function(e) {
     e.preventDefault();
-    delAdditionalTemplate($(this).parent().attr('rel'));
+    ISPConfig.delAdditionalTemplate($(this).parent().attr('rel'));
 });
 
 jQuery('div.panel_client')
diff --git a/interface/web/client/templates/resellers_list.htm b/interface/web/client/templates/resellers_list.htm
index 5074497..9538e71 100644
--- a/interface/web/client/templates/resellers_list.htm
+++ b/interface/web/client/templates/resellers_list.htm
@@ -1,58 +1,56 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_clients">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('client/reseller_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="client/reseller_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
-                        <th class="tbl_col_company_name" scope="col"><tmpl_var name="company_name_txt"></th>
-                        <th class="tbl_col_contact_name" scope="col"><tmpl_var name="contact_name_txt"></th>
-						<th class="tbl_col_customer_no" scope="col"><tmpl_var name="customer_no_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_city" scope="col"><tmpl_var name="city_txt"></th>
-                        <th class="tbl_col_country" scope="col"><tmpl_var name="country_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="small-col" data-column="client_id"><tmpl_var name="client_id_txt"></th>
+                        <th data-column="company_name"><tmpl_var name="company_name_txt"></th>
+                        <th data-column="contact_name"><tmpl_var name="contact_name_txt"></th>
+						<th data-column="customer_no"><tmpl_var name="customer_no_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th data-column="city"><tmpl_var name="city_txt"></th>
+                        <th data-column="country"><tmpl_var name="country_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_client_pid"><input type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
-                        <td class="tbl_col_company_name"><input type="text" name="search_company_name" value="{tmpl_var name='search_company_name'}" size="10" /></td>
-                        <td class="tbl_col_contact_name"><input type="text" name="search_contact_name" value="{tmpl_var name='search_contact_name'}" size="10" /></td>
-						<td class="tbl_col_customer_no"><input type="text" name="search_customer_no" value="{tmpl_var name='search_customer_no'}" size="10" /></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" size="10" /></td>
-                        <td class="tbl_col_city"><input type="text" name="search_city" value="{tmpl_var name='search_city'}" /></td>
-                        <td class="tbl_col_country"><select name="search_country">{tmpl_var name='search_country'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','client/reseller_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
+                        <td><input class="form-control" type="text" name="search_company_name" value="{tmpl_var name='search_company_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_contact_name" value="{tmpl_var name='search_contact_name'}" /></td>
+						<td><input class="form-control" type="text" name="search_customer_no" value="{tmpl_var name='search_customer_no'}" /></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td><input class="form-control" type="text" name="search_city" value="{tmpl_var name='search_city'}" /></td>
+                        <td><select class="form-control" name="search_country">{tmpl_var name='search_country'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="client/reseller_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_client_pid"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
-                            <td class="tbl_col_company_name"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="company_name"}</a></td>
-                            <td class="tbl_col_contact_name"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="contact_name"}</a></td>
-							<td class="tbl_col_customer_no"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="customer_no"}</a></td>
-                            <td class="tbl_col_username"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
-                            <td class="tbl_col_city"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="city"}</a></td>
-                            <td class="tbl_col_country"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');"><div class="country-{tmpl_var name="countryiso"}" style="float:left"></div>{tmpl_var name="country"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('client/reseller_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>
+                        <tr>
+                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
+                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="company_name"}</a></td>
+                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="contact_name"}</a></td>
+							<td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_no"}</a></td>
+                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
+                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="city"}</a></td>
+                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}"><span class="flags flag-{tmpl_var name="countryiso"}">{tmpl_var name="country"}</span></a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/reseller_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -64,11 +62,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
+                        <td colspan="8"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/dashboard/ajax_get_json.php b/interface/web/dashboard/ajax_get_json.php
index 2bc21d4..30a668a 100644
--- a/interface/web/dashboard/ajax_get_json.php
+++ b/interface/web/dashboard/ajax_get_json.php
@@ -40,7 +40,7 @@
 
 //if($_SESSION["s"]["user"]["typ"] == 'admin') {
 
-
+/* TODO: change sql queries */
 if($type == 'globalsearch'){
 	$q = $app->db->quote(trim($_GET["q"]));
 	$authsql = " AND ".$app->tform->getAuthSQL('r');
@@ -55,19 +55,19 @@
 	$result[] = _search('client', 'reseller', "AND limit_client != 0");
 
 	// web sites
-	$result[] = _search('sites', 'web_domain', "AND type = 'vhost'");
+	$result[] = _search('sites', 'web_vhost_domain', "AND type = 'vhost'");
 
 	// subdomains
-	$result[] = _search('sites', 'web_subdomain', "AND type = 'subdomain'");
+	$result[] = _search('sites', 'web_childdomain', "AND type = 'subdomain'", 'type=subdomain');
 
 	// web site aliases
-	$result[] = _search('sites', 'web_aliasdomain', "AND type = 'alias'");
+	$result[] = _search('sites', 'web_childdomain', "AND type = 'alias'", 'type=aliasdomain');
 
 	// vhostsubdomains
-	$result[] = _search('sites', 'web_vhost_subdomain', "AND type = 'vhostsubdomain'");
+	$result[] = _search('sites', 'web_vhost_domain', "AND type = 'vhostsubdomain'", 'type=subdomain');
 
 	// vhostaliasdomains
-	$result[] = _search('sites', 'web_vhost_aliasdomain', "AND type = 'vhostalias'");
+	$result[] = _search('sites', 'web_vhost_domain', "AND type = 'vhostalias'", 'type=aliasdomain');
 
 	// FTP users
 	$result[] = _search('sites', 'ftp_user');
@@ -76,28 +76,6 @@
 	$result[] = _search('sites', 'shell_user');
 
 	// databases
-	/*
-		$result_databases = array('cheader' => array(), 'cdata' => array());
-		if(in_array('sites', $modules)){
-			$sql = "SELECT * FROM web_database WHERE database_name LIKE '%".$q."%' OR database_user LIKE '%".$q."%' OR remote_ips LIKE '%".$q."%'".$authsql." ORDER BY database_name";
-			$results = $app->db->queryAllRecords($sql);
-
-			if(is_array($results) && !empty($results)){
-				$result_databases['cheader'] = array('title' => 'Databases',
-														'total' => count($results),
-														'limit' => count($results)
-													);
-				foreach($results as $result){
-					$description = 'Database User: '.$result['database_user'].' - Remote IPs: '.$result['remote_ips'];
-					$result_databases['cdata'][] = array('title' => $result['database_name'],
-												'description' => $description,
-												'onclick' => 'capp(\'sites\',\'sites/database_edit.php?id='.$result['database_id'].'\');',
-												'fill_text' => strtolower($result['database_name'])
-												);
-				}
-			}
-		}
-		*/
 	$result[] = _search('sites', 'database');
 
 	// database users
@@ -156,7 +134,7 @@
 
 //}
 
-function _search($module, $section, $additional_sql = ''){
+function _search($module, $section, $additional_sql = '', $params = ''){
 	global $app, $q, $authsql, $modules;
 
 	$result_array = array('cheader' => array(), 'cdata' => array());
@@ -164,9 +142,13 @@
 		$search_fields = array();
 		$desc_fields = array();
 		if(is_file('../'.$module.'/form/'.$section.'.tform.php')){
-			include_once '../'.$module.'/form/'.$section.'.tform.php';
+			include '../'.$module.'/form/'.$section.'.tform.php';
 
 			$category_title = $form["title"];
+			if($params == 'type=subdomain' && $section == 'web_childdomain') $category_title = 'Subdomain';
+			if($params == 'type=aliasdomain' && $section == 'web_childdomain') $category_title = 'Aliasdomain';
+			if($params == 'type=subdomain' && $section == 'web_vhost_domain') $category_title = 'Subdomain (Vhost)';
+			if($params == 'type=aliasdomain' && $section == 'web_vhost_domain') $category_title = 'Aliasdomain (Vhost)';
 			$form_file = $form["action"];
 			$db_table = $form["db_table"];
 			$db_table_idx = $form["db_table_idx"];
@@ -205,8 +187,8 @@
 		$order_clause = '';
 		if($order_by != '') $order_clause = ' ORDER BY '.$order_by;
 
-		$sql = "SELECT * FROM ".$db_table." WHERE ".$where_clause.$authsql.$order_clause." LIMIT 0,10";
-		$results = $app->db->queryAllRecords($sql);
+		$sql = "SELECT * FROM ?? WHERE ".$where_clause.$authsql.$order_clause." LIMIT 0,10";
+		$results = $app->db->queryAllRecords($sql, $db_table);
 
 		if(is_array($results) && !empty($results)){
 			$lng_file = '../'.$module.'/lib/lang/'.$_SESSION['s']['language'].'_'.$section.'.lng';
@@ -227,7 +209,7 @@
 
 				$result_array['cdata'][] = array('title' => $wb[$title_key.'_txt'].': '.$result[$title_key],
 					'description' => $description,
-					'onclick' => "capp('".$module."','".$module."/".$form_file."?id=".$result[$db_table_idx]."');",
+					'onclick' => "ISPConfig.capp('".$module."','".$module."/".$form_file.urlencode("?id=".$result[$db_table_idx]).($params != ''? urlencode('&'.$params) : '')."');",
 					'fill_text' => strtolower($result[$title_key])
 				);
 			}
diff --git a/interface/web/dashboard/dashboard.php b/interface/web/dashboard/dashboard.php
index 485bb32..51068b1 100644
--- a/interface/web/dashboard/dashboard.php
+++ b/interface/web/dashboard/dashboard.php
@@ -51,7 +51,7 @@
 if($_SESSION['s']['user']['typ'] == 'admin') {
 	$name = $_SESSION['s']['user']['username'];
 } else {
-	$tmp = $app->db->queryOneRecord("SELECT contact_name FROM client WHERE username = '".$app->db->quote($_SESSION['s']['user']['username'])."'");
+	$tmp = $app->db->queryOneRecord("SELECT contact_name FROM client WHERE username = ?", $_SESSION['s']['user']['username']);
 	$name = $tmp['contact_name'];
 }
 
@@ -146,7 +146,7 @@
 $dashlet_list = array();
 $handle = @opendir(ISPC_WEB_PATH.'/dashboard/dashlets');
 while ($file = @readdir($handle)) {
-	if ($file != '.' && $file != '..' && !is_dir($file)) {
+	if ($file != '.' && $file != '..' && !is_dir(ISPC_WEB_PATH.'/dashboard/dashlets/'.$file)) {
 		$dashlet_name = substr($file, 0, -4);
 		$dashlet_class = 'dashlet_'.$dashlet_name;
 		include_once ISPC_WEB_PATH.'/dashboard/dashlets/'.$file;
@@ -157,8 +157,8 @@
 
 /* Which dashlets in which column */
 /******************************************************************************/
-$default_leftcol_dashlets = array('modules', 'invoices', 'quota', 'mailquota');
-$default_rightcol_dashlets = array('limits');
+$default_leftcol_dashlets = array('modules', 'invoices', 'quota', 'mailquota', 'databasequota');
+$default_rightcol_dashlets = array('customer', 'products', 'shop', 'limits');
 
 $app->uses('getconf');
 $dashlets_config = $app->getconf->get_global_config('misc');
diff --git a/interface/web/dashboard/dashlets/databasequota.php b/interface/web/dashboard/dashlets/databasequota.php
new file mode 100644
index 0000000..6880d78
--- /dev/null
+++ b/interface/web/dashboard/dashlets/databasequota.php
@@ -0,0 +1,41 @@
+<?php
+
+class dashlet_databasequota {
+
+	function show() {
+		global $app;
+
+		//* Loading Template
+		$app->uses('tpl,quota_lib');
+
+		$tpl = new tpl;
+		$tpl->newTemplate("dashlets/templates/databasequota.htm");
+
+		$wb = array();
+		$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_databasequota.lng';
+		if(is_file($lng_file)) include $lng_file;
+		$tpl->setVar($wb);
+
+		$databases = $app->quota_lib->get_databasequota_data( ($_SESSION["s"]["user"]["typ"] != 'admin') ? $_SESSION['s']['user']['client_id'] : null);
+		//print_r($databases);
+
+		$has_databasequota = false;
+		if(is_array($databases) && !empty($databases)){
+			$tpl->setloop('databasequota', $databases);
+			$has_databasequota = isset($databases[0]['used']);
+		}
+		$tpl->setVar('has_databasequota', $has_databasequota);
+		
+		return $tpl->grab();
+	}
+
+}
+
+
+
+
+
+
+
+
+?>
diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php
index 87898eb..2455da8 100644
--- a/interface/web/dashboard/dashlets/limits.php
+++ b/interface/web/dashboard/dashlets/limits.php
@@ -130,7 +130,7 @@
 
 		if($user_is_admin == false) {
 			$client_group_id = $app->functions->intval($_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");
+			$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();
@@ -143,10 +143,15 @@
 			}
 			if($value != 0 || $value == $wb['unlimited_txt']) {
 				$value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value;
+				$usage = $this->_get_limit_usage($limit);
+				$percentage = ($value == '-1' || $value == 0 ? 0 : round(100 * $usage / $value));
 				$rows[] = array('field' => $field,
 					'field_txt' => $wb[$field.'_txt'],
 					'value' => $value_formatted,
-					'usage' => $this->_get_limit_usage($limit));
+					'value_raw' => $value,
+					'usage' => $usage,
+					'usage_raw' => $usage,
+					'percentage' => $percentage);
 			}
 		}
 		$tpl->setLoop('rows', $rows);
@@ -159,10 +164,10 @@
 	function _get_limit_usage($limit) {
 		global $app;
 
-		$sql = "SELECT count(sys_userid) as number FROM ".$app->db->quote($limit['db_table'])." WHERE ";
+		$sql = "SELECT count(sys_userid) as number FROM ?? WHERE ";
 		if($limit['db_where'] != '') $sql .= $limit['db_where']." AND ";
 		$sql .= $app->tform->getAuthSQL('r');
-		$rec = $app->db->queryOneRecord($sql);
+		$rec = $app->db->queryOneRecord($sql, $limit['db_table']);
 		return $rec['number'];
 
 	}
diff --git a/interface/web/dashboard/dashlets/modules.php b/interface/web/dashboard/dashlets/modules.php
index 1b1d2ef..da1eb0b 100644
--- a/interface/web/dashboard/dashlets/modules.php
+++ b/interface/web/dashboard/dashlets/modules.php
@@ -28,19 +28,32 @@
 					include_once '../' . $mt.'/lib/module.conf.php';
 					/* We don't want to show the dashboard */
 					if ($mt != 'dashboard') {
+						if($mt == 'dns'){
+							$dns_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE dns_server = 1 AND active = 1");
+							if($dns_servers['cnt'] == 0) continue;
+						}
+						if($mt == 'mail'){
+							$mail_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE mail_server = 1 AND active = 1");
+							if($mail_servers['cnt'] == 0) continue;
+						}
+						if($mt == 'sites'){
+							$web_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE web_server = 1 AND active = 1");
+							if($web_servers['cnt'] == 0) continue;
+						}
+					
 						$module_title = $app->lng($module['title']);
 						if(function_exists('mb_strlen')) {
 							if(mb_strlen($module_title, "UTF-8") > 8) $module_title = mb_substr($module_title, 0, 7, "UTF-8").'..';
 						} else {
 							if(strlen($module_title) > 8) $module_title = substr($module_title, 0, 7).'..';
 						}
-						$mod[] = array( 'modules_title'  => $module_title,
+						$mod[$module['order']] = array( 'modules_title'  => $module_title,
 							'modules_startpage' => $module['startpage'],
 							'modules_name'   => $module['name']);
 					}
 				}
 			}
-
+			ksort($mod);
 			$tpl->setloop('modules', $mod);
 		}
 
diff --git a/interface/web/dashboard/dashlets/templates/databasequota.htm b/interface/web/dashboard/dashlets/templates/databasequota.htm
new file mode 100644
index 0000000..828e344
--- /dev/null
+++ b/interface/web/dashboard/dashlets/templates/databasequota.htm
@@ -0,0 +1,28 @@
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='databasequota_txt'}</caption>
+		<thead class="dark form-group-sm">
+		  <tr>
+			<th>{tmpl_var name='database_txt'}</th>
+			<th>{tmpl_var name='used_txt'}</th>
+			<th colspan="2">{tmpl_var name='quota_txt'}</th>
+		  </tr>
+		</thead>
+		<tbody>
+		<tmpl_loop name='databasequota'>
+			<tr>
+				<td>{tmpl_var name='database_name'}</td>
+				<td>{tmpl_var name='used'}</td>
+				<td>{tmpl_var name='database_quota'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
+	</div>
\ No newline at end of file
diff --git a/interface/web/dashboard/dashlets/templates/limits.htm b/interface/web/dashboard/dashlets/templates/limits.htm
index 11fe0bb..145d54a 100644
--- a/interface/web/dashboard/dashlets/templates/limits.htm
+++ b/interface/web/dashboard/dashlets/templates/limits.htm
@@ -1,11 +1,26 @@
-	<h2>{tmpl_var name='limits_txt'}</h2>
-	<div style="width:350px;">
-	<table class="list">
-	<tmpl_loop name='rows'>
-		<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-		  <td>{tmpl_var name='field_txt'}</td>
-		  <td style="white-space: nowrap">{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</td>
-		</tr>
-	</tmpl_loop>
-	</table>
-	</div>
\ No newline at end of file
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='limits_txt'}</caption>
+		<thead class="dark form-group-sm">
+		  <tr>
+			<th>&nbsp;</th>
+			<th colspan='2'>&nbsp;</th>
+		  </tr>
+		</thead>
+		<tbody>
+		<tmpl_loop name='rows'>
+			<tr>
+				<td>{tmpl_var name='field_txt'}</td>
+				<td>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="percentage" op="<" value="50"}success{tmpl_elseif name="percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="percentage"}' style='width:{tmpl_var name="percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
+	</div>
diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm
index a239c48..3c3bd2c 100644
--- a/interface/web/dashboard/dashlets/templates/mailquota.htm
+++ b/interface/web/dashboard/dashlets/templates/mailquota.htm
@@ -1,29 +1,30 @@
-<div style="float: left;">
-	<h2>{tmpl_var name='mailquota_txt'}</h2>
-	<div style="width:350px;">
-	<table class="list">
-		<thead>
-		<tr>
-		  <td>{tmpl_var name='email_txt'}</td>
-		  <td>{tmpl_var name='name_txt'}</td>
-		  <td>{tmpl_var name='used_txt'}</td>
-		  <td>{tmpl_var name='quota_txt'}</td>
-		</tr>
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='mailquota_txt'}</caption>
+		<thead class="dark form-group-sm">
+		  <tr>
+			<th>{tmpl_var name='email_txt'}</th>
+			<th>{tmpl_var name='name_txt'}</th>
+			<th>{tmpl_var name='used_txt'}</th>
+			<th colspan="2">{tmpl_var name='quota_txt'}</th>
+		  </tr>
 		</thead>
-	<tmpl_if name="has_mailquota">
-	<tmpl_loop name='mailquota'>
-		<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='email'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='name'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='used'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='quota'}</td>
-		</tr>
-	</tmpl_loop>
-	<tmpl_else>
-	<tr>
-	  <td colspan="4" style="text-align:center;">{tmpl_var name='no_email_accounts_txt'}</td>
-	</tr>
-	</tmpl_if>
-	</table>
-	</div>
-</div>
\ No newline at end of file
+		<tbody>
+		<tmpl_loop name='mailquota'>
+			<tr>
+				<td>{tmpl_var name='email'}</td>
+				<td>{tmpl_var name='name'}</td>
+				<td>{tmpl_var name='used'}</td>
+				<td>{tmpl_var name='quota'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
+	</div>
\ No newline at end of file
diff --git a/interface/web/dashboard/dashlets/templates/modules.htm b/interface/web/dashboard/dashlets/templates/modules.htm
index 03fb8cb..0f60b1b 100644
--- a/interface/web/dashboard/dashlets/templates/modules.htm
+++ b/interface/web/dashboard/dashlets/templates/modules.htm
@@ -1,10 +1,18 @@
 	<h2>{tmpl_var name='available_modules_txt'}</h2>
-	<div style="width:350px;">
+	<div style='margin: 0 auto;'>
+	<ul class='modules clear'>
 	<tmpl_loop name='modules'>
-		<div class="dashboard-modules {tmpl_var name='modules_name'}">
-			<a href="#" onclick="capp('{tmpl_var name='modules_name'}')">
-			{tmpl_var name='modules_title'}
-			</a>
-		</div>
+		<li>
+			<div class='clear'>
+			  <div class='icon icon-{tmpl_var name='modules_name'}'></div>
+			  <div class='left'>
+				<div class='title'>{tmpl_var name='modules_title'}</div>
+			  </div>
+			</div>
+			<div class='btn btn-default button'>
+			  <a href='#' data-capp='{tmpl_var name="modules_name"}'>Go to {tmpl_var name='modules_title'}</a>
+			</div>
+		</li>
 	</tmpl_loop>
+	</ul>
 	</div>
\ No newline at end of file
diff --git a/interface/web/dashboard/dashlets/templates/quota.htm b/interface/web/dashboard/dashlets/templates/quota.htm
index feb8e1f..09895a6 100644
--- a/interface/web/dashboard/dashlets/templates/quota.htm
+++ b/interface/web/dashboard/dashlets/templates/quota.htm
@@ -1,29 +1,30 @@
-<div style="float: left;">
-	<h2>{tmpl_var name='quota_txt'}</h2>
-	<div style="width:350px;">
-	<table class="list">
-		<thead>
-		<tr>
-		  <td>{tmpl_var name='domain_txt'}</td>
-		  <td>{tmpl_var name='used_txt'}</td>
-		  <td>{tmpl_var name='soft_txt'}</td>
-		  <td>{tmpl_var name='hard_txt'}</td>
-		</tr>
+	<div class='table-wrapper'>
+	  <table class='table'>
+		<caption>{tmpl_var name='quota_txt'}</caption>
+		<thead class="dark form-group-sm">
+		  <tr>
+			<th>{tmpl_var name='domain_txt'}</th>
+			<th>{tmpl_var name='used_txt'}</th>
+			<th>{tmpl_var name='soft_txt'}</th>
+			<th colspan="2">{tmpl_var name='hard_txt'}</th>
+		  </tr>
 		</thead>
-	<tmpl_if name="has_quota">
-	<tmpl_loop name='quota'>
-		<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='domain'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='used'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='soft'}</td>
-		  <td style="color:{tmpl_var name='display_colour'}">{tmpl_var name='hard'}</td>
-		</tr>
-	</tmpl_loop>
-	<tmpl_else>
-	<tr>
-	  <td colspan="4" style="text-align:center;">{tmpl_var name='no_sites_txt'}</td>
-	</tr>
-	</tmpl_if>
-	</table>
+		<tbody>
+		<tmpl_loop name='quota'>
+			<tr>
+				<td>{tmpl_var name='domain'}</td>
+				<td>{tmpl_var name='used'}</td>
+				<td>{tmpl_var name='soft'}</td>
+				<td>{tmpl_var name='hard'}</td>
+				<td>
+				<div class='progress'>
+					<div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
+					<span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='soft'}</span>
+					</div>
+				</div>
+				</td>
+			</tr>
+		</tmpl_loop>
+		</tbody>
+	  </table>
 	</div>
-</div>
\ 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 b71bd16..176805e 100644
--- a/interface/web/dashboard/lib/custom_menu.inc.php
+++ b/interface/web/dashboard/lib/custom_menu.inc.php
@@ -71,7 +71,7 @@
 				$rows[] = array('title' => $item->get_title(),
 					'link' => $item->get_link(),
 					'content' => $item->get_content(),
-					'date' => $item->get_date('Y-m-d')
+					'date' => $item->get_date($app->lng('conf_format_dateshort'))
 				);
 			}
 			$n++;
diff --git a/interface/web/dashboard/lib/lang/ar_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/ar_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/ar_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/bg_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/bg_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/bg_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/cz_dashlet_databasequota.lng
new file mode 100644
index 0000000..2a33b3d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['mailquota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/de_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/de_dashlet_databasequota.lng
new file mode 100644
index 0000000..6c8660d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/de_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Datenbank Quota';
+$wb['database_txt'] = 'Datenbank Name';
+$wb['used_txt'] = 'Verwendet';
+$wb['quota_txt'] = 'Verfügbar';
+$wb['no_database_accounts_txt'] = 'Keine Datenbanken gefunden.';
+?>
diff --git a/interface/web/dashboard/lib/lang/el_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/el_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/el_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/en_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/en_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/en_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/es_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/es_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/fi_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/fi_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/fi_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/fr_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/fr_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/fr_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/hr_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/hr_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/hr_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/hu_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/hu_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/hu_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/id_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/id_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/id_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/it_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/ja_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/ja_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/ja_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/pl_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/pl_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/pl_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/pt_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/pt_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/pt_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/ro_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/ro_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/ro_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/ru_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/ru_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/ru_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/se_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/se_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/sk_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/sk_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/sk_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
new file mode 100644
index 0000000..bd2402d
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Database Name';
+$wb['used_txt'] = 'Used Space';
+$wb['quota_txt'] = 'Quota';
+$wb['no_database_accounts_txt'] = 'No databases found.';
+?>
diff --git a/interface/web/dashboard/lib/module.conf.php b/interface/web/dashboard/lib/module.conf.php
index 67f769e..4471f9b 100644
--- a/interface/web/dashboard/lib/module.conf.php
+++ b/interface/web/dashboard/lib/module.conf.php
@@ -32,6 +32,7 @@
 $module['template']  = 'dashboard.tpl.htm';
 $module['startpage']  = 'dashboard/dashboard.php';
 $module['tab_width']    = '';
+$module['order']    = '1';
 
 //$items = array();
 //
diff --git a/interface/web/dashboard/templates/custom_menu.htm b/interface/web/dashboard/templates/custom_menu.htm
index 4b06779..05e2d4d 100644
--- a/interface/web/dashboard/templates/custom_menu.htm
+++ b/interface/web/dashboard/templates/custom_menu.htm
@@ -1,5 +1,5 @@
-<ul id="submenu">
-    <li class="title"><a>{tmpl_var name='latest_news_txt'}</a></li>
+<header>{tmpl_var name='latest_news_txt'}</header>
+<ul>
     <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 />
diff --git a/interface/web/dashboard/templates/dashboard.htm b/interface/web/dashboard/templates/dashboard.htm
index 231fb54..65ccc7e 100644
--- a/interface/web/dashboard/templates/dashboard.htm
+++ b/interface/web/dashboard/templates/dashboard.htm
@@ -1,52 +1,32 @@
-<h1><tmpl_var name="welcome_user"></h1>
-<hr />
-<div class="panel panel_dashboard">
-    <div>
-        <tmpl_if name='error'>
-            <div class="systemmonitor-state state-error">
-                <div class="status"></div>
-                <div class="statusMsg">
-                    <tmpl_loop name="error">
-                        {tmpl_var name='error_msg'}
-                    </tmpl_loop>
-                </div>
-            </div>
-        </tmpl_if>
-        <tmpl_if name='warning'>
-            <div class="systemmonitor-state state-warning">
-                <div class="status"></div>
-                <div class="statusMsg">
-                    <tmpl_loop name="warning">
-                        {tmpl_var name='warning_msg'}
-                    </tmpl_loop>
-                </div>
-            </div>
-        </tmpl_if>
-        <tmpl_if name='info'>
-            <div class="systemmonitor-state state-info">
-                <div class="status"></div>
-                <div class="statusMsg">
-                    <tmpl_loop name="info">
-                        {tmpl_var name='info_msg'}
-                    </tmpl_loop>
-                </div>
-            </div>
-        </tmpl_if>
-    </div>
-    <div style="float:left; width:350px;">
-        <tmpl_loop name='leftcol'>
-            {tmpl_var name='content'}
-			<tmpl_if name='content'>
-            <p style="clear:left">&nbsp;</p>
-			</tmpl_if>
-        </tmpl_loop>
-    </div>
-    <div style="float:right; width:350px;padding-left:15px;">
-        <tmpl_loop name='rightcol'>
-            {tmpl_var name='content'}
-			<tmpl_if name='content'>
-            <p>&nbsp;</p>
-			</tmpl_if>
-        </tmpl_loop>
-    </div>
-</div>
\ No newline at end of file
+<div class='page-header'>
+  <h1>Welcome Admin</h1>
+</div>
+
+<tmpl_if name='error'>
+	<div class="alert alert-danger">
+		<tmpl_loop name="error">
+			{tmpl_var name='error_msg'}
+		</tmpl_loop>
+	</div>
+</tmpl_if>
+<tmpl_if name='warning'>
+	<div class="alert alert-danger">
+		<tmpl_loop name="warning">
+			{tmpl_var name='warning_msg'}
+		</tmpl_loop>
+	</div>
+</tmpl_if>
+<tmpl_if name='info'>
+	<div class="alert alert-notification">
+		<tmpl_loop name="info">
+			{tmpl_var name='info_msg'}
+		</tmpl_loop>
+	</div>
+</tmpl_if>
+
+<tmpl_loop name='leftcol'>
+	{tmpl_var name='content'}
+</tmpl_loop>
+<tmpl_loop name='rightcol'>
+	{tmpl_var name='content'}
+</tmpl_loop>
diff --git a/interface/web/dns/ajax_get_json.php b/interface/web/dns/ajax_get_json.php
index 781fa8e..c2da4dc 100644
--- a/interface/web/dns/ajax_get_json.php
+++ b/interface/web/dns/ajax_get_json.php
@@ -34,128 +34,25 @@
 //* Check permissions for module
 $app->auth->check_module_permissions('dns');
 
-//$app->uses('tform');
-
 $type = $_GET["type"];
 
-//if($_SESSION["s"]["user"]["typ"] == 'admin') {
-
-
 if($type == 'get_ipv4'){
-	//$q = $app->db->quote(trim($_GET["q"]));
-	//$authsql = " AND ".$app->tform->getAuthSQL('r');
-	//$modules = explode(',', $_SESSION['s']['user']['modules']);
-
 	$result = array();
 
 	// ipv4
-	//$result[] = _search('admin', 'server_ip', "AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
 	$result[] = $app->functions->suggest_ips('IPv4');
 
 	$json = $app->functions->json_encode($result);
 }
 
 if($type == 'get_ipv6'){
-	//$q = $app->db->quote(trim($_GET["q"]));
-	//$authsql = " AND ".$app->tform->getAuthSQL('r');
-	//$modules = explode(',', $_SESSION['s']['user']['modules']);
-
 	$result = array();
 
 	// ipv6
-	//$result[] = _search('admin', 'server_ip', "AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
 	$result[] = $app->functions->suggest_ips('IPv6');
 
 	$json = $app->functions->json_encode($result);
 }
-
-//}
-
-/*
-function _search($module, $section, $additional_sql = '', $unique = false){
-	global $app, $q, $authsql, $modules;
-
-	$result_array = array('cheader' => array(), 'cdata' => array());
-	if(in_array($module, $modules) || ($module == 'admin' && $section == 'server_ip')){
-		$search_fields = array();
-		$desc_fields = array();
-		if(is_file('../'.$module.'/form/'.$section.'.tform.php')){
-			include_once('../'.$module.'/form/'.$section.'.tform.php');
-
-			$category_title = $form["title"];
-			$form_file = $form["action"];
-			$db_table = $form["db_table"];
-			$db_table_idx = $form["db_table_idx"];
-			$order_by = $db_table_idx;
-
-			if(is_array($form["tabs"]) && !empty($form["tabs"])){
-				foreach($form["tabs"] as $tab){
-					if(is_array($tab['fields']) && !empty($tab['fields'])){
-						foreach($tab['fields'] as $key => $val){
-							if(isset($val['searchable']) && $val['searchable'] > 0){
-								$search_fields[] = $key." LIKE '%".$q."%'";
-								if($val['searchable'] == 1){
-									$order_by = $key;
-									$title_key = $key;
-								}
-								if($val['searchable'] == 2){
-									$desc_fields[] = $key;
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-		unset($form);
-
-		$where_clause = '';
-		if(!empty($search_fields)){
-			$where_clause = implode(' OR ', $search_fields);
-		} else {
-			// valid SQL query which returns an empty result set
-			$where_clause = '1 = 0';
-		}
-		if($where_clause != '') $where_clause = '('.$where_clause.')';
-		if($additional_sql != '') $where_clause .= ' '.$additional_sql.' ';
-		$order_clause = '';
-		if($order_by != '') $order_clause = ' ORDER BY '.$order_by;
-
-		$sql = "SELECT * FROM ".$db_table." WHERE ".$where_clause.$authsql.$order_clause." LIMIT 0,10";
-		$results = $app->db->queryAllRecords($sql);
-
-		if(is_array($results) && !empty($results)){
-			$lng_file = '../'.$module.'/lib/lang/'.$_SESSION['s']['language'].'_'.$section.'.lng';
-			if(is_file($lng_file)) include($lng_file);
-			$result_array['cheader'] = array('title' => $category_title,
-											'total' => count($results),
-											'limit' => count($results)
-											);
-			foreach($results as $result){
-				$description = '';
-				if(!empty($desc_fields)){
-					$desc_items = array();
-					foreach($desc_fields as $desc_field){
-						if($result[$desc_field] != '') $desc_items[] = $wb[$desc_field.'_txt'].': '.$result[$desc_field];
-					}
-					if(!empty($desc_items)) $description = implode(' - ', $desc_items);
-				}
-
-				$result_array['cdata'][] = array(	'title' => $wb[$title_key.'_txt'].': '.$result[$title_key],
-													'description' => $description,
-													'onclick' => '',
-													'fill_text' => $result[$title_key]
-												);
-			}
-			if($unique === true){
-				$result_array['cdata'] = array_unique($result_array['cdata']);
-				$result_array['cheader']['total'] = $result_array['cheader']['limit'] = count($result_array['cdata']);
-			}
-		}
-	}
-	return $result_array;
-}
-*/
 
 header('Content-type: application/json');
 echo $json;
diff --git a/interface/web/dns/dns_a_edit.php b/interface/web/dns/dns_a_edit.php
index 729c3c3..5b060c3 100644
--- a/interface/web/dns/dns_a_edit.php
+++ b/interface/web/dns/dns_a_edit.php
@@ -40,102 +40,17 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$app->load('tform_actions');
+class page_action extends dns_page_action {
 
-class page_action extends tform_actions {
-
-	function onShowNew() {
-		global $app, $conf;
-
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
+	protected function checkDuplicate() {
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = '".$app->db->quote($this->dataRecord["name"])."' AND zone = '".$app->db->quote($this->dataRecord["zone"])."' and data = '".$app->db->quote($this->dataRecord["data"])."' and id != ".$this->id.") OR (type = 'CNAME' AND name = '".$app->db->quote($this->dataRecord["name"])."' AND zone = '".$app->db->quote($this->dataRecord["zone"])."' and id != ".$this->id.")");
-		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("data_error_duplicate")."<br>";
-		unset($tmp);
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		if($tmp['number'] > 0) return true;
+		return false;
 	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
 }
 
 $page = new page_action;
diff --git a/interface/web/dns/dns_aaaa_edit.php b/interface/web/dns/dns_aaaa_edit.php
index ba7ae96..006e71c 100644
--- a/interface/web/dns/dns_aaaa_edit.php
+++ b/interface/web/dns/dns_aaaa_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".intval($soa['sys_groupid']), 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_alias_edit.php b/interface/web/dns/dns_alias_edit.php
index 5613810..68f2743 100644
--- a/interface/web/dns/dns_alias_edit.php
+++ b/interface/web/dns/dns_alias_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_cname_edit.php b/interface/web/dns/dns_cname_edit.php
index 8ab1e6b..b04af40 100644
--- a/interface/web/dns/dns_cname_edit.php
+++ b/interface/web/dns/dns_cname_edit.php
@@ -40,100 +40,16 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$app->load('tform_actions');
+class page_action extends dns_page_action {
 
-class page_action extends tform_actions {
-
-	function onShowNew() {
-		global $app, $conf;
-
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
+	protected function checkDuplicate() {
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = '".$app->db->quote($this->dataRecord["name"])."' AND zone = '".$app->db->quote($this->dataRecord["zone"])."' and id != ".$this->id.") OR (type = 'CNAME' AND name = '".$app->db->quote($this->dataRecord["name"])."' AND zone = '".$app->db->quote($this->dataRecord["zone"])."' and id != ".$this->id.")");
-		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("data_error_duplicate")."<br>";
-		unset($tmp);
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		if($tmp['number'] > 0) return true;
+		return false;
 	}
 
 }
diff --git a/interface/web/dns/dns_dkim_edit.php b/interface/web/dns/dns_dkim_edit.php
index 71741d0..a1c4c6f 100644
--- a/interface/web/dns/dns_dkim_edit.php
+++ b/interface/web/dns/dns_dkim_edit.php
@@ -70,12 +70,20 @@
 		}
 
 		parent::onShowNew();
+
+        $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_GET['zone']);
+        $sql=$app->db->queryOneRecord("SELECT dkim_public, dkim_selector FROM mail_domain WHERE domain = ? AND dkim = 'y' AND " . $app->tform->getAuthSQL('r'), substr_replace($soa['origin'],'',-1));
+        $public_key=str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$sql['dkim_public']);
+		$app->tpl->setVar('public_key', $public_key);
+		$app->tpl->setVar('selector', $sql['dkim_selector']);
+		$app->tpl->setVar('name', $soa['origin']);
+
 	}
 
 	function onSubmit() {
 		global $app, $conf;
 		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->intval($_POST["zone"]));
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST["zone"]);
 		// Check if Domain belongs to user
 		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
 
@@ -100,17 +108,17 @@
 		if (!empty($this->dataRecord['data'])) {
 			$this->dataRecord['data']='v=DKIM1; t=s; p='.$this->dataRecord['data'];
 			$this->dataRecord['name']=$this->dataRecord['selector'].'._domainkey.'.$this->dataRecord['name'];
+			$this->dataRecord['ttl']=60;
 		}
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
+			// Update the serial number  and timestamp of the RR record
+			$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
+			$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
+			$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
 
-		// check for duplicate entry
-		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord['zone'], $this->dataRecord['type'], $this->dataRecord['data'], $this->dataRecord['name']);
-		if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
-		if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
-
+			// check for duplicate entry
+			$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord['name']);
+			if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
+			if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
 		parent::onSubmit();
 	}
 
@@ -118,23 +126,23 @@
 		global $app, $conf;
 
 		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord['zone']));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
+		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord["zone"]);
+		$app->db->datalogUpdate('dns_rr', array("sys_groupid" => $soa['sys_groupid']), 'id', $this->id);
 
 		//* Update the serial number of the SOA record
 		$soa_id = $app->functions->intval($_POST["zone"]);
 		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
 	}
 
 	function onAfterUpdate() {
 		global $app, $conf;
 
 		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord["zone"]));
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord["zone"]);
 		$soa_id = $app->functions->intval($_POST["zone"]);
 		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
 	}
 
 }
diff --git a/interface/web/dns/dns_dkim_get.php b/interface/web/dns/dns_dkim_get.php
deleted file mode 100644
index 9c33ce2..0000000
--- a/interface/web/dns/dns_dkim_get.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
-Copyright (c) 2007 - 2013, Till Brehm, projektfarm Gmbh
-Copyright (c) 2013, Florian Schaal, info@schaal-24.de
-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.
-*/
-
-/**
-* This script is invoked by interface/web/dns/templates/dns_dkim_edit.htm
-* when generating the DKIM Private-key.
-*
-* return DKIM Public-Key for the DNS-record
-*/ 
-
-require_once('../../lib/config.inc.php');
-require_once('../../lib/app.inc.php');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
-
-global $app, $conf;
-
-// Loading classes
-$app->uses('tform,tform_actions');
-
-header('Content-Type: text/xml; charset=utf-8');
-header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');
-
-/**
-* This function fix PHP's messing up POST input containing characters space, dot,
-* open square bracket and others to be compatible with with the deprecated register_globals
-* @return array POST
-*/
-
-function getRealPOST() {
-    $pairs = explode("&", file_get_contents("php://input"));
-    $vars = array();
-    foreach ($pairs as $pair) {
-        $nv = explode("=", $pair, 2);
-        $name = urldecode($nv[0]);
-        $value = $nv[1];
-        $vars[$name] = $value;
-    }
-    return $vars;
-}
-
-$_POST=getRealPost();
-
-if (ctype_digit($_POST['zone'])) {
-	// Get the parent soa record of the domain
-	$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? and ?'", $app->db->quote($_POST['zone']), $app->tform->getAuthSQL('r'));
-
-	$sql=$app->db->queryOneRecord("SELECT dkim_public, dkim_selector FROM mail_domain WHERE domain = ? AND dkim = 'Y' AND ?", substr_replace($soa['origin'],'',-1), $app->tform->getAuthSQL('r'));
-	$public_key=str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$sql['dkim_public']);
-
-	echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-	echo "<formatname>\n";
-	echo "<data>".$public_key."</data>\n";
-	echo "<name>".$soa['origin']."</name>\n";
-	echo "<selector>".$sql['dkim_selector']."</selector>\n";
-	echo "</formatname>\n";
-}
-?>
diff --git a/interface/web/dns/dns_dmarc_edit.php b/interface/web/dns/dns_dmarc_edit.php
new file mode 100644
index 0000000..49bf699
--- /dev/null
+++ b/interface/web/dns/dns_dmarc_edit.php
@@ -0,0 +1,377 @@
+<?php
+/*
+Copyright (c) 2014, Florian Schaal, info@schaal-24.de
+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/dns_dmarc.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');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions,validate_dns');
+$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') {
+
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another mailbox.
+			if($client["limit_dns_record"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_dns_record"]) {
+					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
+				}
+			}
+		}
+
+		parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		$zone = $app->functions->intval($_GET['zone']);
+		// get domain-name
+		$sql = "SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryOneRecord($sql, $zone);
+		$domain_name = rtrim($rec['origin'], '.');
+
+		// set defaults
+		$dmarc_policy = 'none';
+		$dmarc_adkim = 'r';
+		$dmarc_aspf = 'r';
+		$dmarc_rf = 'afrf';
+		$dmarc_pct = 100;
+		$dmarc_ri = 86400;
+		$dmarc_sp = 'same';
+
+		//* check for an existing dmarc-record
+		$sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=DMARC1%' AND zone = ? AND name = ? AND " . $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryOneRecord($sql, $zone, '_dmarc.'.$domain_name.'.');
+		if ( isset($rec) && !empty($rec) ) {
+			$this->id = 1;
+			$old_data = strtolower($rec['data']);
+			$app->tpl->setVar("data", $old_data);
+			if ($rec['active'] == 'Y') $app->tpl->setVar("active", "CHECKED");
+			$dmarc_rua = '';
+			$dmarc_ruf = '';
+			$dmac_rf = '';
+			$dmac_rua = '';
+			$dmac_ruf = '';
+			// browse through data
+			$temp = explode('; ', $old_data);
+			foreach ($temp as $part) {
+				if (preg_match("/^p=/", $part)) $dmarc_policy = str_replace('p=', '', $part);
+				if (preg_match("/^rua=/", $part)) {
+					$dmarc_rua = str_replace(array('rua=','mailto:'), '', $part).' ';
+					$dmarc_rua = str_replace(',', ' ', $dmarc_rua);
+				}
+				if (preg_match("/^ruf=/", $part)) {
+					$dmarc_ruf = str_replace(array('ruf=','mailto:'), '', $part).' ';
+					$dmarc_ruf = str_replace(',', ' ', $dmarc_ruf);
+				}
+				if (preg_match("/^fo=/", $part)) $dmarc_fo = str_replace('fo=', '', $part);
+				if (preg_match("/^adkim=/", $part)) $dmarc_adkim = str_replace('adkim=', '', $part);
+				if (preg_match("/^aspf=/", $part)) $dmarc_aspf = str_replace('aspf=', '', $part);
+				if (preg_match("/^rf=/", $part)) $dmarc_rf = str_replace('rf=', '', $part);
+				if (preg_match("/^(afrf:iodef|iodef:afrf)$/s", $dmarc_rf)) $dmarc_rf = str_replace(':', ' ', $dmarc_rf);
+				if (preg_match("/^pct=/", $part)) $dmarc_pct = str_replace('pct=', '', $part);
+				if (preg_match("/^ri=/", $part)) $dmarc_ri = str_replace('ri=', '', $part);
+			}
+		} 
+
+		//set html-values
+		$app->tpl->setVar('domain', $domain_name);
+
+		//create dmarc-policy-list
+		$dmarc_policy_value = array( 
+			'none' => 'dmarc_policy_none_txt',
+			'quarantine' => 'dmarc_policy_quarantine_txt',
+			'reject' => 'dmarc_policy_reject_txt',
+		);
+		$dmarc_policy_list='';
+		foreach($dmarc_policy_value as $value => $txt) {
+			$selected = @($dmarc_policy == $value)?' selected':'';
+			$dmarc_policy_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
+		}
+		$app->tpl->setVar('dmarc_policy', $dmarc_policy_list);
+
+		if (!empty($dmarc_rua)) $app->tpl->setVar("dmarc_rua", $dmarc_rua);
+
+		if (!empty($dmarc_ruf)) $app->tpl->setVar("dmarc_ruf", $dmarc_ruf);
+
+		//set dmarc-fo-options
+		if (isset($dmarc_fo)) {
+			$temp = explode(':', $dmarc_fo);
+			foreach ($temp as $fo => $value) $app->tpl->setVar("dmarc_fo".$value, 'CHECKED');
+		} else
+			$app->tpl->setVar("dmarc_fo0", 'CHECKED');
+
+		unset($temp);
+
+		//create dmarc-adkim-list
+		$dmarc_adkim_value = array( 
+			'r' => 'dmarc_adkim_r_txt',
+			's' => 'dmarc_adkim_s_txt',
+		);
+		$dmarc_adkim_list='';
+		foreach($dmarc_adkim_value as $value => $txt) {
+			$selected = @($dmarc_adkim == $value)?' selected':'';
+			$dmarc_adkim_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
+		}
+		$app->tpl->setVar('dmarc_adkim', $dmarc_adkim_list);
+
+		//create dmarc-aspf-list
+		$dmarc_aspf_value = array( 
+			'r' => 'dmarc_aspf_r_txt',
+			's' => 'dmarc_aspf_s_txt',
+		);
+		$dmarc_aspf_list='';
+		foreach($dmarc_aspf_value as $value => $txt) {
+			$selected = @($dmarc_aspf == $value)?' selected':'';
+			$dmarc_aspf_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
+		}
+		$app->tpl->setVar('dmarc_aspf', $dmarc_aspf_list);
+
+		if ( strpos($dmarc_rf, 'afrf') !== false ) $app->tpl->setVar("dmarc_rf_afrf", 'CHECKED');
+		if ( strpos($dmarc_rf, 'iodef') !== false ) $app->tpl->setVar("dmarc_rf_iodef", 'CHECKED');
+
+		$app->tpl->setVar("dmarc_pct", $dmarc_pct);
+
+		$app->tpl->setVar("dmarc_ri", $dmarc_ri);
+
+		//create dmarc-sp-list
+		$dmarc_sp_value = array( 
+			'same' => 'dmarc_sp_same_txt',
+			'none' => 'dmarc_sp_none_txt',
+			'quarantine' => 'dmarc_sp_quarantine_txt',
+			'reject' => 'dmarc_sp_reject_txt',
+		);
+		$dmarc_sp_list='';
+		foreach($dmarc_sp_value as $value => $txt) {
+			$selected = @($dmarc_sp == $value)?' selected':'';
+			$dmarc_sp_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
+		}
+		$app->tpl->setVar('dmarc_sp', $dmarc_sp_list);
+
+		parent::onShowEnd();
+
+	}
+
+	function onSubmit() {
+		global $app, $conf;
+
+		// Get the parent soa record of the domain
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST['zone']);
+
+		// Check if Domain belongs to user
+		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
+
+		// Check the client limits, if user is not the admin
+		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another mailbox.
+			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_dns_record"]) {
+					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
+				}
+			}
+		} // end if user is not admin
+
+		$domain_name = rtrim($soa['origin'], '.');
+		// DMARC requieres at least one active dkim-record...
+		$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND data like 'v=DKIM1;%' AND active='Y'";
+		$temp = $app->db->queryAllRecords($sql, '%._domainkey.'.$domain_name.'.');
+		if (empty($temp)) {
+			if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+			$app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_dkim_txt'].$email;
+		}
+
+		// ... and an active spf-record (this breaks the current draft but DMARC is useless if you use DKIM or SPF
+		$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND (data LIKE 'v=spf1%' AND active = 'y')";
+		$temp = $app->db->queryAllRecords($sql, $domain_name.'.');
+		// abort if more than 1 active spf-records (backward-compatibility)
+		if (is_array($temp[1])) {
+			if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+			$app->tform->errorMessage .= $app->tform->wordbook['dmarc_more_spf_txt'];
+		}
+		if (empty($temp)) {
+			if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+			$app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_spf_txt'];
+		}
+		unset($temp);
+
+		//validate dmarc_pct
+		$this->dataRecord['dmarc_pct'] = $app->functions->intval($this->dataRecord['dmarc_pct']);
+		if ($this->dataRecord['dmarc_pct'] < 0) $this->dataRecord['dmarc_pct'] = 0;
+		if ($this->dataRecord['dmarc_pct'] > 100) $this->dataRecord['dmarc_pct'] = 100;
+		
+		//create dmarc-record
+		$dmarc_record[] = 'p='.$this->dataRecord['dmarc_policy'];
+
+		if (!empty($this->dataRecord['dmarc_rua'])) {
+			$dmarc_rua = explode(' ', $this->dataRecord['dmarc_rua']);
+			$dmarc_rua = array_filter($dmarc_rua);
+			foreach ($dmarc_rua as $rec) {
+				if (!filter_var($rec, FILTER_VALIDATE_EMAIL)) {
+					if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+					$app->tform->errorMessage .= $app->tform->wordbook['dmarc_invalid_email_txt'].': '.$dmarc_rua;
+				} else {
+					$temp .= 'mailto:'.$rec.',';
+				}
+			}
+			$dmarc_record[] = 'rua='.rtrim($temp, ',');
+			unset ($dmarc_rua);
+			unset($temp);
+		}
+		
+		if (!empty($this->dataRecord['dmarc_ruf'])) {
+			$dmarc_ruf = explode(' ', $this->dataRecord['dmarc_ruf']);
+			$dmarc_ruf = array_filter($dmarc_ruf);
+			foreach ($dmarc_ruf as $rec) {
+				if (!filter_var($rec, FILTER_VALIDATE_EMAIL)) {
+					if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+					$app->tform->errorMessage .= $app->tform->wordbook['dmarc_invalid_email_txt'].': '.$dmarc_rua;
+				} else {
+					$temp .= 'mailto:'.$rec.',';
+				}
+			}
+			$dmarc_record[] = 'ruf='.rtrim($temp, ',');
+			unset ($dmarc_ruf);
+			unset($temp);
+		}
+		
+		$fo_rec = '';
+		if (isset($this->dataRecord['dmarc_fo0'])) $fo_rec[] = '0';
+		if (isset($this->dataRecord['dmarc_fo1'])) $fo_rec[] = '1';
+		if (isset($this->dataRecord['dmarc_fod'])) $fo_rec[] = 'd';
+		if (isset($this->dataRecord['dmarc_fos'])) $fo_rec[] = 's';
+		if (is_array($fo_rec) && !empty($fo_rec)) {
+			$rec = 'fo='.implode(':', $fo_rec);
+			if ($rec != 'fo=0') $dmarc_record[] = 'fo='.implode(':', $fo_rec);
+			unset($rec);
+		}
+
+		if ($this->dataRecord['dmarc_adkim'] != 'r' )
+			$dmarc_record[] = 'adkim='.$this->dataRecord['dmarc_adkim'];
+
+		if ($this->dataRecord['dmarc_aspf'] != 'r' )
+			$dmarc_record[] = 'aspf='.$this->dataRecord['dmarc_aspf'];
+
+		if (isset($this->dataRecord['dmarc_rf_afrf']) && isset($this->dataRecord['dmarc_rf_iodef']))
+			$dmarc_record[] = 'rf=afrf:iodef';
+		else {
+			 if (isset($this->dataRecord['dmarc_rf_iodef']))
+				$dmarc_record[] = 'rf=iodef';
+		}
+		unset($fo_rec);
+
+		if (!empty($this->dataRecord['dmarc_pct']) && $this->dataRecord['dmarc_pct'] != 100)
+			$dmarc_record[] = 'pct='.$this->dataRecord['dmarc_pct'];
+
+		if (!empty($this->dataRecord['dmarc_ri']) && $this->dataRecord['dmarc_ri'] != '86400')
+			$dmarc_record[] = 'ri='.$this->dataRecord['dmarc_ri'];
+
+		if (!empty($this->dataRecord['dmarc_sp']) && $this->dataRecord['dmarc_sp'] != 'same')
+			$dmarc_record[] = 'sp='.$this->dataRecord['dmarc_sp'];
+
+		$temp = implode('; ', $dmarc_record);
+		if (!empty($temp))
+			$this->dataRecord['data'] = 'v=DMARC1; ' . $temp;
+		else $app->tform->errorMessage .= $app->tform->wordbook["dmarc_empty_txt"];
+
+		$this->dataRecord['name'] = '_dmarc.' . $soa['origin'];
+		if (isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'Y';
+		
+		// Set the server ID of the rr record to the same server ID as the parent record.
+		$this->dataRecord["server_id"] = $soa["server_id"];
+
+		// Update the serial number  and timestamp of the RR record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
+		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
+		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
+
+		// always update an existing entry
+		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=DMARC1%' AND name = ?", $this->dataRecord['zone'], $this->dataRecord['type'], $this->dataRecord['name']);
+		$this->id = $check['id'];
+		if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+		global $app, $conf;
+
+		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
+		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord["zone"]));
+		$app->db->datalogUpdate('dns_rr', array("sys_groupid" => $soa['sys_groupid']), 'id', $this->id);
+
+		//* Update the serial number of the SOA record
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+
+	}
+
+	function onAfterUpdate() {
+		global $app, $conf;
+
+		//* Update the serial number of the SOA record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord["zone"]));
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+	}
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/dns_edit_base.php b/interface/web/dns/dns_edit_base.php
new file mode 100644
index 0000000..9cea8b6
--- /dev/null
+++ b/interface/web/dns/dns_edit_base.php
@@ -0,0 +1,131 @@
+<?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';
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions,validate_dns');
+$app->load('tform_actions');
+
+class dns_page_action extends tform_actions {
+
+	protected function checkDuplicate() {
+		return false;
+	}
+
+	function onShowNew() {
+		global $app, $conf;
+
+		// we will check only users, not admins
+		if($_SESSION["s"]["user"]["typ"] == 'user') {
+
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another mailbox.
+			if($client["limit_dns_record"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_dns_record"]) {
+					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
+				}
+			}
+		}
+
+		parent::onShowNew();
+	}
+
+	function onSubmit() {
+		global $app, $conf;
+
+		// Get the parent soa record of the domain
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST["zone"]);
+
+		// Check if Domain belongs to user
+		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
+
+		// Check the client limits, if user is not the admin
+		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another mailbox.
+			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_dns_record"]) {
+					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
+				}
+			}
+		} // end if user is not admin
+		
+		if($this->checkDuplicate()) $app->tform->errorMessage .= $app->tform->lng("data_error_duplicate")."<br>";
+
+		// Set the server ID of the rr record to the same server ID as the parent record.
+		$this->dataRecord["server_id"] = $soa["server_id"];
+
+		// Update the serial number  and timestamp of the RR record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
+		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
+		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+		global $app, $conf;
+
+		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord["zone"]);
+		$app->db->datalogUpdate('dns_rr', array("sys_groupid" => $soa['sys_groupid']), 'id', $this->id);
+
+		//* Update the serial number of the SOA record
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+	}
+
+	function onAfterUpdate() {
+		global $app, $conf;
+
+		//* Update the serial number of the SOA record
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord["zone"]);
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+	}
+
+}
+
+?>
diff --git a/interface/web/dns/dns_hinfo_edit.php b/interface/web/dns/dns_hinfo_edit.php
index ed25dcc..58169cd 100644
--- a/interface/web/dns/dns_hinfo_edit.php
+++ b/interface/web/dns/dns_hinfo_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php
index 5598b56..7e96a42 100644
--- a/interface/web/dns/dns_import.php
+++ b/interface/web/dns/dns_import.php
@@ -106,13 +106,13 @@
 
 	// Get the limits of the client
 	$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-	$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+	$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 
 	// load the list of clients
-	$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".intval($client['client_id'])." ORDER BY client.company_name, client.contact_name, sys_group.name";
-	$clients = $app->db->queryAllRecords($sql);
-	$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".intval($client['client_id']));
+	$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+	$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+	$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 	$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 	if(is_array($clients)) {
 		foreach( $clients as $client) {
@@ -127,7 +127,7 @@
 if($_SESSION["s"]["user"]["typ"] != 'admin')
 {
 	$client_group_id = $_SESSION["s"]["user"]["default_group"];
-	$client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+	$client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 	$client_dns['dns_servers_ids'] = explode(',', $client_dns['dns_servers']);
 
@@ -138,8 +138,8 @@
 		$app->tpl->setVar('server_id_value', $client_dns['dns_servers_ids'][0]);
 	}
 
-	$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client_dns['dns_servers'] . ");";
-	$dns_servers = $app->db->queryAllRecords($sql);
+	$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+	$dns_servers = $app->db->queryAllRecords($sql, $client_dns['dns_servers_ids']);
 
 	$options_dns_servers = "";
 
@@ -199,8 +199,8 @@
 if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])){
 	$valid_zone_file = FALSE;
 
-	$sql = "SELECT server_name FROM `server` WHERE server_id=".$app->functions->intval($server_id)." OR mirror_server_id=".$app->functions->intval($server_id)." ORDER BY server_name ASC";
-	$servers = $app->db->queryAllRecords($sql);
+	$sql = "SELECT server_name FROM `server` WHERE server_id=? OR mirror_server_id=? ORDER BY server_name ASC";
+	$servers = $app->db->queryAllRecords($sql, $server_id, $server_id);
 	for ($i=0;$i<count($servers);$i++)
 	{
 		if (substr($servers[$i]['server_name'], strlen($servers[$i]['server_name'])-1) != ".")
@@ -695,21 +695,38 @@
 
 	// Insert the soa record
 	$sys_userid = $_SESSION['s']['user']['userid'];
-	$origin = $app->db->quote($soa['name']);
-	$ns = $app->db->quote($soa['ns']);
-	$mbox = $app->db->quote($soa['mbox']);
-	$refresh = $app->db->quote($soa['refresh']);
-	$retry = $app->db->quote($soa['retry']);
-	$expire = $app->db->quote($soa['expire']);
-	$minimum = $app->db->quote($soa['minimum']);
-	$ttl = $app->db->quote($soa['ttl']);
-	$xfer = $app->db->quote('');
-	$serial = $app->db->quote($app->functions->intval($soa['serial'])+1);
+	$origin = $soa['name'];
+	$ns = $soa['ns'];
+	$mbox = $soa['mbox'];
+	$refresh = $soa['refresh'];
+	$retry = $soa['retry'];
+	$expire = $soa['expire'];
+	$minimum = $soa['minimum'];
+	$ttl = $soa['ttl'];
+	$xfer = '';
+	$serial = $app->functions->intval($soa['serial']+1);
 	//print_r($soa);
 	//die();
 	if($valid_zone_file){
-		$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `origin`, `ns`, `mbox`, `serial`, `refresh`, `retry`, `expire`, `minimum`, `ttl`, `active`, `xfer`) VALUES
-		('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$origin', '$ns', '$mbox', '$serial', '$refresh', '$retry', '$expire', '$minimum', '$ttl', 'Y', '$xfer')";
+		$insert_data = array(
+			"sys_userid" => $sys_userid,
+			"sys_groupid" => $sys_groupid,
+			"sys_perm_user" => 'riud',
+			"sys_perm_group" => 'riud',
+			"sys_perm_other" => '',
+			"server_id" => $server_id,
+			"origin" => $origin,
+			"ns" => $ns,
+			"mbox" => $mbox,
+			"serial" => $serial,
+			"refresh" => $refresh,
+			"retry" => $retry,
+			"expire" => $expire,
+			"minimum" => $minimum,
+			"ttl" => $ttl,
+			"active" => 'Y',
+			"xfer" => $xfer
+		);
 		$dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
 
 		// Insert the dns_rr records
@@ -717,8 +734,21 @@
 		{
 			foreach($dns_rr as $rr)
 			{
-				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES
-				('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '".$app->db->quote($rr['name'])."', '".$app->db->quote($rr['type'])."', '".$app->db->quote($rr['data'])."', '".$app->db->quote($rr['aux'])."', '".$app->db->quote($rr['ttl'])."', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $sys_userid,
+					"sys_groupid" => $sys_groupid,
+					"sys_perm_user" => 'riud',
+					"sys_perm_group" => 'riud',
+					"sys_perm_other" => '',
+					"server_id" => $server_id,
+					"zone" => $dns_soa_id,
+					"name" => $rr['name'],
+					"type" => $rr['type'],
+					"data" => $rr['data'],
+					"aux" => $rr['aux'],
+					"ttl" => $rr['ttl'],
+					"active" => 'Y'
+				);
 				$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 			}
 		}
diff --git a/interface/web/dns/dns_mx_edit.php b/interface/web/dns/dns_mx_edit.php
index 7f41b78..1d0037e 100644
--- a/interface/web/dns/dns_mx_edit.php
+++ b/interface/web/dns/dns_mx_edit.php
@@ -40,79 +40,17 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
+class page_action extends dns_page_action {
 
 	function onInsert() {
 		global $app, $conf;
 
 		// Check if record is existing already
-		$duplicate_mx = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ".$app->functions->intval($this->dataRecord["zone"])." AND name = '".$app->db->quote($this->dataRecord["name"])."' AND type = '".$app->db->quote($this->dataRecord["type"])."' AND data = '".$app->db->quote($this->dataRecord["data"])."' AND ".$app->tform->getAuthSQL('r'));
+		$duplicate_mx = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND name = ? AND type = ? AND data = ? AND ".$app->tform->getAuthSQL('r'), $this->dataRecord["zone"], $this->dataRecord["name"], $this->dataRecord["type"], $this->dataRecord["data"]);
+		
 
 		if(is_array($duplicate_mx) && !empty($duplicate_mx)) $app->error($app->tform->wordbook["duplicate_mx_record_txt"]);
 
@@ -123,34 +61,11 @@
 		global $app, $conf;
 
 		// Check if record is existing already
-		$duplicate_mx = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ".$app->functions->intval($this->dataRecord["zone"])." AND name = '".$app->db->quote($this->dataRecord["name"])."' AND type = '".$app->db->quote($this->dataRecord["type"])."' AND data = '".$app->db->quote($this->dataRecord["data"])."' AND id != ".$app->functions->intval($this->dataRecord["id"])." AND ".$app->tform->getAuthSQL('r'));
+		$duplicate_mx = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND name = ? AND type = ? AND data = ? AND id != ? AND ".$app->tform->getAuthSQL('r'), $this->dataRecord["zone"], $this->dataRecord["name"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord["id"]);
 
 		if(is_array($duplicate_mx) && !empty($duplicate_mx)) $app->error($app->tform->wordbook["duplicate_mx_record_txt"]);
 
 		parent::onUpdate();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
 	}
 
 }
diff --git a/interface/web/dns/dns_ns_edit.php b/interface/web/dns/dns_ns_edit.php
index b61254d..faded5f 100644
--- a/interface/web/dns/dns_ns_edit.php
+++ b/interface/web/dns/dns_ns_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_ptr_edit.php b/interface/web/dns/dns_ptr_edit.php
index 4e26f22..1c3675d 100644
--- a/interface/web/dns/dns_ptr_edit.php
+++ b/interface/web/dns/dns_ptr_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_rp_edit.php b/interface/web/dns/dns_rp_edit.php
index 62bf1a9..1e55500 100644
--- a/interface/web/dns/dns_rp_edit.php
+++ b/interface/web/dns/dns_rp_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_rr_del.php b/interface/web/dns/dns_rr_del.php
index a20c9c0..6504123 100644
--- a/interface/web/dns/dns_rr_del.php
+++ b/interface/web/dns/dns_rr_del.php
@@ -54,10 +54,10 @@
 		global $app; $conf;
 
 		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord["zone"]);
 		$soa_id = $app->functions->intval($this->dataRecord["zone"]);
 		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
 	}
 
 }
diff --git a/interface/web/dns/dns_slave_del.php b/interface/web/dns/dns_slave_del.php
index d3ca18f..d8b2a24 100644
--- a/interface/web/dns/dns_slave_del.php
+++ b/interface/web/dns/dns_slave_del.php
@@ -56,7 +56,7 @@
 		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 = '".$app->functions->intval($this->id)."'");
+		$records = $app->db->queryAllRecords("SELECT id FROM dns_slave WHERE zone = ?", $this->id);
 		foreach($records as $rec) {
 			$app->db->datalogDelete('dns_slave', 'id', $rec['id']);
 		}
diff --git a/interface/web/dns/dns_slave_edit.php b/interface/web/dns/dns_slave_edit.php
index 0ae2ac4..4410360 100644
--- a/interface/web/dns/dns_slave_edit.php
+++ b/interface/web/dns/dns_slave_edit.php
@@ -99,12 +99,12 @@
 
 				// Get the limits of the client
 				$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-				$client = $app->db->queryOneRecord("SELECT client.client_id, sys_group.name, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.client_id, sys_group.name, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 				// Fill the client select field
-				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." ORDER BY client.company_name, client.contact_name, sys_group.name";
-				$clients = $app->db->queryAllRecords($sql);
-				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
+				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+				$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 				//$tmp_data_record = $app->tform->getDataRecord($this->id);
 				if(is_array($clients)) {
@@ -176,12 +176,12 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_slave_zone, default_slave_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_dns_slave_zone, default_slave_dnsserver 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 dns_slave WHERE id = ".$app->functions->intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT server_id FROM dns_slave WHERE id = ?", $this->id);
 				$this->dataRecord["server_id"] = $tmp["server_id"];
 				unset($tmp);
 				// When the record is inserted
@@ -203,7 +203,7 @@
 		if(strlen($this->dataRecord["origin"]) > 0 && substr($this->dataRecord["origin"], -1, 1) != '.') $this->dataRecord["origin"] .= '.';
 
 		//* Check if a primary zone with the same name already exists
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE origin = \"".$app->db->quote($this->dataRecord["origin"])."\" AND server_id= \"".$app->db->quote($this->dataRecord["server_id"])."\"");
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE origin = ? AND server_id = ?", $this->dataRecord["origin"], $this->dataRecord["server_id"]);
 		if($tmp["number"] > 0) {
 			$app->error($app->tform->wordbook["origin_error_unique"]);
 		}
@@ -215,7 +215,7 @@
 		global $app, $conf;
 
 		// Check if record is existing already
-		$duplicate_slave = $app->db->queryOneRecord("SELECT * FROM dns_slave WHERE origin = '".$app->db->quote($this->dataRecord["origin"])."' AND server_id = ".$app->functions->intval($this->dataRecord["server_id"])." AND ".$app->tform->getAuthSQL('r'));
+		$duplicate_slave = $app->db->queryOneRecord("SELECT * FROM dns_slave WHERE origin = ? AND server_id = ? AND ".$app->tform->getAuthSQL('r'), $this->dataRecord["origin"], $this->dataRecord["server_id"]);
 
 		if(is_array($duplicate_slave) && !empty($duplicate_slave)) $app->error($app->tform->wordbook["origin_error_unique"]);
 
diff --git a/interface/web/dns/dns_soa_del.php b/interface/web/dns/dns_soa_del.php
index f9a06fc..fee2138 100644
--- a/interface/web/dns/dns_soa_del.php
+++ b/interface/web/dns/dns_soa_del.php
@@ -56,7 +56,7 @@
 		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 = '".$app->functions->intval($this->id)."'");
+		$records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE zone = ?", $this->id);
 		foreach($records as $rec) {
 			$app->db->datalogDelete('dns_rr', 'id', $rec['id']);
 		}
diff --git a/interface/web/dns/dns_soa_edit.php b/interface/web/dns/dns_soa_edit.php
index 96088ef..634a91d 100644
--- a/interface/web/dns/dns_soa_edit.php
+++ b/interface/web/dns/dns_soa_edit.php
@@ -109,12 +109,12 @@
 
 				// Get the limits of the client
 				$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-				$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 				// Fill the client select field
-				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." ORDER BY client.company_name, client.contact_name, sys_group.name";
-				$clients = $app->db->queryAllRecords($sql);
-				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$client['client_id']);
+				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+				$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 				//$tmp_data_record = $app->tform->getDataRecord($this->id);
 				if(is_array($clients)) {
@@ -133,7 +133,7 @@
 	if($_SESSION["s"]["user"]["typ"] != 'admin')
 	{
 		$client_group_id = $_SESSION["s"]["user"]["default_group"];
-		$client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		$client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 		$client_dns['dns_servers_ids'] = explode(',', $client_dns['dns_servers']);
 
@@ -144,13 +144,13 @@
 			$app->tpl->setVar('server_id_value', $client_dns['dns_servers_ids'][0]);
 		}
 
-		$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client_dns['dns_servers'] . ");";
-		$dns_servers = $app->db->queryAllRecords($sql);
+		$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+		$dns_servers = $app->db->queryAllRecords($sql, $client_dns['dns_servers_ids']);
 
 		$options_dns_servers = "";
 
 		foreach ($dns_servers as $dns_server) {
-			$options_dns_servers .= "<option value='$dns_server[server_id]'>$dns_server[server_name]</option>";
+			$options_dns_servers .= '<option value="'.$dns_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $dns_server['server_id'] ? ' selected="selected"' : '').'>'.$dns_server['server_name'].'</option>';
 		}
 
 		$app->tpl->setVar("client_server_id", $options_dns_servers);
@@ -219,7 +219,7 @@
 		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_dns_zone, dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_dns_zone, dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			$client['dns_servers_ids'] = explode(',', $client['dns_servers']);
 
@@ -231,27 +231,20 @@
 			// 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 dns_soa WHERE id = ".$app->functions->intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT server_id FROM dns_soa WHERE id = ?", $this->id);
 				$this->dataRecord["server_id"] = $tmp["server_id"];
 				unset($tmp);
 				// When the record is inserted
 			} else {
 				// Check if the user may add another maildomain.
 				if($client["limit_dns_zone"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE sys_groupid = $client_group_id");
+					$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE sys_groupid = ?", $client_group_id);
 					if($tmp["number"] >= $client["limit_dns_zone"]) {
 						$app->error($app->tform->wordbook["limit_dns_zone_txt"]);
 					}
 				}
 			}
 		}
-
-		/*
-			// Update the serial number of the SOA record
-			$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ".$this->id);
-			$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-			*/
-
 
 		//* Check if soa, ns and mbox have a dot at the end
 		if(strlen($this->dataRecord["origin"]) > 0 && substr($this->dataRecord["origin"], -1, 1) != '.') $this->dataRecord["origin"] .= '.';
@@ -282,8 +275,12 @@
 	// 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'])) {
 		//* We do not allow users to change a domain which has been created by the admin
-		$rec = $app->db->queryOneRecord("SELECT origin from dns_soa WHERE id = ".$this->id);
-		if(isset($this->dataRecord["origin"]) && $rec['origin'] != $this->dataRecord["origin"] && $app->tform->checkPerm($this->id, 'u')) {
+		$rec = $app->db->queryOneRecord("SELECT origin from dns_soa WHERE id = ?", $this->id);
+		$drOrigin = (isset($this->dataRecord['origin']))
+			? $app->functions->idn_encode($this->dataRecord['origin'])
+			: false;
+
+		if($rec['origin'] !== $drOrigin && $app->tform->checkPerm($this->id, 'u')) {
 			//* Add a error message and switch back to old server
 			$app->tform->errorMessage .= $app->lng('The Zone (soa) can not be changed. Please ask your Administrator if you want to change the Zone name.');
 			$this->dataRecord["origin"] = $rec['origin'];
diff --git a/interface/web/dns/dns_spf_edit.php b/interface/web/dns/dns_spf_edit.php
new file mode 100644
index 0000000..ba770a9
--- /dev/null
+++ b/interface/web/dns/dns_spf_edit.php
@@ -0,0 +1,269 @@
+<?php
+
+/*
+Copyright (c) 2014, Florian Schaal, info@schaal-24.de
+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/dns_spf.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');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions,validate_dns');
+$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') {
+
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another mailbox.
+			if($client["limit_dns_record"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_dns_record"]) {
+					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
+				}
+			}
+		}
+
+		parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		$zone = $app->functions->intval($_GET['zone']);
+
+		//* check for an existing spf-record
+		$sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=spf1%' AND zone = ? AND " . $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryOneRecord($sql, $zone);
+		if ( isset($rec) && !empty($rec) ) {
+			$this->id = 1;
+			$old_data = strtolower($rec['data']);
+
+			$app->tpl->setVar("data", $old_data);
+			if ($rec['active'] == 'Y') $app->tpl->setVar("active", "CHECKED"); else $app->tpl->setVar("active", "UNCHECKED");
+
+			$spf_hostname = '';
+			$spf_ip = '';
+			$spf_domain = '';
+			$spf_mechanism = '';
+
+			// browse through data
+			$temp = explode(' ', $old_data);
+			foreach ($temp as $part) {
+				if ($part == 'a') $app->tpl->setVar("spf_a_active", "CHECKED");
+				if ($part == 'mx') $app->tpl->setVar("spf_mx_active", "CHECKED");
+	    		if (preg_match("/^ip(4|6):/", $part)) $spf_ip .= str_replace(array('ip4:','ip6:'), '', $part) . ' ';
+    			if (preg_match("/^a:/", $part)) $spf_hostname .= str_replace('a:', '', $part) . ' ';
+    			if (preg_match("/^\\??include/", $part)) $spf_domain .= str_replace(array('include:', '?'), '', $part) . ' ';
+			}
+			unset($temp);
+			$spf_ip = rtrim($spf_ip);
+			$spf_hostname = rtrim($spf_hostname);
+			$spf_domain = rtrim($spf_domain);
+			$spf_mechanism = substr($rec['data'], -4, 1);
+		}
+
+		//set html-values
+		$app->tpl->setVar("spf_ip", $spf_ip);
+		$app->tpl->setVar("spf_hostname", $spf_hostname);
+		$app->tpl->setVar("spf_domain", $spf_domain);
+		//create spf-mechanism-list
+		$spf_mechanism_value = array( 
+			'+' => 'spf_mechanism_pass_txt',
+			'-' => 'spf_mechanism_fail_txt',
+			'~' => 'spf_mechanism_softfail_txt',
+			'?' => 'spf_mechanism_neutral_txt'
+		);
+		$spf_mechanism_list='';
+		foreach($spf_mechanism_value as $value => $txt) {
+			$selected = @($spf_mechanism == $value)?' selected':'';
+			$spf_mechanism_list .= "<option value='$value'$selected>".$app->tform->wordbook[$txt]."</option>\r\n";
+		}
+		$app->tpl->setVar('spf_mechanism', $spf_mechanism_list);
+
+		parent::onShowEnd();
+
+	}
+
+	function onSubmit() {
+		global $app, $conf;
+
+
+		// Get the parent soa record of the domain
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($_POST["zone"]));
+
+		// Check if Domain belongs to user
+		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
+
+		// Check the client limits, if user is not the admin
+		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another mailbox.
+			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_dns_record"]) {
+					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
+				}
+			}
+		} // end if user is not admin
+
+		//create spf-record
+		if (!empty($this->dataRecord['spf_mx'])) {
+			$spf_record[] = 'mx';
+		}
+		if (!empty($this->dataRecord['spf_a'])) {
+			$spf_record[] = 'a';
+		}
+		$spf_ip = trim($this->dataRecord['spf_ip']);
+		if (!empty($spf_ip)) {
+			$rec = split(' ', $spf_ip);
+			foreach ($rec as $ip) {
+				$temp_ip = explode('/', $ip);
+				if (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+					$temp = 'ip4:' . $temp_ip[0];
+					if (isset($temp_ip[1])) $temp .= '/' . $temp_ip[1];
+					$spf_record[] = $temp;
+					unset($temp);
+				}
+				elseif (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+					$temp = 'ip6:' . $temp_ip[0];
+					if (isset($temp_ip[1])) $temp .= '/' . $temp_ip[1];
+					$spf_record[] = $temp;
+					unset($temp);
+				}
+				else { 
+					if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+					$app->tform->errorMessage .= $app->tform->wordbook["spf_invalid_ip_txt"]. $temp_ip[0];
+					if (isset( $temp_ip[1])) $app->tform->errorMessage .= "/".$temp_ip[1];
+				}
+			}
+		}
+		$spf_hostname = trim($this->dataRecord['spf_hostname']);
+		if (!empty($spf_hostname)) {
+			$rec = split(' ', $spf_hostname);
+			foreach ($rec as $hostname) { 
+				if (preg_match('/^[a-zA-Z0-9\\.\\-\\*]{0,64}$/', $hostname)) 
+					$spf_record[] = 'a:' . $hostname;
+				else {
+					if (isset($app->tform->errorMessage )) $app->tform->errorMessage .= '<br/>' . $app->tform->wordbook["spf_invalid_hostname_txt"]. $hostname;
+					$app->tform->errorMessage .= $app->tform->wordbook["spf_invalid_hostname_txt"]. $hostname;
+				}
+			}
+			unset($rec);
+		}
+		$spf_domain = trim($this->dataRecord['spf_domain']);
+		if (!empty($spf_domain)) {
+			$rec = split(' ', $spf_domain);
+			foreach ($rec as $domain) {
+				if (preg_match('/^[_a-zA-Z0-9\\.\\-\\*]{0,64}$/', $domain))
+					$spf_record[] = 'include:' . $domain;
+				else {
+					if (isset($app->tform->errorMessage )) $app->tform->errorMessage .= '<br/>' . $app->tform->wordbook["spf_invalid_domain_txt"]. $domain;
+					$app->tform->errorMessage .= $app->tform->wordbook["spf_invalid_domain_txt"]. $domain;
+				}
+			}
+		}
+
+		$temp = implode(' ', $spf_record);unset($spf_record);
+		if (!empty($temp)) 
+			$this->dataRecord['data'] = 'v=spf1 ' . $temp . ' ' . $this->dataRecord['spf_mechanism'] . 'all';
+		else $this->dataRecord['data'] = 'v=spf1 ' . $this->dataRecord['spf_mechanism'] . 'all';
+		unset($temp);
+
+		$this->dataRecord['name'] = $soa['origin'];
+		if (isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'Y';
+		
+		// Set the server ID of the rr record to the same server ID as the parent record.
+		$this->dataRecord["server_id"] = $soa["server_id"];
+
+		// Update the serial number  and timestamp of the RR record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
+		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
+		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
+
+		// always update an existing entry
+		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=spf1%' AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord['name']);
+		$this->id = $check['id'];
+
+		if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+		global $app, $conf;
+
+		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
+		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord["zone"]));
+		$app->db->datalogUpdate('dns_rr', array("sys_groupid" => $soa['sys_groupid']), 'id', $this->id);
+
+		//* Update the serial number of the SOA record
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+
+	}
+
+	function onAfterUpdate() {
+		global $app, $conf;
+
+		//* Update the serial number of the SOA record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($this->dataRecord["zone"]));
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa["serial"]);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+	}
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/dns_srv_edit.php b/interface/web/dns/dns_srv_edit.php
index e2d0bea..e2b290a 100644
--- a/interface/web/dns/dns_srv_edit.php
+++ b/interface/web/dns/dns_srv_edit.php
@@ -40,37 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
+class page_action extends dns_page_action {
 
 	function onShowEnd() {
 		global $app, $conf;
@@ -91,65 +64,6 @@
 
 	function onBeforeUpdate() {
 		$this->dataRecord['data'] = $this->dataRecord['weight'] .' '. $this->dataRecord['port'] .' '. $this->dataRecord['target'];
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
 	}
 
 }
diff --git a/interface/web/dns/dns_txt_edit.php b/interface/web/dns/dns_txt_edit.php
index ca5b838..8f61d2b 100644
--- a/interface/web/dns/dns_txt_edit.php
+++ b/interface/web/dns/dns_txt_edit.php
@@ -40,96 +40,10 @@
 
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
-
-//* Check permissions for module
-$app->auth->check_module_permissions('dns');
+require_once './dns_edit_base.php';
 
 // Loading classes
-$app->uses('tpl,tform,tform_actions,validate_dns');
-$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') {
-
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		}
-
-		parent::onShowNew();
-	}
-
-	function onSubmit() {
-		global $app, $conf;
-
-		// Get the parent soa record of the domain
-		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = '".$app->functions->intval($_POST["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-
-		// Check if Domain belongs to user
-		if($soa["id"] != $_POST["zone"]) $app->tform->errorMessage .= $app->tform->wordbook["no_zone_perm"];
-
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_dns_record"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = $client_group_id");
-				if($tmp["number"] >= $client["limit_dns_record"]) {
-					$app->error($app->tform->wordbook["limit_dns_record_txt"]);
-				}
-			}
-		} // end if user is not admin
-
-
-		// Set the server ID of the rr record to the same server ID as the parent record.
-		$this->dataRecord["server_id"] = $soa["server_id"];
-
-		// Update the serial number  and timestamp of the RR record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ".$this->id);
-		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
-		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
-
-		parent::onSubmit();
-	}
-
-	function onAfterInsert() {
-		global $app, $conf;
-
-		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
-		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->datalogUpdate('dns_rr', "sys_groupid = ".$soa['sys_groupid'], 'id', $this->id);
-
-		//* Update the serial number of the SOA record
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
-
-	function onAfterUpdate() {
-		global $app, $conf;
-
-		//* Update the serial number of the SOA record
-		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = '".$app->functions->intval($this->dataRecord["zone"])."' AND ".$app->tform->getAuthSQL('r'));
-		$soa_id = $app->functions->intval($_POST["zone"]);
-		$serial = $app->validate_dns->increase_serial($soa["serial"]);
-		$app->db->datalogUpdate('dns_soa', "serial = $serial", 'id', $soa_id);
-	}
+class page_action extends dns_page_action {
 
 }
 
diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php
index b27c66a..198245b 100644
--- a/interface/web/dns/dns_wizard.php
+++ b/interface/web/dns/dns_wizard.php
@@ -107,14 +107,14 @@
 
 	// Get the limits of the client
 	$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-	$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+	$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 
 	if ($domains_settings['use_domain_module'] != 'y') {
 		// load the list of clients
-		$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$app->functions->intval($client['client_id'])." ORDER BY client.company_name, client.contact_name, sys_group.name";
-		$clients = $app->db->queryAllRecords($sql);
-		$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
+		$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+		$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+		$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 		$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 		if(is_array($clients)) {
 			foreach( $clients as $client) {
@@ -130,7 +130,7 @@
 if($_SESSION["s"]["user"]["typ"] != 'admin')
 {
 	$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-	$client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+	$client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 	$client_dns['dns_servers_ids'] = explode(',', $client_dns['dns_servers']);
 
@@ -141,13 +141,13 @@
 		$app->tpl->setVar('server_id_value', $client_dns['dns_servers_ids'][0]);
 	}
 
-	$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client_dns['dns_servers'] . ");";
-	$dns_servers = $app->db->queryAllRecords($sql);
+	$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+	$dns_servers = $app->db->queryAllRecords($sql, $client_dns['dns_servers_ids']);
 
 	$options_dns_servers = "";
 
 	foreach ($dns_servers as $dns_server) {
-		$options_dns_servers .= "<option value='$dns_server[server_id]'>$dns_server[server_name]</option>";
+		$options_dns_servers .= '<option value="'.$dns_server['server_id'].'"'.($_POST['server_id'] == $dns_server['server_id'] ? ' selected="selected"' : '').'>'.$dns_server['server_name'].'</option>';
 	}
 
 	$app->tpl->setVar("server_id", $options_dns_servers);
@@ -155,7 +155,7 @@
 
 }
 
-$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = '".$app->functions->intval($template_id)."'");
+$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = ?", $template_id);
 $fields = explode(',', $template_record['fields']);
 if(is_array($fields)) {
 	foreach($fields as $field) {
@@ -203,7 +203,7 @@
 	if ($post_server_id)
 	{
 		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-		$client = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		$client = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 		$client['dns_servers_ids'] = explode(',', $client['dns_servers']);
 
@@ -335,11 +335,11 @@
 				if($section == 'dns_records') {
 					$parts = explode('|', $row);
 					$dns_rr[] = array(
-						'name' => $app->db->quote($parts[1]),
-						'type' => $app->db->quote($parts[0]),
-						'data' => $app->db->quote($parts[2]),
-						'aux'  => $app->db->quote($parts[3]),
-						'ttl'  => $app->db->quote($parts[4])
+						'name' => $parts[1],
+						'type' => $parts[0],
+						'data' => $parts[2],
+						'aux'  => $parts[3],
+						'ttl'  => $parts[4]
 					);
 				}
 			}
@@ -359,28 +359,60 @@
 	if($error == '') {
 		// Insert the soa record
 		$sys_userid = $_SESSION['s']['user']['userid'];
-		$origin = $app->db->quote($vars['origin']);
-		$ns = $app->db->quote($vars['ns']);
-		$mbox = $app->db->quote(str_replace('@', '.', $vars['mbox']));
-		$refresh = $app->db->quote($vars['refresh']);
-		$retry = $app->db->quote($vars['retry']);
-		$expire = $app->db->quote($vars['expire']);
-		$minimum = $app->db->quote($vars['minimum']);
-		$ttl = $app->db->quote($vars['ttl']);
-		$xfer = $app->db->quote($vars['xfer']);
-		$also_notify = $app->db->quote($vars['also_notify']);
-		$update_acl = $app->db->quote($vars['update_acl']);
+		$origin = $vars['origin'];
+		$ns = $vars['ns'];
+		$mbox = str_replace('@', '.', $vars['mbox']);
+		$refresh = $vars['refresh'];
+		$retry = $vars['retry'];
+		$expire = $vars['expire'];
+		$minimum = $vars['minimum'];
+		$ttl = $vars['ttl'];
+		$xfer = $vars['xfer'];
+		$also_notify = $vars['also_notify'];
+		$update_acl = $vars['update_acl'];
 		$serial = $app->validate_dns->increase_serial(0);
 
-		$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `origin`, `ns`, `mbox`, `serial`, `refresh`, `retry`, `expire`, `minimum`, `ttl`, `active`, `xfer`, `also_notify`, `update_acl`) VALUES
-		('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$origin', '$ns', '$mbox', '$serial', '$refresh', '$retry', '$expire', '$minimum', '$ttl', 'Y', '$xfer', '$also_notify', '$update_acl')";
+		$insert_data = array(
+			"sys_userid" => $sys_userid,
+			"sys_groupid" => $sys_groupid,
+			"sys_perm_user" => 'riud',
+			"sys_perm_group" => 'riud',
+			"sys_perm_other" => '',
+			"server_id" => $server_id,
+			"origin" => $origin,
+			"ns" => $ns,
+			"mbox" => $mbox,
+			"serial" => $serial,
+			"refresh" => $refresh,
+			"retry" => $retry,
+			"expire" => $expire,
+			"minimum" => $minimum,
+			"ttl" => $ttl,
+			"active" => 'Y',
+			"xfer" => $xfer,
+			"also_notify" => $also_notify,
+			"update_acl" => $update_acl
+		);
 		$dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
 
 		// Insert the dns_rr records
 		if(is_array($dns_rr) && $dns_soa_id > 0) {
 			foreach($dns_rr as $rr) {
-				$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES
-				('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '$rr[name]', '$rr[type]', '$rr[data]', '$rr[aux]', '$rr[ttl]', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $sys_userid,
+					"sys_groupid" => $sys_groupid,
+					"sys_perm_user" => 'riud',
+					"sys_perm_group" => 'riud',
+					"sys_perm_other" => '',
+					"server_id" => $server_id,
+					"zone" => $dns_soa_id,
+					"name" => $rr['name'],
+					"type" => $rr['type'],
+					"data" => $rr['data'],
+					"aux" => $rr['aux'],
+					"ttl" => $rr['ttl'],
+					"active" => 'Y'
+				);
 				$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 			}
 		}
diff --git a/interface/web/dns/form/dns_a.tform.php b/interface/web/dns/form/dns_a.tform.php
index 95aa5b8..cd5a3eb 100644
--- a/interface/web/dns/form/dns_a.tform.php
+++ b/interface/web/dns/form/dns_a.tform.php
@@ -133,7 +133,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_aaaa.tform.php b/interface/web/dns/form/dns_aaaa.tform.php
index 47bbac3..d381d51 100644
--- a/interface/web/dns/form/dns_aaaa.tform.php
+++ b/interface/web/dns/form/dns_aaaa.tform.php
@@ -126,7 +126,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_alias.tform.php b/interface/web/dns/form/dns_alias.tform.php
index 663bf84..defcda0 100644
--- a/interface/web/dns/form/dns_alias.tform.php
+++ b/interface/web/dns/form/dns_alias.tform.php
@@ -142,7 +142,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_cname.tform.php b/interface/web/dns/form/dns_cname.tform.php
index ca2419b..5fdf8c9 100644
--- a/interface/web/dns/form/dns_cname.tform.php
+++ b/interface/web/dns/form/dns_cname.tform.php
@@ -86,7 +86,7 @@
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\.\-\*]{0,255}$/',
+					'regex' => '/^[a-zA-Z0-9\.\-\*\_]{0,255}$/',
 					'errmsg'=> 'name_error_regex'),
 			),
 			'default' => '',
@@ -140,7 +140,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_dkim.tform.php b/interface/web/dns/form/dns_dkim.tform.php
index bbc1214..550255d 100644
--- a/interface/web/dns/form/dns_dkim.tform.php
+++ b/interface/web/dns/form/dns_dkim.tform.php
@@ -120,7 +120,7 @@
 							'range' => '60:',
 							'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_dmarc.tform.php b/interface/web/dns/form/dns_dmarc.tform.php
new file mode 100644
index 0000000..a1ecaa4
--- /dev/null
+++ b/interface/web/dns/form/dns_dmarc.tform.php
@@ -0,0 +1,164 @@
+<?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).
+
+
+*/
+global $app;
+
+$form["title"]    = "DNS DMARC Record";
+$form["description"]  = "";
+$form["name"]    = "dns_dmarc";
+$form["action"]   = "dns_dmarc_edit.php";
+$form["db_table"]  = "dns_rr";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "dns";
+$form["list_default"] = "dns_a_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"]['dns'] = array (
+	'title'  => "DNS DMARC",
+	'width'  => 100,
+	'template'  => "templates/dns_dmarc_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST["zone"]),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'TXT',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		/*
+		'aux' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'default'	=> '0',
+			'value'		=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10'
+		),
+		*/
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'RANGE',
+					'range' => '60:',
+					'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		//#################################
+		// End Datatable fields
+		//#################################
+	)
+);
+
+
+
+?>
diff --git a/interface/web/dns/form/dns_hinfo.tform.php b/interface/web/dns/form/dns_hinfo.tform.php
index 231bdfc..76c8c79 100644
--- a/interface/web/dns/form/dns_hinfo.tform.php
+++ b/interface/web/dns/form/dns_hinfo.tform.php
@@ -132,7 +132,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_mx.tform.php b/interface/web/dns/form/dns_mx.tform.php
index d5faeeb..9aace37 100644
--- a/interface/web/dns/form/dns_mx.tform.php
+++ b/interface/web/dns/form/dns_mx.tform.php
@@ -141,7 +141,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_ns.tform.php b/interface/web/dns/form/dns_ns.tform.php
index 82b3090..063a896 100644
--- a/interface/web/dns/form/dns_ns.tform.php
+++ b/interface/web/dns/form/dns_ns.tform.php
@@ -140,7 +140,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_ptr.tform.php b/interface/web/dns/form/dns_ptr.tform.php
index 59a91e7..4cc0462 100644
--- a/interface/web/dns/form/dns_ptr.tform.php
+++ b/interface/web/dns/form/dns_ptr.tform.php
@@ -140,7 +140,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_rp.tform.php b/interface/web/dns/form/dns_rp.tform.php
index 35b8e55..5f4610a 100644
--- a/interface/web/dns/form/dns_rp.tform.php
+++ b/interface/web/dns/form/dns_rp.tform.php
@@ -133,7 +133,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 1e4f9a6..02afa86 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -197,7 +197,7 @@
 					'range' => '60:',
 					'errmsg'=> 'minimum_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_spf.tform.php b/interface/web/dns/form/dns_spf.tform.php
new file mode 100644
index 0000000..ea2cf83
--- /dev/null
+++ b/interface/web/dns/form/dns_spf.tform.php
@@ -0,0 +1,164 @@
+<?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).
+
+
+*/
+global $app;
+
+$form["title"]    = "DNS SPF Record";
+$form["description"]  = "";
+$form["name"]    = "dns_spf";
+$form["action"]   = "dns_spf_edit.php";
+$form["db_table"]  = "dns_rr";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "dns";
+$form["list_default"] = "dns_a_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"]['dns'] = array (
+	'title'  => "DNS SPF",
+	'width'  => 100,
+	'template'  => "templates/dns_spf_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST["zone"]),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'TXT',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		/*
+		'aux' => array (
+			'datatype'	=> 'INTEGER',
+			'formtype'	=> 'TEXT',
+			'default'	=> '0',
+			'value'		=> '',
+			'width'		=> '10',
+			'maxlength'	=> '10'
+		),
+		*/
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'RANGE',
+					'range' => '60:',
+					'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		//#################################
+		// End Datatable fields
+		//#################################
+	)
+);
+
+
+
+?>
diff --git a/interface/web/dns/form/dns_srv.tform.php b/interface/web/dns/form/dns_srv.tform.php
index 2f35fd5..ee0674f 100644
--- a/interface/web/dns/form/dns_srv.tform.php
+++ b/interface/web/dns/form/dns_srv.tform.php
@@ -131,7 +131,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
diff --git a/interface/web/dns/form/dns_txt.tform.php b/interface/web/dns/form/dns_txt.tform.php
index a4b7d40..01b731a 100644
--- a/interface/web/dns/form/dns_txt.tform.php
+++ b/interface/web/dns/form/dns_txt.tform.php
@@ -105,24 +105,31 @@
 		'data' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
-			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
-					'errmsg'=> 'data_error_empty'),
+			'validators' => array (  
+				0 => array ( 
+					'type' => 'NOTEMPTY', 
+					'errmsg'=> 'data_error_empty'
+				),
+				1 => array ( 
+					'type' => 'REGEX', 
+					'regex' => "/^((?!v=DKIM).)*$/s", 
+					'errmsg'=> 'invalid_type_dkim'
+				),
+				2 => array ( 
+					'type' => 'REGEX', 
+					'regex' => "/^((?!v=DMARC1; ).)*$/s", 
+					'errmsg'=> 'invalid_type_dmarc'),
+				3 => array ( 
+					'type' => 'REGEX', 
+					'regex' => "/^((?!v=spf).)*$/s", 
+					'errmsg'=> 'invalid_type_spf'
+				),
 			),
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-		/*
-		'aux' => array (
-			'datatype'	=> 'INTEGER',
-			'formtype'	=> 'TEXT',
-			'default'	=> '0',
-			'value'		=> '',
-			'width'		=> '10',
-			'maxlength'	=> '10'
-		),
-		*/
 		'ttl' => array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'TEXT',
@@ -130,7 +137,7 @@
 					'range' => '60:',
 					'errmsg'=> 'ttl_range_error'),
 			),
-			'default' => '86400',
+			'default' => '3600',
 			'value'  => '',
 			'width'  => '10',
 			'maxlength' => '10'
@@ -163,6 +170,10 @@
 	)
 );
 
-
-
+if($_SESSION["s"]["user"]["typ"] == 'admin') {
+	unset($form["tabs"]['dns']['fields']['data']['validators']);
+	$form["tabs"]['dns']['fields']['data']['validators'][0]['type'] = 'NOTEMPTY';
+	$form["tabs"]['dns']['fields']['data']['validators'][0]['errmsg'] = 'data_error_empty';
+	$form["tabs"]['dns']['fields']['data']['maxlength'] = 512;
+}
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_dmarc.lng b/interface/web/dns/lib/lang/ar_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_spf.lng b/interface/web/dns/lib/lang/ar_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_txt.lng b/interface/web/dns/lib/lang/ar_dns_txt.lng
index 31da6eb..658b0dd 100644
--- a/interface/web/dns/lib/lang/ar_dns_txt.lng
+++ b/interface/web/dns/lib/lang/ar_dns_txt.lng
@@ -1,16 +1,19 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Text';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Text empty';
-$wb['data_error_regex'] = 'Text format invalid';
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["type_txt"] = 'type';
+$wb["data_txt"] = 'Text';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'Text empty';
+$wb["data_error_regex"] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_dmarc.lng b/interface/web/dns/lib/lang/bg_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_spf.lng b/interface/web/dns/lib/lang/bg_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_txt.lng b/interface/web/dns/lib/lang/bg_dns_txt.lng
index 0204296..9d3dd13 100644
--- a/interface/web/dns/lib/lang/bg_dns_txt.lng
+++ b/interface/web/dns/lib/lang/bg_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text empty';
 $wb['data_error_regex'] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dmarc.lng b/interface/web/dns/lib/lang/br_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_spf.lng b/interface/web/dns/lib/lang/br_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_txt.lng b/interface/web/dns/lib/lang/br_dns_txt.lng
index 31f0a6d..64003f1 100644
--- a/interface/web/dns/lib/lang/br_dns_txt.lng
+++ b/interface/web/dns/lib/lang/br_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Endereço IP em branco';
 $wb['data_error_regex'] = 'Endereço IP formato inválido';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_dmarc.lng b/interface/web/dns/lib/lang/cz_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_spf.lng b/interface/web/dns/lib/lang/cz_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_txt.lng b/interface/web/dns/lib/lang/cz_dns_txt.lng
index faf3181..bfaa34e 100644
--- a/interface/web/dns/lib/lang/cz_dns_txt.lng
+++ b/interface/web/dns/lib/lang/cz_dns_txt.lng
@@ -13,5 +13,7 @@
 $wb['data_error_empty'] = 'Text je prázdný';
 $wb['data_error_regex'] = 'Text má chybný formát';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/de_dns_dkim.lng b/interface/web/dns/lib/lang/de_dns_dkim.lng
index f139762..ce70829 100644
--- a/interface/web/dns/lib/lang/de_dns_dkim.lng
+++ b/interface/web/dns/lib/lang/de_dns_dkim.lng
@@ -1,10 +1,10 @@
 <?php
-$wb["public_key_txt"] = 'Public-Key';
+$wb["public_key_txt"] = 'öffentlicher Schlüssel';
 $wb["ttl_txt"] = 'TTL';
 $wb["active_txt"] = 'Aktiv';
 $wb["record_exists_txt"] = 'DNS-Eintrag bereits vorhanden';
-$wb["dkim_disabled_txt"] = 'DKIM st fuer diese Domain nicht aktiv.';
-$wb["limit_dns_record_txt"] = 'Die max. Anzahl von DNS Eintraegen fuer den Account ist erreicht.';
+$wb["dkim_disabled_txt"] = 'DKIM ist für diese Domain nicht aktiv.';
+$wb["limit_dns_record_txt"] = 'Die max. Anzahl von DNS Eintraegen für den Account ist erreicht.';
 $wb["no_zone_perm"] = 'Fehlende Berechtigung zum Hinzufuegen eines Eintrags zur DNS-Zone.';
 $wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
 $wb['selector_txt'] = 'DKIM-Selector';
diff --git a/interface/web/dns/lib/lang/de_dns_dmarc.lng b/interface/web/dns/lib/lang/de_dns_dmarc.lng
new file mode 100644
index 0000000..4da1b03
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Empfänger Policy';
+$wb['dmarc_policy_note_txt'] = 'Wie der empfangen Server Mails behandeln soll, bei denen SPF oder DKIM (DMARC) fehlschlägt.';
+$wb['dmarc_policy_none_txt'] = 'nur Reports';
+$wb['dmarc_policy_quarantine_txt'] = 'Quarantäne';
+$wb['dmarc_policy_reject_txt'] = 'abweisen';
+$wb['dmarc_rua_txt'] = "'Aggregate Data Reporting' Adresse";
+$wb['dmarc_rua_note_txt'] = 'Email für Berichte ISPs für Mails mit fehlgeschlagenen DMARC-Checks (mehrere mit Leerzeichen trennen).';
+$wb['dmarc_ruf_txt'] = "'Forensic Data Reporting' Adresse";
+$wb['dmarc_ruf_note_txt'] = 'Email für Mails bei einem fehlgeschlagenen DMARC-Check (mehrere mit Leerzeichen trennen).';
+$wb['dmarc_fo_txt'] = 'Forensic Report Optionen';
+$wb['dmarc_fo0_txt'] = "Reports, wenn alle Authentifizierungen für DMARC fehlschlagen";
+$wb['dmarc_fo1_txt'] = 'Reports, wenn eine Authentifizierung fehlschlägt.';
+$wb['dmarc_fod_txt'] = 'Reports, wenn die DKIM-Überprüfung fehlschlägt.';
+$wb['dmarc_fos_txt'] = 'Reports, wenn die SPF-Überprüfung fehlschlägt.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' erfordert exakte Übereinstimmung zwischen DKIM der Domain und dem From-Header der Email";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = "Abgleichsmodus ('alignment mode') für SPF";
+$wb['dmarc_aspf_note_txt'] = "'strict' erfordert exakte Übereinstimmung zwischen dem SPF der Domain und dem From-Header der Email";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = '% der Nachrichten, die gefiltert werden';
+$wb['dmarc_pct_note_txt'] = '% (100 Standard). Messages in Prozent die der Empfänger testen soll.';
+$wb['dmarc_ri_txt'] = 'Report-Interval';
+$wb['dmarc_ri_note_txt'] = "Sekunden (default=86400). Wie oft 'Aggregate Reports' erstellt werden sollen (86400 entsprechen 1 Tag).";
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults identisch zur Domain).';
+$wb['dmarc_sp_same_txt'] = 'wie Domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb['dmarc_policy_error_txt'] = "Nur die Policy 'none' ist ohne DKIM möglich.";
+$wb['dmarc_no_dkim_txt'] = 'Kein aktiver DKIM Eintrag.';
+$wb['dmarc_no_spf_txt'] = 'Kein aktiver SPF Eintrag.';
+$wb['dmarc_more_spf_txt'] = 'Mehr als ein aktiver SPF-Eintrag.';
+$wb['dmarc_invalid_email_txt'] = 'ungültige Email-Adresse';
+$wb['dmarc_empty_txt'] = 'DMARC Record leer - mindestens eine Option auswählen';
+$wb['record_exists_txt'] = 'DNS-Eintrag existiert bereits';
+$wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
+$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+$wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_spf.lng b/interface/web/dns/lib/lang/de_dns_spf.lng
new file mode 100644
index 0000000..dc2ca34
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanismus';
+$wb['spf_mechanism_pass_txt'] = 'Pass - Mails von anderen Sendern zulassen';
+$wb['spf_mechanism_fail_txt'] = 'Fail - Mails von anderen Sendern abweisen';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - Mails von anderen Sendern zulassen aber markieren';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - nichts unternehmen';
+$wb['spf_mx_txt'] = 'Von allen MX-Servern dürfen Mails für diese Domain verschicken';
+$wb['spf_a_txt'] = 'Von allen eingetragenen IP-Adressen dürfen Mails für diese Domain verschickt werden';
+$wb['spf_ip_txt'] = '(Zusätzliche) IP-Adressen im CIDR Format, die Mails für diese Domain verschicken dürfen';
+$wb['spf_ip_note_txt'] = '(mehrere IPs mit Leerzeichen trennen)';
+$wb['spf_invalid_ip_txt'] = 'Ungültige IP-Adresse';
+$wb['spf_hostname_txt'] = '(Zusätzliche) Hostnamen, die für diese Domain Mails verschicken dürfen oder als Relay arbeiten.';
+$wb['spf_hostname_note_txt'] = '(mehrere Hostnamen mit Leerzeichen trennen)';
+$wb['spf_invalid_hostname_txt'] = 'Ungültiger Hostname';
+$wb['spf_domain_txt'] = 'Zusätzliche Domains, die Mails verschicken dürfen oder als Relay arbeiten';
+$wb['spf_domain_note_txt'] = '(mehrerer Domains mit Leerzeichen trennen)';
+$wb['spf_invalid_domain_txt'] = 'Ungültiger Domainname';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb["record_exists_txt"] = 'DNS-Eintrag existiert bereits';
+$wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
+$wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
+$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_txt.lng b/interface/web/dns/lib/lang/de_dns_txt.lng
index a40fb56..23f4f30 100644
--- a/interface/web/dns/lib/lang/de_dns_txt.lng
+++ b/interface/web/dns/lib/lang/de_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text ist leer';
 $wb['data_error_regex'] = 'Textformat ungültig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM ist nicht zulässig. Bitte den DKIM-Button nutzen';
+$wb['invalid_type_dmarc'] = 'DMARC ist nicht zulässig. Bitte den DMARC-Button nutzen';
+$wb['invalid_type_spf'] = 'SPF ist nicht zulässig. Bitte den SPF-Button nutzen';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_dmarc.lng b/interface/web/dns/lib/lang/el_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_spf.lng b/interface/web/dns/lib/lang/el_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_txt.lng b/interface/web/dns/lib/lang/el_dns_txt.lng
index b2ea2d5..f0915d5 100644
--- a/interface/web/dns/lib/lang/el_dns_txt.lng
+++ b/interface/web/dns/lib/lang/el_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Το κείμενο δεν έχει οριστεί';
 $wb['data_error_regex'] = 'Κείμενο με μη έγκυρη μορφοποίηση';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_dmarc.lng b/interface/web/dns/lib/lang/en_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_spf.lng b/interface/web/dns/lib/lang/en_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_txt.lng b/interface/web/dns/lib/lang/en_dns_txt.lng
index b70b8b1..658b0dd 100644
--- a/interface/web/dns/lib/lang/en_dns_txt.lng
+++ b/interface/web/dns/lib/lang/en_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb["data_error_empty"] = 'Text empty';
 $wb["data_error_regex"] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-?>
\ No newline at end of file
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_dmarc.lng b/interface/web/dns/lib/lang/es_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_spf.lng b/interface/web/dns/lib/lang/es_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_txt.lng b/interface/web/dns/lib/lang/es_dns_txt.lng
index 3855096..61fcf75 100644
--- a/interface/web/dns/lib/lang/es_dns_txt.lng
+++ b/interface/web/dns/lib/lang/es_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Texto vacío.';
 $wb['data_error_regex'] = 'Formato de texto no válido';
 $wb['ttl_range_error'] = 'TTL mínimo es 60 segundos';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_dmarc.lng b/interface/web/dns/lib/lang/fi_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_spf.lng b/interface/web/dns/lib/lang/fi_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_txt.lng b/interface/web/dns/lib/lang/fi_dns_txt.lng
index c321dcc..2060040 100755
--- a/interface/web/dns/lib/lang/fi_dns_txt.lng
+++ b/interface/web/dns/lib/lang/fi_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Tekstikenttä on tyhjä';
 $wb['data_error_regex'] = 'Tekstikenttä on vääränlainen';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_dmarc.lng b/interface/web/dns/lib/lang/fr_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_spf.lng b/interface/web/dns/lib/lang/fr_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_txt.lng b/interface/web/dns/lib/lang/fr_dns_txt.lng
index 829c4fc..333dd30 100644
--- a/interface/web/dns/lib/lang/fr_dns_txt.lng
+++ b/interface/web/dns/lib/lang/fr_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Le texte est vide';
 $wb['data_error_regex'] = 'Le format du texte est invalide';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_wizard.lng b/interface/web/dns/lib/lang/fr_dns_wizard.lng
index 6b31c30..5ab5f5f 100644
--- a/interface/web/dns/lib/lang/fr_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/fr_dns_wizard.lng
@@ -6,7 +6,7 @@
 $wb['btn_cancel_txt'] = 'Annuler';
 $wb['domain_txt'] = 'Domaine';
 $wb['email_txt'] = 'Email';
-$wb['dkim_txt'] = 'DKIM activé
+$wb['dkim_txt'] = 'DKIM activé';
 $wb['ns1_txt'] = 'NS 1';
 $wb['ns2_txt'] = 'NS 2';
 $wb['ip_txt'] = 'Adresse IP';
diff --git a/interface/web/dns/lib/lang/hr_dns_dmarc.lng b/interface/web/dns/lib/lang/hr_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_spf.lng b/interface/web/dns/lib/lang/hr_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_txt.lng b/interface/web/dns/lib/lang/hr_dns_txt.lng
index 88bb5e1..349f9f7 100644
--- a/interface/web/dns/lib/lang/hr_dns_txt.lng
+++ b/interface/web/dns/lib/lang/hr_dns_txt.lng
@@ -13,6 +13,7 @@
 $wb['data_error_empty'] = 'TXT polje je prazno';
 $wb['data_error_regex'] = 'Neispravan format TXT zapisa';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
-
-
diff --git a/interface/web/dns/lib/lang/hu_dns_dmarc.lng b/interface/web/dns/lib/lang/hu_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_spf.lng b/interface/web/dns/lib/lang/hu_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_txt.lng b/interface/web/dns/lib/lang/hu_dns_txt.lng
index 97d5d29..67b57cd 100644
--- a/interface/web/dns/lib/lang/hu_dns_txt.lng
+++ b/interface/web/dns/lib/lang/hu_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text empty';
 $wb['data_error_regex'] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_dmarc.lng b/interface/web/dns/lib/lang/id_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_spf.lng b/interface/web/dns/lib/lang/id_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_txt.lng b/interface/web/dns/lib/lang/id_dns_txt.lng
index cf4660f..b6c2647 100644
--- a/interface/web/dns/lib/lang/id_dns_txt.lng
+++ b/interface/web/dns/lib/lang/id_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Teks kosong';
 $wb['data_error_regex'] = 'Format teks tidak valid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_dmarc.lng b/interface/web/dns/lib/lang/it_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_spf.lng b/interface/web/dns/lib/lang/it_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_txt.lng b/interface/web/dns/lib/lang/it_dns_txt.lng
index 31da6eb..ecbb521 100644
--- a/interface/web/dns/lib/lang/it_dns_txt.lng
+++ b/interface/web/dns/lib/lang/it_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text empty';
 $wb['data_error_regex'] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_dmarc.lng b/interface/web/dns/lib/lang/ja_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_spf.lng b/interface/web/dns/lib/lang/ja_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_txt.lng b/interface/web/dns/lib/lang/ja_dns_txt.lng
index 6ef505c..a24217f 100644
--- a/interface/web/dns/lib/lang/ja_dns_txt.lng
+++ b/interface/web/dns/lib/lang/ja_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'TXT を入力してください。';
 $wb['data_error_regex'] = 'TXT の形式が不正です。';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_dmarc.lng b/interface/web/dns/lib/lang/nl_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_spf.lng b/interface/web/dns/lib/lang/nl_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_txt.lng b/interface/web/dns/lib/lang/nl_dns_txt.lng
index b89d802..1787a09 100644
--- a/interface/web/dns/lib/lang/nl_dns_txt.lng
+++ b/interface/web/dns/lib/lang/nl_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Tekst is niet ingvuld';
 $wb['data_error_regex'] = 'Tekst formaat ongeldig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_dmarc.lng b/interface/web/dns/lib/lang/pl_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_spf.lng b/interface/web/dns/lib/lang/pl_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_txt.lng b/interface/web/dns/lib/lang/pl_dns_txt.lng
index 09214f7..fbe7a18 100644
--- a/interface/web/dns/lib/lang/pl_dns_txt.lng
+++ b/interface/web/dns/lib/lang/pl_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Tekst jest pusty.';
 $wb['data_error_regex'] = 'Tekst ma zły format.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_dmarc.lng b/interface/web/dns/lib/lang/pt_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_spf.lng b/interface/web/dns/lib/lang/pt_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_txt.lng b/interface/web/dns/lib/lang/pt_dns_txt.lng
index dbc200d..78b5eaf 100644
--- a/interface/web/dns/lib/lang/pt_dns_txt.lng
+++ b/interface/web/dns/lib/lang/pt_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Endereço-IP em branco';
 $wb['data_error_regex'] = 'Endereço-IP formato inválido';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_dmarc.lng b/interface/web/dns/lib/lang/ro_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_spf.lng b/interface/web/dns/lib/lang/ro_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_txt.lng b/interface/web/dns/lib/lang/ro_dns_txt.lng
index 4aba1a5..737f7e2 100644
--- a/interface/web/dns/lib/lang/ro_dns_txt.lng
+++ b/interface/web/dns/lib/lang/ro_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text necompletat';
 $wb['data_error_regex'] = 'Format text invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_dmarc.lng b/interface/web/dns/lib/lang/ru_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_spf.lng b/interface/web/dns/lib/lang/ru_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_txt.lng b/interface/web/dns/lib/lang/ru_dns_txt.lng
index 5656b63..aecade3 100644
--- a/interface/web/dns/lib/lang/ru_dns_txt.lng
+++ b/interface/web/dns/lib/lang/ru_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Текст пустой';
 $wb['data_error_regex'] = 'Формат неправилен';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_dmarc.lng b/interface/web/dns/lib/lang/se_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_spf.lng b/interface/web/dns/lib/lang/se_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_txt.lng b/interface/web/dns/lib/lang/se_dns_txt.lng
index 31da6eb..ecbb521 100644
--- a/interface/web/dns/lib/lang/se_dns_txt.lng
+++ b/interface/web/dns/lib/lang/se_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text empty';
 $wb['data_error_regex'] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_dmarc.lng b/interface/web/dns/lib/lang/sk_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_spf.lng b/interface/web/dns/lib/lang/sk_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_txt.lng b/interface/web/dns/lib/lang/sk_dns_txt.lng
index 6086b39..80686d9 100644
--- a/interface/web/dns/lib/lang/sk_dns_txt.lng
+++ b/interface/web/dns/lib/lang/sk_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Text je prázdny';
 $wb['data_error_regex'] = 'Text má zlý formát';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_dmarc.lng b/interface/web/dns/lib/lang/tr_dns_dmarc.lng
new file mode 100644
index 0000000..8da5d35
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC Record';
+$wb['domain_txt'] = 'Domain';
+$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
+$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'none';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
+$wb['dmarc_policy_reject_txt'] = 'reject';
+$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
+$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
+$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
+$wb['dmarc_fo_txt'] = 'Forensic reporting options';
+$wb['dmarc_fo0_txt'] = "Generate reports if all underlying authentication mechanisms fail to produce a DMARC 'pass' result.";
+$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
+$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
+$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
+$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
+$wb['dmarc_adkim_note_txt'] = "'strict' requires exact matching between DKIM domain and email's from";
+$wb['dmarc_adkim_r_txt'] = 'relaxed';
+$wb['dmarc_adkim_s_txt'] = 'strict';
+$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
+$wb['dmarc_aspf_note_txt'] = "'strict' requires exact matching between SPF domain and email's from";
+$wb['dmarc_aspf_r_txt'] = 'relaxed';
+$wb['dmarc_aspf_s_txt'] = 'strict';
+$wb['dmarc_rf_txt'] = 'Report Format';
+$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
+$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
+$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
+$wb['dmarc_ri_txt'] = 'Reporting Interval';
+$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 repersents 1 day).';
+$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
+$wb['dmarc_sp_same_txt'] = 'same as domain';
+$wb['dmarc_sp_none_txt'] = 'none';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
+$wb['dmarc_sp_reject_txt'] = 'reject';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['dmarc_policy_error_txt'] = "Only policy 'none' is allowed without DKIM-signed emails.";
+$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
+$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
+$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
+$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
+$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
+$wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_spf.lng b/interface/web/dns/lib/lang/tr_dns_spf.lng
new file mode 100644
index 0000000..8a1a611
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_spf.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['data_txt'] = 'SPF-Record';
+$wb['spf_mechanism_txt'] = 'SPF Mechanism';
+$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
+$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
+$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
+$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
+$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
+$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
+$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
+$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
+$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
+$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
+$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
+$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
+$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
+$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_txt.lng b/interface/web/dns/lib/lang/tr_dns_txt.lng
index 48de6cd..372afe9 100644
--- a/interface/web/dns/lib/lang/tr_dns_txt.lng
+++ b/interface/web/dns/lib/lang/tr_dns_txt.lng
@@ -13,4 +13,7 @@
 $wb['data_error_empty'] = 'Metin boş';
 $wb['data_error_regex'] = 'Metin geçersiz formatta';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
+$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
 ?>
diff --git a/interface/web/dns/lib/module.conf.php b/interface/web/dns/lib/module.conf.php
index 83027c6..75b17a9 100644
--- a/interface/web/dns/lib/module.conf.php
+++ b/interface/web/dns/lib/module.conf.php
@@ -5,6 +5,7 @@
 $module["template"]  = "module.tpl.htm";
 $module["startpage"]  = "dns/dns_soa_list.php";
 $module["tab_width"]    = '';
+$module['order']    = '50';
 
 
 $items[] = array( 'title'  => "Add DNS Zone",
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index 3b47cf1..bf5bf1d 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
@@ -132,7 +132,7 @@
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CNAME'=>'CNAME', 'HINFO'=>'HINFO', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TXT'=>'TXT'));
+	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CNAME'=>'CNAME', 'HINFO'=>'HINFO', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SPF'=>'SPF', 'SRV'=>'SRV', 'TXT'=>'TXT'));
 
 
 ?>
diff --git a/interface/web/dns/list/dns_slave.list.php b/interface/web/dns/list/dns_slave.list.php
index 5c0be05..529a189 100644
--- a/interface/web/dns/list/dns_slave.list.php
+++ b/interface/web/dns/list/dns_slave.list.php
@@ -59,7 +59,7 @@
 	'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>"));
+	'value' => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 
 $liste["item"][] = array(   'field' => "server_id",
@@ -83,7 +83,8 @@
 		'prefix' => "",
 		'suffix' => "",
 		'datasource' => array (  'type' => 'SQL',
-			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			//'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'querystring' => "SELECT sys_group.groupid,CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), IF(client.contact_firstname != '', CONCAT(client.contact_firstname, ' '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as name FROM sys_group, client WHERE sys_group.groupid != 1 AND sys_group.client_id = client.client_id ORDER BY client.company_name, client.contact_name",
 			'keyfield'=> 'groupid',
 			'valuefield'=> 'name'
 		),
diff --git a/interface/web/dns/list/dns_soa.list.php b/interface/web/dns/list/dns_soa.list.php
index d6f5641..2f4233e 100644
--- a/interface/web/dns/list/dns_soa.list.php
+++ b/interface/web/dns/list/dns_soa.list.php
@@ -59,7 +59,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
@@ -83,7 +83,8 @@
 		'prefix' => "",
 		'suffix' => "",
 		'datasource' => array (  'type' => 'SQL',
-			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			//'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'querystring' => "SELECT sys_group.groupid,CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), IF(client.contact_firstname != '', CONCAT(client.contact_firstname, ' '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as name FROM sys_group, client WHERE sys_group.groupid != 1 AND sys_group.client_id = client.client_id ORDER BY client.company_name, client.contact_name",
 			'keyfield'=> 'groupid',
 			'valuefield'=> 'name'
 		),
diff --git a/interface/web/dns/list/dns_template.list.php b/interface/web/dns/list/dns_template.list.php
index 63302d9..be5d693 100644
--- a/interface/web/dns/list/dns_template.list.php
+++ b/interface/web/dns/list/dns_template.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value' => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
 
 
 $liste["item"][] = array(   'field' => "name",
diff --git a/interface/web/dns/templates/dns_a_edit.htm b/interface/web/dns/templates/dns_a_edit.htm
index 410d010..92dfbcd 100644
--- a/interface/web/dns/templates/dns_a_edit.htm
+++ b/interface/web/dns/templates/dns_a_edit.htm
@@ -1,42 +1,36 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_a">
 
-    <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" />
-                <p class="formHint">{tmpl_var name='name_hint_txt'}</p>
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div><p class="formHint">{tmpl_var name='name_hint_txt'}</p>
             </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 formLengthIPv4" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_a_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_a_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#data').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
@@ -49,6 +43,6 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });	
 </script>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index 14a5689..790fbdc 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -15,60 +15,63 @@
             </div><br />
         </div>
         </tmpl_if>
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+    <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
         <div class="buttons topbuttons">
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_a_edit.php?zone={tmpl_var name='parent_id'}');"><span>A</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_aaaa_edit.php?zone={tmpl_var name='parent_id'}');"><span>AAAA</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_alias_edit.php?zone={tmpl_var name='parent_id'}');"><span>ALIAS</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_cname_edit.php?zone={tmpl_var name='parent_id'}');"><span>CNAME</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_dkim_edit.php?zone={tmpl_var name='parent_id'}');"><span>DKIM</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_hinfo_edit.php?zone={tmpl_var name='parent_id'}');"><span>HINFO</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_mx_edit.php?zone={tmpl_var name='parent_id'}');"><span>MX</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_ns_edit.php?zone={tmpl_var name='parent_id'}');"><span>NS</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_ptr_edit.php?zone={tmpl_var name='parent_id'}');"><span>PTR</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_rp_edit.php?zone={tmpl_var name='parent_id'}');"><span>RP</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_srv_edit.php?zone={tmpl_var name='parent_id'}');"><span>SRV</span></button>
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_txt_edit.php?zone={tmpl_var name='parent_id'}');"><span>TXT</span></button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_a_edit.php?zone={tmpl_var name='parent_id'}">A</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_aaaa_edit.php?zone={tmpl_var name='parent_id'}">AAAA</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_alias_edit.php?zone={tmpl_var name='parent_id'}">ALIAS</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_cname_edit.php?zone={tmpl_var name='parent_id'}">CNAME</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_dkim_edit.php?zone={tmpl_var name='parent_id'}">DKIM</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_dmarc_edit.php?zone={tmpl_var name='parent_id'}">DMARC</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_hinfo_edit.php?zone={tmpl_var name='parent_id'}">HINFO</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_mx_edit.php?zone={tmpl_var name='parent_id'}">MX</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ns_edit.php?zone={tmpl_var name='parent_id'}">NS</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ptr_edit.php?zone={tmpl_var name='parent_id'}">PTR</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_rp_edit.php?zone={tmpl_var name='parent_id'}">RP</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_spf_edit.php?zone={tmpl_var name='parent_id'}">SPF</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_srv_edit.php?zone={tmpl_var name='parent_id'}">SRV</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_txt_edit.php?zone={tmpl_var name='parent_id'}">TXT</button>
         </div>
-    </fieldset>
+    
 </div>
 
-<div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-        <table class="list">
-            <thead>
-                <tr class="caption">
-                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                    <th class="tbl_col_type" scope="col"><tmpl_var name="type_txt"></th>
-                    <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                    <th class="tbl_col_data" scope="col"><tmpl_var name="data_txt"></th>
-                    <th class="tbl_col_aux" scope="col"><tmpl_var name="aux_txt"></th>
-                    <th class="tbl_col_ttl" scope="col"><tmpl_var name="ttl_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+
+    <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+        <div class="table-wrapper marginTop15">
+<table class="table">
+            <thead class="dark form-group-sm">
+                <tr>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                    <th data-column="type"><tmpl_var name="type_txt"></th>
+                    <th data-column="name"><tmpl_var name="name_txt"></th>
+                    <th data-column="data"><tmpl_var name="data_txt"></th>
+                    <th data-column="aux"><tmpl_var name="aux_txt"></th>
+                    <th data-column="ttl"><tmpl_var name="ttl_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                    <td class="tbl_col_type"><select name="search_type">{tmpl_var name='search_type'}</select></td>
-                    <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                    <td class="tbl_col_data"><input type="text" name="search_data" value="{tmpl_var name='search_data'}" /></td>
-                    <td class="tbl_col_aux"><input type="text" name="search_aux" value="{tmpl_var name='search_aux'}" /></td>
-                    <td class="tbl_col_ttl"><input type="text" name="search_ttl" value="{tmpl_var name='search_ttl'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="return changeTab('dns_records','dns/dns_soa_edit.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                    <td><select class="form-control" name="search_type">{tmpl_var name='search_type'}</select></td>
+                    <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                    <td><input class="form-control" type="text" name="search_data" value="{tmpl_var name='search_data'}" /></td>
+                    <td><input class="form-control" type="text" name="search_aux" value="{tmpl_var name='search_aux'}" /></td>
+                    <td><input class="form-control" type="text" name="search_ttl" value="{tmpl_var name='search_ttl'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="return ISPConfig.changeTab('dns_records','dns/dns_soa_edit.php');"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
             </thead>
             <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                        <td class="tbl_col_type"><a href="#" onclick="loadContent('dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="type"}</a></td>
-                        <td class="tbl_col_name"><a href="#" onclick="loadContent('dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                        <td class="tbl_col_data"><a href="#" onclick="loadContent('dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="data"}</a></td>
-                        <td class="tbl_col_aux"><a href="#" onclick="loadContent('dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="aux"}</a></td>
-                        <td class="tbl_col_ttl"><a href="#" onclick="loadContent('dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ttl"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_rr_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>
+                    <tr>
+                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="data"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="aux"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ttl"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_rr_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -80,9 +83,9 @@
             </tbody>
             <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                    <td colspan="7"><tmpl_var name="paging"></td>
                 </tr>
             </tfoot>
         </table>
-    </fieldset>
 </div>
+    
diff --git a/interface/web/dns/templates/dns_aaaa_edit.htm b/interface/web/dns/templates/dns_aaaa_edit.htm
index 44beefc..fbbc757 100644
--- a/interface/web/dns/templates/dns_aaaa_edit.htm
+++ b/interface/web/dns/templates/dns_aaaa_edit.htm
@@ -1,42 +1,36 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_aaaa">
 
-    <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" />
-                <p class="formHint">{tmpl_var name='name_hint_txt'}</p>
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div><p class="formHint">{tmpl_var name='name_hint_txt'}</p>
             </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_aaaa_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_aaaa_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#data').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv6',
@@ -49,6 +43,6 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });	
 </script>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_alias_edit.htm b/interface/web/dns/templates/dns_alias_edit.htm
index 517df75..5ab2a3c 100644
--- a/interface/web/dns/templates/dns_alias_edit.htm
+++ b/interface/web/dns/templates/dns_alias_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_alias">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_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('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_alias_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_cname_edit.htm b/interface/web/dns/templates/dns_cname_edit.htm
index 5021213..778279c 100644
--- a/interface/web/dns/templates/dns_cname_edit.htm
+++ b/interface/web/dns/templates/dns_cname_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_cname">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_cname_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_cname_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_dkim_edit.htm b/interface/web/dns/templates/dns_dkim_edit.htm
index 052f6d5..6914f13 100644
--- a/interface/web/dns/templates/dns_dkim_edit.htm
+++ b/interface/web/dns/templates/dns_dkim_edit.htm
@@ -1,29 +1,28 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_txt">
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-              <div class="ctrlHolder">
-                <label for="data">{tmpl_var name='public_key_txt'}</label>
-                <textarea name="data" id="data" >{tmpl_var name='public_key'}</textarea>
-              </div>
-			  <div class="ctrlHolder">
-				<label for="selector">{tmpl_var name='selector_txt'}</label>
-				<input name="selector" id="selector" value="{tmpl_var name='selector'}" size="20" maxlength="63" type="text" class="textInput" />
-			  </div>
-            <div class="ctrlHolder">
-                <label for="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
 
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+              <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='public_key_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" readonly name="data" id="data" >{tmpl_var name='public_key'}</textarea></div>
+              </div>
+			  <div class="form-group">
+				<label for="selector" class="col-sm-3 control-label">{tmpl_var name='selector_txt'}</label>
+				<div class="col-sm-9"><input type="text" name="selector" id="selector" value="{tmpl_var name='selector'}" readonly class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
@@ -31,12 +30,7 @@
         <input type="hidden" name="name" value="{tmpl_var name='name'}">
             </div>
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_dkim_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
-<script language="JavaScript" type="text/javascript" src="js/dns_dkim.js"></script>
-
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_dkim_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
new file mode 100644
index 0000000..51116bd
--- /dev/null
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -0,0 +1,163 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        
+            <div class="form-group">
+                <label for="domain" class="col-sm-2 control-label">{tmpl_var name='domain_txt'}</label>
+				<div class="col-sm-3">
+					<input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" readonly class="form-control" />
+				</div>
+			</div>
+            <div class="form-group">
+            	<label for="dmarc_policy" class="col-sm-2 control-label">{tmpl_var name='dmarc_policy_txt'}</label>
+                <div class="col-sm-3">
+					<select name="dmarc_policy" id="dmarc_policy" class="form-control">{tmpl_var name='dmarc_policy'}</select>
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_policy_note_txt'}
+				</div>
+            </div>
+			<div class="form-group">
+				<label for="dmarc_rua" class="col-sm-2 control-label">{tmpl_var name='dmarc_rua_txt'}</label>
+				<div class="col-sm-3">
+					<input type="text" name="dmarc_rua" id="dmarc_rua" value="{tmpl_var name='dmarc_rua'}" class="form-control" />
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_rua_note_txt'}
+				</div>
+			</div>
+			<div class="form-group">
+				<label for="dmarc_ruf" class="col-sm-2 control-label">{tmpl_var name='dmarc_ruf_txt'}</label>
+				<div class="col-sm-3">
+					<input type="text" name="dmarc_ruf" id="dmarc_ruf" value="{tmpl_var name='dmarc_ruf'}" class="form-control" />
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_ruf_note_txt'}
+				</div>
+			</div>
+
+            <div class="form-group">
+				<label class="col-sm-2 control-label">{tmpl_var name='dmarc_fo_txt'}</label>
+				 <div class="col-sm-3">
+					<input type="checkbox" value="1" id="dmarc_fo0" name="dmarc_fo0" {tmpl_var name='dmarc_fo0'}/>
+				</div>
+				<div class="col-sm-3 input-sm">
+					{tmpl_var name='dmarc_fo0_txt'}
+				</div>
+			</div>
+            <div class="form-group">
+				<label class="col-sm-2 control-label"></label>
+				<div class="col-sm-3">
+					<input type="checkbox" value="1" id="dmarc_fo0" name="dmarc_fo0" {tmpl_var name='dmarc_fo1'}/>
+				</div>
+				<div class="col-sm-3 input-sm">
+					{tmpl_var name='dmarc_fo1_txt'}
+				</div>
+            </div>
+            <div class="form-group">
+				<label class="col-sm-2 control-label"></label>
+				<div class="col-sm-3">
+					<input type="checkbox" value="1" id="dmarc_fod" name="dmarc_fod" {tmpl_var name='dmarc_fod'}/>
+				</div>
+				<div class="col-sm-3 input-sm">
+					{tmpl_var name='dmarc_fod_txt'}
+				</div>
+            </div>
+            <div class="form-group">
+				<label class="col-sm-2 control-label"></label>
+				<div class="col-sm-3">
+					<input type="checkbox" value="1" id="dmarc_fos" name="dmarc_fos" {tmpl_var name='dmarc_fos'}/>
+				</div>
+				<div class="col-sm-3 input-sm">
+					{tmpl_var name='dmarc_fos_txt'}
+				</div>
+            </div>
+
+            <div class="form-group">
+            	<label for="dmarc_adkim" class="col-sm-2 control-label">{tmpl_var name='dmarc_adkim_txt'}</label>
+                <div class="col-sm-3">
+					<select name="dmarc_adkim" id="dmarc_adkim" class="form-control">{tmpl_var name='dmarc_adkim'}</select>
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_adkim_note_txt'}
+				</div>
+            </div>
+            <div class="form-group">
+            	<label for="dmarc_aspf" class="col-sm-2 control-label">{tmpl_var name='dmarc_aspf_txt'}</label>
+                <div class="col-sm-3">
+					<select name="dmarc_aspf" id="dmarc_aspf" class="form-control">{tmpl_var name='dmarc_aspf'}</select>
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_aspf_note_txt'}
+				</div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-2 control-label">{tmpl_var name='dmarc_rf_txt'}</label>
+                 <div class="col-sm-3">
+                    <input type="checkbox" value="1" id="dmarc_rf_afrf" name="dmarc_fo0" {tmpl_var name='dmarc_rf_afrf'}/>
+                </div>
+                <div class="col-sm-3 input-sm">
+                    {tmpl_var name='dmarc_rf_afrf_txt'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-2 control-label"></label>
+                <div class="col-sm-3">
+                    <input type="checkbox" value="1" id="dmarc_rf_iodef" name="dmarc_rf_iodef" {tmpl_var name='dmarc_rf_iodef'}/>
+                </div>
+                <div class="col-sm-3 input-sm">
+                    {tmpl_var name='dmarc_rf_iodef_txt'}
+                </div>
+            </div>
+			<div class="form-group">
+				<label for="dmarc_pct" class="col-sm-2 control-label">{tmpl_var name='dmarc_pct_txt'}</label>
+				<div class="col-sm-3">
+					<input type="text" name="dmarc_pct" id="dmarc_pct" value="{tmpl_var name='dmarc_pct'}" class="form-control" />
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_pct_note_txt'}
+				</div>
+			</div>
+			<div class="form-group">
+				<label for="dmarc_ri" class="col-sm-2 control-label">{tmpl_var name='dmarc_ri_txt'}</label>
+				<div class="col-sm-3">
+					<input type="text" name="dmarc_ri" id="dmarc_ri" value="{tmpl_var name='dmarc_ri'}" class="form-control" />
+				</div>
+				<div class="col-sm-7 input-sm">
+					{tmpl_var name='dmarc_ri_note_txt'}
+				</div>
+			</div>
+            <div class="form-group">
+            	<label for="dmarc_sp" class="col-sm-2 control-label">{tmpl_var name='dmarc_sp_txt'}</label>
+                <div class="col-sm-3">
+					<select name="dmarc_sp" id="dmarc_sp" class="form-control">{tmpl_var name='dmarc_sp'}</select>
+				</div>
+            </div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-2 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-3">
+					<input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" />
+				</div>
+			</div>
+
+            <div class="form-group">
+                <label class="col-sm-2 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-3">
+                    <input type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'}/>
+                </div>
+            </div>
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
+        <input type="hidden" name="type" value="{tmpl_var name='type'}">
+        <input type="hidden" name="name" value="{tmpl_var name='name'}">
+            </div>
+            
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_dmarc_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
+
diff --git a/interface/web/dns/templates/dns_hinfo_edit.htm b/interface/web/dns/templates/dns_hinfo_edit.htm
index 0a9e028..0be975f 100644
--- a/interface/web/dns/templates/dns_hinfo_edit.htm
+++ b/interface/web/dns/templates/dns_hinfo_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_hinfo">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_hinfo_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_hinfo_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_import.htm b/interface/web/dns/templates/dns_import.htm
index d4806e1..aa9346c 100644
--- a/interface/web/dns/templates/dns_import.htm
+++ b/interface/web/dns/templates/dns_import.htm
@@ -1,69 +1,63 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_wizard">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend><tmpl_var name="zone_file_import_txt"></legend>
+        <legend><tmpl_var name="zone_file_import_txt"></legend>
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
-                    <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                    <select name="server_id" id="server_id" class="selectInput">
+                <div class="form-group">
+                    <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                    <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                         {tmpl_var name='server_id'}
-                    </select>
+                    </select></div>
                 </div>
-                <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">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </div>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
                 <tmpl_else>
-                    <div class="ctrlHolder">
-                        <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id" id="server_id" class="selectInput">
+                    <div class="form-group">
+                        <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_if>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="domain">{tmpl_var name='domain_txt'}</label>
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
                 <tmpl_if name="domain_option">
-                    <select name="domain" id="domain" class="selectInput">
+                    <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <tmpl_else>
-                        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" onkeydown="keydown(event.which);" />
-                </tmpl_if>
-                <p class="value"><tmpl_var name='domain_field_desc_txt'}</p>
+                        <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" onkeydown="keydown(event.which);" /></div></tmpl_if>
+					<div class="col-sm-3 col-text"></div><div class="col-sm-9 col-text"><tmpl_var name='domain_field_desc_txt'}</div>
             </div>    
-            <div class="ctrlHolder">
-                <label for="file">{tmpl_var name='zonefile_to_import_txt'}</label>
-                <input name="file" id="file" size="30" type="file" class="fileUpload" />
+            <div class="form-group">
+                <label for="file" class="col-sm-3 control-label">{tmpl_var name='zonefile_to_import_txt'}</label>
+                <div class="col-sm-9 col-text"><input name="file" id="file" size="30" type="file" class="fileUpload" /></div>
             </div>
                 
             <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>
+                <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
             </tmpl_if>
                 
             <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="submitUploadForm('pageForm','dns/dns_import.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_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-            </div>
-                
-        </fieldset>
-    </div>
-  
-</div>
+            <div class="clear"><div class="right">
+                <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_import.php" data-form-upload="true">{tmpl_var name='btn_save_txt'}</button>
+                <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+            </div></div>
 <script language="JavaScript" type="text/javascript">
     function keydown(keynum){
         if(keynum == 13){
diff --git a/interface/web/dns/templates/dns_mx_edit.htm b/interface/web/dns/templates/dns_mx_edit.htm
index 64b2c12..290c218 100644
--- a/interface/web/dns/templates/dns_mx_edit.htm
+++ b/interface/web/dns/templates/dns_mx_edit.htm
@@ -1,42 +1,35 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_mx">
 
-    <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" />
-            </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="aux">{tmpl_var name='aux_txt'}</label>
-                <input name="aux" id="aux" value="{tmpl_var name='aux'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="aux" class="col-sm-3 control-label">{tmpl_var name='aux_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="aux" id="aux" value="{tmpl_var name='aux'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_mx_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_mx_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_ns_edit.htm b/interface/web/dns/templates/dns_ns_edit.htm
index 3c5ee59..3cafa17 100644
--- a/interface/web/dns/templates/dns_ns_edit.htm
+++ b/interface/web/dns/templates/dns_ns_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_ns">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_ns_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_ns_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_ptr_edit.htm b/interface/web/dns/templates/dns_ptr_edit.htm
index 86b96e9..de59069 100644
--- a/interface/web/dns/templates/dns_ptr_edit.htm
+++ b/interface/web/dns/templates/dns_ptr_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_ptr">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_ptr_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_ptr_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ 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 f7852ea..a2a42c3 100644
--- a/interface/web/dns/templates/dns_records_edit.htm
+++ b/interface/web/dns/templates/dns_records_edit.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_dns_soa">
diff --git a/interface/web/dns/templates/dns_rp_edit.htm b/interface/web/dns/templates/dns_rp_edit.htm
index df9456f..3dd04ad 100644
--- a/interface/web/dns/templates/dns_rp_edit.htm
+++ b/interface/web/dns/templates/dns_rp_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_rp">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_rp_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_rp_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_slave_admin_list.htm b/interface/web/dns/templates/dns_slave_admin_list.htm
index d4f13ce..f439584 100644
--- a/interface/web/dns/templates/dns_slave_admin_list.htm
+++ b/interface/web/dns/templates/dns_slave_admin_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_dns_slave">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,48 +20,46 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_slave_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_slave_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-					<th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
-                    <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                    <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
-                    <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+					<th data-column="sys_groupid"><tmpl_var name="sys_groupid_txt"></th>
+                    <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                    <th data-column="origin"><tmpl_var name="origin_txt"></th>
+                    <th data-column="ns"><tmpl_var name="ns_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-					<td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
-                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                    <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
-                    <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_slave_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+					<td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                    <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                    <td><input class="form-control" type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+                    <td><input class="form-control" type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="dns/dns_slave_list.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-						<td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                        <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
-                        <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                    <tr>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+						<td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -73,11 +71,10 @@
                 </tbody>
                 <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                    <td colspan="6"><tmpl_var name="paging"></td>
                 </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_slave_edit.htm b/interface/web/dns/templates/dns_slave_edit.htm
index 3c212bc..598fe95 100644
--- a/interface/web/dns/templates/dns_slave_edit.htm
+++ b/interface/web/dns/templates/dns_slave_edit.htm
@@ -1,82 +1,76 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_slave">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend><tmpl_var name="secondary_zone_txt"></legend>
+        <legend><tmpl_var name="secondary_zone_txt"></legend>
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
+                <div class="form-group">
                     <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                     <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                     </tmpl_if>
                 </div>
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             </tmpl_if>
             <tmpl_if name="is_reseller">
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="origin">{tmpl_var name='origin_txt'}</label>
+            <div class="form-group">
+                <label for="origin" class="col-sm-3 control-label">{tmpl_var name='origin_txt'}</label>
                 <tmpl_if name="domain_option">
-                    <select name="origin" id="origin" class="selectInput">
+                    <div class="col-sm-9"><select name="origin" id="origin" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <tmpl_else>
-                        <input name="origin" id="origin" value="{tmpl_var name='origin'}" size="30" maxlength="255" type="text" class="textInput" />
-                </tmpl_if>
+                        <div class="col-sm-9"><input type="text" name="origin" id="origin" value="{tmpl_var name='origin'}" class="form-control" /></div></tmpl_if>
                 <p class="formHint">{tmpl_var name='eg_domain_tld'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="ns">{tmpl_var name='ns_txt'}</label>
-                <input name="ns" id="ns" value="{tmpl_var name='ns'}" size="30" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">{tmpl_var name='ipv4_form_txt'}</p>
+            <div class="form-group">
+                <label for="ns" class="col-sm-3 control-label">{tmpl_var name='ns_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ns" id="ns" value="{tmpl_var name='ns'}" class="form-control" /></div><p class="formHint">{tmpl_var name='ipv4_form_txt'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="xfer">{tmpl_var name='xfer_txt'}</label>
-                <input name="xfer" id="xfer" value="{tmpl_var name='xfer'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="xfer" class="col-sm-3 control-label">{tmpl_var name='xfer_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="xfer" id="xfer" value="{tmpl_var name='xfer'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input name="serial" type="hidden" value="{tmpl_var name='serial'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_slave_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_slave_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_slave_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_slave_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#ns').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
@@ -89,7 +83,7 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });
     jQuery('#xfer').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
@@ -102,6 +96,6 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });	
 </script>
diff --git a/interface/web/dns/templates/dns_slave_list.htm b/interface/web/dns/templates/dns_slave_list.htm
index 9c871ff..27916f4 100644
--- a/interface/web/dns/templates/dns_slave_list.htm
+++ b/interface/web/dns/templates/dns_slave_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_dns_slave">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,45 +20,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_slave_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_slave_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                    <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                    <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
-                    <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                    <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                    <th data-column="origin"><tmpl_var name="origin_txt"></th>
+                    <th data-column="ns"><tmpl_var name="ns_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                    <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
-                    <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_slave_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                    <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                    <td><input class="form-control" type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+                    <td><input class="form-control" type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="dns/dns_slave_list.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                        <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
-                        <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                    <tr>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -70,11 +68,10 @@
                 </tbody>
                 <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                    <td colspan="6"><tmpl_var name="paging"></td>
                 </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index b77f884..0f14534 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_dns_soa">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,51 +20,51 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_wizard.php');"><span>{tmpl_var name="add_new_record_wizard_txt"}</span></button>
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_soa_edit.php');"><span>{tmpl_var name="add_new_record_txt"}</span></button>
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_import.php');"><span>Import Zone File</span></button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_wizard.php">{tmpl_var name="add_new_record_wizard_txt"}</button>
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_soa_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_import.php">Import Zone File</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-            <thead>
-                <tr class="caption">
-                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-					<th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
-                    <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                    <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
-                    <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
-                    <th class="tbl_col_mbox" scope="col"><tmpl_var name="mbox_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+            <thead class="dark form-group-sm">
+                <tr>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+					<th data-column="sys_groupid"><tmpl_var name="sys_groupid_txt"></th>
+                    <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                    <th data-column="origin"><tmpl_var name="origin_txt"></th>
+                    <th data-column="ns"><tmpl_var name="ns_txt"></th>
+                    <th data-column="mbox"><tmpl_var name="mbox_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-					<td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
-                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                    <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
-                    <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
-                    <td class="tbl_col_mbox"><input type="text" name="search_mbox" value="{tmpl_var name='search_mbox'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_soa_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+					<td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                    <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                    <td><input class="form-control" type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+                    <td><input class="form-control" type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+                    <td><input class="form-control" type="text" name="search_mbox" value="{tmpl_var name='search_mbox'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="dns/dns_soa_list.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
             </thead>
             <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</td>
-						<td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                        <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
-                        <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
-                        <td class="tbl_col_mbox"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="mbox"}</a></td>
-                        <td class="tbl_col_buttons">   
-                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                    <tr>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
+						<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="mbox"}</a></td>
+                        <td class="text-right">   
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -76,11 +76,10 @@
             </tbody>
             <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                    <td colspan="7"><tmpl_var name="paging"></td>
                 </tr>
             </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm
index d222dff..54d84fa 100644
--- a/interface/web/dns/templates/dns_soa_edit.htm
+++ b/interface/web/dns/templates/dns_soa_edit.htm
@@ -1,135 +1,126 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_soa">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>DNS Zone</legend>
+        <legend>DNS Zone</legend>
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
+                <div class="form-group">
                     <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                     </tmpl_if>
                 </div>
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
                 <tmpl_else>
-                    <div class="ctrlHolder">
+                    <div class="form-group">
                         <tmpl_if name="edit_disabled">
-                            <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                            <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                                 {tmpl_var name='client_server_id'}
-                            </select>
+                            </select></div>
                             <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='client_server_id'}
-                            </select>
+                            </select></div>
                         </tmpl_if>
                     </div>
                 </tmpl_if>
             </tmpl_if>
             <tmpl_if name="is_reseller">
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="origin">{tmpl_var name='origin_txt'}</label>
+            <div class="form-group">
+                <label for="origin" class="col-sm-3 control-label">{tmpl_var name='origin_txt'}</label>
                 <tmpl_if name="domain_option">
-                    <select name="origin" id="origin" class="selectInput">
+                    <div class="col-sm-9"><select name="origin" id="origin" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <tmpl_else>
-                        <input name="origin" id="origin" value="{tmpl_var name='origin'}" size="30" maxlength="255" type="text" class="textInput" />
-                </tmpl_if>
+                        <div class="col-sm-9"><input type="text" name="origin" id="origin" value="{tmpl_var name='origin'}" class="form-control" /></div></tmpl_if>
                 <p class="formHint">{tmpl_var name='eg_domain_tld'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="ns">{tmpl_var name='ns_txt'}</label>
-                <input name="ns" id="ns" value="{tmpl_var name='ns'}" size="30" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">{tmpl_var name='eg_ns1_domain_tld'}</p>
+            <div class="form-group">
+                <label for="ns" class="col-sm-3 control-label">{tmpl_var name='ns_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ns" id="ns" value="{tmpl_var name='ns'}" class="form-control" /></div><p class="formHint">{tmpl_var name='eg_ns1_domain_tld'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="mbox">{tmpl_var name='mbox_txt'}</label>
-                <input name="mbox" id="mbox" value="{tmpl_var name='mbox'}" size="30" maxlength="255" type="text" class="textInput" />
-                <p class="formHint">{tmpl_var name='eg_webmaster_domain_tld'}</p>
+            <div class="form-group">
+                <label for="mbox" class="col-sm-3 control-label">{tmpl_var name='mbox_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="mbox" id="mbox" value="{tmpl_var name='mbox'}" class="form-control" /></div><p class="formHint">{tmpl_var name='eg_webmaster_domain_tld'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="refresh">{tmpl_var name='refresh_txt'}</label>
-                <input name="refresh" id="refresh" value="{tmpl_var name='refresh'}" size="10" maxlength="10" type="text" class="textInput" />&nbsp;{tmpl_var name='seconds_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="retry">{tmpl_var name='retry_txt'}</label>
-                <input name="retry" id="retry" value="{tmpl_var name='retry'}" size="10" maxlength="10" type="text" class="textInput" />&nbsp;{tmpl_var name='seconds_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="expire">{tmpl_var name='expire_txt'}</label>
-                <input name="expire" id="expire" value="{tmpl_var name='expire'}" size="10" maxlength="10" type="text" class="textInput" />&nbsp;{tmpl_var name='seconds_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="minimum">{tmpl_var name='minimum_txt'}</label>
-                <input name="minimum" id="minimum" value="{tmpl_var name='minimum'}" size="10" maxlength="10" type="text" class="textInput" />&nbsp;{tmpl_var name='seconds_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />&nbsp;{tmpl_var name='seconds_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="xfer">{tmpl_var name='xfer_txt'}</label>
-                <input name="xfer" id="xfer" value="{tmpl_var name='xfer'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="also_notify">{tmpl_var name='also_notify_txt'}</label>
-                <input name="also_notify" id="also_notify" value="{tmpl_var name='also_notify'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="update_acl">{tmpl_var name='update_acl_txt'}</label>
-                <input name="update_acl" id="update_acl" value="{tmpl_var name='update_acl'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
+            <div class="form-group">
+                <label for="refresh" class="col-sm-3 control-label">{tmpl_var name='refresh_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="refresh" id="refresh" value="{tmpl_var name='refresh'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="retry" class="col-sm-3 control-label">{tmpl_var name='retry_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="retry" id="retry" value="{tmpl_var name='retry'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="expire" class="col-sm-3 control-label">{tmpl_var name='expire_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="expire" id="expire" value="{tmpl_var name='expire'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="minimum" class="col-sm-3 control-label">{tmpl_var name='minimum_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="minimum" id="minimum" value="{tmpl_var name='minimum'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="xfer" class="col-sm-3 control-label">{tmpl_var name='xfer_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="xfer" id="xfer" value="{tmpl_var name='xfer'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="also_notify" class="col-sm-3 control-label">{tmpl_var name='also_notify_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="also_notify" id="also_notify" value="{tmpl_var name='also_notify'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='update_acl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="update_acl" id="update_acl" value="{tmpl_var name='update_acl'}" class="form-control" /></div></div>
                 
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input name="serial" type="hidden" value="{tmpl_var name='serial'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_soa_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_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_soa_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#xfer').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
@@ -142,7 +133,7 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });
     jQuery('#also_notify').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
@@ -155,6 +146,6 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });
 </script>
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm
index 0429407..5162119 100644
--- a/interface/web/dns/templates/dns_soa_list.htm
+++ b/interface/web/dns/templates/dns_soa_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_dns_soa">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,48 +20,48 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_wizard.php');"><span>{tmpl_var name="add_new_record_wizard_txt"}</span></button>
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_soa_edit.php');"><span>{tmpl_var name="add_new_record_txt"}</span></button>
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_import.php');"><span>{tmpl_var name="import_zone_file_txt"}</span></button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_wizard.php">{tmpl_var name="add_new_record_wizard_txt"}</button>
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_soa_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_import.php">{tmpl_var name="import_zone_file_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-            <thead>
-                <tr class="caption">
-                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                    <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                    <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
-                    <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
-                    <th class="tbl_col_mbox" scope="col"><tmpl_var name="mbox_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+            <thead class="dark form-group-sm">
+                <tr>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                    <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                    <th data-column="origin"><tmpl_var name="origin_txt"></th>
+                    <th data-column="ns"><tmpl_var name="ns_txt"></th>
+                    <th data-column="mbox"><tmpl_var name="mbox_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                    <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
-                    <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
-                    <td class="tbl_col_mbox"><input type="text" name="search_mbox" value="{tmpl_var name='search_mbox'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_soa_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                    <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                    <td><input class="form-control" type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+                    <td><input class="form-control" type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+                    <td><input class="form-control" type="text" name="search_mbox" value="{tmpl_var name='search_mbox'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="dns/dns_soa_list.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
             </thead>
             <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                        <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
-                        <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
-                        <td class="tbl_col_mbox"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="mbox"}</a></td>
-                        <td class="tbl_col_buttons">   
-                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                    <tr>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="mbox"}</a></td>
+                        <td class="text-right">   
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -73,11 +73,10 @@
             </tbody>
             <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                    <td colspan="6"><tmpl_var name="paging"></td>
                 </tr>
             </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_spf_edit.htm b/interface/web/dns/templates/dns_spf_edit.htm
new file mode 100644
index 0000000..bc8c1a2
--- /dev/null
+++ b/interface/web/dns/templates/dns_spf_edit.htm
@@ -0,0 +1,62 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+				<div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" readonly class="form-control" /></div></div>
+            <div class="form-group">
+            	<label for="spf_mechanism" class="col-sm-3 control-label">{tmpl_var name='spf_mechanism_txt'}</label>
+                <div class="col-sm-9"><select name="spf_mechanism" id="spf_mechanism" class="form-control">
+                	{tmpl_var name='spf_mechanism'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='spf_mx_txt'}</label>
+                <div class="col-sm-9"><input type="checkbox" value="1" id="spf_mx" name="spf_mx" {tmpl_var name = 'spf_mx_active'} /></div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='spf_a_txt'}</label>
+                <div class="col-sm-9"><input type="checkbox" value="1" id="spf_a" name="spf_a" {tmpl_var name = 'spf_a_active'} /></div>
+            </div>
+			<div class="form-group">
+				<label for="spf_ip" class="col-sm-3 control-label">{tmpl_var name='spf_ip_txt'}</label>
+				<div class="col-sm-6"><input type="text" name="spf_ip" id="spf_ip" value="{tmpl_var name='spf_ip'}" class="form-control" /></div><div class="col-sm-3 input-sm">
+				{tmpl_var name='spf_ip_note_txt'}
+			</div></div>
+			<div class="form-group">
+				<label for="spf_hostname" class="col-sm-3 control-label">{tmpl_var name='spf_hostname_txt'}</label>
+				<div class="col-sm-6"><input type="text" name="spf_hostname" id="spf_hostname" value="{tmpl_var name='spf_hostname'}" class="form-control" /></div><div class="col-sm-3 input-sm">
+				{tmpl_var name='spf_hostname_note_txt'}
+			</div></div>
+			<div class="form-group">
+				<label for="spf_domain" class="col-sm-3 control-label">{tmpl_var name='spf_domain_txt'}</label>
+				<div class="col-sm-6"><input type="text" name="spf_domain" id="spf_domain" value="{tmpl_var name='spf_domain'}" class="form-control" /></div><div class="col-sm-3 input-sm">
+				{tmpl_var name='spf_domain_note_txt'}
+			</div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                 <div class="col-sm-9">
+                    <input type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'}/>
+                </div>
+            </div>
+
+        
+            
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
+        <input type="hidden" name="type" value="{tmpl_var name='type'}">
+        <input type="hidden" name="name" value="{tmpl_var name='name'}">
+            </div>
+            
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_spf_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
+
diff --git a/interface/web/dns/templates/dns_srv_edit.htm b/interface/web/dns/templates/dns_srv_edit.htm
index b50abe6..fd9f00d 100644
--- a/interface/web/dns/templates/dns_srv_edit.htm
+++ b/interface/web/dns/templates/dns_srv_edit.htm
@@ -1,50 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_srv">
 
-    <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" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="target">{tmpl_var name='target_txt'}</label>
-                <input name="target" id="target" value="{tmpl_var name='target'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="weight">{tmpl_var name='weight_txt'}</label>
-                <input name="weight" id="weight" value="{tmpl_var name='weight'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="port">{tmpl_var name='port_txt'}</label>
-                <input name="port" id="port" value="{tmpl_var name='port'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="aux">{tmpl_var name='aux_txt'}</label>
-                <input name="aux" id="aux" value="{tmpl_var name='aux'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="target" class="col-sm-3 control-label">{tmpl_var name='target_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="target" id="target" value="{tmpl_var name='target'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="weight" class="col-sm-3 control-label">{tmpl_var name='weight_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="weight" id="weight" value="{tmpl_var name='weight'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="port" class="col-sm-3 control-label">{tmpl_var name='port_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="port" id="port" value="{tmpl_var name='port'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="aux" class="col-sm-3 control-label">{tmpl_var name='aux_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="aux" id="aux" value="{tmpl_var name='aux'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_srv_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_srv_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_template_edit.htm b/interface/web/dns/templates/dns_template_edit.htm
index 36ab9e0..132cc92 100644
--- a/interface/web/dns/templates/dns_template_edit.htm
+++ b/interface/web/dns/templates/dns_template_edit.htm
@@ -1,38 +1,34 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='fields_txt'}</label>
+                <div class="col-sm-9">
                     {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 class="form-group">
+                <label for="template" class="col-sm-3 control-label">{tmpl_var name='template_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="template" id="template" rows='15' cols='40'>{tmpl_var name='template'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='visible_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='visible_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_template_list.htm b/interface/web/dns/templates/dns_template_list.htm
index 7b6ec0a..f7816cf 100644
--- a/interface/web/dns/templates/dns_template_list.htm
+++ b/interface/web/dns/templates/dns_template_list.htm
@@ -1,42 +1,40 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_dns_template">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_template_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_template_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_visible" scope="col"><tmpl_var name="visible_txt"></th>
-                        <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="visible"><tmpl_var name="visible_txt"></th>
+                        <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_visible"><select name="search_visible">{tmpl_var name='search_visible'}</select></td>
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_template_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_visible">{tmpl_var name='search_visible'}</select></td>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="dns/dns_template_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_visible"><a href="#" onclick="loadContent('dns/dns_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="visible"}</a></td>
-                        <td class="tbl_col_name"><a href="#" onclick="loadContent('dns/dns_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_template_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>
+                    <tr>
+                        <td><a href="#" data-load-content="dns/dns_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="visible"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -48,11 +46,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_txt_edit.htm b/interface/web/dns/templates/dns_txt_edit.htm
index 7884a86..f03f6d3 100644
--- a/interface/web/dns/templates/dns_txt_edit.htm
+++ b/interface/web/dns/templates/dns_txt_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_dns_txt">
 
-    <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" />
-            </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="ttl">{tmpl_var name='ttl_txt'}</label>
-                <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','dns/dns_txt_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_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_txt_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/dns/templates/dns_wizard.htm b/interface/web/dns/templates/dns_wizard.htm
index d518b4a..fc57fb9 100644
--- a/interface/web/dns/templates/dns_wizard.htm
+++ b/interface/web/dns/templates/dns_wizard.htm
@@ -1,115 +1,106 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="error">
-    <div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
+    <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
 </tmpl_if>
 
-<div class="panel panel_dns_wizard">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend><tmpl_var name="dns_zone_txt"></legend>
-            <div class="ctrlHolder">
-                <label for="template_id">{tmpl_var name='template_id_txt'}</label>
-                <select name="template_id" id="template_id" class="selectInput" onChange="submitForm('pageForm','dns/dns_wizard.php')">
+        <legend><tmpl_var name="dns_zone_txt"></legend>
+            <div class="form-group">
+                <label for="template_id" class="col-sm-3 control-label">{tmpl_var name='template_id_txt'}</label>
+                <div class="col-sm-9"><select name="template_id" id="template_id" class="form-control" onChange="ISPConfig.submitForm('pageForm','dns/dns_wizard.php')">
                     {tmpl_var name='template_id_option'}
-                </select>
+                </select></div>
             </div>
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
-                    <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                    <select name="server_id" id="server_id" class="selectInput">
+                <div class="form-group">
+                    <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                    <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                         {tmpl_var name='server_id'}
-                    </select>
+                    </select></div>
                 </div>
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
                 <tmpl_else>
-                    <div class="ctrlHolder">
-                        <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id" id="server_id" class="selectInput">
+                    <div class="form-group">
+                        <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_if>
             </tmpl_if>
             <tmpl_if name="is_reseller">
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             </tmpl_if>
             <tmpl_if name="DOMAIN_VISIBLE">
-                <div class="ctrlHolder">
-                    <label for="domain">{tmpl_var name='domain_txt'}</label>
+                <div class="form-group">
+                    <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
                     <tmpl_if name="domain_option">
-                        <select name="domain" id="domain" class="selectInput">
+                        <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                             {tmpl_var name='domain_option'}
-                        </select>
+                        </select></div>
                         <tmpl_else>
-                            <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-                    </tmpl_if>
+                            <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></tmpl_if>
                 </div>
             </tmpl_if>
             <tmpl_if name="IP_VISIBLE">
-                <div class="ctrlHolder">
-                    <label for="ip">{tmpl_var name='ip_txt'}</label>
-                    <input name="ip" id="ip" value="{tmpl_var name='ip'}" size="30" maxlength="255" type="text" class="textInput" />
-                </div>
+                <div class="form-group">
+                    <label for="ip" class="col-sm-3 control-label">{tmpl_var name='ip_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="ip" id="ip" value="{tmpl_var name='ip'}" class="form-control" /></div></div>
             </tmpl_if>
             <tmpl_if name="IPV6_VISIBLE">
-                <div class="ctrlHolder">
-                    <label for="ipv6">{tmpl_var name='ipv6_txt'}</label>
-                    <input name="ipv6" id="ipv6" value="{tmpl_var name='ipv6'}" size="30" maxlength="255" type="text" class="textInput" />
-                </div>
+                <div class="form-group">
+                    <label for="ipv6" class="col-sm-3 control-label">{tmpl_var name='ipv6_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="ipv6" id="ipv6" value="{tmpl_var name='ipv6'}" class="form-control" /></div></div>
             </tmpl_if>
             <tmpl_if name="NS1_VISIBLE">
-                <div class="ctrlHolder">
-                    <label for="ns1">{tmpl_var name='ns1_txt'}</label>
-                    <input name="ns1" id="ns1" value="{tmpl_var name='ns1'}" size="30" maxlength="255" type="text" class="textInput" />
-                </div>
+                <div class="form-group">
+                    <label for="ns1" class="col-sm-3 control-label">{tmpl_var name='ns1_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="ns1" id="ns1" value="{tmpl_var name='ns1'}" class="form-control" /></div></div>
             </tmpl_if>
             <tmpl_if name="NS2_VISIBLE">
-                <div class="ctrlHolder">
-                    <label for="ns2">{tmpl_var name='ns2_txt'}</label>
-                    <input name="ns2" id="ns2" value="{tmpl_var name='ns2'}" size="30" maxlength="255" type="text" class="textInput" />
-                </div>
+                <div class="form-group">
+                    <label for="ns2" class="col-sm-3 control-label">{tmpl_var name='ns2_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="ns2" id="ns2" value="{tmpl_var name='ns2'}" class="form-control" /></div></div>
             </tmpl_if>
             <tmpl_if name="EMAIL_VISIBLE">
-                <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="form-group">
+                    <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></div>
             </tmpl_if>
             <tmpl_if name="DKIM_VISIBLE">
-		    <label for="dkim">{tmpl_var name='dkim_txt'}</label>
+		    <label for="dkim" class="col-sm-3 control-label">{tmpl_var name='dkim_txt'}</label>
                     <input name="dkim" type="hidden" maxlength="255" type="text"/>
             </tmpl_if>
 
-        </fieldset>
+        
             
         <input type="hidden" name="create" value="0" />
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" name="btn_create" onclick="document.pageForm.create.value=1; submitForm('pageForm','dns/dns_wizard.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_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" name="btn_create" onclick="document.pageForm.create.value=1; ISPConfig.submitForm('pageForm','dns/dns_wizard.php');">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#ip').ispconfigSearch({
         dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
@@ -122,7 +113,7 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });	
 </script>
 <script language="JavaScript" type="text/javascript">
@@ -137,6 +128,6 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });
 </script>
diff --git a/interface/web/help/faq_list.php b/interface/web/help/faq_list.php
index 53b2992..128480d 100644
--- a/interface/web/help/faq_list.php
+++ b/interface/web/help/faq_list.php
@@ -29,7 +29,7 @@
 $app->listform_actions->SQLExtWhere = "help_faq.hf_section = $hf_section";
 
 
-if($hf_section) $res = $app->db->queryOneRecord("SELECT hfs_name FROM help_faq_sections WHERE hfs_id=$hf_section");
+if($hf_section) $res = $app->db->queryOneRecord("SELECT hfs_name FROM help_faq_sections WHERE hfs_id=?", $hf_section);
 // Start the form rendering and action ahndling
 echo "<h2>FAQ: ".$res['hfs_name']."</h2>";
 if($hf_section) $app->listform_actions->onLoad();
diff --git a/interface/web/help/form/support_message.tform.php b/interface/web/help/form/support_message.tform.php
index d982712..d80cc15 100644
--- a/interface/web/help/form/support_message.tform.php
+++ b/interface/web/help/form/support_message.tform.php
@@ -46,7 +46,7 @@
 if(isset($_GET['reply']))
 {
 	$sm_msg_id = preg_replace("/[^0-9]/", "", $_GET['reply']);
-	$res = $app->db->queryOneRecord("SELECT sender_id, subject FROM support_message WHERE support_message_id=$sm_msg_id");
+	$res = $app->db->queryOneRecord("SELECT sender_id, subject FROM support_message WHERE support_message_id=?", $sm_msg_id);
 	if($res['sender_id'])
 	{
 		$sm_default_recipient_id = $res['sender_id'];
diff --git a/interface/web/help/support_message_edit.php b/interface/web/help/support_message_edit.php
index 2d47bbf..4fcf5da 100644
--- a/interface/web/help/support_message_edit.php
+++ b/interface/web/help/support_message_edit.php
@@ -33,8 +33,8 @@
 
 		//* Get recipient email address
 		if($this->dataRecord['recipient_id'] > 1){
-			$sql = "SELECT client.email FROM sys_user, client WHERE sys_user.userid = ".$app->functions->intval($this->dataRecord['recipient_id'])." AND sys_user.client_id = client.client_id";
-			$client = $app->db->queryOneRecord($sql);
+			$sql = "SELECT client.email FROM sys_user, client WHERE sys_user.userid = ? AND sys_user.client_id = client.client_id";
+			$client = $app->db->queryOneRecord($sql, $this->dataRecord['recipient_id']);
 			$recipient_email = $client['email'];
 		} else {
 			$app->uses('ini_parser,getconf');
@@ -44,8 +44,8 @@
 
 		//* Get sender email address
 		if($this->dataRecord['sender_id'] > 1){
-			$sql = "SELECT client.email FROM sys_user, client WHERE sys_user.userid = ".$app->functions->intval($this->dataRecord['sender_id'])." AND sys_user.client_id = client.client_id";
-			$client = $app->db->queryOneRecord($sql);
+			$sql = "SELECT client.email FROM sys_user, client WHERE sys_user.userid = ? AND sys_user.client_id = client.client_id";
+			$client = $app->db->queryOneRecord($sql, $this->dataRecord['sender_id']);
 			$sender_email = $client['email'];
 		} else {
 			$app->uses('ini_parser,getconf');
@@ -91,7 +91,7 @@
 		//*  read only template  if a existing message is loaded
 		if($this->id > 0) {
 			$app->tform->formDef['tabs']['message']['template'] = 'templates/support_message_view.htm';
-			$record = $app->db->queryOneRecord("SELECT * FROM support_message WHERE support_message_id = ".$this->id);
+			$record = $app->db->queryOneRecord("SELECT * FROM support_message WHERE support_message_id = ?", $this->id);
 			if ($record['tstamp'] > 0) {
 				// is value int?
 				if (preg_match("/^[0-9]+[\.]?[0-9]*$/", $record['tstamp'], $p)) {
@@ -113,7 +113,7 @@
 		global $app, $conf;
 
 		if($_SESSION['s']['user']['typ'] == 'admin') {
-			$app->db->query("UPDATE support_message SET sys_userid = ".$app->functions->intval($this->dataRecord['recipient_id'])." WHERE support_message_id = ".$this->id);
+			$app->db->query("UPDATE support_message SET sys_userid = ? WHERE support_message_id = ?", $this->dataRecord['recipient_id'], $this->id);
 		}
 
 	}
diff --git a/interface/web/help/templates/faq_edit.htm b/interface/web/help/templates/faq_edit.htm
index dc35358..3bf9d8a 100644
--- a/interface/web/help/templates/faq_edit.htm
+++ b/interface/web/help/templates/faq_edit.htm
@@ -1,29 +1,23 @@
-<div class="panel panel_support_message">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='faq_faq_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="hf_section">{tmpl_var name='faq_section_txt'}</label>
-                <select name="hf_section" id="hf_section" class="selectInput">
+        <legend>{tmpl_var name='faq_faq_txt'}</legend>
+            <div class="form-group">
+                <label for="hf_section" class="col-sm-3 control-label">{tmpl_var name='faq_section_txt'}</label>
+                <div class="col-sm-9"><select name="hf_section" id="hf_section" class="form-control">
                     {tmpl_var name='hf_section'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="hf_question">{tmpl_var name='faq_question_txt'}</label>
-                <input name="hf_question" id="hf_question" value="{tmpl_var name='hf_question'}" size="30" maxlength="255" type="text" class="textInput" />
+            <div class="form-group">
+                <label for="hf_question" class="col-sm-3 control-label">{tmpl_var name='faq_question_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="hf_question" id="hf_question" value="{tmpl_var name='hf_question'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="hf_answer" class="col-sm-3 control-label">{tmpl_var name='faq_answer_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="hf_answer" id="hf_answer" rows='10' cols='30'>{tmpl_var name='hf_answer'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="hf_answer">{tmpl_var name='faq_answer_txt'}</label>
-                <textarea name="hf_answer" id="hf_answer" rows='10' cols='30'>{tmpl_var name='hf_answer'}</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','help/faq_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/faq_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="help/faq_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="help/faq_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/help/templates/faq_manage_questions_list.htm b/interface/web/help/templates/faq_manage_questions_list.htm
index e7b5eaf..7659d39 100644
--- a/interface/web/help/templates/faq_manage_questions_list.htm
+++ b/interface/web/help/templates/faq_manage_questions_list.htm
@@ -1,37 +1,33 @@
 <h2>{tmpl_var name="faq_faq_questions_txt"}</h2>
-<div class="panel panel_support_message">
-    
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('help/faq_edit.php');">
-                    <span>{tmpl_var name="faq_new_question_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="faq_sections_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col">{tmpl_var name="faq_question_txt"}</th>
-                        <th class="tbl_col_section_name" scope="col">{tmpl_var name="faq_section_name_txt"}</th>
-                        <th class="tbl_col_buttons" scope="col">{tmpl_var name="faq_delete_txt"}</th>
-                        <th class="tbl_col_buttons" scope="col">{tmpl_var name="faq_edit_txt"}</th>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="help/faq_edit.php">{tmpl_var name="faq_new_question_txt"}</button>
+            
+        
+
+    
+        <p class="fieldset-legend"><tmpl_var name="faq_sections_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col">{tmpl_var name="faq_question_txt"}</th>
+                        <th>{tmpl_var name="faq_section_name_txt"}</th>
+                        <th class="text-right">{tmpl_var name="faq_delete_txt"}</th>
+                        <th class="text-right">{tmpl_var name="faq_edit_txt"}</th>
                     </tr>
                 </thead>
 				<tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                    <tr>
                         <td width="60%">{tmpl_var name='hf_question'}</td>
                         <td width="30%">{tmpl_var name='hf_section'}</td>
-                        <td class="tbl_col_buttons" width="5%">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('help/faq_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name="faq_delete_txt"}</span></a>
+                        <td class="text-right" width="5%">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
-                        <td class="tbl_col_buttons" width="5%">
-                            <a class="button icons16 icoEdit" href="javascript: loadContent('help/faq_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name="faq_edit_txt"}</span></a>
+                        <td class="text-right" width="5%">
+                            <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="help/faq_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -43,11 +39,10 @@
 				</tbody>
 				<tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-    
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/help/templates/faq_sections_edit.htm b/interface/web/help/templates/faq_sections_edit.htm
index b4c2754..1380447 100644
--- a/interface/web/help/templates/faq_sections_edit.htm
+++ b/interface/web/help/templates/faq_sections_edit.htm
@@ -1,20 +1,14 @@
-<div class="panel panel_support_message">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='faq_section_name_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="hfs_name">{tmpl_var name='faq_section_name_txt'}</label>
-                <input name="hfs_name" id="hfs_name" value="{tmpl_var name='hfs_name'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-        </fieldset>
+        <legend>{tmpl_var name='faq_section_name_txt'}</legend>
+            <div class="form-group">
+                <label for="hfs_name" class="col-sm-3 control-label">{tmpl_var name='faq_section_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="hfs_name" id="hfs_name" value="{tmpl_var name='hfs_name'}" class="form-control" /></div></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','help/faq_sections_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/faq_sections_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="help/faq_sections_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="help/faq_sections_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 
diff --git a/interface/web/help/templates/help_faq_list.htm b/interface/web/help/templates/help_faq_list.htm
index ae5ae11..e81dae2 100644
--- a/interface/web/help/templates/help_faq_list.htm
+++ b/interface/web/help/templates/help_faq_list.htm
@@ -5,8 +5,8 @@
         {tmpl_var name='hf_answer'}
     </p>
     <tmpl_if name='is_admin'>
-        <a class="button icons16 icoDelete" href="javascript: del_record('help/faq_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name="delete_txt"}</span></a>
-        <a href="#" onclick="loadContent('help/faq_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="edit_txt"}</a>
+        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+        <a href="#" data-load-content="help/faq_edit.php?id={tmpl_var name='id'}">{tmpl_var name="edit_txt"}</a>
         <br/>
         <br/>
         <br/>
diff --git a/interface/web/help/templates/help_faq_sections_list.htm b/interface/web/help/templates/help_faq_sections_list.htm
index 298b907..5a3733a 100644
--- a/interface/web/help/templates/help_faq_sections_list.htm
+++ b/interface/web/help/templates/help_faq_sections_list.htm
@@ -1,37 +1,35 @@
-<h2><tmpl_var name="faq_faq_sections_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="faq_faq_sections_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_support_faq_section">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('help/faq_sections_edit.php');">
-                    <span>{tmpl_var name="faq_new_section_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="help/faq_sections_edit.php">{tmpl_var name="faq_new_section_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="faq_sections_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_section_name" scope="col">{tmpl_var name="faq_section_name_txt"}</th>
-                        <th class="tbl_col_buttons" scope="col">{tmpl_var name="faq_delete_txt"}</th>
-                        <th class="tbl_col_buttons" scope="col">{tmpl_var name="faq_edit_txt"}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="faq_sections_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th>{tmpl_var name="faq_section_name_txt"}</th>
+                        <th class="text-right">{tmpl_var name="faq_delete_txt"}</th>
+                        <th class="text-right">{tmpl_var name="faq_edit_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_section_name"><b>{tmpl_var name='hfs_name'}</b></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('help/faq_sections_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name="faq_delete_txt"}</span></a>
+                    <tr>
+                        <td><b>{tmpl_var name='hfs_name'}</b></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_sections_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoEdit" href="javascript: loadContent('help/faq_sections_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name="faq_edit_txt"}</span></a>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="help/faq_sections_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -43,11 +41,10 @@
 				</tbody>
 				<tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ 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 c3f23a3..fb54578 100644
--- a/interface/web/help/templates/support_message_edit.htm
+++ b/interface/web/help/templates/support_message_edit.htm
@@ -1,33 +1,29 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_support_message">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='message_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="recipient_id">{tmpl_var name='recipient_id_txt'}</label>
-                <select name="recipient_id" id="recipient_id" class="selectInput">
+        <legend>{tmpl_var name='message_txt'}</legend>
+            <div class="form-group">
+                <label for="recipient_id" class="col-sm-3 control-label">{tmpl_var name='recipient_id_txt'}</label>
+                <div class="col-sm-9"><select name="recipient_id" id="recipient_id" class="form-control">
                     {tmpl_var name='recipient_id'}
-                </select>
+                </select></div>
             </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 class="form-group">
+                <label for="subject" class="col-sm-3 control-label">{tmpl_var name='subject_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="subject" id="subject" value="{tmpl_var name='subject'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="message" class="col-sm-3 control-label">{tmpl_var name='message_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="message" id="message" rows='10' cols='30'>{tmpl_var name='message'}</textarea></div>
             </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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="help/support_message_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="help/support_message_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/help/templates/support_message_list.htm b/interface/web/help/templates/support_message_list.htm
index d3fa429..1695ccc 100644
--- a/interface/web/help/templates/support_message_list.htm
+++ b/interface/web/help/templates/support_message_list.htm
@@ -1,45 +1,43 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_support_message">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('help/support_message_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="help/support_message_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_sender_id" scope="col"><tmpl_var name="sender_id_txt"></th>
-                        <th class="tbl_col_subject" scope="col"><tmpl_var name="subject_txt"></th>
-						<th class="tbl_col_tstamp" scope="col"><tmpl_var name="date_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="sender_id"><tmpl_var name="sender_id_txt"></th>
+                        <th data-column="subject"><tmpl_var name="subject_txt"></th>
+						<th data-column="date"><tmpl_var name="date_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_sender_id"><select name="search_sender_id">{tmpl_var name='search_sender_id'}</select></td>
-                        <td class="tbl_col_subject"><input type="text" name="search_subject" value="{tmpl_var name='search_subject'}" /></td>
-						<td class="tbl_col_tstamp">&nbsp;</td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','help/support_message_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_sender_id">{tmpl_var name='search_sender_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_subject" value="{tmpl_var name='search_subject'}" /></td>
+						<td>&nbsp;</td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="help/support_message_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_sender_id"><a href="#" onclick="loadContent('help/support_message_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sender_id"}</a></td>
-                            <td class="tbl_col_subject"><a href="#" onclick="loadContent('help/support_message_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="subject"}</a></td>
-							<td class="tbl_col_tstamp"><a href="#" onclick="loadContent('help/support_message_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="tstamp"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('help/support_message_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>
+                        <tr>
+                            <td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sender_id"}</a></td>
+                            <td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="subject"}</a></td>
+							<td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="tstamp"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/support_message_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -51,11 +49,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/help/templates/support_message_view.htm b/interface/web/help/templates/support_message_view.htm
index f7145e0..faaaf85 100644
--- a/interface/web/help/templates/support_message_view.htm
+++ b/interface/web/help/templates/support_message_view.htm
@@ -1,26 +1,23 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_support_message">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='message_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="subject">{tmpl_var name='subject_txt'}</label>
+        <legend>{tmpl_var name='message_txt'}</legend>
+            <div class="form-group">
+                <label for="subject" class="col-sm-3 control-label">{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>
+            <div class="form-group">
+                <label for="message" class="col-sm-3 control-label">{tmpl_var name='message_txt'}</label>
                 <p>{tmpl_var name='message'}</p>
             </div>
-			<div class="ctrlHolder">
-                <label for="message">{tmpl_var name='date_txt'}</label>
+			<div class="form-group">
+                <label for="message" class="col-sm-3 control-label">{tmpl_var name='date_txt'}</label>
                 <p>{tmpl_var name='date'}</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>
\ No newline at end of file
+        
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='reply_txt'}" data-load-content="help/support_message_edit.php?reply={tmpl_var name='id'}">{tmpl_var name='reply_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/index.php b/interface/web/index.php
index 80eab11..af91b26 100644
--- a/interface/web/index.php
+++ b/interface/web/index.php
@@ -35,6 +35,7 @@
 
 $app->uses('tpl');
 $app->tpl->newTemplate('main.tpl.htm');
+$app->tpl->setVar('logged_in', ($_SESSION['s']['user']['active'] != 1 ? 'n' : 'y'));
 
 // tab change warning?
 // read misc config
@@ -50,6 +51,14 @@
 if($sys_config['tab_change_discard'] == 'y') {
 	$app->tpl->setVar('global_tabchange_discard_txt', $app->lng('global_tabchange_discard_txt'));
 }
+
+if($sys_config['use_loadindicator'] == 'y') {
+	$app->tpl->setVar('use_loadindicator', 'y');
+}
+if($sys_config['use_combobox'] == 'y') {
+	$app->tpl->setVar('use_combobox', 'y');
+}
+
 
 if(isset($_SESSION['show_info_msg'])) {
 	$app->tpl->setVar('show_info_msg', $_SESSION['show_info_msg']);
@@ -77,6 +86,21 @@
 if (!empty($js_d_files)) $app->tpl->setLoop('js_d_includes', $js_d_files);
 unset($js_d_files);
 
+$app->tpl->setVar('current_theme', isset($_SESSION['s']['theme']) ? $_SESSION['s']['theme'] : 'default');
+
+// Logo
+$logo = $app->db->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = 1");
+if($logo['custom_logo'] != ''){
+	$base64_logo_txt = $logo['custom_logo'];
+} else {
+	$base64_logo_txt = $logo['default_logo'];
+}
+$tmp_base64 = explode(',', $base64_logo_txt, 2);
+$logo_dimensions = $app->functions->getimagesizefromstring(base64_decode($tmp_base64[1]));
+$app->tpl->setVar('base64_logo_width', $logo_dimensions[0]);
+$app->tpl->setVar('base64_logo_height', $logo_dimensions[1]);
+$app->tpl->setVar('base64_logo_txt', $base64_logo_txt);
+
 $app->tpl_defaults();
 $app->tpl->pparse();
 ?>
diff --git a/interface/web/js/dns_dkim.js b/interface/web/js/dns_dkim.js
deleted file mode 100644
index 58f8dcf..0000000
--- a/interface/web/js/dns_dkim.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-Copyright (c) 2007 - 2013, Till Brehm, projektfarm Gmbh
-Copyright (c) 2013, Florian Schaal, info@schaal-24.de
-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.
-
-
-
-This Javascript is invoked by
-	* dns/templates/dns_dkim_edit.htm to get the public key 
-*/
-        var request = false;
-
-        function setRequest(zone) {
-                if (window.XMLHttpRequest) {request = new XMLHttpRequest();}
-                else if (window.ActiveXObject) {
-                        try {request = new ActiveXObject('Msxml2.XMLHTTP');}
-                        catch (e) {
-                                try {request = new ActiveXObject('Microsoft.XMLHTTP');}
-                                catch (e) {}
-                        }
-                }
-                if (!request) {
-                        alert("Error creating XMLHTTP-instance");
-                        return false;
-                } else {
-                        request.open('POST', 'dns/dns_dkim_get.php', true);
-                        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-                        request.send('&zone='+zone);
-                        request.onreadystatechange = interpretRequest;
-                }
-        }
-
-        function interpretRequest() {
-                switch (request.readyState) {
-                        case 4:
-                                if (request.status != 200) {alert("Request done but NOK\nError:"+request.status);}
-                                else {
-                                        document.getElementsByName('data')[0].value = request.responseXML.getElementsByTagName('data')[0].firstChild.nodeValue;
-                                        document.getElementsByName('name')[0].value = request.responseXML.getElementsByTagName('name')[0].firstChild.nodeValue;
-										document.getElementsByName('selector')[0].value = request.responseXML.getElementsByTagName('selector')[0].firstChild.nodeValue;
-                                }
-                                break;
-                        default:
-                                break;
-                }
-        }
-
-var serverType = jQuery('#zone').val();
-setRequest(serverType);
diff --git a/interface/web/js/jquery-2.1.1.min.js b/interface/web/js/jquery-2.1.1.min.js
deleted file mode 100755
index 05fb1ec..0000000
--- a/interface/web/js/jquery-2.1.1.min.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*!
- * jQuery JavaScript Library v2.1.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-05-01T17:11Z
- */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b=a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(hb.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=ob[a]={};return _.each(a.match(nb)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+Math.random()}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ub,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:tb.test(c)?_.parseJSON(c):c}catch(e){}sb.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Kb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)rb.set(a[c],"globalEval",!b||rb.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(rb.hasData(a)&&(f=rb.access(a),g=rb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sb.hasData(a)&&(h=sb.access(a),i=_.extend({},h),sb.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&yb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Ob[a];return c||(c=t(a,b),"none"!==c&&c||(Nb=(Nb||_("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=Nb[0].contentDocument,b.write(),b.close(),c=t(a,b),Nb.detach()),Ob[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Rb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||_.contains(a.ownerDocument,a)||(g=_.style(a,b)),Qb.test(g)&&Pb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Xb.length;e--;)if(b=Xb[e]+c,b in a)return b;return d}function y(a,b,c){var d=Tb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=_.css(a,c+wb[f],!0,e)),d?("content"===c&&(g-=_.css(a,"padding"+wb[f],!0,e)),"margin"!==c&&(g-=_.css(a,"border"+wb[f]+"Width",!0,e))):(g+=_.css(a,"padding"+wb[f],!0,e),"padding"!==c&&(g+=_.css(a,"border"+wb[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Rb(a),g="border-box"===_.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=v(a,b,f),(0>e||null==e)&&(e=a.style[b]),Qb.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=rb.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&xb(d)&&(f[g]=rb.access(d,"olddisplay",u(d.nodeName)))):(e=xb(d),"none"===c&&e||rb.set(d,"olddisplay",e?c:_.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function C(a,b,c,d,e){return new C.prototype.init(a,b,c,d,e)}function D(){return setTimeout(function(){Yb=void 0}),Yb=_.now()}function E(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=wb[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function F(a,b,c){for(var d,e=(cc[b]||[]).concat(cc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function G(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},n=a.style,o=a.nodeType&&xb(a),p=rb.get(a,"fxshow");c.queue||(h=_._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,_.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[n.overflow,n.overflowX,n.overflowY],j=_.css(a,"display"),k="none"===j?rb.get(a,"olddisplay")||u(a.nodeName):j,"inline"===k&&"none"===_.css(a,"float")&&(n.display="inline-block")),c.overflow&&(n.overflow="hidden",l.always(function(){n.overflow=c.overflow[0],n.overflowX=c.overflow[1],n.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],$b.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(o?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;o=!0}m[d]=p&&p[d]||_.style(a,d)}else j=void 0;if(_.isEmptyObject(m))"inline"===("none"===j?u(a.nodeName):j)&&(n.display=j);else{p?"hidden"in p&&(o=p.hidden):p=rb.access(a,"fxshow",{}),f&&(p.hidden=!o),o?_(a).show():l.done(function(){_(a).hide()}),l.done(function(){var b;rb.remove(a,"fxshow");for(b in m)_.style(a,b,m[b])});for(d in m)g=F(o?p[d]:0,d,l),d in p||(p[d]=g.start,o&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function H(a,b){var c,d,e,f,g;for(c in a)if(d=_.camelCase(c),e=b[d],f=a[c],_.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=_.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function I(a,b,c){var d,e,f=0,g=bc.length,h=_.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Yb||D(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:_.extend({},b),opts:_.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Yb||D(),duration:c.duration,tweens:[],createTween:function(b,c){var d=_.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(H(k,j.opts.specialEasing);g>f;f++)if(d=bc[f].call(j,a,k,j.opts))return d;return _.map(k,F,j),_.isFunction(j.opts.start)&&j.opts.start.call(a,j),_.fx.timer(_.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function J(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(nb)||[];if(_.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function K(a,b,c,d){function e(h){var i;return f[h]=!0,_.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===vc;return e(b.dataTypes[0])||!f["*"]&&e("*")}function L(a,b){var c,d,e=_.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&_.extend(!0,a,d),a}function M(a,b,c){for(var d,e,f,g,h=a.contents,i=a.dataTypes;"*"===i[0];)i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function N(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}function O(a,b,c,d){var e;if(_.isArray(b))_.each(b,function(b,e){c||zc.test(a)?d(a,e):O(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==_.type(b))d(a,b);else for(e in b)O(a+"["+e+"]",b[e],c,d)}function P(a){return _.isWindow(a)?a:9===a.nodeType&&a.defaultView}var Q=[],R=Q.slice,S=Q.concat,T=Q.push,U=Q.indexOf,V={},W=V.toString,X=V.hasOwnProperty,Y={},Z=a.document,$="2.1.1",_=function(a,b){return new _.fn.init(a,b)},ab=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,bb=/^-ms-/,cb=/-([\da-z])/gi,db=function(a,b){return b.toUpperCase()};_.fn=_.prototype={jquery:$,constructor:_,selector:"",length:0,toArray:function(){return R.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:R.call(this)},pushStack:function(a){var b=_.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return _.each(this,a,b)},map:function(a){return this.pushStack(_.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(R.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:T,sort:Q.sort,splice:Q.splice},_.extend=_.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||_.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(_.isPlainObject(d)||(e=_.isArray(d)))?(e?(e=!1,f=c&&_.isArray(c)?c:[]):f=c&&_.isPlainObject(c)?c:{},g[b]=_.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},_.extend({expando:"jQuery"+($+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===_.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!_.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==_.type(a)||a.nodeType||_.isWindow(a)?!1:a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=_.trim(a),a&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(bb,"ms-").replace(cb,db)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(ab,"")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?_.merge(d,"string"==typeof a?[a]:a):T.call(d,a)),d},inArray:function(a,b,c){return null==b?-1:U.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&i.push(e);else for(f in a)e=b(a[f],f,d),null!=e&&i.push(e);return S.apply([],i)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),_.isFunction(a)?(d=R.call(arguments,2),e=function(){return a.apply(b||this,d.concat(R.call(arguments)))},e.guid=a.guid=a.guid||_.guid++,e):void 0},now:Date.now,support:Y}),_.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()});var eb=/*!
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
-function(a){function b(a,b,c,d){var e,f,g,h,i,j,l,n,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],!a||"string"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(I&&!d){if(e=sb.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return _.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&v.getElementsByClassName&&b.getElementsByClassName)return _.apply(c,b.getElementsByClassName(g)),c}if(v.qsa&&(!J||!J.test(a))){if(n=l=N,o=b,p=9===h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=z(a),(l=b.getAttribute("id"))?n=l.replace(ub,"\\$&"):b.setAttribute("id",n),n="[id='"+n+"'] ",i=j.length;i--;)j[i]=n+m(j[i]);o=tb.test(a)&&k(b.parentNode)||b,p=j.join(",")}if(p)try{return _.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{l||b.removeAttribute("id")}}}return B(a.replace(ib,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>w.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||W)-(~a.sourceIndex||W);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&typeof a.getElementsByTagName!==V&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function n(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[P,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[N]||(b[N]={}),(h=i[d])&&h[0]===P&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function o(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;f>e;e++)b(a,c[e],d);return d}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,e,f,g){return e&&!e[N]&&(e=r(e)),f&&!f[N]&&(f=r(f,g)),d(function(d,g,h,i){var j,k,l,m=[],n=[],o=g.length,r=d||p(b||"*",h.nodeType?[h]:h,[]),s=!a||!d&&b?r:q(r,m,a,h,i),t=c?f||(d?a:o||e)?[]:g:s;if(c&&c(s,t,h,i),e)for(j=q(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(d){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?bb.call(d,l):m[k])>-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):_.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return bb.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];e>h;h++)if(c=w.relative[a[h].type])k=[n(o(k),c)];else{if(c=w.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!w.relative[a[d].type];d++);return r(h>1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ib,"$1"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&m(a))}k.push(c)}return o(k)}function t(a,c){var e=c.length>0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g!==G&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Z.call(i));r=q(r)}_.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+-new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V="undefined",W=1<<31,X={}.hasOwnProperty,Y=[],Z=Y.pop,$=Y.push,_=Y.push,ab=Y.slice,bb=Y.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},cb="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",db="[\\x20\\t\\r\\n\\f]",eb="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",fb=eb.replace("w","w#"),gb="\\["+db+"*("+eb+")(?:"+db+"*([*^$|!~]?=)"+db+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+fb+"))|)"+db+"*\\]",hb=":("+eb+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+gb+")*)|.*)\\)|)",ib=new RegExp("^"+db+"+|((?:^|[^\\\\])(?:\\\\.)*)"+db+"+$","g"),jb=new RegExp("^"+db+"*,"+db+"*"),kb=new RegExp("^"+db+"*([>+~]|"+db+")"+db+"*"),lb=new RegExp("="+db+"*([^\\]'\"]*?)"+db+"*\\]","g"),mb=new RegExp(hb),nb=new RegExp("^"+fb+"$"),ob={ID:new RegExp("^#("+eb+")"),CLASS:new RegExp("^\\.("+eb+")"),TAG:new RegExp("^("+eb.replace("w","w*")+")"),ATTR:new RegExp("^"+gb),PSEUDO:new RegExp("^"+hb),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+db+"*(even|odd|(([+-]|)(\\d*)n|)"+db+"*(?:([+-]|)"+db+"*(\\d+)|))"+db+"*\\)|)","i"),bool:new RegExp("^(?:"+cb+")$","i"),needsContext:new RegExp("^"+db+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+db+"*((?:-\\d)?\\d*)"+db+"*\\)|)(?=[^-]|$)","i")},pb=/^(?:input|select|textarea|button)$/i,qb=/^h\d$/i,rb=/^[^{]+\{\s*\[native \w/,sb=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tb=/[+~]/,ub=/'|\\/g,vb=new RegExp("\\\\([\\da-f]{1,6}"+db+"?|("+db+")|.)","ig"),wb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{_.apply(Y=ab.call(O.childNodes),O.childNodes),Y[O.childNodes.length].nodeType}catch(xb){_={apply:Y.length?function(a,b){$.apply(a,ab.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},F=b.setDocument=function(a){var b,c=a?a.ownerDocument||a:O,d=c.defaultView;return c!==G&&9===c.nodeType&&c.documentElement?(G=c,H=c.documentElement,I=!y(c),d&&d!==d.top&&(d.addEventListener?d.addEventListener("unload",function(){F()},!1):d.attachEvent&&d.attachEvent("onunload",function(){F()})),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(c.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=rb.test(c.getElementsByClassName)&&e(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),v.getById=e(function(a){return H.appendChild(a).id=N,!c.getElementsByName||!c.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if(typeof b.getElementById!==V&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(vb,wb);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(vb,wb);return function(a){var c=typeof a.getAttributeNode!==V&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==V?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==V&&I?b.getElementsByClassName(a):void 0},K=[],J=[],(v.qsa=rb.test(c.querySelectorAll))&&(e(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&J.push("[*^$]="+db+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+db+"*(?:value|"+cb+")"),a.querySelectorAll(":checked").length||J.push(":checked")}),e(function(a){var b=c.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+db+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=rb.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",hb)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=rb.test(H.compareDocumentPosition),M=b||rb.test(H.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!v.sortDetached&&b.compareDocumentPosition(a)===d?a===c||a.ownerDocument===O&&M(O,a)?-1:b===c||b.ownerDocument===O&&M(O,b)?1:D?bb.call(D,a)-bb.call(D,b):0:4&d?-1:1)}:function(a,b){if(a===b)return E=!0,0;var d,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===c?-1:b===c?1:f?-1:h?1:D?bb.call(D,a)-bb.call(D,b):0;if(f===h)return g(a,b);for(d=a;d=d.parentNode;)i.unshift(d);for(d=b;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},c):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(lb,"='$1']"),!(!v.matchesSelector||!I||K&&K.test(c)||J&&J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&X.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:ob,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(vb,wb),a[3]=(a[3]||a[4]||a[5]||"").replace(vb,wb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return ob.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&mb.test(c)&&(b=z(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(vb,wb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+db+")"+a+"("+db+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==V&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:c?(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f+" ").indexOf(d)>-1:"|="===c?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=bb.call(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ib,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return nb.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(vb,wb).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return qb.test(a.nodeName)},input:function(a){return pb.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[0>c?c+b:c]}),even:j(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:j(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:j(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},w.pseudos.nth=w.pseudos.eq;for(u in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[u]=h(u);for(u in{submit:!0,reset:!0})w.pseudos[u]=i(u);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,z=b.tokenize=function(a,c){var d,e,f,g,h,i,j,k=S[a+" "];if(k)return c?0:k.slice(0);for(h=a,i=[],j=w.preFilter;h;){(!d||(e=jb.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=kb.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ib," ")}),h=h.slice(d.length));for(g in w.filter)!(e=ob[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?b.error(a):S(a,i).slice(0)},A=b.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=z(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d)),f.selector=a}return f},B=b.select=function(a,b,c,d){var e,f,g,h,i,j="function"==typeof a&&a,l=!d&&z(a=j.selector||a);if(c=c||[],1===l.length){if(f=l[0]=l[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(vb,wb),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=ob.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(vb,wb),tb.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return _.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,tb.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(cb,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);_.find=eb,_.expr=eb.selectors,_.expr[":"]=_.expr.pseudos,_.unique=eb.uniqueSort,_.text=eb.getText,_.isXMLDoc=eb.isXML,_.contains=eb.contains;var fb=_.expr.match.needsContext,gb=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,hb=/^.[^:#\[\.,]*$/;_.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?_.find.matchesSelector(d,a)?[d]:[]:_.find.matches(a,_.grep(b,function(a){return 1===a.nodeType}))},_.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(_(a).filter(function(){for(b=0;c>b;b++)if(_.contains(e[b],this))return!0}));for(b=0;c>b;b++)_.find(a,e[b],d);return d=this.pushStack(c>1?_.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&fb.test(a)?_(a):a||[],!1).length}});var ib,jb=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,kb=_.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:jb.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||ib).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof _?b[0]:b,_.merge(this,_.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),gb.test(c[1])&&_.isPlainObject(b))for(c in b)_.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):_.isFunction(a)?"undefined"!=typeof ib.ready?ib.ready(a):a(_):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),_.makeArray(a,this))};kb.prototype=_.fn,ib=_(Z);var lb=/^(?:parents|prev(?:Until|All))/,mb={children:!0,contents:!0,next:!0,prev:!0};_.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&_(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),_.fn.extend({has:function(a){var b=_(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(_.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=fb.test(a)||"string"!=typeof a?_(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&_.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?_.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call(_(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(_.unique(_.merge(this.get(),_(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),_.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return _.dir(a,"parentNode")},parentsUntil:function(a,b,c){return _.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return _.dir(a,"nextSibling")},prevAll:function(a){return _.dir(a,"previousSibling")},nextUntil:function(a,b,c){return _.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return _.dir(a,"previousSibling",c)},siblings:function(a){return _.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return _.sibling(a.firstChild)},contents:function(a){return a.contentDocument||_.merge([],a.childNodes)}},function(a,b){_.fn[a]=function(c,d){var e=_.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=_.filter(d,e)),this.length>1&&(mb[a]||_.unique(e),lb.test(a)&&e.reverse()),this.pushStack(e)}});var nb=/\S+/g,ob={};_.Callbacks=function(a){a="string"==typeof a?ob[a]||f(a):_.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&g>h;h++)if(i[h].apply(f[0],f[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,i&&(j?j.length&&k(j.shift()):b?i=[]:l.disable())},l={add:function(){if(i){var c=i.length;!function f(b){_.each(b,function(b,c){var d=_.type(c);"function"===d?a.unique&&l.has(c)||i.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),d?g=i.length:b&&(e=c,k(b))}return this},remove:function(){return i&&_.each(arguments,function(a,b){for(var c;(c=_.inArray(b,i,c))>-1;)i.splice(c,1),d&&(g>=c&&g--,h>=c&&h--)}),this},has:function(a){return a?_.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},_.extend({Deferred:function(a){var b=[["resolve","done",_.Callbacks("once memory"),"resolved"],["reject","fail",_.Callbacks("once memory"),"rejected"],["notify","progress",_.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return _.Deferred(function(c){_.each(b,function(b,f){var g=_.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&_.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?_.extend(a,d):d}},e={};return d.pipe=d.then,_.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&_.isFunction(a.promise)?g:0,i=1===h?a:_.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&_.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}});var pb;_.fn.ready=function(a){return _.ready.promise().done(a),this},_.extend({isReady:!1,readyWait:1,holdReady:function(a){a?_.readyWait++:_.ready(!0)},ready:function(a){(a===!0?--_.readyWait:_.isReady)||(_.isReady=!0,a!==!0&&--_.readyWait>0||(pb.resolveWith(Z,[_]),_.fn.triggerHandler&&(_(Z).triggerHandler("ready"),_(Z).off("ready"))))}}),_.ready.promise=function(b){return pb||(pb=_.Deferred(),"complete"===Z.readyState?setTimeout(_.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),pb.promise(b)},_.ready.promise();var qb=_.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===_.type(c)){e=!0;for(h in c)_.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,_.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(_(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};_.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType},h.uid=1,h.accepts=_.acceptData,h.prototype={key:function(a){if(!h.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=h.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,_.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(_.isEmptyObject(f))_.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,_.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{_.isArray(b)?d=b.concat(b.map(_.camelCase)):(e=_.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(nb)||[])),c=d.length;for(;c--;)delete g[d[c]]}},hasData:function(a){return!_.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var rb=new h,sb=new h,tb=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ub=/([A-Z])/g;_.extend({hasData:function(a){return sb.hasData(a)||rb.hasData(a)},data:function(a,b,c){return sb.access(a,b,c)},removeData:function(a,b){sb.remove(a,b)},_data:function(a,b,c){return rb.access(a,b,c)},_removeData:function(a,b){rb.remove(a,b)}}),_.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=sb.get(f),1===f.nodeType&&!rb.get(f,"hasDataAttrs"))){for(c=g.length;c--;)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=_.camelCase(d.slice(5)),i(f,d,e[d])));rb.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){sb.set(this,a)}):qb(this,function(b){var c,d=_.camelCase(a);if(f&&void 0===b){if(c=sb.get(f,a),void 0!==c)return c;if(c=sb.get(f,d),void 0!==c)return c;if(c=i(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=sb.get(this,d);sb.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&sb.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){sb.remove(this,a)})}}),_.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=rb.get(a,b),c&&(!d||_.isArray(c)?d=rb.access(a,b,_.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=_.queue(a,b),d=c.length,e=c.shift(),f=_._queueHooks(a,b),g=function(){_.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return rb.get(a,c)||rb.access(a,c,{empty:_.Callbacks("once memory").add(function(){rb.remove(a,[b+"queue",c])})})}}),_.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?_.queue(this[0],a):void 0===b?this:this.each(function(){var c=_.queue(this,a,b);_._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&_.dequeue(this,a)})},dequeue:function(a){return this.each(function(){_.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=_.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};for("string"!=typeof a&&(b=a,a=void 0),a=a||"fx";g--;)c=rb.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var vb=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,wb=["Top","Right","Bottom","Left"],xb=function(a,b){return a=b||a,"none"===_.css(a,"display")||!_.contains(a.ownerDocument,a)},yb=/^(?:checkbox|radio)$/i;!function(){var a=Z.createDocumentFragment(),b=a.appendChild(Z.createElement("div")),c=Z.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),Y.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var zb="undefined";Y.focusinBubbles="onfocusin"in a;var Ab=/^key/,Bb=/^(?:mouse|pointer|contextmenu)|click/,Cb=/^(?:focusinfocus|focusoutblur)$/,Db=/^([^.]*)(?:\.(.+)|)$/;_.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=rb.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=_.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return typeof _!==zb&&_.event.triggered!==b.type?_.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(nb)||[""],j=b.length;j--;)h=Db.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=_.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=_.event.special[n]||{},k=_.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&_.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),_.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=rb.hasData(a)&&rb.get(a);if(q&&(i=q.events)){for(b=(b||"").match(nb)||[""],j=b.length;j--;)if(h=Db.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=_.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||_.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)_.event.remove(a,n+b[j],c,d,!0);_.isEmptyObject(i)&&(delete q.handle,rb.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!Cb.test(n+_.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[_.expando]?b:new _.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:_.makeArray(c,[b]),l=_.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!_.isWindow(d)){for(i=l.delegateType||n,Cb.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;
-h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(rb.get(g,"events")||{})[b.type]&&rb.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&_.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!_.acceptData(d)||j&&_.isFunction(d[n])&&!_.isWindow(d)&&(h=d[j],h&&(d[j]=null),_.event.triggered=n,d[n](),_.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=_.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(rb.get(this,"events")||{})[a.type]||[],j=_.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=_.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(f.namespace))&&(a.handleObj=f,a.data=f.data,d=((_.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?_(e,this).index(i)>=0:_.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||Z,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[_.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Bb.test(e)?this.mouseHooks:Ab.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new _.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=Z),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==l()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===l()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&_.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return _.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=_.extend(new _.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?_.event.trigger(e,null,b):_.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},_.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},_.Event=function(a,b){return this instanceof _.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?j:k):this.type=a,b&&_.extend(this,b),this.timeStamp=a&&a.timeStamp||_.now(),void(this[_.expando]=!0)):new _.Event(a,b)},_.Event.prototype={isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=j,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=j,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=j,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},_.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){_.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!_.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),Y.focusinBubbles||_.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){_.event.simulate(b,a.target,_.event.fix(a),!0)};_.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=rb.access(d,b);e||d.addEventListener(a,c,!0),rb.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=rb.access(d,b)-1;e?rb.access(d,b,e):(d.removeEventListener(a,c,!0),rb.remove(d,b))}}}),_.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=k;else if(!d)return this;return 1===e&&(f=d,d=function(a){return _().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=_.guid++)),this.each(function(){_.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,_(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=k),this.each(function(){_.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){_.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?_.event.trigger(a,b,c,!0):void 0}});var Eb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Fb=/<([\w:]+)/,Gb=/<|&#?\w+;/,Hb=/<(?:script|style|link)/i,Ib=/checked\s*(?:[^=]|=\s*.checked.)/i,Jb=/^$|\/(?:java|ecma)script/i,Kb=/^true\/(.*)/,Lb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Mb={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Mb.optgroup=Mb.option,Mb.tbody=Mb.tfoot=Mb.colgroup=Mb.caption=Mb.thead,Mb.th=Mb.td,_.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=_.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||_.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;e>d;d++)s(f[d],g[d]);if(b)if(c)for(f=f||r(a),g=g||r(h),d=0,e=f.length;e>d;d++)q(f[d],g[d]);else q(a,h);return g=r(h,"script"),g.length>0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===_.type(e))_.merge(l,e.nodeType?[e]:e);else if(Gb.test(e)){for(f=f||k.appendChild(b.createElement("div")),g=(Fb.exec(e)||["",""])[1].toLowerCase(),h=Mb[g]||Mb._default,f.innerHTML=h[1]+e.replace(Eb,"<$1></$2>")+h[2],j=h[0];j--;)f=f.lastChild;_.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||-1===_.inArray(e,d))&&(i=_.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Jb.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=_.event.special,g=0;void 0!==(c=a[g]);g++){if(_.acceptData(c)&&(e=c[rb.expando],e&&(b=rb.cache[e]))){if(b.events)for(d in b.events)f[d]?_.event.remove(c,d):_.removeEvent(c,d,b.handle);rb.cache[e]&&delete rb.cache[e]}delete sb.cache[c[sb.expando]]}}}),_.fn.extend({text:function(a){return qb(this,function(a){return void 0===a?_.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?_.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||_.cleanData(r(c)),c.parentNode&&(b&&_.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(_.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return _.clone(this,a,b)})},html:function(a){return qb(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Hb.test(a)&&!Mb[(Fb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Eb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(_.cleanData(r(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,_.cleanData(r(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=S.apply([],a);var c,d,e,f,g,h,i=0,j=this.length,k=this,l=j-1,m=a[0],p=_.isFunction(m);if(p||j>1&&"string"==typeof m&&!Y.checkClone&&Ib.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=_.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=_.map(r(c,"script"),n),f=e.length;j>i;i++)g=c,i!==l&&(g=_.clone(g,!0,!0),f&&_.merge(e,r(g,"script"))),b.call(this[i],g,i);if(f)for(h=e[e.length-1].ownerDocument,_.map(e,o),i=0;f>i;i++)g=e[i],Jb.test(g.type||"")&&!rb.access(g,"globalEval")&&_.contains(h,g)&&(g.src?_._evalUrl&&_._evalUrl(g.src):_.globalEval(g.textContent.replace(Lb,"")))}return this}}),_.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){_.fn[a]=function(a){for(var c,d=[],e=_(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),_(e[g])[b](c),T.apply(d,c.get());return this.pushStack(d)}});var Nb,Ob={},Pb=/^margin/,Qb=new RegExp("^("+vb+")(?!px)[a-z%]+$","i"),Rb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};!function(){function b(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",g.innerHTML="",e.appendChild(f);var b=a.getComputedStyle(g,null);c="1%"!==b.top,d="4px"===b.width,e.removeChild(f)}var c,d,e=Z.documentElement,f=Z.createElement("div"),g=Z.createElement("div");g.style&&(g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",f.appendChild(g),a.getComputedStyle&&_.extend(Y,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return null==d&&b(),d},reliableMarginRight:function(){var b,c=g.appendChild(Z.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),b}}))}(),_.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Sb=/^(none|table(?!-c[ea]).+)/,Tb=new RegExp("^("+vb+")(.*)$","i"),Ub=new RegExp("^([+-])=("+vb+")","i"),Vb={position:"absolute",visibility:"hidden",display:"block"},Wb={letterSpacing:"0",fontWeight:"400"},Xb=["Webkit","O","Moz","ms"];_.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=v(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=_.camelCase(b),i=a.style;return b=_.cssProps[h]||(_.cssProps[h]=x(i,h)),g=_.cssHooks[b]||_.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ub.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(_.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||_.cssNumber[h]||(c+="px"),Y.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=_.camelCase(b);return b=_.cssProps[h]||(_.cssProps[h]=x(a.style,h)),g=_.cssHooks[b]||_.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=v(a,b,d)),"normal"===e&&b in Wb&&(e=Wb[b]),""===c||c?(f=parseFloat(e),c===!0||_.isNumeric(f)?f||0:e):e}}),_.each(["height","width"],function(a,b){_.cssHooks[b]={get:function(a,c,d){return c?Sb.test(_.css(a,"display"))&&0===a.offsetWidth?_.swap(a,Vb,function(){return A(a,b,d)}):A(a,b,d):void 0},set:function(a,c,d){var e=d&&Rb(a);return y(a,c,d?z(a,b,d,"border-box"===_.css(a,"boxSizing",!1,e),e):0)}}}),_.cssHooks.marginRight=w(Y.reliableMarginRight,function(a,b){return b?_.swap(a,{display:"inline-block"},v,[a,"marginRight"]):void 0}),_.each({margin:"",padding:"",border:"Width"},function(a,b){_.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+wb[d]+b]=f[d]||f[d-2]||f[0];return e}},Pb.test(a)||(_.cssHooks[a+b].set=y)}),_.fn.extend({css:function(a,b){return qb(this,function(a,b,c){var d,e,f={},g=0;if(_.isArray(b)){for(d=Rb(a),e=b.length;e>g;g++)f[b[g]]=_.css(a,b[g],!1,d);return f}return void 0!==c?_.style(a,b,c):_.css(a,b)},a,b,arguments.length>1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){xb(this)?_(this).show():_(this).hide()})}}),_.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(_.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.pos=b=this.options.duration?_.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=_.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){_.fx.step[a.prop]?_.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[_.cssProps[a.prop]]||_.cssHooks[a.prop])?_.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},_.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},_.fx=C.prototype.init,_.fx.step={};var Yb,Zb,$b=/^(?:toggle|show|hide)$/,_b=new RegExp("^(?:([+-])=|)("+vb+")([a-z%]*)$","i"),ac=/queueHooks$/,bc=[G],cc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=_b.exec(b),f=e&&e[3]||(_.cssNumber[a]?"":"px"),g=(_.cssNumber[a]||"px"!==f&&+d)&&_b.exec(_.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,_.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};_.Animation=_.extend(I,{tweener:function(a,b){_.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],cc[c]=cc[c]||[],cc[c].unshift(b)},prefilter:function(a,b){b?bc.unshift(a):bc.push(a)}}),_.speed=function(a,b,c){var d=a&&"object"==typeof a?_.extend({},a):{complete:c||!c&&b||_.isFunction(a)&&a,duration:a,easing:c&&b||b&&!_.isFunction(b)&&b};return d.duration=_.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in _.fx.speeds?_.fx.speeds[d.duration]:_.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){_.isFunction(d.old)&&d.old.call(this),d.queue&&_.dequeue(this,d.queue)},d},_.fn.extend({fadeTo:function(a,b,c,d){return this.filter(xb).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=_.isEmptyObject(a),f=_.speed(b,c,d),g=function(){var b=I(this,_.extend({},a),f);(e||rb.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=_.timers,g=rb.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&ac.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&_.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=rb.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=_.timers,g=d?d.length:0;for(c.finish=!0,_.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),_.each(["toggle","show","hide"],function(a,b){var c=_.fn[b];_.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(E(b,!0),a,d,e)}}),_.each({slideDown:E("show"),slideUp:E("hide"),slideToggle:E("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){_.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),_.timers=[],_.fx.tick=function(){var a,b=0,c=_.timers;for(Yb=_.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||_.fx.stop(),Yb=void 0},_.fx.timer=function(a){_.timers.push(a),a()?_.fx.start():_.timers.pop()},_.fx.interval=13,_.fx.start=function(){Zb||(Zb=setInterval(_.fx.tick,_.fx.interval))},_.fx.stop=function(){clearInterval(Zb),Zb=null},_.fx.speeds={slow:600,fast:200,_default:400},_.fn.delay=function(a,b){return a=_.fx?_.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=Z.createElement("input"),b=Z.createElement("select"),c=b.appendChild(Z.createElement("option"));a.type="checkbox",Y.checkOn=""!==a.value,Y.optSelected=c.selected,b.disabled=!0,Y.optDisabled=!c.disabled,a=Z.createElement("input"),a.value="t",a.type="radio",Y.radioValue="t"===a.value}();var dc,ec,fc=_.expr.attrHandle;_.fn.extend({attr:function(a,b){return qb(this,_.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){_.removeAttr(this,a)})}}),_.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===zb?_.prop(a,b,c):(1===f&&_.isXMLDoc(a)||(b=b.toLowerCase(),d=_.attrHooks[b]||(_.expr.match.bool.test(b)?ec:dc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=_.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void _.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(nb);if(f&&1===a.nodeType)for(;c=f[e++];)d=_.propFix[c]||c,_.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&_.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),ec={set:function(a,b,c){return b===!1?_.removeAttr(a,c):a.setAttribute(c,c),c}},_.each(_.expr.match.bool.source.match(/\w+/g),function(a,b){var c=fc[b]||_.find.attr;fc[b]=function(a,b,d){var e,f;return d||(f=fc[b],fc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,fc[b]=f),e}});var gc=/^(?:input|select|textarea|button)$/i;_.fn.extend({prop:function(a,b){return qb(this,_.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[_.propFix[a]||a]})}}),_.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!_.isXMLDoc(a),f&&(b=_.propFix[b]||b,e=_.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||gc.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||(_.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this});var hc=/[\t\r\n\f]/g;_.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(nb)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hc," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=_.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(nb)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hc," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?_.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(_.isFunction(a)?function(c){_(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c)for(var b,d=0,e=_(this),f=a.match(nb)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===zb||"boolean"===c)&&(this.className&&rb.set(this,"__className__",this.className),this.className=this.className||a===!1?"":rb.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(hc," ").indexOf(b)>=0)return!0;return!1}});var ic=/\r/g;_.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=_.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,_(this).val()):a,null==e?e="":"number"==typeof e?e+="":_.isArray(e)&&(e=_.map(e,function(a){return null==a?"":a+""})),b=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=_.valHooks[e.type]||_.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ic,""):null==c?"":c)}}}),_.extend({valHooks:{option:{get:function(a){var b=_.find.attr(a,"value");return null!=b?b:_.trim(_.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(Y.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&_.nodeName(c.parentNode,"optgroup"))){if(b=_(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=_.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=_.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(a,b){return _.isArray(b)?a.checked=_.inArray(_(a).val(),b)>=0:void 0}},Y.checkOn||(_.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),_.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){_.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),_.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var jc=_.now(),kc=/\?/;_.parseJSON=function(a){return JSON.parse(a+"")},_.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&_.error("Invalid XML: "+a),b};var lc,mc,nc=/#.*$/,oc=/([?&])_=[^&]*/,pc=/^(.*?):[ \t]*([^\r\n]*)$/gm,qc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rc=/^(?:GET|HEAD)$/,sc=/^\/\//,tc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,uc={},vc={},wc="*/".concat("*");try{mc=location.href}catch(xc){mc=Z.createElement("a"),mc.href="",mc=mc.href}lc=tc.exec(mc.toLowerCase())||[],_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:mc,type:"GET",isLocal:qc.test(lc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":wc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":_.parseJSON,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,_.ajaxSettings),b):L(_.ajaxSettings,a)},ajaxPrefilter:J(uc),ajaxTransport:J(vc),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&300>a||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(_.lastModified[e]=u),u=v.getResponseHeader("etag"),u&&(_.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--_.active||_.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=_.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?_(m):_.event,o=_.Deferred(),p=_.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=pc.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||mc)+"").replace(nc,"").replace(sc,lc[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=_.trim(l.dataType||"*").toLowerCase().match(nb)||[""],null==l.crossDomain&&(i=tc.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===lc[1]&&i[2]===lc[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(lc[3]||("http:"===lc[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=_.param(l.data,l.traditional)),K(uc,l,b,v),2===t)return v;j=l.global,j&&0===_.active++&&_.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!rc.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(kc.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=oc.test(e)?e.replace(oc,"$1_="+jc++):e+(kc.test(e)?"&":"?")+"_="+jc++)),l.ifModified&&(_.lastModified[e]&&v.setRequestHeader("If-Modified-Since",_.lastModified[e]),_.etag[e]&&v.setRequestHeader("If-None-Match",_.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+wc+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(vc,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return _.get(a,b,c,"json")},getScript:function(a,b){return _.get(a,void 0,b,"script")}}),_.each(["get","post"],function(a,b){_[b]=function(a,c,d,e){return _.isFunction(c)&&(e=e||d,d=c,c=void 0),_.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),_.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){_.fn[b]=function(a){return this.on(b,a)}}),_._evalUrl=function(a){return _.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},_.fn.extend({wrapAll:function(a){var b;return _.isFunction(a)?this.each(function(b){_(this).wrapAll(a.call(this,b))}):(this[0]&&(b=_(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(_.isFunction(a)?function(b){_(this).wrapInner(a.call(this,b))}:function(){var b=_(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=_.isFunction(a);return this.each(function(c){_(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){_.nodeName(this,"body")||_(this).replaceWith(this.childNodes)}).end()}}),_.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},_.expr.filters.visible=function(a){return!_.expr.filters.hidden(a)};var yc=/%20/g,zc=/\[\]$/,Ac=/\r?\n/g,Bc=/^(?:submit|button|image|reset|file)$/i,Cc=/^(?:input|select|textarea|keygen)/i;_.param=function(a,b){var c,d=[],e=function(a,b){b=_.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=_.ajaxSettings&&_.ajaxSettings.traditional),_.isArray(a)||a.jquery&&!_.isPlainObject(a))_.each(a,function(){e(this.name,this.value)
-});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(yc,"+")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=_.prop(this,"elements");return a?_.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!_(this).is(":disabled")&&Cc.test(this.nodeName)&&!Bc.test(a)&&(this.checked||!yb.test(a))}).map(function(a,b){var c=_(this).val();return null==c?null:_.isArray(c)?_.map(c,function(a){return{name:b.name,value:a.replace(Ac,"\r\n")}}):{name:b.name,value:c.replace(Ac,"\r\n")}}).get()}}),_.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Dc=0,Ec={},Fc={0:200,1223:204},Gc=_.ajaxSettings.xhr();a.ActiveXObject&&_(a).on("unload",function(){for(var a in Ec)Ec[a]()}),Y.cors=!!Gc&&"withCredentials"in Gc,Y.ajax=Gc=!!Gc,_.ajaxTransport(function(a){var b;return Y.cors||Gc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Dc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Ec[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Fc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Ec[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return _.globalEval(a),a}}}),_.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),_.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=_("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),Z.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Hc=[],Ic=/(=)\?(?=&|$)|\?\?/;_.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Hc.pop()||_.expando+"_"+jc++;return this[a]=!0,a}}),_.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ic.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ic.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=_.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ic,"$1"+e):b.jsonp!==!1&&(b.url+=(kc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||_.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Hc.push(e)),g&&_.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),_.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||Z;var d=gb.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=_.buildFragment([a],b,e),e&&e.length&&_(e).remove(),_.merge([],d.childNodes))};var Jc=_.fn.load;_.fn.load=function(a,b,c){if("string"!=typeof a&&Jc)return Jc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=_.trim(a.slice(h)),a=a.slice(0,h)),_.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&_.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?_("<div>").append(_.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},_.expr.filters.animated=function(a){return _.grep(_.timers,function(b){return a===b.elem}).length};var Kc=a.document.documentElement;_.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=_.css(a,"position"),l=_(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=_.css(a,"top"),i=_.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),_.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},_.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){_.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,_.contains(b,d)?(typeof d.getBoundingClientRect!==zb&&(e=d.getBoundingClientRect()),c=P(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===_.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),_.nodeName(a[0],"html")||(d=a.offset()),d.top+=_.css(a[0],"borderTopWidth",!0),d.left+=_.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-_.css(c,"marginTop",!0),left:b.left-d.left-_.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Kc;a&&!_.nodeName(a,"html")&&"static"===_.css(a,"position");)a=a.offsetParent;return a||Kc})}}),_.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;_.fn[b]=function(e){return qb(this,function(b,e,f){var g=P(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),_.each(["top","left"],function(a,b){_.cssHooks[b]=w(Y.pixelPosition,function(a,c){return c?(c=v(a,b),Qb.test(c)?_(a).position()[b]+"px":c):void 0})}),_.each({Height:"height",Width:"width"},function(a,b){_.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){_.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return qb(this,function(b,c,d){var e;return _.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?_.css(b,c,g):_.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),_.fn.size=function(){return this.length},_.fn.andSelf=_.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return _});var Lc=a.jQuery,Mc=a.$;return _.noConflict=function(b){return a.$===_&&(a.$=Mc),b&&a.jQuery===_&&(a.jQuery=Lc),_},typeof b===zb&&(a.jQuery=a.$=_),_});
diff --git a/interface/web/js/jquery-ui-1.11.1.custom.min.js b/interface/web/js/jquery-ui-1.11.1.custom.min.js
deleted file mode 100755
index 6a4e1d1..0000000
--- a/interface/web/js/jquery-ui-1.11.1.custom.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-21
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.1",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.1",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):t.which?this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted):this._mouseUp(t)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),N=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=N[0],M.top+=N[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+N[0],p[1]+N[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.document[0],s=this.options;try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(n){}return this.helper||s.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(s.iframeFix===!0?"iframe":s.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}
-},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i,s){var n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left,l=h+s.snapElements[c].width,u=s.snapElements[c].top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left-s.margins.left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left-s.margins.left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.1",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left,o=(t.positionAbs||t.position.absolute).top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.selectable",e.ui.mouse,{version:"1.11.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;
-this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td>&#160;</td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!t){for(this._trigger("beforeStop",e,this._uiHash()),s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!1}if(t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.accordion",{version:"1.11.1",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");
-t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function i(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(t.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(t.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())})),s.length?(this.focus(t,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)}}),e.widget("ui.autocomplete",{version:"1.11.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.1",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.1",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.1"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())
-},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,N,C,A,I,P,z,H,F,E,j,O,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",N=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)C=(x+u)%7,N+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[C]+"'>"+p[C]+"</span></th>";for(M+=N+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),I=(this._getFirstDayOfMonth(et,Z)-u+7)%7,P=Math.ceil((I+A)/7),z=Q?this.maxRows>P?this.maxRows:P:P,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-I)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)j=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],O=H.getMonth()!==Z,W=O&&!y||!j[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(O?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(O&&!v?"":" "+j[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(O&&!v||!j[2]?"":" title='"+j[2].replace(/'/g,"&#39;")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(O&&!v?"&#xa0;":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(O?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.1",e.datepicker,e.widget("ui.dialog",{version:"1.11.1",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;
-e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.progressbar",{version:"1.11.1",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectmenu",{version:"1.11.1",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(e){e.preventDefault()},click:"_toggle",keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.spinner",{version:"1.11.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;
-return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.1",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.1",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,a.is(":hidden")||a.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i),a.length)return a.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):a.position(e.extend({of:i},this.options.position)),this.hiding=!1,this.closing=!1,a.hide(),this._show(a,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:a}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(o.remove=function(){this._removeTooltip(a)}),t&&"mouseover"!==t.type||(o.mouseleave="close"),t&&"focusin"!==t.type||(o.focusout="close"),this._on(!0,i,o)}},close:function(t){var i=this,s=e(t?t.currentTarget:this.element),n=this._find(s);this.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),this.hiding=!0,n.stop(!0),this._hide(n,this.options.hide,function(){i._removeTooltip(e(this)),this.hiding=!1,this.closing=!1}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,s){e(s.element).attr("title",s.title),delete i.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:n}),this.hiding||(this.closing=!1))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]=t,i},_find:function(t){var i=t.data("ui-tooltip-id");return i?e("#"+i):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0),e("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title")||s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}});var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.1",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)
-},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}});
\ No newline at end of file
diff --git a/interface/web/js/jquery.combobox.js b/interface/web/js/jquery.combobox.js
deleted file mode 100755
index a8071f3..0000000
--- a/interface/web/js/jquery.combobox.js
+++ /dev/null
@@ -1,129 +0,0 @@
-(function( $ ) {
-	$.widget( "custom.combobox", {
-		_create: function() {
-			this.wrapper = $( "<span>" )
-				.addClass( "custom-combobox" )
-				.insertAfter( this.element );
-
-			this.element.hide();
-			this._createAutocomplete();
-			this._createShowAllButton();
-		},
-
-		_createAutocomplete: function() {
-			var selected = this.element.children( ":selected" ),
-				value = selected.val() ? selected.text() : "";
-
-			this.input = $( "<input>" )
-				.appendTo( this.wrapper )
-				.val( value )
-				.attr( "title", "" )
-				.addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" )
-				.autocomplete({
-					delay: 0,
-					minLength: 0,
-					source: $.proxy( this, "_source" )
-				})
-				.tooltip({
-					tooltipClass: "ui-state-highlight"
-				});
-
-			this._on( this.input, {
-				autocompleteselect: function( event, ui ) {
-					ui.item.option.selected = true;
-					this._trigger( "select", event, {
-						item: ui.item.option
-					});
-				},
-
-				autocompletechange: "_removeIfInvalid"
-			});
-		},
-
-		_createShowAllButton: function() {
-			var input = this.input,
-				wasOpen = false;
-
-			$( "<a>" )
-				.attr( "tabIndex", -1 )
-				.attr( "title", "Show All Items" )
-				.tooltip()
-				.appendTo( this.wrapper )
-				.button({
-					icons: {
-						primary: "ui-icon-triangle-1-s"
-					},
-					text: false
-				})
-				.removeClass( "ui-corner-all" )
-				.addClass( "custom-combobox-toggle ui-corner-right" )
-				.mousedown(function() {
-					wasOpen = input.autocomplete( "widget" ).is( ":visible" );
-				})
-				.click(function() {
-					input.focus();
-
-					// Close if already visible
-					if ( wasOpen ) {
-						return;
-					}
-
-					// Pass empty string as value to search for, displaying all results
-					input.autocomplete( "search", "" );
-				});
-		},
-
-		_source: function( request, response ) {
-			var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
-			response( this.element.children( "option" ).map(function() {
-				var text = $( this ).text();
-				if ( this.value && ( !request.term || matcher.test(text) ) )
-					return {
-						label: text,
-						value: text,
-						option: this
-					};
-			}) );
-		},
-
-		_removeIfInvalid: function( event, ui ) {
-
-			// Selected an item, nothing to do
-			if ( ui.item ) {
-				return;
-			}
-
-			// Search for a match (case-insensitive)
-			var value = this.input.val(),
-				valueLowerCase = value.toLowerCase(),
-				valid = false;
-			this.element.children( "option" ).each(function() {
-				if ( $( this ).text().toLowerCase() === valueLowerCase ) {
-					this.selected = valid = true;
-					return false;
-				}
-			});
-
-			// Found a match, nothing to do
-			if ( valid ) {
-				return;
-			}
-
-			// Remove invalid value
-			this.input
-				.val( "" )
-				.attr( "title", value + " didn't match any item" )
-				.tooltip( "open" );
-			this.element.val( "" );
-			this._delay(function() {
-				this.input.tooltip( "close" ).attr( "title", "" );
-			}, 2500 );
-			this.input.autocomplete( "instance" ).term = "";
-		},
-
-		_destroy: function() {
-			this.wrapper.remove();
-			this.element.show();
-		}
-	});
-})( jQuery );
diff --git a/interface/web/js/jquery.ispconfigsearch.js b/interface/web/js/jquery.ispconfigsearch.js
index 7a8115c..a26dc12 100644
--- a/interface/web/js/jquery.ispconfigsearch.js
+++ b/interface/web/js/jquery.ispconfigsearch.js
@@ -131,15 +131,14 @@
 								//resultBox.html(output).css({'position' : 'absolute', 'top' : searchField.position().top+searchField.outerHeight(), 'right' : '0'}).fadeIn();
 								if(settings.resultBoxPosition == 'n'){
 									resultBox.html(output).css({'position' : 'absolute', 'top' : searchField.position().top-resultBox.outerHeight(), 'left' : searchField.position().left+searchField.outerWidth()-resultBox.outerWidth()}).fadeIn();
-								}
-								if(settings.resultBoxPosition == 'e'){
+								} else if(settings.resultBoxPosition == 'e'){
 									resultBox.html(output).css({'position' : 'absolute', 'top' : searchField.position().top, 'left' : searchField.position().left+searchField.outerWidth()}).fadeIn();
-								}
-								if(settings.resultBoxPosition == 's'){
+								} else if(settings.resultBoxPosition == 's'){
 									resultBox.html(output).css({'position' : 'absolute', 'top' : searchField.position().top+searchField.outerHeight(), 'left' : searchField.position().left+searchField.outerWidth()-resultBox.outerWidth()}).fadeIn();
-								}
-								if(settings.resultBoxPosition == 'w'){
+								} else if(settings.resultBoxPosition == 'w'){
 									resultBox.html(output).css({'position' : 'absolute', 'top' : searchField.position().top, 'left' : searchField.position().left-resultBox.outerWidth()}).fadeIn();
+								} else {
+									resultBox.html(output).fadeIn();
 								}
 
 								searchField.removeClass(settings.cssPrefix+'loading');
diff --git a/interface/web/js/jquery.min.js b/interface/web/js/jquery.min.js
new file mode 100644
index 0000000..25714ed
--- /dev/null
+++ b/interface/web/js/jquery.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)
+},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
+},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n});
diff --git a/interface/web/js/jquery.tipsy.js b/interface/web/js/jquery.tipsy.js
index 2bb5a30..f95c063 100644
--- a/interface/web/js/jquery.tipsy.js
+++ b/interface/web/js/jquery.tipsy.js
@@ -1,438 +1,258 @@
-// tipsy, facebook style tooltips for jquery
-// version 1.0.0a
-// (c) 2008-2010 jason frame [jason@onehackoranother.com]
-// released under the MIT license
-
-(function($) {
-    
-    function maybeCall(thing, ctx) {
-        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
-    };
-    
-    function Tipsy(element, options) {
-        this.$element = $(element);
-        this.options = options;
-        this.enabled = true;
-        this.fixTitle();
-    };
-    
-    Tipsy.prototype = {
-        show: function() {
-            var title = this.getTitle();
-            if (title && this.enabled) {
-                var $tip = this.tip();
-                
-                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
-                $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
-                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);
-                
-                var pos = $.extend({}, this.$element.offset(), {
-                    width: this.$element[0].offsetWidth,
-                    height: this.$element[0].offsetHeight
-                });
-                
-                var actualWidth = $tip[0].offsetWidth,
-                    actualHeight = $tip[0].offsetHeight,
-                    gravity = maybeCall(this.options.gravity, this.$element[0]);
-                
-                var tp;
-                switch (gravity.charAt(0)) {
-                    case 'n':
-                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
-                        break;
-                    case 's':
-                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
-                        break;
-                    case 'e':
-                        tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
-                        break;
-                    case 'w':
-                        tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
-                        break;
-                }
-                
-                if (gravity.length == 2) {
-                    if (gravity.charAt(1) == 'w') {
-                        tp.left = pos.left + pos.width / 2 - 15;
-                    } else {
-                        tp.left = pos.left + pos.width / 2 - actualWidth + 15;
-                    }
-                }
-                
-                $tip.css(tp).addClass('tipsy-' + gravity);
-                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);
-                if (this.options.className) {
-                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));
-                }
-                
-                if (this.options.fade) {
-                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
-                } else {
-                    $tip.css({visibility: 'visible', opacity: this.options.opacity});
-                }
-            }
-        },
-        
-        hide: function() {
-            if (this.options.fade) {
-                this.tip().stop().fadeOut(function() { $(this).remove(); });
-            } else {
-                this.tip().remove();
-            }
-        },
-        
-        fixTitle: function() {
-            var $e = this.$element;
-            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {
-                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');
-            }
-        },
-        
-        getTitle: function() {
-            var title, $e = this.$element, o = this.options;
-            this.fixTitle();
-            var title, o = this.options;
-            if (typeof o.title == 'string') {
-                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
-            } else if (typeof o.title == 'function') {
-                title = o.title.call($e[0]);
-            }
-            title = ('' + title).replace(/(^\s*|\s*$)/, "");
-            return title || o.fallback;
-        },
-        
-        tip: function() {
-            if (!this.$tip) {
-                this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>');
-            }
-            return this.$tip;
-        },
-        
-        validate: function() {
-            if (!this.$element[0].parentNode) {
-                this.hide();
-                this.$element = null;
-                this.options = null;
-            }
-        },
-        
-        enable: function() { this.enabled = true; },
-        disable: function() { this.enabled = false; },
-        toggleEnabled: function() { this.enabled = !this.enabled; }
-    };
-    
-    $.fn.tipsy = function(options) {
-        
-        if (options === true) {
-            return this.data('tipsy');
-        } else if (typeof options == 'string') {
-            var tipsy = this.data('tipsy');
-            if (tipsy) tipsy[options]();
-            return this;
-        }
-        
-        options = $.extend({}, $.fn.tipsy.defaults, options);
-        
-        function get(ele) {
-            var tipsy = $.data(ele, 'tipsy');
-            if (!tipsy) {
-                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
-                $.data(ele, 'tipsy', tipsy);
-            }
-            return tipsy;
-        }
-        
-        function enter() {
-            var tipsy = get(this);
-            tipsy.hoverState = 'in';
-            if (options.delayIn == 0) {
-                tipsy.show();
-            } else {
-                tipsy.fixTitle();
-                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
-            }
-        };
-        
-        function leave() {
-            var tipsy = get(this);
-            tipsy.hoverState = 'out';
-            if (options.delayOut == 0) {
-                tipsy.hide();
-            } else {
-                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
-            }
-        };
-        
-        if (!options.live) this.each(function() { get(this); });
-        
-        if (options.trigger != 'manual') {
-            var binder   = options.live ? 'on' : 'bind',
-                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
-                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
-            this[binder](eventIn, enter)[binder](eventOut, leave);
-        }
-        
-        return this;
-        
-    };
-    
-    $.fn.tipsy.defaults = {
-        className: null,
-        delayIn: 0,
-        delayOut: 0,
-        fade: false,
-        fallback: '',
-        gravity: 'n',
-        html: false,
-        live: false,
-        offset: 0,
-        opacity: 0.8,
-        title: 'title',
-        trigger: 'hover'
-    };
-    
-    // Overwrite this method to provide options on a per-element basis.
-    // For example, you could store the gravity in a 'tipsy-gravity' attribute:
-    // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
-    // (remember - do not modify 'options' in place!)
-    $.fn.tipsy.elementOptions = function(ele, options) {
-        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
-    };
-    
-    $.fn.tipsy.autoNS = function() {
-        return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
-    };
-    
-    $.fn.tipsy.autoWE = function() {
-        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
-    };
-    
-    /**
-     * yields a closure of the supplied parameters, producing a function that takes
-     * no arguments and is suitable for use as an autogravity function like so:
-     *
-     * @param margin (int) - distance from the viewable region edge that an
-     *        element should be before setting its tooltip's gravity to be away
-     *        from that edge.
-     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer
-     *        if there are no viewable region edges effecting the tooltip's
-     *        gravity. It will try to vary from this minimally, for example,
-     *        if 'sw' is preferred and an element is near the right viewable 
-     *        region edge, but not the top edge, it will set the gravity for
-     *        that element's tooltip to be 'se', preserving the southern
-     *        component.
-     */
-     $.fn.tipsy.autoBounds = function(margin, prefer) {
-		return function() {
-			var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},
-			    boundTop = $(document).scrollTop() + margin,
-			    boundLeft = $(document).scrollLeft() + margin,
-			    $this = $(this);
-
-			if ($this.offset().top < boundTop) dir.ns = 'n';
-			if ($this.offset().left < boundLeft) dir.ew = 'w';
-			if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';
-			if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';
-
-			return dir.ns + (dir.ew ? dir.ew : '');
-		}
-	};
-    
-})(jQuery);
-
-
-
-(function( $ ) {
-    $.widget( "ui.combobox", {
-        _create: function() {
-            var elwidth = this.element.width();
-            var elheight = this.element.height();
-            var input,
-                self = this,
-                select = this.element,
-                internal = false,
-                selected = select.children( ":selected" ),
-                value = selected.val() ? selected.text() : "",
-                wrapper = this.wrapper = $( "<span>" )
-                    .addClass( "ui-combobox" )
-                    .insertAfter( select );
-            
-            input = $( "<input>" ).css( { "width": (select.is(':visible') ? (elwidth > 15 ? elwidth - 15 : 1) : 350), "height": (elheight > 0 ? elheight : 16) });
-            select.hide();
-            input.appendTo( wrapper )
-                .val( value )
-                .addClass( "ui-state-default ui-combobox-input" )
-                .autocomplete({
-                    delay: 0,
-                    minLength: 0,
-                    source: function( request, response ) {
-                        var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
-                        response( select.children( "option" ).map(function() {
-                            var text = $( this ).text();
-                            //if ( this.value && ( !request.term || matcher.test(text) ) )
-                            if ( (!request.term || matcher.test(text)) && $(this).css('display') != 'none' )
-                                return {
-                                    label: (text == "" ? "&nbsp;" : text.replace(
-                                        new RegExp(
-                                            "(?![^&;]+;)(?!<[^<>]*)(" +
-                                            $.ui.autocomplete.escapeRegex(request.term) +
-                                            ")(?![^<>]*>)(?![^&;]+;)", "gi"
-                                        ), "<strong>$1</strong>" )),
-                                    'value': (text ? text : ''),
-                                    'class': (select.hasClass('flags') ? 'country-' + ($(this).val() ? $(this).val().toUpperCase() : '') : $(this).attr('class')),
-                                    option: this
-                                };
-                        }) );
-                    },
-                    select: function( event, ui ) {
-                        ui.item.option.selected = true;
-                        self._trigger( "selected", event, {
-                            item: ui.item.option
-                        });
-                        if((select.onchange || false) && typeof select.onchange == 'function') {
-                            select.onchange( { target: select } );
-                        } else if($(select).attr('onchange')) {
-                            eval($(select).attr('onchange'));
-                        } else {
-                            if(!ui.item.internal) {
-                                internal = true;
-                                $(select).change();
-                            }
-                        }
-                        if (jQuery(".panel #Filter").length > 0) {
-                            jQuery(".panel #Filter").trigger('click');
-                        }
-                    },
-                    change: function( event, ui ) {
-                        if ( !ui.item ) {
-                            var matcher = new RegExp( "" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "", "i" ),
-                                matchtext = $(this).val();
-                                valid = false;
-                            select.children( "option" ).each(function() {
-                                if( (($(this).text() == "" && matchtext == "") || $( this ).text().match( matcher )) && $(this).css('display') != 'none' ) {
-                                    select.val($(this).val());
-                                    this.selected = valid = true;
-                                    return false;
-                                }
-                            });
-                            if ( !valid ) {
-                                // remove invalid value, as it didn't match anything
-                                $( this ).val( "" );
-                                select.val( "" );
-                                input.data( "autocomplete" ).term = "";
-                                return false;
-                            }
-                        }
-                    }
-                })
-                .keypress(function(event) {
-                    if(select.attr('disabled')) {
-						event.preventDefault();
-						return false;
-					}
-                    if(event.keyCode == 13) {
-                        event.preventDefault();
-                        var matcher = new RegExp( "" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "", "i" ),
-                            matchtext = $(this).val();
-                            valid = false,
-                            selected = false;
-                        select.children( "option" ).each(function() {
-                            if( (($(this).val() == "" && matchtext == "") || $( this ).text().match( matcher )) && $(this).css('display') != 'none' ) {
-                                valid = true;
-                                selected = $(this);
-                                return false;
-                            }
-                        });
-                        if(!valid) return false;
-                        
-                        $(this).autocomplete('option','select').call($(this), event, { item: { option: selected.get(0), internal: true } });
-                    }
-                })
-                .addClass( "ui-widget ui-widget-content ui-corner-left" )
-                .click(function() {
-                    if(select.attr('disabled')) {
-						event.preventDefault();
-						return false;
-					}
-                    // close if already visible
-                    if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
-                        //input.autocomplete( "close" );
-                        return;
-                    }
-
-                    // pass empty string as value to search for, displaying all results
-                    input.autocomplete( "search", "" );
-                    input.focus();
-                });
-            if(select.hasClass('flags')) input.addClass('flags');
-
-            input.data( "autocomplete" )._renderItem = function( ul, item ) {
-                var el = $( "<li></li>" )
-                    .data( "item.autocomplete", item )
-                    .append( "<a>" + item.label + "</a>" )
-                    .appendTo( ul );
-                if(item && item['class'] && el) el.addClass(item['class']);
-                return el;
-            };
-            select.change(function(e) {
-                if(internal == true) {
-                    internal = false;
-                    return;
-                }
-                var matchtext = $(this).val().toLowerCase();
-                    valid = false,
-                    selected = false,
-                    selected_val = "";
-                select.children( "option" ).each(function() {
-                    if( (($(this).val() == "" && matchtext == "") || $( this ).val().toLowerCase() == matchtext) && $(this).css('display') != 'none' ) {
-                        valid = true;
-                        selected = $(this);
-                        selected_val = $(this).text();
-                        return false;
-                    }
-                });
-                if(!valid) return false;
-                
-                input.val(selected_val).autocomplete('option','select').call(input, (e ? e : {target: select}), { item: { option: selected.get(0), internal: true } });
-            });
-
-            $( "<a>" )
-                .attr( "tabIndex", -1 )
-                .attr( "title", "Show All Items" )
-                .appendTo( wrapper )
-                .button({
-                    icons: {
-                        primary: "ui-icon-triangle-1-s"
-                    },
-                    text: false
-                })
-                .removeClass( "ui-corner-all" )
-                .addClass( "ui-corner-right ui-combobox-toggle" )
-                .css( { "width": 15, "height": (elheight > 0 ? elheight : 16) })
-                .click(function() {
-                    if(select.attr('disabled')) {
-						event.preventDefault();
-						return false;
-					}
-                    // close if already visible
-                    if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
-                        input.autocomplete( "close" );
-                        return;
-                    }
-
-                    // work around a bug (likely same cause as #5265)
-                    $( this ).blur();
-
-                    // pass empty string as value to search for, displaying all results
-                    input.autocomplete( "search", "" );
-                    input.focus();
-                });
-        },
-
-        destroy: function() {
-            this.wrapper.remove();
-            this.element.show();
-            $.Widget.prototype.destroy.call( this );
-        }
-    });
-})( jQuery );
+// tipsy, facebook style tooltips for jquery
+// version 1.0.0a
+// (c) 2008-2010 jason frame [jason@onehackoranother.com]
+// released under the MIT license
+
+(function($) {
+    
+    function maybeCall(thing, ctx) {
+        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
+    };
+    
+    function isElementInDOM(ele) {
+      while (ele = ele.parentNode) {
+        if (ele == document) return true;
+      }
+      return false;
+    };
+    
+    function Tipsy(element, options) {
+        this.$element = $(element);
+        this.options = options;
+        this.enabled = true;
+        this.fixTitle();
+    };
+    
+    Tipsy.prototype = {
+        show: function() {
+            var title = this.getTitle();
+            if (title && this.enabled) {
+                var $tip = this.tip();
+                
+                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
+                $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
+                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);
+                
+                var pos = $.extend({}, this.$element.offset(), {
+                    width: this.$element[0].offsetWidth,
+                    height: this.$element[0].offsetHeight
+                });
+                
+                var actualWidth = $tip[0].offsetWidth,
+                    actualHeight = $tip[0].offsetHeight,
+                    gravity = maybeCall(this.options.gravity, this.$element[0]);
+                
+                var tp;
+                switch (gravity.charAt(0)) {
+                    case 'n':
+                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
+                        break;
+                    case 's':
+                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
+                        break;
+                    case 'e':
+                        tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
+                        break;
+                    case 'w':
+                        tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
+                        break;
+                }
+                
+                if (gravity.length == 2) {
+                    if (gravity.charAt(1) == 'w') {
+                        tp.left = pos.left + pos.width / 2 - 15;
+                    } else {
+                        tp.left = pos.left + pos.width / 2 - actualWidth + 15;
+                    }
+                }
+                
+                $tip.css(tp).addClass('tipsy-' + gravity);
+                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);
+                if (this.options.className) {
+                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));
+                }
+                
+                if (this.options.fade) {
+                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
+                } else {
+                    $tip.css({visibility: 'visible', opacity: this.options.opacity});
+                }
+            }
+        },
+        
+        hide: function() {
+            if (this.options.fade) {
+                this.tip().stop().fadeOut(function() { $(this).remove(); });
+            } else {
+                this.tip().remove();
+            }
+        },
+        
+        fixTitle: function() {
+            var $e = this.$element;
+            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {
+                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');
+            }
+        },
+        
+        getTitle: function() {
+            var title, $e = this.$element, o = this.options;
+            this.fixTitle();
+            var title, o = this.options;
+            if (typeof o.title == 'string') {
+                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
+            } else if (typeof o.title == 'function') {
+                title = o.title.call($e[0]);
+            }
+            title = ('' + title).replace(/(^\s*|\s*$)/, "");
+            return title || o.fallback;
+        },
+        
+        tip: function() {
+            if (!this.$tip) {
+                this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>');
+                this.$tip.data('tipsy-pointee', this.$element[0]);
+            }
+            return this.$tip;
+        },
+        
+        validate: function() {
+            if (!this.$element[0].parentNode) {
+                this.hide();
+                this.$element = null;
+                this.options = null;
+            }
+        },
+        
+        enable: function() { this.enabled = true; },
+        disable: function() { this.enabled = false; },
+        toggleEnabled: function() { this.enabled = !this.enabled; }
+    };
+    
+    $.fn.tipsy = function(options) {
+        
+        if (options === true) {
+            return this.data('tipsy');
+        } else if (typeof options == 'string') {
+            var tipsy = this.data('tipsy');
+            if (tipsy) tipsy[options]();
+            return this;
+        }
+        
+        options = $.extend({}, $.fn.tipsy.defaults, options);
+        
+        function get(ele) {
+            var tipsy = $.data(ele, 'tipsy');
+            if (!tipsy) {
+                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
+                $.data(ele, 'tipsy', tipsy);
+            }
+            return tipsy;
+        }
+        
+        function enter() {
+            var tipsy = get(this);
+            tipsy.hoverState = 'in';
+            if (options.delayIn == 0) {
+                tipsy.show();
+            } else {
+                tipsy.fixTitle();
+                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
+            }
+        };
+        
+        function leave() {
+            var tipsy = get(this);
+            tipsy.hoverState = 'out';
+            if (options.delayOut == 0) {
+                tipsy.hide();
+            } else {
+                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
+            }
+        };
+        
+        if (!options.live) this.each(function() { get(this); });
+        
+        if (options.trigger != 'manual') {
+            var binder   = options.live ? 'live' : 'bind',
+                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
+                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
+            this[binder](eventIn, enter)[binder](eventOut, leave);
+        }
+        
+        return this;
+        
+    };
+    
+    $.fn.tipsy.defaults = {
+        className: null,
+        delayIn: 0,
+        delayOut: 0,
+        fade: false,
+        fallback: '',
+        gravity: 'n',
+        html: false,
+        live: false,
+        offset: 0,
+        opacity: 0.8,
+        title: 'title',
+        trigger: 'hover'
+    };
+    
+    $.fn.tipsy.revalidate = function() {
+      $('.tipsy').each(function() {
+        var pointee = $.data(this, 'tipsy-pointee');
+        if (!pointee || !isElementInDOM(pointee)) {
+          $(this).remove();
+        }
+      });
+    };
+    
+    // Overwrite this method to provide options on a per-element basis.
+    // For example, you could store the gravity in a 'tipsy-gravity' attribute:
+    // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
+    // (remember - do not modify 'options' in place!)
+    $.fn.tipsy.elementOptions = function(ele, options) {
+        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
+    };
+    
+    $.fn.tipsy.autoNS = function() {
+        return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
+    };
+    
+    $.fn.tipsy.autoWE = function() {
+        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
+    };
+    
+    /**
+     * yields a closure of the supplied parameters, producing a function that takes
+     * no arguments and is suitable for use as an autogravity function like so:
+     *
+     * @param margin (int) - distance from the viewable region edge that an
+     *        element should be before setting its tooltip's gravity to be away
+     *        from that edge.
+     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer
+     *        if there are no viewable region edges effecting the tooltip's
+     *        gravity. It will try to vary from this minimally, for example,
+     *        if 'sw' is preferred and an element is near the right viewable 
+     *        region edge, but not the top edge, it will set the gravity for
+     *        that element's tooltip to be 'se', preserving the southern
+     *        component.
+     */
+     $.fn.tipsy.autoBounds = function(margin, prefer) {
+		return function() {
+			var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},
+			    boundTop = $(document).scrollTop() + margin,
+			    boundLeft = $(document).scrollLeft() + margin,
+			    $this = $(this);
+
+			if ($this.offset().top < boundTop) dir.ns = 'n';
+			if ($this.offset().left < boundLeft) dir.ew = 'w';
+			if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';
+			if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';
+
+			return dir.ns + (dir.ew ? dir.ew : '');
+		}
+	};
+    
+})(jQuery);
diff --git a/interface/web/js/mail_domain_dkim.js b/interface/web/js/mail_domain_dkim.js
index fdc7ae5..0e9be0a 100755
--- a/interface/web/js/mail_domain_dkim.js
+++ b/interface/web/js/mail_domain_dkim.js
@@ -31,15 +31,13 @@
 This Javascript is invoked by
 	* mail/templates/mail_domain_edit.htm to show and/or create the key-pair
 */
+
 var request = false;
 
-$('.subsectiontoggle').on('click', function(){
-	$(this).children().toggleClass('showing').end().next().slideToggle();
-});
-
-function setRequest(action) {
+//function setRequest(action) {
+function setRequest() {
 	if (window.XMLHttpRequest) {
-		request = new XMLHttpRequest();
+			request = new XMLHttpRequest();
 	} else if (window.ActiveXObject) {
 		try {
 			request = new ActiveXObject('Msxml2.XMLHTTP');
@@ -51,7 +49,6 @@
 			catch (e) {}
 		}
 	}
-
 	if (!request) {
 		alert("Error creating XMLHTTP-instance");
 		return false;
@@ -64,12 +61,20 @@
 		} else { 
 			var domain = jQuery('#domain').val();
 		}
+
+		// we nedd the client-id to get the dkim-strength of the right mail-server
+		try {
+			var clientid = document.getElementById("client_group_id").selectedIndex; // admin and reseller
+		}
+		catch (e) {
+			var clientid = jQuery('#client_id').val();; // user
+		}
+
 		var selector=jQuery('#dkim_selector').val();
 		var publickey=jQuery('#dkim_public').val();
-		var privatekey=encodeURIComponent(document.getElementById("dkim_private").value)
 		request.open('POST', 'mail/mail_domain_dkim_create.php', true);
 		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-		request.send('domain='+domain+'&action='+action+'&dkim_selector='+selector+'&dkim_public='+publickey+'&dkim_private='+privatekey);
+		request.send('domain='+domain+'&dkim_selector='+selector+'&dkim_public='+publickey+'&client_id='+clientid);
 		request.onreadystatechange = interpretRequest;
 	}
 }
@@ -86,10 +91,9 @@
 				document.getElementsByName('dns_record')[0].value = request.responseXML.getElementsByTagName('dns_record')[0].firstChild.nodeValue;
 			}
 		break;
-
 		default:
 		break;
 	}
 }
 
-setRequest('show');
+//setRequest('show');
diff --git a/interface/web/js/scrigo.js.php b/interface/web/js/scrigo.js.php
index 51e50f9..7ba19d1 100644
--- a/interface/web/js/scrigo.js.php
+++ b/interface/web/js/scrigo.js.php
@@ -8,547 +8,6 @@
 $app->uses('ini_parser,getconf');
 $server_config_array = $app->getconf->get_global_config();
 ?>
-var pageFormChanged = false;
-var tabChangeWarningTxt = '';
-var tabChangeDiscardTxt = '';
-var tabChangeWarning = false;
-var tabChangeDiscard = false;
-var requestsRunning = 0;
-var indicatorPaddingH = -1;
-var indicatorPaddingW = -1;
-var indicatorCompleted = false;
-var registeredHooks = new Array();
-redirect = '';
-
-function reportError(request) {
-	/* Error reporting is disabled by default as some browsers like safari
-	   sometimes throw errors when a ajax request is delayed even if the
-	   ajax request worked. */
-
-	/*alert(request);*/
-}
-
-function registerHook(name, callback) {
-    if(!registeredHooks[name]) registeredHooks[name] = new Array();
-    var newindex = registeredHooks[name].length;
-    registeredHooks[name][newindex] = callback;
-}
-
-function callHook(name, params) {
-    if(!registeredHooks[name]) return;
-    for(var i = 0; i < registeredHooks[name].length; i++) {
-        var callback = registeredHooks[name][i];
-        callback(name, params);
-    }
-}
-
-function resetFormChanged() {
-    pageFormChanged = false;
-}
-
-function showLoadIndicator() {
-    document.body.style.cursor = 'wait';
-
-<?php
-if($server_config_array['misc']['use_loadindicator'] == 'y'){
-?>
-    requestsRunning += 1;
-
-    if(requestsRunning < 2) {
-        var indicator = jQuery('#ajaxloader');
-        if(indicator.length < 1) {
-            indicator = jQuery('<div id="ajaxloader" style="display: none;"></div>');
-            indicator.appendTo('body');
-        }
-        var parent = jQuery('#content');
-        if(parent.length < 1) return;
-        indicatorCompleted = false;
-
-        var atx = parent.offset().left + 150; //((parent.outerWidth(true) - indicator.outerWidth(true)) / 2);
-        var aty = parent.offset().top + 150;
-        indicator.css( {'left': atx, 'top': aty } ).fadeIn('fast', function() {
-            // check if loader should be hidden immediately
-            indicatorCompleted = true;
-            if(requestsRunning < 1) $(this).fadeOut('fast', function() { $(this).hide();});
-        });
-    }
-<?php
-}
-?>
-}
-
-function hideLoadIndicator() {
-    document.body.style.cursor = '';
-
-    requestsRunning -= 1;
-    if(requestsRunning < 1) {
-        requestsRunning = 0; // just for the case...
-        if(indicatorCompleted == true) jQuery('#ajaxloader').fadeOut('fast', function() { jQuery('#ajaxloader').hide(); } );
-    }
-}
-
-function onAfterContentLoad(url, data) {
-    if(!data) data = '';
-    else data = '&' + data;
-<?php
-if($server_config_array['misc']['use_combobox'] == 'y'){
-?>
-
-
-    $('#pageContent').find("select:not(.chosen-select)").combobox({
-	    select: function (event, ui) {
-            if (jQuery(".panel #Filter").length > 0) {
-                jQuery(".panel #Filter").trigger('click');
-            }
-	    }
-    });
-    $('.chosen-select').chosen({no_results_text: "<?php echo $wb['globalsearch_noresults_text_txt']; ?>", width: '300px'});
-<?php
-}
-?>
-    callHook('onAfterContentLoad', {'url': url, 'data': data });
-}
-
-function loadContentRefresh(pagename) {
-
-  if(document.getElementById('refreshinterval').value > 0) {
-	var pageContentObject2 = jQuery.ajax({	type: "GET",
-											url: pagename,
-											data: "refresh="+document.getElementById('refreshinterval').value,
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-                                                hideLoadIndicator();
-												jQuery('#pageContent').html(jqXHR.responseText);
-                                                onAfterContentLoad(pagename, "refresh="+document.getElementById('refreshinterval').value);
-                                                pageFormChanged = false;
-											},
-											error: function() {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful.'+pagename);
-											}
-										});
-  	setTimeout( "loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000*60 );
-  }
-}
-
-function capp(module, redirect) {
-	var submitFormObj = jQuery.ajax({		type: "GET",
-											url: "capp.php",
-											data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-												if(jqXHR.responseText != '') {
-													if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-														var parts = jqXHR.responseText.split(':');
-														loadContent(parts[1]);
-													} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
-														var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
-														document.location.href = newUrl;
-													} else {
-														//alert(jqXHR.responseText);
-													}
-												}
-												loadMenus();
-                                                hideLoadIndicator();
-											},
-											error: function() {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful.'+module);
-											}
-									});
-}
-
-function submitLoginForm(formname) {
-    //* Validate form. TODO: username and password with strip();
-    var frm = document.getElementById(formname);
-    var userNameObj = frm.username;
-    if(userNameObj.value == ''){
-        userNameObj.focus();
-        return;
-    }
-    var passwordObj = frm.passwort;
-    if(passwordObj.value == ''){
-        passwordObj.focus();
-        return;
-    }
-
-	$('#dummy_username').val(userNameObj.value);
-	$('#dummy_passwort').val(passwordObj.value);
-	$('#dummy_login_form').submit();
-
-	var submitFormObj = jQuery.ajax({		type: "POST",
-											url: "content.php",
-											data: jQuery('#'+formname).serialize(),
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-													var parts = jqXHR.responseText.split(':');
-													//alert(parts[1]);
-													loadContent(parts[1]);
-													//redirect = parts[1];
-													//window.setTimeout('loadContent(redirect)', 1000);
-												} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
-													// Go to the login page
-													document.location.href = 'index.php';
-												} else {
-													jQuery('#pageContent').html(jqXHR.responseText);
-                                                    onAfterContentLoad('content.php', jQuery('#'+formname).serialize());
-                                                    pageFormChanged = false;
-												}
-												loadMenus();
-                                                hideLoadIndicator();
-											},
-											error: function() {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful.110');
-											}
-									});
-	/*
-	if(redirect != '') {
-		loadContent(redirect);
-		redirect = '';
-	}
-	document.getElementById('footer').innerHTML = 'Powered by <a href="http://www.ispconfig.org" target="_blank">ISPConfig</a>';
-	*/
-
-}
-
-function submitForm(formname,target) {
-	var submitFormObj = jQuery.ajax({		type: "POST",
-											url: target,
-											data: jQuery('#'+formname).serialize(),
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-													var parts = jqXHR.responseText.split(':');
-													//alert(parts[1]);
-													loadContent(parts[1]);
-													//redirect = parts[1];
-													//window.setTimeout('loadContent(redirect)', 1000);
-												} else {
-													jQuery('#pageContent').html(jqXHR.responseText);
-                                                    onAfterContentLoad(target, jQuery('#'+formname).serialize());
-                                                    pageFormChanged = false;
-												}
-                                                hideLoadIndicator();
-											},
-											error: function(jqXHR, textStatus, errorThrown) {
-                                                hideLoadIndicator();
-												var parts = jqXHR.responseText.split(':');
-												reportError('Ajax Request was not successful. 111');
-											}
-									});
-	/*
-	if(redirect != '') {
-		loadContent(redirect);
-		redirect = '';
-	}
-	*/
-}
-
-function submitFormConfirm(formname,target,confirmation) {
-	var successMessage = arguments[3];
-	if(window.confirm(confirmation)) {
-		var submitFormObj = jQuery.ajax({	type: "POST",
-											url: target,
-											data: jQuery('#'+formname).serialize(),
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-												if(successMessage) alert(successMessage);
-												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-													var parts = jqXHR.responseText.split(':');
-													//alert(parts[1]);
-													loadContent(parts[1]);
-													//redirect = parts[1];
-													//window.setTimeout('loadContent(redirect)', 1000);
-												} else {
-													jQuery('#pageContent').html(jqXHR.responseText);
-                                                    onAfterContentLoad(target, jQuery('#'+formname).serialize());
-                                                    pageFormChanged = false;
-												}
-                                                hideLoadIndicator();
-											},
-											error: function(jqXHR, textStatus, errorThrown) {
-                                                hideLoadIndicator();
-												var parts = jqXHR.responseText.split(':');
-												reportError('Ajax Request was not successful. 111');
-											}
-									});
-	}
-}
-
-function submitUploadForm(formname,target) {
-	var handleResponse = function(loadedFrame) {
-		var response, responseStr = loadedFrame.contentWindow.document.body.innerHTML;
-
-		try {
-			response = JSON.parse(responseStr);
-		} catch(e) {
-			response = responseStr;
-		}
-		var msg = '';
-		var okmsg = jQuery('#OKMsg',response).html();
-		if(okmsg){
-			msg = '<div id="OKMsg">'+okmsg+'</div>';
-		}
-		var errormsg = jQuery('#errorMsg',response).html();
-		if(errormsg){
-			msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
-		}
-		return msg;
-
-    };
-
-	var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
-	jQuery('body').after('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
-	jQuery('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
-	jQuery('#'+frame_id).load(function() {
-        var msg = handleResponse(this);
-		jQuery('#errorMsg').remove();
-		jQuery('#OKMsg').remove();
-		jQuery('input[name="id"]').before(msg);
-		jQuery(this).remove();
-      });
-
-	/*
-	if(redirect != '') {
-		loadContent(redirect);
-		redirect = '';
-	}
-	*/
-}
-
-function loadContent(pagename) {
-  var params = arguments[1];
-  var pageContentObject2 = jQuery.ajax({	type: "GET",
-											url: pagename,
-                                            data: (params ? params : null),
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-													var parts = jqXHR.responseText.split(':');
-													loadContent(parts[1]);
-												} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
-													var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
-													document.location.href = newUrl;
-												} else {
-													//document.getElementById('pageContent').innerHTML = jqXHR.responseText;
-													//var reponse = jQuery(jqXHR.responseText);
-													//var reponseScript = reponse.filter("script");
-													//jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
-
-													jQuery('#pageContent').html(jqXHR.responseText);
-                                                    onAfterContentLoad(pagename, (params ? params : null));
-                                                    pageFormChanged = false;
-												}
-                                                hideLoadIndicator();
-											},
-											error: function() {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 113');
-											}
-									});
-}
-
-
-function loadInitContent() {
-	var pageContentObject = jQuery.ajax({	type: "GET",
-											url: "content.php",
-											data: "s_mod=login&s_pg=index",
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-													var parts = jqXHR.responseText.split(":");
-													loadContent(parts[1]);
-												} else {
-													jQuery('#pageContent').html(jqXHR.responseText);
-                                                    onAfterContentLoad('content.php', "s_mod=login&s_pg=index");
-                                                    pageFormChanged = false;
-												}
-                                                hideLoadIndicator();
-											},
-											error: function() {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 114');
-											}
-										});
-
-  loadMenus();
-  keepalive();
-  setTimeout("setFocus()",1000);
-
-}
-
-function setFocus() {
-	try {
-		jQuery('form#pageForm').find('input[name="username"]').focus();
-	} catch (e) {
-	}
-}
-
-
-function loadMenus() {
-  var sideNavObject = jQuery.ajax({			type: "GET",
-											url: "nav.php",
-											data: "nav=side",
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-                                                hideLoadIndicator();
-												jQuery('#sideNav').html(jqXHR.responseText);
-											},
-											error: function() {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 115');
-											}
-									});
-
-  var topNavObject = jQuery.ajax({			type: "GET",
-											url: "nav.php",
-											data: "nav=top",
-											dataType: "html",
-											beforeSend: function() {
-												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-                                                hideLoadIndicator();
-												jQuery('#topNav').html(jqXHR.responseText);
-											},
-											error: function(o) {
-                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 116');
-											}
-								});
-
-}
-
-function changeTab(tab,target,force) {
-	if(requestsRunning > 0) return false;
-	
-	//document.forms[0].next_tab.value = tab;
-	document.pageForm.next_tab.value = tab;
-
-    var idel = jQuery('form#pageForm').find('[name="id"]');
-    var id = null;
-    if(idel.length > 0) id = idel.val();
-    if(tabChangeDiscard == 'y' && !force) {
-        if((idel.length < 1 || id) && (pageFormChanged == false || window.confirm(tabChangeDiscardTxt))) {
-            var next_tab = tab;
-            if(id) loadContent(target, {'next_tab': next_tab, 'id': id});
-            else loadContent(target, {'next_tab': next_tab});
-        } else {
-            return false;
-        }
-    } else {
-        if(id && tabChangeWarning == 'y' && pageFormChanged == true) {
-            if(window.confirm(tabChangeWarningTxt)) {
-                submitForm('pageForm', target);
-            } else {
-                var next_tab = tab;
-                if(id) loadContent(target, {'next_tab': next_tab, 'id': id});
-                else loadContent(target, {'next_tab': next_tab});
-            }
-        } else {
-            submitForm('pageForm',target);
-        }
-    }
-}
-
-function del_record(link,confirmation) {
-  if(window.confirm(confirmation)) {
-          loadContent(link);
-  }
-}
-
-function confirm_action(link,confirmation) {
-  if(window.confirm(confirmation)) {
-          loadContent(link);
-  }
-}
-
-function loadContentInto(elementid,pagename) {
-  var pageContentObject2 = jQuery.ajax({	type: "GET",
-											url: pagename,
-											dataType: "html",
-											beforeSend: function() {
-//												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-//                                                hideLoadIndicator();
-												jQuery('#'+elementid).html(jqXHR.responseText);
-											},
-											error: function() {
-//                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 118');
-											}
-										});
-}
-
-function loadOptionInto(elementid,pagename) {
-	var pageContentObject2 = jQuery.ajax({	type: "GET",
-											url: pagename,
-											dataType: "html",
-											beforeSend: function() {
-//												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-//                                                hideLoadIndicator();
-												var teste = jqXHR.responseText;
-												var elemente = teste.split('#');
-												el=document.getElementById(elementid);
-												el.innerHTML='';
-												for (var i = 0; i < elemente.length; ++i){
-
-													var foo2 = document.createElement("option");
-													foo2.appendChild(document.createTextNode(elemente[i]));
-													foo2.value=elemente[i];
-													el.appendChild(foo2);
-												}
-											},
-											error: function() {
-//                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 119');
-											}
-										});
-}
-
-function keepalive() {
-	var pageContentObject3 = jQuery.ajax({	type: "GET",
-											url: "keepalive.php",
-											dataType: "html",
-											success: function(data, textStatus, jqXHR) {
-												setTimeout( keepalive, 1000000 );
-											},
-											error: function() {
-												reportError('Session expired. Please login again.');
-											}
-										});
-  	//setTimeout( keepalive, 1000000 );
-}
-
 
 <?php
 $min_password_length = 5;
@@ -686,82 +145,7 @@
 	return false;
 }
 
-var new_tpl_add_id = 0;
-function addAdditionalTemplate(){
-    var tpl_add = jQuery('#template_additional').val();
-    var addTemplate = jQuery('#tpl_add_select').val().split('|',2);
-	var addTplId = addTemplate[0];
-	var addTplText = addTemplate[1];
-	if(addTplId > 0) {
-        var newVal = tpl_add.split('/');
-        new_tpl_add_id += 1;
-        var delbtn = jQuery('<a href="#"></a>').attr('class', 'button icons16 icoDelete').click(function(e) {
-            e.preventDefault();
-            delAdditionalTemplate($(this).parent().attr('rel'));
-        });
-        newVal[newVal.length] = 'n' + new_tpl_add_id + ':' + addTplId;
-	    jQuery('<li>' + addTplText + '</li>').attr('rel', 'n' + new_tpl_add_id).append(delbtn).appendTo('#template_additional_list ul');
-	    jQuery('#template_additional').val(newVal.join('/'));
-	    alert('additional template ' + addTplText + ' added to customer');
-	} else {
-	    alert('no additional template selcted');
-	}
-}
 
-function delAdditionalTemplate(tpl_id){
-    var tpl_add = jQuery('#template_additional').val();
-	if(tpl_id) {
-        // new style
-		var $el = jQuery('#template_additional_list ul').find('li[rel="' + tpl_id + '"]').eq(0); // only the first
-        var addTplText = $el.text();
-        $el.remove();
-
-		var oldVal = tpl_add.split('/');
-		var newVal = new Array();
-        for(var i = 0; i < oldVal.length; i++) {
-            var tmp = oldVal[i].split(':', 2);
-            if(tmp.length == 2 && tmp[0] == tpl_id) continue;
-            newVal[newVal.length] = oldVal[i];
-        }
-        jQuery('#template_additional').val(newVal.join('/'));
-		alert('additional template ' + addTplText + ' deleted from customer');
-    } else if(tpl_add != '') {
-        // old style
-		var addTemplate = document.getElementById('tpl_add_select').value.split('|',2);
-		var addTplId = addTemplate[0];
-		var addTplText = addTemplate[1];
-
-		jQuery('#template_additional_list ul').find('li:not([rel])').each(function() {
-            var text = jQuery(this).text();
-            if(text == addTplText) {
-                jQuery(this).remove();
-                return false;
-            }
-            return this;
-        });
-
-		var newVal = tpl_add;
-        var repl = new RegExp('(^|\/)' + addTplId + '(\/|$)');
-		newVal = newVal.replace(repl, '');
-		newVal = newVal.replace('//', '/');
-		jQuery('#template_additional').val(newVal);
-		alert('additional template ' + addTplText + ' deleted from customer');
-  } else {
-  	alert('no additional template selcted');
-  }
-
-}
-
-function getInternetExplorerVersion() {
-    var rv = -1; // Return value assumes failure.
-    if (navigator.appName == 'Microsoft Internet Explorer') {
-        var ua = navigator.userAgent;
-        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
-        if (re.exec(ua) != null)
-            rv = parseFloat(RegExp.$1);
-    }
-    return rv;
-}
 
 function password(minLength, special, num_special){
 	minLength = minLength || 10;
@@ -853,42 +237,3 @@
 function getRandomInt(min, max){
     return Math.floor(Math.random() * (max - min + 1)) + min;
 }
-
-jQuery('.addPlaceholder').on("click", function(){
-	var placeholderText = jQuery(this).text();
-	var template = jQuery(this).siblings(':input');
-	template.insertAtCaret(placeholderText);
-});
-
-jQuery('.addPlaceholderContent').on("click", function(){
-	var placeholderContentText = jQuery(this).find('.addPlaceholderContent').text();
-	var template2 = jQuery(this).siblings(':input');
-	template2.insertAtCaret(placeholderContentText);
-});
-
-jQuery.fn.extend({
-	insertAtCaret: function(myValue){
-		return this.each(function(i) {
-			if (document.selection) {
-				//For browsers like Internet Explorer
-				this.focus();
-				sel = document.selection.createRange();
-				sel.text = myValue;
-				this.focus();
-			} else if (this.selectionStart || this.selectionStart == '0') {
-				//For browsers like Firefox and Webkit based
-				var startPos = this.selectionStart;
-				var endPos = this.selectionEnd;
-				var scrollTop = this.scrollTop;
-				this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
-				this.focus();
-				this.selectionStart = startPos + myValue.length;
-				this.selectionEnd = startPos + myValue.length;
-				this.scrollTop = scrollTop;
-			} else {
-				this.value += myValue;
-				this.focus();
-			}
-		})
-	}
-});
diff --git a/interface/web/js/select2/select2.min.js b/interface/web/js/select2/select2.min.js
new file mode 100644
index 0000000..b56419e
--- /dev/null
+++ b/interface/web/js/select2/select2.min.js
@@ -0,0 +1,23 @@
+/*
+Copyright 2014 Igor Vaynberg
+
+Version: 3.5.2 Timestamp: Sat Nov  1 14:43:36 EDT 2014
+
+This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
+General Public License version 2 (the "GPL License"). You may choose either license to govern your
+use of this software only upon the condition that you accept all of the terms of either the Apache
+License or the GPL License.
+
+You may obtain a copy of the Apache License and the GPL License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
+http://www.gnu.org/licenses/gpl-2.0.html
+
+Unless required by applicable law or agreed to in writing, software distributed under the Apache License
+or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+either express or implied. See the Apache License and the GPL License for the specific language governing
+permissions and limitations under the Apache License and the GPL License.
+*/
+!function(a){"undefined"==typeof a.fn.each2&&a.extend(a.fn,{each2:function(b){for(var c=a([0]),d=-1,e=this.length;++d<e&&(c.context=c[0]=this[d])&&b.call(c[0],d,c)!==!1;);return this}})}(jQuery),function(a,b){"use strict";function n(b){var c=a(document.createTextNode(""));b.before(c),c.before(b),c.remove()}function o(a){function b(a){return m[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function p(a,b){for(var c=0,d=b.length;d>c;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo(document.body);var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(a,b,c){var d,e,f;if(null===a||a.length<1)return[];for(d=a.split(b),e=0,f=d.length;f>e;e+=1)d[e]=c(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=h;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!g){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);g=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),g.attr("class","select2-sizer"),a(document.body).append(g)}return g.text(b.val()),g.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push("<span class='select2-match'>"),c.push(d(a.substring(e,e+f))),c.push("</span>"),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select2.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select2.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,i,j,h={x:0,y:0},k={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case k.SHIFT:case k.CTRL:case k.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="<div class='select2-measure-scrollbar'></div>",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"A","\u01fa":"A","\u01cd":"A","\u0200":"A","\u0202":"A","\u1ea0":"A","\u1eac":"A","\u1eb6":"A","\u1e00":"A","\u0104":"A","\u023a":"A","\u2c6f":"A","\ua732":"AA","\xc6":"AE","\u01fc":"AE","\u01e2":"AE","\ua734":"AO","\ua736":"AU","\ua738":"AV","\ua73a":"AV","\ua73c":"AY","\u24b7":"B","\uff22":"B","\u1e02":"B","\u1e04":"B","\u1e06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24b8":"C","\uff23":"C","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\xc7":"C","\u1e08":"C","\u0187":"C","\u023b":"C","\ua73e":"C","\u24b9":"D","\uff24":"D","\u1e0a":"D","\u010e":"D","\u1e0c":"D","\u1e10":"D","\u1e12":"D","\u1e0e":"D","\u0110":"D","\u018b":"D","\u018a":"D","\u0189":"D","\ua779":"D","\u01f1":"DZ","\u01c4":"DZ","\u01f2":"Dz","\u01c5":"Dz","\u24ba":"E","\uff25":"E","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"E","\u1eba":"E","\u011a":"E","\u0204":"E","\u0206":"E","\u1eb8":"E","\u1ec6":"E","\u0228":"E","\u1e1c":"E","\u0118":"E","\u1e18":"E","\u1e1a":"E","\u0190":"E","\u018e":"E","\u24bb":"F","\uff26":"F","\u1e1e":"F","\u0191":"F","\ua77b":"F","\u24bc":"G","\uff27":"G","\u01f4":"G","\u011c":"G","\u1e20":"G","\u011e":"G","\u0120":"G","\u01e6":"G","\u0122":"G","\u01e4":"G","\u0193":"G","\ua7a0":"G","\ua77d":"G","\ua77e":"G","\u24bd":"H","\uff28":"H","\u0124":"H","\u1e22":"H","\u1e26":"H","\u021e":"H","\u1e24":"H","\u1e28":"H","\u1e2a":"H","\u0126":"H","\u2c67":"H","\u2c75":"H","\ua78d":"H","\u24be":"I","\uff29":"I","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"I","\u1e2e":"I","\u1ec8":"I","\u01cf":"I","\u0208":"I","\u020a":"I","\u1eca":"I","\u012e":"I","\u1e2c":"I","\u0197":"I","\u24bf":"J","\uff2a":"J","\u0134":"J","\u0248":"J","\u24c0":"K","\uff2b":"K","\u1e30":"K","\u01e8":"K","\u1e32":"K","\u0136":"K","\u1e34":"K","\u0198":"K","\u2c69":"K","\ua740":"K","\ua742":"K","\ua744":"K","\ua7a2":"K","\u24c1":"L","\uff2c":"L","\u013f":"L","\u0139":"L","\u013d":"L","\u1e36":"L","\u1e38":"L","\u013b":"L","\u1e3c":"L","\u1e3a":"L","\u0141":"L","\u023d":"L","\u2c62":"L","\u2c60":"L","\ua748":"L","\ua746":"L","\ua780":"L","\u01c7":"LJ","\u01c8":"Lj","\u24c2":"M","\uff2d":"M","\u1e3e":"M","\u1e40":"M","\u1e42":"M","\u2c6e":"M","\u019c":"M","\u24c3":"N","\uff2e":"N","\u01f8":"N","\u0143":"N","\xd1":"N","\u1e44":"N","\u0147":"N","\u1e46":"N","\u0145":"N","\u1e4a":"N","\u1e48":"N","\u0220":"N","\u019d":"N","\ua790":"N","\ua7a4":"N","\u01ca":"NJ","\u01cb":"Nj","\u24c4":"O","\uff2f":"O","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"O","\u022a":"O","\u1ece":"O","\u0150":"O","\u01d1":"O","\u020c":"O","\u020e":"O","\u01a0":"O","\u1edc":"O","\u1eda":"O","\u1ee0":"O","\u1ede":"O","\u1ee2":"O","\u1ecc":"O","\u1ed8":"O","\u01ea":"O","\u01ec":"O","\xd8":"O","\u01fe":"O","\u0186":"O","\u019f":"O","\ua74a":"O","\ua74c":"O","\u01a2":"OI","\ua74e":"OO","\u0222":"OU","\u24c5":"P","\uff30":"P","\u1e54":"P","\u1e56":"P","\u01a4":"P","\u2c63":"P","\ua750":"P","\ua752":"P","\ua754":"P","\u24c6":"Q","\uff31":"Q","\ua756":"Q","\ua758":"Q","\u024a":"Q","\u24c7":"R","\uff32":"R","\u0154":"R","\u1e58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1e5a":"R","\u1e5c":"R","\u0156":"R","\u1e5e":"R","\u024c":"R","\u2c64":"R","\ua75a":"R","\ua7a6":"R","\ua782":"R","\u24c8":"S","\uff33":"S","\u1e9e":"S","\u015a":"S","\u1e64":"S","\u015c":"S","\u1e60":"S","\u0160":"S","\u1e66":"S","\u1e62":"S","\u1e68":"S","\u0218":"S","\u015e":"S","\u2c7e":"S","\ua7a8":"S","\ua784":"S","\u24c9":"T","\uff34":"T","\u1e6a":"T","\u0164":"T","\u1e6c":"T","\u021a":"T","\u0162":"T","\u1e70":"T","\u1e6e":"T","\u0166":"T","\u01ac":"T","\u01ae":"T","\u023e":"T","\ua786":"T","\ua728":"TZ","\u24ca":"U","\uff35":"U","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"U","\u01db":"U","\u01d7":"U","\u01d5":"U","\u01d9":"U","\u1ee6":"U","\u016e":"U","\u0170":"U","\u01d3":"U","\u0214":"U","\u0216":"U","\u01af":"U","\u1eea":"U","\u1ee8":"U","\u1eee":"U","\u1eec":"U","\u1ef0":"U","\u1ee4":"U","\u1e72":"U","\u0172":"U","\u1e76":"U","\u1e74":"U","\u0244":"U","\u24cb":"V","\uff36":"V","\u1e7c":"V","\u1e7e":"V","\u01b2":"V","\ua75e":"V","\u0245":"V","\ua760":"VY","\u24cc":"W","\uff37":"W","\u1e80":"W","\u1e82":"W","\u0174":"W","\u1e86":"W","\u1e84":"W","\u1e88":"W","\u2c72":"W","\u24cd":"X","\uff38":"X","\u1e8a":"X","\u1e8c":"X","\u24ce":"Y","\uff39":"Y","\u1ef2":"Y","\xdd":"Y","\u0176":"Y","\u1ef8":"Y","\u0232":"Y","\u1e8e":"Y","\u0178":"Y","\u1ef6":"Y","\u1ef4":"Y","\u01b3":"Y","\u024e":"Y","\u1efe":"Y","\u24cf":"Z","\uff3a":"Z","\u0179":"Z","\u1e90":"Z","\u017b":"Z","\u017d":"Z","\u1e92":"Z","\u1e94":"Z","\u01b5":"Z","\u0224":"Z","\u2c7f":"Z","\u2c6b":"Z","\ua762":"Z","\u24d0":"a","\uff41":"a","\u1e9a":"a","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"a","\u01fb":"a","\u01ce":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1ead":"a","\u1eb7":"a","\u1e01":"a","\u0105":"a","\u2c65":"a","\u0250":"a","\ua733":"aa","\xe6":"ae","\u01fd":"ae","\u01e3":"ae","\ua735":"ao","\ua737":"au","\ua739":"av","\ua73b":"av","\ua73d":"ay","\u24d1":"b","\uff42":"b","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24d2":"c","\uff43":"c","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\xe7":"c","\u1e09":"c","\u0188":"c","\u023c":"c","\ua73f":"c","\u2184":"c","\u24d3":"d","\uff44":"d","\u1e0b":"d","\u010f":"d","\u1e0d":"d","\u1e11":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u018c":"d","\u0256":"d","\u0257":"d","\ua77a":"d","\u01f3":"dz","\u01c6":"dz","\u24d4":"e","\uff45":"e","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"e","\u1ebb":"e","\u011b":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u1e19":"e","\u1e1b":"e","\u0247":"e","\u025b":"e","\u01dd":"e","\u24d5":"f","\uff46":"f","\u1e1f":"f","\u0192":"f","\ua77c":"f","\u24d6":"g","\uff47":"g","\u01f5":"g","\u011d":"g","\u1e21":"g","\u011f":"g","\u0121":"g","\u01e7":"g","\u0123":"g","\u01e5":"g","\u0260":"g","\ua7a1":"g","\u1d79":"g","\ua77f":"g","\u24d7":"h","\uff48":"h","\u0125":"h","\u1e23":"h","\u1e27":"h","\u021f":"h","\u1e25":"h","\u1e29":"h","\u1e2b":"h","\u1e96":"h","\u0127":"h","\u2c68":"h","\u2c76":"h","\u0265":"h","\u0195":"hv","\u24d8":"i","\uff49":"i","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"i","\u1e2f":"i","\u1ec9":"i","\u01d0":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u012f":"i","\u1e2d":"i","\u0268":"i","\u0131":"i","\u24d9":"j","\uff4a":"j","\u0135":"j","\u01f0":"j","\u0249":"j","\u24da":"k","\uff4b":"k","\u1e31":"k","\u01e9":"k","\u1e33":"k","\u0137":"k","\u1e35":"k","\u0199":"k","\u2c6a":"k","\ua741":"k","\ua743":"k","\ua745":"k","\ua7a3":"k","\u24db":"l","\uff4c":"l","\u0140":"l","\u013a":"l","\u013e":"l","\u1e37":"l","\u1e39":"l","\u013c":"l","\u1e3d":"l","\u1e3b":"l","\u017f":"l","\u0142":"l","\u019a":"l","\u026b":"l","\u2c61":"l","\ua749":"l","\ua781":"l","\ua747":"l","\u01c9":"lj","\u24dc":"m","\uff4d":"m","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0271":"m","\u026f":"m","\u24dd":"n","\uff4e":"n","\u01f9":"n","\u0144":"n","\xf1":"n","\u1e45":"n","\u0148":"n","\u1e47":"n","\u0146":"n","\u1e4b":"n","\u1e49":"n","\u019e":"n","\u0272":"n","\u0149":"n","\ua791":"n","\ua7a5":"n","\u01cc":"nj","\u24de":"o","\uff4f":"o","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"o","\u022b":"o","\u1ecf":"o","\u0151":"o","\u01d2":"o","\u020d":"o","\u020f":"o","\u01a1":"o","\u1edd":"o","\u1edb":"o","\u1ee1":"o","\u1edf":"o","\u1ee3":"o","\u1ecd":"o","\u1ed9":"o","\u01eb":"o","\u01ed":"o","\xf8":"o","\u01ff":"o","\u0254":"o","\ua74b":"o","\ua74d":"o","\u0275":"o","\u01a3":"oi","\u0223":"ou","\ua74f":"oo","\u24df":"p","\uff50":"p","\u1e55":"p","\u1e57":"p","\u01a5":"p","\u1d7d":"p","\ua751":"p","\ua753":"p","\ua755":"p","\u24e0":"q","\uff51":"q","\u024b":"q","\ua757":"q","\ua759":"q","\u24e1":"r","\uff52":"r","\u0155":"r","\u1e59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1e5b":"r","\u1e5d":"r","\u0157":"r","\u1e5f":"r","\u024d":"r","\u027d":"r","\ua75b":"r","\ua7a7":"r","\ua783":"r","\u24e2":"s","\uff53":"s","\xdf":"s","\u015b":"s","\u1e65":"s","\u015d":"s","\u1e61":"s","\u0161":"s","\u1e67":"s","\u1e63":"s","\u1e69":"s","\u0219":"s","\u015f":"s","\u023f":"s","\ua7a9":"s","\ua785":"s","\u1e9b":"s","\u24e3":"t","\uff54":"t","\u1e6b":"t","\u1e97":"t","\u0165":"t","\u1e6d":"t","\u021b":"t","\u0163":"t","\u1e71":"t","\u1e6f":"t","\u0167":"t","\u01ad":"t","\u0288":"t","\u2c66":"t","\ua787":"t","\ua729":"tz","\u24e4":"u","\uff55":"u","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"u","\u01dc":"u","\u01d8":"u","\u01d6":"u","\u01da":"u","\u1ee7":"u","\u016f":"u","\u0171":"u","\u01d4":"u","\u0215":"u","\u0217":"u","\u01b0":"u","\u1eeb":"u","\u1ee9":"u","\u1eef":"u","\u1eed":"u","\u1ef1":"u","\u1ee5":"u","\u1e73":"u","\u0173":"u","\u1e77":"u","\u1e75":"u","\u0289":"u","\u24e5":"v","\uff56":"v","\u1e7d":"v","\u1e7f":"v","\u028b":"v","\ua75f":"v","\u028c":"v","\ua761":"vy","\u24e6":"w","\uff57":"w","\u1e81":"w","\u1e83":"w","\u0175":"w","\u1e87":"w","\u1e85":"w","\u1e98":"w","\u1e89":"w","\u2c73":"w","\u24e7":"x","\uff58":"x","\u1e8b":"x","\u1e8d":"x","\u24e8":"y","\uff59":"y","\u1ef3":"y","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"y","\u1ef7":"y","\u1e99":"y","\u1ef5":"y","\u01b4":"y","\u024f":"y","\u1eff":"y","\u24e9":"z","\uff5a":"z","\u017a":"z","\u1e91":"z","\u017c":"z","\u017e":"z","\u1e93":"z","\u1e95":"z","\u01b6":"z","\u0225":"z","\u0240":"z","\u2c6c":"z","\ua763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038a":"\u0399","\u03aa":"\u0399","\u038c":"\u039f","\u038e":"\u03a5","\u03ab":"\u03a5","\u038f":"\u03a9","\u03ac":"\u03b1","\u03ad":"\u03b5","\u03ae":"\u03b7","\u03af":"\u03b9","\u03ca":"\u03b9","\u0390":"\u03b9","\u03cc":"\u03bf","\u03cd":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u03c9":"\u03c9","\u03c2":"\u03c3"};i=a(document),f=function(){var a=1;return function(){return a++}}(),c=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,g=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&c.element.data("select2").destroy(),this.container=this.createContainer(),this.liveRegion=a(".select2-hidden-accessible"),0==this.liveRegion.length&&(this.liveRegion=a("<span>",{role:"status","aria-live":"polite"}).addClass("select2-hidden-accessible").appendTo(document.body)),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+f()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a(document.body),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container).on("click.select2",A),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select2",this),this.dropdown.on("click",A),this.results=d=this.container.find(g),this.search=e=this.container.find("input.select2-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",g,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",g,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",g,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",g,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",g,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",g,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.nextSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),j=j||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select2"),d=this;this.close(),a.length&&a[0].detachEvent&&d._sync&&a.each(function(){d._sync&&this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.show().removeData("select2").off(".select2").prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show()),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,g,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),c=a.extend({},{populateResults:function(d,e,g){var h,j=this.opts.id,k=this.liveRegion;h=function(d,e,l){var m,n,o,p,q,r,s,t,u,v;d=c.sortResults(d,e,g);var w=[];for(m=0,n=d.length;n>m;m+=1)o=d[m],q=o.disabled===!0,p=!q&&j(o)!==b,r=o.children&&o.children.length>0,s=a("<li></li>"),s.addClass("select2-results-dept-"+l),s.addClass("select2-result"),s.addClass(p?"select2-result-selectable":"select2-result-unselectable"),q&&s.addClass("select2-disabled"),r&&s.addClass("select2-result-with-children"),s.addClass(i.opts.formatResultCssClass(o)),s.attr("role","presentation"),t=a(document.createElement("div")),t.addClass("select2-result-label"),t.attr("id","select2-result-label-"+f()),t.attr("role","option"),v=c.formatResult(o,t,g,i.opts.escapeMarkup),v!==b&&(t.html(v),s.append(t)),r&&(u=a("<ul></ul>"),u.addClass("select2-result-sub"),h(o.children,u,l+1),s.append(u)),s.data("select2-data",o),w.push(s[0]);e.append(w),k.text(c.formatMatches(d.length))},h(e,d,0)}},a.fn.select2.defaults,c),"function"!=typeof c.id&&(g=c.id,c.id=function(a){return a[g]}),a.isArray(c.element.data("select2Tags"))){if("tags"in c)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+c.element.attr("id");c.tags=c.element.data("select2Tags")}if(e?(c.query=this.bind(function(a){var f,g,h,c={results:[],more:!1},e=a.term;h=function(b,c){var d;b.is("option")?a.matcher(e,b.text(),b)&&c.push(i.optionToData(b)):b.is("optgroup")&&(d=i.optionToData(b),b.children().each2(function(a,b){h(b,d.children)}),d.children.length>0&&c.push(d))},f=d.children(),this.getPlaceholder()!==b&&f.length>0&&(g=this.getPlaceholderOption(),g&&(f=f.not(g))),f.each2(function(a,b){h(b,c.results)}),a.callback(c)}),c.id=function(a){return a.id}):"query"in c||("ajax"in c?(h=c.element.data("ajax-url"),h&&h.length>0&&(c.ajax.url=h),c.query=G.call(c.element,c.ajax)):"data"in c?c.query=H(c.data):"tags"in c&&(c.query=I(c.tags),c.createSearchChoice===b&&(c.createSearchChoice=function(b){return{id:a.trim(b),text:a.trim(b)}}),c.initSelection===b&&(c.initSelection=function(b,d){var e=[];a(s(b.val(),c.separator,c.transformVal)).each(function(){var b={id:this,text:this},d=c.tags;a.isFunction(d)&&(d=d()),a(d).each(function(){return r(this.id,b.id)?(b=this,!1):void 0}),e.push(b)}),d(e)}))),"function"!=typeof c.query)throw"query function not defined for Select2 "+c.element.attr("id");if("top"===c.createSearchChoicePosition)c.createSearchChoicePosition=function(a,b){a.unshift(b)};else if("bottom"===c.createSearchChoicePosition)c.createSearchChoicePosition=function(a,b){a.push(b)};else if("function"!=typeof c.createSearchChoicePosition)throw"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";return c},monitorSource:function(){var d,c=this.opts.element,e=this;c.on("change.select2",this.bind(function(){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),this._sync=this.bind(function(){var a=c.prop("disabled");a===b&&(a=!1),this.enable(!a);var d=c.prop("readonly");d===b&&(d=!1),this.readonly(d),this.container&&(D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(K(this.opts.containerCssClass,this.opts.element))),this.dropdown&&(D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(this.opts.dropdownCssClass,this.opts.element)))}),c.length&&c[0].attachEvent&&c.each(function(){this.attachEvent("onpropertychange",e._sync)}),d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,d!==b&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new d(function(b){a.each(b,e._sync)}),this.propertyObserver.observe(c.get(0),{attributes:!0,subtree:!1}))},triggerSelect:function(b){var c=a.Event("select2-selecting",{val:this.id(b),object:b,choice:b});return this.opts.element.trigger(c),!c.isDefaultPrevented()},triggerChange:function(b){b=b||{},b=a.extend({},b,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(b),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},isInterfaceEnabled:function(){return this.enabledInterface===!0},enableInterface:function(){var a=this._enabled&&!this._readonly,b=!a;return a===this.enabledInterface?!1:(this.container.toggleClass("select2-container-disabled",b),this.close(),this.enabledInterface=a,!0)},enable:function(a){a===b&&(a=!0),this._enabled!==a&&(this._enabled=a,this.opts.element.prop("disabled",!a),this.enableInterface())},disable:function(){this.enable(!1)},readonly:function(a){a===b&&(a=!1),this._readonly!==a&&(this._readonly=a,this.opts.element.prop("readonly",a),this.enableInterface())},opened:function(){return this.container?this.container.hasClass("select2-dropdown-open"):!1},positionDropdown:function(){var v,w,x,y,z,b=this.dropdown,c=this.container,d=c.offset(),e=c.outerHeight(!1),f=c.outerWidth(!1),g=b.outerHeight(!1),h=a(window),i=h.width(),k=h.height(),l=h.scrollLeft()+i,m=h.scrollTop()+k,n=d.top+e,o=d.left,p=m>=n+g,q=d.top-g>=h.scrollTop(),r=b.outerWidth(!1),s=function(){return l>=o+r},t=function(){return d.left+l+c.outerWidth(!1)>r},u=b.hasClass("select2-drop-above");u?(w=!0,!q&&p&&(x=!0,w=!1)):(w=!1,!p&&q&&(x=!0,w=!0)),x&&(b.hide(),d=this.container.offset(),e=this.container.outerHeight(!1),f=this.container.outerWidth(!1),g=b.outerHeight(!1),l=h.scrollLeft()+i,m=h.scrollTop()+k,n=d.top+e,o=d.left,r=b.outerWidth(!1),b.show(),this.focusSearch()),this.opts.dropdownAutoWidth?(z=a(".select2-results",b)[0],b.addClass("select2-drop-auto-width"),b.css("width",""),r=b.outerWidth(!1)+(z.scrollHeight===z.clientHeight?0:j.width),r>f?f=r:r=f,g=b.outerHeight(!1)):this.container.removeClass("select2-drop-auto-width"),"static"!==this.body.css("position")&&(v=this.body.offset(),n-=v.top,o-=v.left),!s()&&t()&&(o=d.left+this.container.outerWidth(!1)-r),y={left:o,width:f},w?(y.top=d.top-g,y.bottom="auto",this.container.addClass("select2-drop-above"),b.addClass("select2-drop-above")):(y.top=n,y.bottom="auto",this.container.removeClass("select2-drop-above"),b.removeClass("select2-drop-above")),y=a.extend(y,K(this.opts.dropdownCss,this.opts.element)),b.css(y)},shouldOpen:function(){var b;return this.opened()?!1:this._enabled===!1||this._readonly===!0?!1:(b=a.Event("select2-opening"),this.opts.element.trigger(b),!b.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(this.opening(),i.on("mousemove.select2Event",function(a){h.x=a.pageX,h.y=a.pageY}),!0):!1},opening:function(){var f,b=this.containerEventName,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.clearDropdownAlignmentPreference(),this.dropdown[0]!==this.body.children().last()[0]&&this.dropdown.detach().appendTo(this.body),f=a("#select2-drop-mask"),0===f.length&&(f=a(document.createElement("div")),f.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),f.hide(),f.appendTo(this.body),f.on("mousedown touchstart click",function(b){n(f);var d,c=a("#select2-drop");c.length>0&&(d=c.data("select2"),d.opts.selectOnBlur&&d.selectHighlighted({noFocus:!0}),d.close(),b.preventDefault(),b.stopPropagation())})),this.dropdown.prev()[0]!==f[0]&&this.dropdown.before(f),a("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),f.show(),this.positionDropdown(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active");var g=this;this.container.parents().add(window).each(function(){a(this).on(d+" "+c+" "+e,function(){g.opened()&&g.positionDropdown()})})},close:function(){if(this.opened()){var b=this.containerEventName,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.parents().add(window).each(function(){a(this).off(c).off(d).off(e)}),this.clearDropdownAlignmentPreference(),a("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"),this.results.empty(),i.off("mousemove.select2Event"),this.clearSearch(),this.search.removeClass("select2-active"),this.opts.element.trigger(a.Event("select2-close"))}},externalSearch:function(a){this.open(),this.search.val(a),this.updateResults(!1)},clearSearch:function(){},getMaximumSelectionSize:function(){return K(this.opts.maximumSelectionSize,this.opts.element)},ensureHighlightVisible:function(){var c,d,e,f,g,h,i,j,b=this.results;if(d=this.highlight(),!(0>d)){if(0==d)return b.scrollTop(0),void 0;c=this.findHighlightableChoices().find(".select2-result-label"),e=a(c[d]),j=(e.offset()||{}).top||0,f=j+e.outerHeight(!0),d===c.length-1&&(i=b.find("li.select2-more-results"),i.length>0&&(f=i.offset().top+i.outerHeight(!0))),g=b.offset().top+b.outerHeight(!1),f>g&&b.scrollTop(b.scrollTop()+(f-g)),h=j-b.offset().top,0>h&&"none"!=e.css("display")&&b.scrollTop(b.scrollTop()+h)}},findHighlightableChoices:function(){return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)")},moveHighlight:function(b){for(var c=this.findHighlightableChoices(),d=this.highlight();d>-1&&d<c.length;){d+=b;
+var e=a(c[d]);if(e.hasClass("select2-result-selectable")&&!e.hasClass("select2-disabled")&&!e.hasClass("select2-selected")){this.highlight(d);break}}},highlight:function(b){var d,e,c=this.findHighlightableChoices();return 0===arguments.length?p(c.filter(".select2-highlighted")[0],c.get()):(b>=c.length&&(b=c.length-1),0>b&&(b=0),this.removeHighlight(),d=a(c[b]),d.addClass("select2-highlighted"),this.search.attr("aria-activedescendant",d.find(".select2-result-label").attr("id")),this.ensureHighlightVisible(),this.liveRegion.text(d.text()),e=d.data("select2-data"),e&&this.opts.element.trigger({type:"select2-highlight",val:this.id(e),choice:e}),void 0)},removeHighlight:function(){this.results.find(".select2-highlighted").removeClass("select2-highlighted")},touchMoved:function(){this._touchMoved=!0},clearTouchMoved:function(){this._touchMoved=!1},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(b){var c=a(b.target).closest(".select2-result-selectable");if(c.length>0&&!c.is(".select2-highlighted")){var d=this.findHighlightableChoices();this.highlight(d.index(c))}else 0==c.length&&this.removeHighlight()},loadMoreIfNeeded:function(){var c,a=this.results,b=a.find("li.select2-more-results"),d=this.resultsPage+1,e=this,f=this.search.val(),g=this.context;0!==b.length&&(c=b.offset().top-a.offset().top-a.height(),c<=this.opts.loadMorePadding&&(b.addClass("select2-active"),this.opts.query({element:this.opts.element,term:f,page:d,context:g,matcher:this.opts.matcher,callback:this.bind(function(c){e.opened()&&(e.opts.populateResults.call(this,a,c.results,{term:f,page:d,context:g}),e.postprocessResults(c,!1,!1),c.more===!0?(b.detach().appendTo(a).html(e.opts.escapeMarkup(K(e.opts.formatLoadMore,e.opts.element,d+1))),window.setTimeout(function(){e.loadMoreIfNeeded()},10)):b.remove(),e.positionDropdown(),e.resultsPage=d,e.context=c.context,this.opts.element.trigger({type:"select2-loaded",items:c}))})})))},tokenize:function(){},updateResults:function(c){function m(){d.removeClass("select2-active"),h.positionDropdown(),e.find(".select2-no-results,.select2-selection-limit,.select2-searching").length?h.liveRegion.text(e.text()):h.liveRegion.text(h.opts.formatMatches(e.find('.select2-result-selectable:not(".select2-selected")').length))}function n(a){e.html(a),m()}var g,i,l,d=this.search,e=this.results,f=this.opts,h=this,j=d.val(),k=a.data(this.container,"select2-last-term");if((c===!0||!k||!r(j,k))&&(a.data(this.container,"select2-last-term",j),c===!0||this.showSearchInput!==!1&&this.opened())){l=++this.queryCount;var o=this.getMaximumSelectionSize();if(o>=1&&(g=this.data(),a.isArray(g)&&g.length>=o&&J(f.formatSelectionTooBig,"formatSelectionTooBig")))return n("<li class='select2-selection-limit'>"+K(f.formatSelectionTooBig,f.element,o)+"</li>"),void 0;if(d.val().length<f.minimumInputLength)return J(f.formatInputTooShort,"formatInputTooShort")?n("<li class='select2-no-results'>"+K(f.formatInputTooShort,f.element,d.val(),f.minimumInputLength)+"</li>"):n(""),c&&this.showSearch&&this.showSearch(!0),void 0;if(f.maximumInputLength&&d.val().length>f.maximumInputLength)return J(f.formatInputTooLong,"formatInputTooLong")?n("<li class='select2-no-results'>"+K(f.formatInputTooLong,f.element,d.val(),f.maximumInputLength)+"</li>"):n(""),void 0;f.formatSearching&&0===this.findHighlightableChoices().length&&n("<li class='select2-searching'>"+K(f.formatSearching,f.element)+"</li>"),d.addClass("select2-active"),this.removeHighlight(),i=this.tokenize(),i!=b&&null!=i&&d.val(i),this.resultsPage=1,f.query({element:f.element,term:d.val(),page:this.resultsPage,context:null,matcher:f.matcher,callback:this.bind(function(g){var i;if(l==this.queryCount){if(!this.opened())return this.search.removeClass("select2-active"),void 0;if(g.hasError!==b&&J(f.formatAjaxError,"formatAjaxError"))return n("<li class='select2-ajax-error'>"+K(f.formatAjaxError,f.element,g.jqXHR,g.textStatus,g.errorThrown)+"</li>"),void 0;if(this.context=g.context===b?null:g.context,this.opts.createSearchChoice&&""!==d.val()&&(i=this.opts.createSearchChoice.call(h,d.val(),g.results),i!==b&&null!==i&&h.id(i)!==b&&null!==h.id(i)&&0===a(g.results).filter(function(){return r(h.id(this),h.id(i))}).length&&this.opts.createSearchChoicePosition(g.results,i)),0===g.results.length&&J(f.formatNoMatches,"formatNoMatches"))return n("<li class='select2-no-results'>"+K(f.formatNoMatches,f.element,d.val())+"</li>"),void 0;e.empty(),h.opts.populateResults.call(this,e,g.results,{term:d.val(),page:this.resultsPage,context:null}),g.more===!0&&J(f.formatLoadMore,"formatLoadMore")&&(e.append("<li class='select2-more-results'>"+f.escapeMarkup(K(f.formatLoadMore,f.element,this.resultsPage))+"</li>"),window.setTimeout(function(){h.loadMoreIfNeeded()},10)),this.postprocessResults(g,c),m(),this.opts.element.trigger({type:"select2-loaded",items:g})}})})}},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){y(this.search)},selectHighlighted:function(a){if(this._touchMoved)return this.clearTouchMoved(),void 0;var b=this.highlight(),c=this.results.find(".select2-highlighted"),d=c.closest(".select2-result").data("select2-data");d?(this.highlight(b),this.onSelect(d,a)):a&&a.noFocus&&this.close()},getPlaceholder:function(){var a;return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder||((a=this.getPlaceholderOption())!==b?a.text():b)},getPlaceholderOption:function(){if(this.select){var c=this.select.children("option").first();if(this.opts.placeholderOption!==b)return"first"===this.opts.placeholderOption&&c||"function"==typeof this.opts.placeholderOption&&this.opts.placeholderOption(this.select);if(""===a.trim(c.text())&&""===c.val())return c}},initContainerWidth:function(){function c(){var c,d,e,f,g,h;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){if(c=this.opts.element.attr("style"),c!==b)for(d=c.split(";"),f=0,g=d.length;g>f;f+=1)if(h=d[f].replace(/\s/g,""),e=h.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i),null!==e&&e.length>=1)return e[1];return"resolve"===this.opts.width?(c=this.opts.element.css("width"),c.indexOf("%")>0?c:0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px"):null}return a.isFunction(this.opts.width)?this.opts.width():this.opts.width}var d=c.call(this);null!==d&&this.container.css("width",d)}}),d=O(c,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>","   <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>","   <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>","</a>","<label for='' class='select2-offscreen'></label>","<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />","<div class='select2-drop select2-display-none'>","   <div class='select2-search'>","       <label for='' class='select2-offscreen'></label>","       <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'","       aria-autocomplete='list' />","   </div>","   <ul class='select2-results' role='listbox'>","   </ul>","</div>"].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var c,d,e;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),c=this.search.get(0),c.createTextRange?(d=c.createTextRange(),d.collapse(!1),d.select()):c.setSelectionRange&&(e=this.search.val().length,c.setSelectionRange(e,e))),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,g,c=this.container,d=this.dropdown,e=f();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=c.find(".select2-choice"),this.focusser=c.find(".select2-focusser"),b.find(".select2-chosen").attr("id","select2-chosen-"+e),this.focusser.attr("aria-labelledby","select2-chosen-"+e),this.results.attr("id","select2-results-"+e),this.search.attr("aria-owns","select2-results-"+e),this.focusser.attr("id","s2id_autogen"+e),g=a("label[for='"+this.opts.element.attr("id")+"']"),this.opts.element.focus(this.bind(function(){this.focus()})),this.focusser.prev().text(g.text()).attr("for",this.focusser.attr("id"));var h=this.opts.element.attr("title");this.opts.element.attr("title",h||g.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===k.PAGE_UP||a.which===k.PAGE_DOWN)return A(a),void 0;switch(a.which){case k.UP:case k.DOWN:return this.moveHighlight(a.which===k.UP?-1:1),A(a),void 0;case k.ENTER:return this.selectHighlighted(),A(a),void 0;case k.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case k.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==k.TAB&&!k.isControl(a)&&!k.isFunctionKey(a)&&a.which!==k.ESC){if(this.opts.openOnEnter===!1&&a.which===k.ENTER)return A(a),void 0;if(a.which==k.DOWN||a.which==k.UP||a.which==k.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==k.DELETE||a.which==k.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection&&this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),d.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.hide(),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select2-data");if(c){var d=a.Event("select2-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select2-chosen").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.nextSearchTerm=c.opts.nextSearchTerm(a,c.search.val()))})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select2-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select2-chosen");this.selection.data("select2-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find("option").filter(function(){return this.selected}).each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(!a&&0!==a)return this.clear(c),void 0;if(this.opts.initSelection===b)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a){var c,d=!1;return 0===arguments.length?(c=this.selection.data("select2-data"),c==b&&(c=null),c):(arguments.length>1&&(d=arguments[1]),a?(c=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),d&&this.triggerChange({added:a,removed:c})):this.clear(d),void 0)}}),e=O(c,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html(["<ul class='select2-choices'>","  <li class='select2-search-field'>","    <label for='' class='select2-offscreen'></label>","    <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>","  </li>","</ul>","<div class='select2-drop select2-drop-multi select2-display-none'>","   <ul class='select2-results'>","   </ul>","</div>"].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator,b.transformVal),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c<e.length;c++)for(var g=e[c],h=0;h<f.length;h++){var i=f[h];if(r(g,b.id(i))){a.push(i),f.splice(h,1);break}}d(a)}:a.noop})}),b},selectChoice:function(a){var b=this.container.find(".select2-search-choice-focus");b.length&&a&&a[0]==b[0]||(b.length&&this.opts.element.trigger("choice-deselected",b),b.removeClass("select2-search-choice-focus"),a&&a.length&&(this.close(),a.addClass("select2-search-choice-focus"),this.opts.element.trigger("choice-selected",a)))},destroy:function(){a("label[for='"+this.search.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"searchContainer","selection")},initContainer:function(){var c,b=".select2-choices";this.searchContainer=this.container.find(".select2-search-field"),this.selection=c=this.container.find(b);var d=this;this.selection.on("click",".select2-container:not(.select2-container-disabled) .select2-search-choice:not(.select2-locked)",function(){d.search[0].focus(),d.selectChoice(a(this))}),this.search.attr("id","s2id_autogen"+f()),this.search.prev().text(a("label[for='"+this.opts.element.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.opts.element.focus(this.bind(function(){this.focus()})),this.search.on("input paste",this.bind(function(){this.search.attr("placeholder")&&0==this.search.val().length||this.isInterfaceEnabled()&&(this.opened()||this.open())})),this.search.attr("tabindex",this.elementTabIndex),this.keydowns=0,this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){++this.keydowns;var b=c.find(".select2-search-choice-focus"),d=b.prev(".select2-search-choice:not(.select2-locked)"),e=b.next(".select2-search-choice:not(.select2-locked)"),f=z(this.search);if(b.length&&(a.which==k.LEFT||a.which==k.RIGHT||a.which==k.BACKSPACE||a.which==k.DELETE||a.which==k.ENTER)){var g=b;return a.which==k.LEFT&&d.length?g=d:a.which==k.RIGHT?g=e.length?e:null:a.which===k.BACKSPACE?this.unselect(b.first())&&(this.search.width(10),g=d.length?d:e):a.which==k.DELETE?this.unselect(b.first())&&(this.search.width(10),g=e.length?e:null):a.which==k.ENTER&&(g=null),this.selectChoice(g),A(a),g&&g.length||this.open(),void 0}if((a.which===k.BACKSPACE&&1==this.keydowns||a.which==k.LEFT)&&0==f.offset&&!f.length)return this.selectChoice(c.find(".select2-search-choice:not(.select2-locked)").last()),A(a),void 0;if(this.selectChoice(null),this.opened())switch(a.which){case k.UP:case k.DOWN:return this.moveHighlight(a.which===k.UP?-1:1),A(a),void 0;case k.ENTER:return this.selectHighlighted(),A(a),void 0;case k.TAB:return this.selectHighlighted({noFocus:!0}),this.close(),void 0;case k.ESC:return this.cancel(a),A(a),void 0}if(a.which!==k.TAB&&!k.isControl(a)&&!k.isFunctionKey(a)&&a.which!==k.BACKSPACE&&a.which!==k.ESC){if(a.which===k.ENTER){if(this.opts.openOnEnter===!1)return;if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return}this.open(),(a.which===k.PAGE_UP||a.which===k.PAGE_DOWN)&&A(a),a.which===k.ENTER&&A(a)}}})),this.search.on("keyup",this.bind(function(){this.keydowns=0,this.resizeSearch()})),this.search.on("blur",this.bind(function(b){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.selectChoice(null),this.opened()||this.clearSearch(),b.stopImmediatePropagation(),this.opts.element.trigger(a.Event("select2-blur"))})),this.container.on("click",b,this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").length>0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.hide(),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){p(e.id(this),c)<0&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select2-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,c){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),c&&c.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,k,d=!c.locked,e=a("<li class='select2-search-choice'>    <div></div>    <a href='#' class='select2-search-choice-close' tabindex='-1'></a></li>"),f=a("<li class='select2-search-choice select2-locked'><div></div></li>"),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),j!=b&&g.find("div").replaceWith(a("<div></div>").html(j)),k=this.opts.formatSelectionCssClass(c,g.find("div")),k!=b&&g.addClass(k),d&&g.find(".select2-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select2-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select2-search-choice";if(d=b.data("select2-data")){var f=a.Event("select2-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select2-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));p(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&this.opts.closeOnSelect===!0&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select2-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("<li class='select2-no-results'>"+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"</li>")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator,this.opts.transformVal))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){p(this,c)<0&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c<b.length;c++)for(var d=0;d<a.length;d++)r(this.opts.id(b[c]),this.opts.id(a[d]))&&(b.splice(c,1),c>0&&c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),void 0;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a.map(b,f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(f.buildChangeDetails(e,f.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select2=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select2["class"].multi:new window.Select2["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select2"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(this.text(a),c.term,e,d),e.join("")},transformVal:function(b){return a.trim(b)},formatSelection:function(a,c,d){return a?d(this.text(a)):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},text:function(b){return b&&this.data&&this.data.text?a.isFunction(this.data.text)?this.data.text(b):b[this.data.text]:b.text
+},matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select2.locales=[],a.fn.select2.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."},formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select2.defaults,a.fn.select2.locales.en),a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":c,single:d,multi:e}}}}(jQuery);
\ No newline at end of file
diff --git a/interface/web/js/select2/select2_locale_ar.js b/interface/web/js/select2/select2_locale_ar.js
new file mode 100644
index 0000000..e991b72
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ar.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Arabic translation.
+ *
+ * Author: Adel KEDJOUR <adel@kedjour.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ar'] = {
+        formatNoMatches: function () { return "لم يتم العثور على مطابقات"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; },
+        formatSelectionTooBig: function (limit) { if (limit == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return limit == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + limit + " إختيارات فقط"; },
+        formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; },
+        formatSearching: function () { return "البحث…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ar']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_az.js b/interface/web/js/select2/select2_locale_az.js
new file mode 100644
index 0000000..19fd95b
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_az.js
@@ -0,0 +1,20 @@
+/**
+ * Select2 Azerbaijani translation.
+ *
+ * Author: Farhad Safarov <farhad.safarov@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+     $.fn.select2.locales['az'] = {
+        formatMatches: function (matches) { return matches + " nəticə mövcuddur, hərəkət etdirmək üçün yuxarı və aşağı düymələrindən istifadə edin."; },
+        formatNoMatches: function () { return "Nəticə tapılmadı"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return n + " simvol daxil edin"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return n + " simvol silin"; },
+        formatSelectionTooBig: function (limit) { return "Sadəcə " + limit + " element seçə bilərsiniz"; },
+        formatLoadMore: function (pageNumber) { return "Daha çox nəticə yüklənir…"; },
+        formatSearching: function () { return "Axtarılır…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['az']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_bg.js b/interface/web/js/select2/select2_locale_bg.js
new file mode 100644
index 0000000..3283d0a
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_bg.js
@@ -0,0 +1,20 @@
+/**
+ * Select2 Bulgarian translation.
+ * 
+ * @author  Lubomir Vikev <lubomirvikev@gmail.com>
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['bg'] = {
+        formatNoMatches: function () { return "Няма намерени съвпадения"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n > 1 ? "а" : ""); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n > 1 ? "а" : ""); },
+        formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit > 1 ? " избора" : " избор"); },
+        formatLoadMore: function (pageNumber) { return "Зареждат се още…"; },
+        formatSearching: function () { return "Търсене…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['bg']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_ca.js b/interface/web/js/select2/select2_locale_ca.js
new file mode 100644
index 0000000..dbea39e
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ca.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Catalan translation.
+ * 
+ * Author: David Planella <david.planella@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ca'] = {
+        formatNoMatches: function () { return "No s'ha trobat cap coincidència"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; },
+        formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats…"; },
+        formatSearching: function () { return "S'està cercant…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ca']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_cs.js b/interface/web/js/select2/select2_locale_cs.js
new file mode 100644
index 0000000..ef12185
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_cs.js
@@ -0,0 +1,51 @@
+/**
+ * Select2 Czech translation.
+ * 
+ * Author: Michal Marek <ahoj@michal-marek.cz>
+ * Author - sklonovani: David Vallner <david@vallner.net>
+ */
+(function ($) {
+    "use strict";
+    // use text for the numbers 2 through 4
+    var smallNumbers = {
+        2: function(masc) { return (masc ? "dva" : "dvě"); },
+        3: function() { return "tři"; },
+        4: function() { return "čtyři"; }
+    }
+    $.fn.select2.locales['cs'] = {
+        formatNoMatches: function () { return "Nenalezeny žádné položky"; },
+        formatInputTooShort: function (input, min) {
+            var n = min - input.length;
+            if (n == 1) {
+                return "Prosím zadejte ještě jeden znak";
+            } else if (n <= 4) {
+                return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky";
+            } else {
+                return "Prosím zadejte ještě dalších "+n+" znaků";
+            }
+        },
+        formatInputTooLong: function (input, max) {
+            var n = input.length - max;
+            if (n == 1) {
+                return "Prosím zadejte o jeden znak méně";
+            } else if (n <= 4) {
+                return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně";
+            } else {
+                return "Prosím zadejte o "+n+" znaků méně";
+            }
+        },
+        formatSelectionTooBig: function (limit) {
+            if (limit == 1) {
+                return "Můžete zvolit jen jednu položku";
+            } else if (limit <= 4) {
+                return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky";
+            } else {
+                return "Můžete zvolit maximálně "+limit+" položek";
+            }
+        },
+        formatLoadMore: function (pageNumber) { return "Načítají se další výsledky…"; },
+        formatSearching: function () { return "Vyhledávání…"; }
+    };
+
+	$.extend($.fn.select2.defaults, $.fn.select2.locales['cs']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_da.js b/interface/web/js/select2/select2_locale_da.js
new file mode 100644
index 0000000..702238b
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_da.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Danish translation.
+ *
+ * Author: Anders Jenbo <anders@jenbo.dk>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['da'] = {
+        formatNoMatches: function () { return "Ingen resultater fundet"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; },
+        formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); },
+        formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; },
+        formatSearching: function () { return "Søger…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['da']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_de.js b/interface/web/js/select2/select2_locale_de.js
new file mode 100644
index 0000000..e275417
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_de.js
@@ -0,0 +1,18 @@
+/**
+ * Select2 German translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['de'] = {
+        formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; },
+        formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; },
+        formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse…"; },
+        formatSearching: function () { return "Suche…"; },
+        formatMatches: function (matches) { return matches + " Ergebnis " + (matches > 1 ? "se" : "") + " verfügbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden."; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['de']);
+})(jQuery);
\ No newline at end of file
diff --git a/interface/web/js/select2/select2_locale_el.js b/interface/web/js/select2/select2_locale_el.js
new file mode 100644
index 0000000..d17459e
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_el.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Greek translation.
+ * 
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['el'] = {
+        formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n > 1 ? "υς" : "") + " χαρακτήρ" + (n > 1 ? "ες" : "α"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n > 1 ? "ες" : "α"); },
+        formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit > 1 ? "α" : "ο"); },
+        formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων…"; },
+        formatSearching: function () { return "Αναζήτηση…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['el']);
+})(jQuery);
\ No newline at end of file
diff --git a/interface/web/js/select2/select2_locale_es.js b/interface/web/js/select2/select2_locale_es.js
new file mode 100644
index 0000000..92a1986
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_es.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Spanish translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['es'] = {
+    	formatMatches: function (matches) { if (matches === 1) { return "Un resultado disponible, presione enter para seleccionarlo."; } return matches + " resultados disponibles, use las teclas de dirección para navegar."; },
+        formatNoMatches: function () { return "No se encontraron resultados"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "ácter" : "acteres"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "ácter" : "acteres"); },
+        formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "Cargando más resultados…"; },
+        formatSearching: function () { return "Buscando…"; },
+        formatAjaxError: function() { return "La carga falló"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['es']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_et.js b/interface/web/js/select2/select2_locale_et.js
new file mode 100644
index 0000000..4d69f55
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_et.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Estonian translation.
+ *
+ * Author: Kuldar Kalvik <kuldar@kalvik.ee>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['et'] = {
+        formatNoMatches: function () { return "Tulemused puuduvad"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; },
+        formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; },
+        formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; },
+        formatSearching: function () { return "Otsin.."; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['et']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_eu.js b/interface/web/js/select2/select2_locale_eu.js
new file mode 100644
index 0000000..67ae8d0
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_eu.js
@@ -0,0 +1,45 @@
+/**
+ * Select2 Basque translation.
+ *
+ * Author: Julen Ruiz Aizpuru <julenx at gmail dot com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['eu'] = {
+        formatNoMatches: function () {
+          return "Ez da bat datorrenik aurkitu";
+        },
+        formatInputTooShort: function (input, min) {
+          var n = min - input.length;
+          if (n === 1) {
+            return "Idatzi karaktere bat gehiago";
+          } else {
+            return "Idatzi " + n + " karaktere gehiago";
+          }
+        },
+        formatInputTooLong: function (input, max) {
+          var n = input.length - max;
+          if (n === 1) {
+            return "Idatzi karaktere bat gutxiago";
+          } else {
+            return "Idatzi " + n + " karaktere gutxiago";
+          }
+        },
+        formatSelectionTooBig: function (limit) {
+          if (limit === 1 ) {
+            return "Elementu bakarra hauta dezakezu";
+          } else {
+            return limit + " elementu hauta ditzakezu soilik";
+          }
+        },
+        formatLoadMore: function (pageNumber) {
+          return "Emaitza gehiago kargatzen…";
+        },
+        formatSearching: function () {
+          return "Bilatzen…";
+        }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['eu']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_fa.js b/interface/web/js/select2/select2_locale_fa.js
new file mode 100644
index 0000000..b3ffd8b
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_fa.js
@@ -0,0 +1,21 @@
+/**
+ * Select2 Persian translation.
+ * 
+ * Author: Ali Choopan <choopan@arsh.co>
+ * Author: Ebrahim Byagowi <ebrahim@gnu.org>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['fa'] = {
+        formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; },
+        formatNoMatches: function () { return "نتیجه‌ای یافت نشد."; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; },
+        formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; },
+        formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; },
+        formatSearching: function () { return "در حال جستجو…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['fa']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_fi.js b/interface/web/js/select2/select2_locale_fi.js
new file mode 100644
index 0000000..6487fbd
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_fi.js
@@ -0,0 +1,30 @@
+/**
+ * Select2 Finnish translation
+ */
+(function ($) {
+    "use strict";
+    $.fn.select2.locales['fi'] = {
+        formatNoMatches: function () {
+            return "Ei tuloksia";
+        },
+        formatInputTooShort: function (input, min) {
+            var n = min - input.length;
+            return "Ole hyvä ja anna " + n + " merkkiä lisää";
+        },
+        formatInputTooLong: function (input, max) {
+            var n = input.length - max;
+            return "Ole hyvä ja anna " + n + " merkkiä vähemmän";
+        },
+        formatSelectionTooBig: function (limit) {
+            return "Voit valita ainoastaan " + limit + " kpl";
+        },
+        formatLoadMore: function (pageNumber) {
+            return "Ladataan lisää tuloksia…";
+        },
+        formatSearching: function () {
+            return "Etsitään…";
+        }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['fi']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_fr.js b/interface/web/js/select2/select2_locale_fr.js
new file mode 100644
index 0000000..d5485d6
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_fr.js
@@ -0,0 +1,18 @@
+/**
+ * Select2 French translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['fr'] = {
+        formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; },
+        formatNoMatches: function () { return "Aucun résultat trouvé"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Saisissez " + n + " caractère" + (n == 1? "" : "s") + " supplémentaire" + (n == 1? "" : "s") ; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Supprimez " + n + " caractère" + (n == 1? "" : "s"); },
+        formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; },
+        formatSearching: function () { return "Recherche en cours…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['fr']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_gl.js b/interface/web/js/select2/select2_locale_gl.js
new file mode 100644
index 0000000..9335167
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_gl.js
@@ -0,0 +1,45 @@
+/**
+ * Select2 Galician translation
+ * 
+ * Author: Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['gl'] = {
+        formatNoMatches: function () {
+            return "Non se atoparon resultados";
+        },
+        formatInputTooShort: function (input, min) {
+            var n = min - input.length;
+            if (n === 1) {
+                return "Engada un carácter";
+            } else {
+                return "Engada " + n + " caracteres";
+            }
+        },
+        formatInputTooLong: function (input, max) {
+            var n = input.length - max;
+            if (n === 1) {
+                return "Elimine un carácter";
+            } else {
+                return "Elimine " + n + " caracteres";
+            }
+        },
+        formatSelectionTooBig: function (limit) {
+            if (limit === 1 ) {
+                return "Só pode seleccionar un elemento";
+            } else {
+                return "Só pode seleccionar " + limit + " elementos";
+            }
+        },
+        formatLoadMore: function (pageNumber) {
+            return "Cargando máis resultados…";
+        },
+        formatSearching: function () {
+            return "Buscando…";
+        }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['gl']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_he.js b/interface/web/js/select2/select2_locale_he.js
new file mode 100644
index 0000000..789dcdc
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_he.js
@@ -0,0 +1,19 @@
+/**
+* Select2 Hebrew translation.
+*
+* Author: Yakir Sitbon <http://www.yakirs.net/>
+*/
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['he'] = {
+        formatNoMatches: function () { return "לא נמצאו התאמות"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; },
+        formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; },
+        formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; },
+        formatSearching: function () { return "מחפש…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['he']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_hr.js b/interface/web/js/select2/select2_locale_hr.js
new file mode 100644
index 0000000..ce8051c
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_hr.js
@@ -0,0 +1,24 @@
+/**
+ * Select2 Croatian translation.
+ *
+ * @author  Edi Modrić <edi.modric@gmail.com>
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['hr'] = {
+        formatNoMatches: function () { return "Nema rezultata"; },
+        formatInputTooShort: function (input, min) { return "Unesite još" + character(min - input.length); },
+        formatInputTooLong: function (input, max) { return "Unesite" + character(input.length - max) + " manje"; },
+        formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; },
+        formatLoadMore: function (pageNumber) { return "Učitavanje rezultata…"; },
+        formatSearching: function () { return "Pretraga…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['hr']);
+
+    function character (n) {
+        return " " + n + " znak" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "a" : "" : "ova");
+    }
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_hu.js b/interface/web/js/select2/select2_locale_hu.js
new file mode 100644
index 0000000..f431f24
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_hu.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Hungarian translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['hu'] = {
+        formatNoMatches: function () { return "Nincs találat."; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; },
+        formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; },
+        formatLoadMore: function (pageNumber) { return "Töltés…"; },
+        formatSearching: function () { return "Keresés…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['hu']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_id.js b/interface/web/js/select2/select2_locale_id.js
new file mode 100644
index 0000000..e9c1fd9
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_id.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Indonesian translation.
+ * 
+ * Author: Ibrahim Yusuf <ibrahim7usuf@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['id'] = {
+        formatNoMatches: function () { return "Tidak ada data yang sesuai"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); },
+        formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "Mengambil data…"; },
+        formatSearching: function () { return "Mencari…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['id']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_is.js b/interface/web/js/select2/select2_locale_is.js
new file mode 100644
index 0000000..273f33d
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_is.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Icelandic translation.
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['is'] = {
+        formatNoMatches: function () { return "Ekkert fannst"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); },
+        formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; },
+        formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; },
+        formatSearching: function () { return "Leita…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['is']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_it.js b/interface/web/js/select2/select2_locale_it.js
new file mode 100644
index 0000000..6e2b8e2
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_it.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Italian translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['it'] = {
+        formatNoMatches: function () { return "Nessuna corrispondenza trovata"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; },
+        formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); },
+        formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; },
+        formatSearching: function () { return "Ricerca…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['it']);
+})(jQuery);
\ No newline at end of file
diff --git a/interface/web/js/select2/select2_locale_ja.js b/interface/web/js/select2/select2_locale_ja.js
new file mode 100644
index 0000000..7dbd8d7
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ja.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Japanese translation.
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ja'] = {
+        formatNoMatches: function () { return "該当なし"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; },
+        formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; },
+        formatLoadMore: function (pageNumber) { return "読込中・・・"; },
+        formatSearching: function () { return "検索中・・・"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ja']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_ka.js b/interface/web/js/select2/select2_locale_ka.js
new file mode 100644
index 0000000..6cbe1d8
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ka.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Georgian (Kartuli) translation.
+ * 
+ * Author: Dimitri Kurashvili dimakura@gmail.com
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ka'] = {
+        formatNoMatches: function () { return "ვერ მოიძებნა"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; },
+        formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; },
+        formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; },
+        formatSearching: function () { return "ძებნა…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ka']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_ko.js b/interface/web/js/select2/select2_locale_ko.js
new file mode 100644
index 0000000..bf036e0
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ko.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Korean translation.
+ * 
+ * @author  Swen Mun <longfinfunnel@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ko'] = {
+        formatNoMatches: function () { return "결과 없음"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; },
+        formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; },
+        formatLoadMore: function (pageNumber) { return "불러오는 중…"; },
+        formatSearching: function () { return "검색 중…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ko']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_lt.js b/interface/web/js/select2/select2_locale_lt.js
new file mode 100644
index 0000000..7d7040f
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_lt.js
@@ -0,0 +1,26 @@
+/**
+ * Select2 Lithuanian translation.
+ * 
+ * @author  CRONUS Karmalakas <cronus dot karmalakas at gmail dot com>
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['lt'] = {
+        formatNoMatches: function () { return "Atitikmenų nerasta"; },
+        formatInputTooShort: function (input, min) { return "Įrašykite dar" + character(min - input.length); },
+        formatInputTooLong: function (input, max) { return "Pašalinkite" + character(input.length - max); },
+        formatSelectionTooBig: function (limit) {
+        	return "Jūs galite pasirinkti tik " + limit + " element" + ((limit%100 > 9 && limit%100 < 21) || limit%10 == 0 ? "ų" : limit%10 > 1 ? "us" : "ą");
+        },
+        formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų…"; },
+        formatSearching: function () { return "Ieškoma…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['lt']);
+
+    function character (n) {
+        return " " + n + " simbol" + ((n%100 > 9 && n%100 < 21) || n%10 == 0 ? "ių" : n%10 > 1 ? "ius" : "į");
+    }
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_lv.js b/interface/web/js/select2/select2_locale_lv.js
new file mode 100644
index 0000000..4afc5b4
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_lv.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Latvian translation.
+ *
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['lv'] = {
+        formatNoMatches: function () { return "Sakritību nav"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : n%10 == 1 ? "u" : "us"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : n%10 == 1 ? "u" : "iem") + " mazāk"; },
+        formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : limit%10 == 1 ? "u" : "us"); },
+        formatLoadMore: function (pageNumber) { return "Datu ielāde…"; },
+        formatSearching: function () { return "Meklēšana…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['lv']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_mk.js b/interface/web/js/select2/select2_locale_mk.js
new file mode 100644
index 0000000..8a51a9e
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_mk.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Macedonian translation.
+ * 
+ * Author: Marko Aleksic <psybaron@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['mk'] = {
+        formatNoMatches: function () { return "Нема пронајдено совпаѓања"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); },
+        formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); },
+        formatLoadMore: function (pageNumber) { return "Вчитување резултати…"; },
+        formatSearching: function () { return "Пребарување…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['mk']);
+})(jQuery);
\ No newline at end of file
diff --git a/interface/web/js/select2/select2_locale_ms.js b/interface/web/js/select2/select2_locale_ms.js
new file mode 100644
index 0000000..46588d6
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ms.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Malay translation.
+ * 
+ * Author: Kepoweran <kepoweran@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ms'] = {
+        formatNoMatches: function () { return "Tiada padanan yang ditemui"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; },
+        formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; },
+        formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; },
+        formatSearching: function () { return "Mencari…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ms']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_nb.js b/interface/web/js/select2/select2_locale_nb.js
new file mode 100644
index 0000000..cb5dfae
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_nb.js
@@ -0,0 +1,22 @@
+/**
+ * Select2 Norwegian Bokmål translation.
+ *
+ * Author: Torgeir Veimo <torgeir.veimo@gmail.com>
+ * Author: Bjørn Johansen <post@bjornjohansen.no>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['nb'] = {
+        formatMatches: function (matches) { if (matches === 1) { return "Ett resultat er tilgjengelig, trykk enter for å velge det."; } return matches + " resultater er tilgjengelig. Bruk piltastene opp og ned for å navigere."; },
+        formatNoMatches: function () { return "Ingen treff"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; },
+        formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; },
+        formatLoadMore: function (pageNumber) { return "Laster flere resultater …"; },
+        formatSearching: function () { return "Søker …"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['no']);
+})(jQuery);
+
diff --git a/interface/web/js/select2/select2_locale_nl.js b/interface/web/js/select2/select2_locale_nl.js
new file mode 100644
index 0000000..985741e
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_nl.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Dutch translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['nl'] = {
+        formatNoMatches: function () { return "Geen resultaten gevonden"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul nog " + n + " karakter" + (n == 1? "" : "s") + " in"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Haal " + n + " karakter" + (n == 1? "" : "s") + " weg"; },
+        formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; },
+        formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; },
+        formatSearching: function () { return "Zoeken…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['nl']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_pl.js b/interface/web/js/select2/select2_locale_pl.js
new file mode 100644
index 0000000..87c2619
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_pl.js
@@ -0,0 +1,54 @@
+/**
+ * Select2 Polish translation.
+ *
+ * @author  Jan Kondratowicz <jan@kondratowicz.pl>
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ * @author  Michał Połtyn <mike@poltyn.com>
+ * @author  Damian Zajkowski <damian.zajkowski@gmail.com>
+ */
+(function($) {
+    "use strict";
+
+    $.fn.select2.locales['pl'] = {
+        formatNoMatches: function() {
+            return "Brak wyników";
+        },
+        formatInputTooShort: function(input, min) {
+            return "Wpisz co najmniej" + character(min - input.length, "znak", "i");
+        },
+        formatInputTooLong: function(input, max) {
+            return "Wpisana fraza jest za długa o" + character(input.length - max, "znak", "i");
+        },
+        formatSelectionTooBig: function(limit) {
+            return "Możesz zaznaczyć najwyżej" + character(limit, "element", "y");
+        },
+        formatLoadMore: function(pageNumber) {
+            return "Ładowanie wyników…";
+        },
+        formatSearching: function() {
+            return "Szukanie…";
+        }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['pl']);
+
+    function character(n, word, pluralSuffix) {
+        //Liczba pojedyncza - brak suffiksu
+        //jeden znak
+        //jeden element
+        var suffix = '';
+        if (n > 1 && n < 5) {
+            //Liczaba mnoga ilość od 2 do 4 - własny suffiks
+            //Dwa znaki, trzy znaki, cztery znaki.
+            //Dwa elementy, trzy elementy, cztery elementy
+            suffix = pluralSuffix;
+        } else if (n == 0 || n >= 5) {
+            //Ilość 0 suffiks ów
+            //Liczaba mnoga w ilości 5 i więcej - suffiks ów (nie poprawny dla wszystkich wyrazów, np. 100 wiadomości)
+            //Zero znaków, Pięć znaków, sześć znaków, siedem znaków, osiem znaków.
+            //Zero elementów Pięć elementów, sześć elementów, siedem elementów, osiem elementów.
+            suffix = 'ów';
+        }
+        return " " + n + " " + word + suffix;
+    }
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_pt-BR.js b/interface/web/js/select2/select2_locale_pt-BR.js
new file mode 100644
index 0000000..51b037d
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_pt-BR.js
@@ -0,0 +1,18 @@
+/**
+ * Select2 Brazilian Portuguese translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['pt-BR'] = {
+        formatNoMatches: function () { return "Nenhum resultado encontrado"; },
+        formatAjaxError: function () { return "Erro na busca"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite " + (min == 1 ? "" : "mais") + " " + n + " caracter" + (n == 1? "" : "es"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); },
+        formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; },
+        formatSearching: function () { return "Buscando…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['pt-BR']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_pt-PT.js b/interface/web/js/select2/select2_locale_pt-PT.js
new file mode 100644
index 0000000..ae55a4f
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_pt-PT.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Portuguese (Portugal) translation
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['pt-PT'] = {
+        formatNoMatches: function () { return "Nenhum resultado encontrado"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
+        formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "A carregar mais resultados…"; },
+        formatSearching: function () { return "A pesquisar…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['pt-PT']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_ro.js b/interface/web/js/select2/select2_locale_ro.js
new file mode 100644
index 0000000..21b0cf1
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ro.js
@@ -0,0 +1,17 @@
+/**
+ * Select2 Romanian translation.
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ro'] = {
+        formatNoMatches: function () { return "Nu a fost găsit nimic"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); },
+        formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); },
+        formatLoadMore: function (pageNumber) { return "Se încarcă…"; },
+        formatSearching: function () { return "Căutare…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ro']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_rs.js b/interface/web/js/select2/select2_locale_rs.js
new file mode 100644
index 0000000..72c1638
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_rs.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Serbian translation.
+ *
+ * @author  Limon Monte <limon.monte@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['rs'] = {
+        formatNoMatches: function () { return "Ništa nije pronađeno"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Ukucajte bar još " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Obrišite " + n + " simbol" + (n % 10 == 1 && n % 100 != 11	 ? "" : "a"); },
+        formatSelectionTooBig: function (limit) { return "Možete izabrati samo " + limit + " stavk" + (limit % 10 == 1 && limit % 100 != 11	 ? "u" : (limit % 10 >= 2 && limit % 10 <= 4 && (limit % 100 < 12 || limit % 100 > 14)? "e" : "i")); },
+        formatLoadMore: function (pageNumber) { return "Preuzimanje još rezultata…"; },
+        formatSearching: function () { return "Pretraga…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['rs']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_ru.js b/interface/web/js/select2/select2_locale_ru.js
new file mode 100644
index 0000000..2a6c770
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ru.js
@@ -0,0 +1,23 @@
+/**
+ * Select2 Russian translation.
+ *
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['ru'] = {
+        formatNoMatches: function () { return "Совпадений не найдено"; },
+        formatInputTooShort: function (input, min) { return "Пожалуйста, введите еще хотя бы" + character(min - input.length); },
+        formatInputTooLong: function (input, max) { return "Пожалуйста, введите на" + character(input.length - max) + " меньше"; },
+        formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit%10 == 1 && limit%100 != 11 ? "а" : "ов"); },
+        formatLoadMore: function (pageNumber) { return "Загрузка данных…"; },
+        formatSearching: function () { return "Поиск…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ru']);
+
+    function character (n) {
+        return " " + n + " символ" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 20) ? n%10 > 1 ? "a" : "" : "ов");
+    }
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_sk.js b/interface/web/js/select2/select2_locale_sk.js
new file mode 100644
index 0000000..027530c
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_sk.js
@@ -0,0 +1,50 @@
+/**
+ * Select2 Slovak translation.
+ *
+ * Author: David Vallner <david@vallner.net>
+ */
+(function ($) {
+    "use strict";
+    // use text for the numbers 2 through 4
+    var smallNumbers = {
+        2: function(masc) { return (masc ? "dva" : "dve"); },
+        3: function() { return "tri"; },
+        4: function() { return "štyri"; }
+    };
+    $.fn.select2.locales['sk'] = {
+        formatNoMatches: function () { return "Nenašli sa žiadne položky"; },
+        formatInputTooShort: function (input, min) {
+            var n = min - input.length;
+            if (n == 1) {
+                return "Prosím, zadajte ešte jeden znak";
+            } else if (n <= 4) {
+                return "Prosím, zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky";
+            } else {
+                return "Prosím, zadajte ešte ďalších "+n+" znakov";
+            }
+        },
+        formatInputTooLong: function (input, max) {
+            var n = input.length - max;
+            if (n == 1) {
+                return "Prosím, zadajte o jeden znak menej";
+            } else if (n >= 2 && n <= 4) {
+                return "Prosím, zadajte o "+smallNumbers[n](true)+" znaky menej";
+            } else {
+                return "Prosím, zadajte o "+n+" znakov menej";
+            }
+        },
+        formatSelectionTooBig: function (limit) {
+            if (limit == 1) {
+                return "Môžete zvoliť len jednu položku";
+            } else if (limit >= 2 && limit <= 4) {
+                return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky";
+            } else {
+                return "Môžete zvoliť najviac "+limit+" položiek";
+            }
+        },
+        formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky…"; },
+        formatSearching: function () { return "Vyhľadávanie…"; }
+    };
+
+	$.extend($.fn.select2.defaults, $.fn.select2.locales['sk']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_sv.js b/interface/web/js/select2/select2_locale_sv.js
new file mode 100644
index 0000000..96f8c0a
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_sv.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Swedish translation.
+ *
+ * Author: Jens Rantil <jens.rantil@telavox.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['sv'] = {
+        formatNoMatches: function () { return "Inga träffar"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; },
+        formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; },
+        formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; },
+        formatSearching: function () { return "Söker…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['sv']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_th.js b/interface/web/js/select2/select2_locale_th.js
new file mode 100644
index 0000000..7f3e6ef
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_th.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Thai translation.
+ *
+ * Author: Atsawin Chaowanakritsanakul <joke@nakhon.net>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['th'] = {
+        formatNoMatches: function () { return "ไม่พบข้อมูล"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; },
+        formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; },
+        formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม…"; },
+        formatSearching: function () { return "กำลังค้นข้อมูล…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['th']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_tr.js b/interface/web/js/select2/select2_locale_tr.js
new file mode 100644
index 0000000..1dda95c
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_tr.js
@@ -0,0 +1,19 @@
+/**
+ * Select2 Turkish translation.
+ * 
+ * Author: Salim KAYABAŞI <salim.kayabasi@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['tr'] = {
+        formatNoMatches: function () { return "Sonuç bulunamadı"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; },
+        formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; },
+        formatLoadMore: function (pageNumber) { return "Daha fazla…"; },
+        formatSearching: function () { return "Aranıyor…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['tr']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_ug-CN.js b/interface/web/js/select2/select2_locale_ug-CN.js
new file mode 100644
index 0000000..579588a
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_ug-CN.js
@@ -0,0 +1,16 @@
+/**
+ * Select2 Uyghur translation
+ */
+(function ($) {
+    "use strict";
+    $.fn.select2.locales['ug-CN'] = {
+        formatNoMatches: function () { return "ماس كېلىدىغان ئۇچۇر تېپىلمىدى"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "يەنە " + n + " ھەرپ كىرگۈزۈڭ";},
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "" + n + "ھەرپ ئۆچۈرۈڭ";},
+        formatSelectionTooBig: function (limit) { return "ئەڭ كۆپ بولغاندا" + limit + " تال ئۇچۇر تاللىيالايسىز"; },
+        formatLoadMore: function (pageNumber) { return "ئۇچۇرلار ئوقۇلىۋاتىدۇ…"; },
+        formatSearching: function () { return "ئىزدەۋاتىدۇ…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['ug-CN']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_uk.js b/interface/web/js/select2/select2_locale_uk.js
new file mode 100644
index 0000000..b5bd0e0
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_uk.js
@@ -0,0 +1,25 @@
+/**
+ * Select2 Ukrainian translation.
+ * 
+ * @author  bigmihail <bigmihail@bigmir.net>
+ * @author  Uriy Efremochkin <efremochkin@uriy.me>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['uk'] = {
+        formatMatches: function (matches) { return character(matches, "результат") + " знайдено, використовуйте клавіші зі стрілками вверх та вниз для навігації."; },
+        formatNoMatches: function () { return "Нічого не знайдено"; },
+        formatInputTooShort: function (input, min) { return "Введіть буль ласка ще " + character(min - input.length, "символ"); },
+        formatInputTooLong: function (input, max) { return "Введіть буль ласка на " + character(input.length - max, "символ") + " менше"; },
+        formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише " + character(limit, "елемент"); },
+        formatLoadMore: function (pageNumber) { return "Завантаження даних…"; },
+        formatSearching: function () { return "Пошук…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['uk']);
+
+    function character (n, word) {
+        return n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів");
+    }
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_vi.js b/interface/web/js/select2/select2_locale_vi.js
new file mode 100644
index 0000000..cc67065
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_vi.js
@@ -0,0 +1,20 @@
+/**
+ * Select2 Vietnamese translation.
+ * 
+ * Author: Long Nguyen <olragon@gmail.com>
+ */
+(function ($) {
+    "use strict";
+
+    $.fn.select2.locales['vi'] = {
+        formatNoMatches: function () { return "Không tìm thấy kết quả"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "Vui lòng nhập nhiều hơn " + n + " ký tự" + (n == 1 ? "" : "s"); },
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "Vui lòng nhập ít hơn " + n + " ký tự" + (n == 1? "" : "s"); },
+        formatSelectionTooBig: function (limit) { return "Chỉ có thể chọn được " + limit + " tùy chọn" + (limit == 1 ? "" : "s"); },
+        formatLoadMore: function (pageNumber) { return "Đang lấy thêm kết quả…"; },
+        formatSearching: function () { return "Đang tìm…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['vi']);
+})(jQuery);
+
diff --git a/interface/web/js/select2/select2_locale_zh-CN.js b/interface/web/js/select2/select2_locale_zh-CN.js
new file mode 100644
index 0000000..e988dac
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_zh-CN.js
@@ -0,0 +1,16 @@
+/**
+ * Select2 Chinese translation
+ */
+(function ($) {
+    "use strict";
+    $.fn.select2.locales['zh-CN'] = {
+        formatNoMatches: function () { return "没有找到匹配项"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";},
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";},
+        formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; },
+        formatLoadMore: function (pageNumber) { return "加载结果中…"; },
+        formatSearching: function () { return "搜索中…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-CN']);
+})(jQuery);
diff --git a/interface/web/js/select2/select2_locale_zh-TW.js b/interface/web/js/select2/select2_locale_zh-TW.js
new file mode 100644
index 0000000..85dbd5a
--- /dev/null
+++ b/interface/web/js/select2/select2_locale_zh-TW.js
@@ -0,0 +1,16 @@
+/**
+ * Select2 Traditional Chinese translation
+ */
+(function ($) {
+    "use strict";
+    $.fn.select2.locales['zh-TW'] = {
+        formatNoMatches: function () { return "沒有找到相符的項目"; },
+        formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";},
+        formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";},
+        formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; },
+        formatLoadMore: function (pageNumber) { return "載入中…"; },
+        formatSearching: function () { return "搜尋中…"; }
+    };
+
+    $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-TW']);
+})(jQuery);
diff --git a/interface/web/js/uni-form/uni-form.jquery.js b/interface/web/js/uni-form/uni-form.jquery.js
deleted file mode 100644
index f103d1f..0000000
--- a/interface/web/js/uni-form/uni-form.jquery.js
+++ /dev/null
@@ -1,107 +0,0 @@
-jQuery.fn.uniform = function(settings) {
-  settings = jQuery.extend({
-    valid_class    : 'valid',
-    invalid_class  : 'invalid',
-    focused_class  : 'focused',
-    holder_class   : 'ctrlHolder',
-    field_selector : 'input, select, textarea'
-  }, settings);
-  
-  return this.each(function() {
-    var form = jQuery(this);
-    
-    // Focus specific control holder
-    var focusControlHolder = function(element) {
-      var parent = element.parent();
-      
-      while(typeof(parent) == 'object') {
-        if(parent) {
-          if(parent[0] && (parent[0].className.indexOf(settings.holder_class) >= 0)) {
-            parent.addClass(settings.focused_class);
-            return;
-          } // if
-        } // if
-        parent = jQuery(parent.parent());
-      } // while
-    };
-    
-    // Select form fields and attach them higlighter functionality
-    form.find(settings.field_selector).focus(function() {
-      form.find('.' + settings.focused_class).removeClass(settings.focused_class);
-      focusControlHolder(jQuery(this));
-    }).blur(function() {
-      form.find('.' + settings.focused_class).removeClass(settings.focused_class);
-    });
-  });
-};
-
-// Auto set on page load...
-$(document).ready(function() {
-  jQuery('form.uniForm').uniform();
-});
-
-function AR_ResetDates()
-{
-	if ($("#autoresponder:checked").val() == null) {
-		$("form.uniForm select").each(
-		 function(){
-			$(this).val( $("#" + $(this).attr("id") + " option:first").val() );
-		 }
-		);
-	}
-}
-
-function AR_SetNow()
-{
-	DateTime_SetValues('autoresponder_start_date');
-	
-	now = new Date();
-	end_date = new Date(now.getFullYear(), now.getMonth(), now.getDate()+2, 0, 0);
-	
-	DateTime_SetValues('autoresponder_end_date', end_date);
-}
-
-function DateTime_SetValues(datetime_id, date_obj)
-{
-	var selects = ['day', 'month', 'year', 'hour', 'minute', 'second'];
-	
-	if ( (typeof(date_obj) == 'object') && (typeof(date_obj.getDate()) == 'number') ) {
-		var now = date_obj;
-	} else {
-		var now = new Date();
-	}
-	
-	jQuery.each(selects, function() {
-		var unit_name = this.toString();
-		var unit_value = '';
-		
-		switch(unit_name)
-		{
-			case 'day':
-				unit_value = now.getDate();
-				break;
-			case 'month':
-				unit_value = now.getMonth() + 1;
-				if(unit_value < 10) unit_value = '0'+unit_value;
-				break;
-			case 'year':
-				unit_value = now.getFullYear();
-				break;
-			case 'hour':
-				unit_value = now.getHours();
-				break;
-			case 'minute':
-				unit_value = Math.round(parseInt(now.getMinutes())/5)*5;
-				break;
-			case 'second':
-				unit_value = now.getSeconds();
-				break;
-		}
-		
-		unit_obj = $("#"+ datetime_id + "_" + unit_name);
-		if (unit_obj.val() !== null) {
-			unit_obj.val(unit_value);
-            unit_obj.change();
-		}
-	});
-}
\ No newline at end of file
diff --git a/interface/web/js/xmpp_domain_muc.js b/interface/web/js/xmpp_domain_muc.js
new file mode 100644
index 0000000..9018928
--- /dev/null
+++ b/interface/web/js/xmpp_domain_muc.js
@@ -0,0 +1,26 @@
+$('document').ready(function(){
+    $('#use_muc_host').on('change', function(e){
+        if($(this).is(':checked')){
+            $('#toggle-use-muc').addClass('in');
+            $('#use_pastebin').trigger('change');
+            $('#use_http_archive').trigger('change');
+        }else{
+            $('#toggle-use-muc').removeClass('in');
+        }
+    });
+    $('#use_pastebin').on('change', function(e){
+        if($(this).is(':checked')){
+            $('#toggle-use-pastebin').addClass('in');
+        }else{
+            $('#toggle-use-pastebin').removeClass('in');
+        }
+    });
+    $('#use_http_archive').on('change', function(e){
+        if($(this).is(':checked')){
+            $('#toggle-use-archive').addClass('in');
+        }else{
+            $('#toggle-use-archive').removeClass('in');
+        }
+    });
+    $('#use_muc_host').trigger('change');
+})
\ No newline at end of file
diff --git a/interface/web/js/xmpp_domain_registration.js b/interface/web/js/xmpp_domain_registration.js
new file mode 100644
index 0000000..1ce239e
--- /dev/null
+++ b/interface/web/js/xmpp_domain_registration.js
@@ -0,0 +1,29 @@
+$('document').ready(function(){
+    // Not needed as long as maildomain hook is not implemented
+    return;
+    $('#management_method').on('select2-selecting', function(e){
+        val = e.choice ? e.choice.id : e.target.selectedIndex;
+        if(val == 0){
+            //normal
+            $('#toggle-management-normal').addClass('in');
+            $('#toggle-registration-closed').addClass('in');
+            $('#public_registration').trigger('change');
+        }else if(val != undefined){
+            //maildomain
+            $('#toggle-management-normal').removeClass('in');
+            $('#toggle-registration-closed').removeClass('in');
+        }else{
+            $('#toggle-management-normal').removeClass('in');
+            $('#toggle-registration-closed').removeClass('in');
+        }
+    });
+    $('#public_registration').on('change', function(e){
+        if($(this).is(':checked')){
+            $('#toggle-registration-closed').removeClass('in');
+        }else{
+            $('#toggle-registration-closed').addClass('in');
+        }
+    });
+    $('#public_registration').trigger('change');
+    $('#management_method').trigger('select2-selecting');
+})
\ No newline at end of file
diff --git a/interface/web/login/index.php b/interface/web/login/index.php
index 80c4d17..ddc6cfb 100644
--- a/interface/web/login/index.php
+++ b/interface/web/login/index.php
@@ -73,9 +73,9 @@
 			if(!preg_match("/^.{1,64}$/i", $_POST['passwort'])) $error = $app->lng('pw_error_length');
 
 			//** iporting variables
-			$ip    = $app->db->quote(ip2long($_SERVER['REMOTE_ADDR']));
-			$username = $app->db->quote($_POST['username']);
-			$passwort = $app->db->quote($_POST['passwort']);
+			$ip    = ip2long($_SERVER['REMOTE_ADDR']);
+			$username = $_POST['username'];
+			$passwort = $_POST['passwort'];
 			$loginAs  = false;
 			$time = time();
 
@@ -103,13 +103,13 @@
 								
 								/* this is the one currently logged in (normal user) */
 								$old_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-								$old_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $old_client_group_id");
+								$old_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $old_client_group_id);
 								
 								/* this is the reseller, that shall be re-logged in */
-								$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username' and PASSWORT = '". $passwort. "'";
-								$tmp = $app->db->queryOneRecord($sql);
+								$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
+								$tmp = $app->db->queryOneRecord($sql, $username, $passwort);
 								$client_group_id = $app->functions->intval($tmp['default_group']);
-								$tmp_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								$tmp_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 								
 								if(!$tmp_client || $old_client["parent_client_id"] != $tmp_client["client_id"] || $tmp["default_group"] != $_SESSION["s_old"]["user"]["default_group"] ) {
 									die("You don't have the right to 'login as' this user!");
@@ -125,12 +125,12 @@
 					} elseif($_SESSION['s']['user']['typ'] != 'admin' && (!isset($_SESSION['s_old']['user']) || $_SESSION['s_old']['user']['typ'] != 'admin')) {
 						/* a reseller wants to 'login as', we need to check if he is allowed to */
 						$res_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-						$res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $res_client_group_id");
+						$res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $res_client_group_id);
 						
 						/* this is the user the reseller wants to 'login as' */
-						$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username' and PASSWORT = '". $passwort. "'";
-						$tmp = $app->db->queryOneRecord($sql);
-						$tmp_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = " . $app->functions->intval($tmp["default_group"]));
+						$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
+						$tmp = $app->db->queryOneRecord($sql, $username, $passwort);
+						$tmp_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $tmp["default_group"]);
 						
 						if(!$tmp || $tmp_client["parent_client_id"] != $res_client["client_id"]) {
 							die("You don't have the right to login as this user!");
@@ -147,21 +147,21 @@
 				}
 
 				//* Check if there are already wrong logins
-				$sql = "SELECT * FROM `attempts_login` WHERE `ip`= '{$ip}' AND  `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
-				$alreadyfailed = $app->db->queryOneRecord($sql);
+				$sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND  `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
+				$alreadyfailed = $app->db->queryOneRecord($sql, $ip);
 				//* too many failedlogins
 				if($alreadyfailed['times'] > 5) {
 					$error = $app->lng('error_user_too_many_logins');
 				} else {
 
 					if ($loginAs){
-						$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username' and PASSWORT = '". $passwort. "'";
-						$user = $app->db->queryOneRecord($sql);
+						$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
+						$user = $app->db->queryOneRecord($sql, $username, $passwort);
 					} else {
 						if(stristr($username, '@')) {
 							//* mailuser login
-							$sql = "SELECT * FROM mail_user WHERE login = '$username' or email = '$username'";
-							$mailuser = $app->db->queryOneRecord($sql);
+							$sql = "SELECT * FROM mail_user WHERE login = ? or email = ?";
+							$mailuser = $app->db->queryOneRecord($sql, $username, $username);
 							$user = false;
 							if($mailuser) {
 								$saved_password = stripslashes($mailuser['password']);
@@ -187,8 +187,8 @@
 
 						} else {
 							//* normal cp user login
-							$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username'";
-							$user = $app->db->queryOneRecord($sql);
+							$sql = "SELECT * FROM sys_user WHERE USERNAME = ?";
+							$user = $app->db->queryOneRecord($sql, $username);
 
 							if($user) {
 								$saved_password = stripslashes($user['passwort']);
@@ -225,8 +225,8 @@
 							// Maintenance mode - allow logins only when maintenance mode is off or if the user is admin
 							if(!$maintenance_mode || $user['typ'] == 'admin'){
 								// User login right, so attempts can be deleted
-								$sql = "DELETE FROM `attempts_login` WHERE `ip`='{$ip}'";
-								$app->db->query($sql);
+								$sql = "DELETE FROM `attempts_login` WHERE `ip`=?";
+								$app->db->query($sql, $ip);
 								$user = $app->db->toLower($user);
 
 								if ($loginAs) $oldSession = $_SESSION['s'];
@@ -290,12 +290,12 @@
 						if(!$alreadyfailed['times'] )
 						{
 							//* user login the first time wrong
-							$sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES ('{$ip}', 1, NOW())";
-							$app->db->query($sql);
+							$sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())";
+							$app->db->query($sql, $ip);
 						} elseif($alreadyfailed['times'] >= 1) {
 							//* update times wrong
-							$sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `login_time` >= '{$time}' LIMIT 1";
-							$app->db->query($sql);
+							$sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? AND `login_time` < NOW() ORDER BY `login_time` DESC LIMIT 1";
+							$app->db->query($sql, $ip);
 						}
 						//* Incorrect login - Username and password incorrect
 						$error = $app->lng('error_user_password_incorrect');
@@ -322,7 +322,7 @@
 		// Maintenance mode - show message when people try to log in and also when people are forcedly logged off
 		if($maintenance_mode_error != '') $error = '<strong>'.$maintenance_mode_error.'</strong><br><br>'.$error;
 		if($error != ''){
-			$error = '<div class="box box_error"><h1>Error</h1>'.$error.'</div>';
+			$error = '<div class="box box_error">'.$error.'</div>';
 		}
 		
 		$app->load('getconf');
@@ -335,6 +335,8 @@
 		}
 		
 		$app->tpl->setVar('error', $error);
+		$app->tpl->setVar('error_txt', $app->lng('error_txt'));
+		$app->tpl->setVar('login_txt', $app->lng('login_txt'));
 		$app->tpl->setVar('pw_lost_txt', $app->lng('pw_lost_txt'));
 		$app->tpl->setVar('username_txt', $app->lng('username_txt'));
 		$app->tpl->setVar('password_txt', $app->lng('password_txt'));
diff --git a/interface/web/login/lib/lang/de.lng b/interface/web/login/lib/lang/de.lng
index 4ece1b0..44f677b 100644
--- a/interface/web/login/lib/lang/de.lng
+++ b/interface/web/login/lib/lang/de.lng
@@ -24,4 +24,5 @@
 $wb['back_txt'] = 'Zur&uuml;ck';
 $wb['stay_logged_in_txt'] = 'Dauerhaft eingeloggt bleiben';
 $wb['email_error'] = 'Email contains unallowed characters or has a invalid format.';
+$wb['lost_password_function_disabled_txt'] = 'Die Passwort vergessen Funktion steht für diesen Benutzer nicht zur Verfügung.';
 ?>
diff --git a/interface/web/login/lib/lang/en.lng b/interface/web/login/lib/lang/en.lng
index e540ef2..e7487da 100644
--- a/interface/web/login/lib/lang/en.lng
+++ b/interface/web/login/lib/lang/en.lng
@@ -24,4 +24,5 @@
 $wb['error_maintenance_mode'] = 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.';
 $wb['theme_not_compatible'] = 'The chosen theme is not compatible with the current ISPConfig version. Please check for a new version of the theme.<br />The default theme as been activated automatically.';
 $wb['stay_logged_in_txt'] = 'Keep me logged in';
-?>
\ No newline at end of file
+$wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.';
+?>
diff --git a/interface/web/login/login_as.php b/interface/web/login/login_as.php
index ed2dc9e..85bc366 100644
--- a/interface/web/login/login_as.php
+++ b/interface/web/login/login_as.php
@@ -54,13 +54,13 @@
 	$backlink = 'admin/users_list.php';
 } else {
 	$client_id = $app->functions->intval($_GET['cid']);
-	$tmp_client = $app->db->queryOneRecord("SELECT username, parent_client_id FROM client WHERE client_id = $client_id");
-	$tmp_sys_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE username = '".$app->db->quote($tmp_client['username'])."'");
+	$tmp_client = $app->db->queryOneRecord("SELECT username, parent_client_id FROM client WHERE client_id = ?", $client_id);
+	$tmp_sys_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE username = ?", $tmp_client['username']);
 	$userId = $app->functions->intval($tmp_sys_user['userid']);
 	/* check if this client belongs to reseller that tries to log in, if we are not admin */
 	if($_SESSION["s"]["user"]["typ"] != 'admin') {
 		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-		$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 		if(!$client || $tmp_client["parent_client_id"] != $client["client_id"]) {
 			die("You don't have the right to login as this user!");
 		}
@@ -76,7 +76,7 @@
  * Get the data to login as user x
  */
 $dbData = $app->db->queryOneRecord(
-	"SELECT username, passwort FROM sys_user WHERE userid = " . $userId);
+	"SELECT username, passwort FROM sys_user WHERE userid = ?", $userId);
 
 /*
  * Now generate the login-Form
@@ -98,7 +98,7 @@
 	<input type="hidden" name="s_pg" value="index" />
     <div class="wf_actions buttons">
       <button class="positive iconstxt icoPositive" type="button" value="'.$wb['btn_yes_txt'].'" onclick="submitLoginForm(' . "'pageForm'" . ');"><span>'.$wb['btn_yes_txt'].'</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="'.$wb['btn_back_txt'].'" onclick="loadContent('. "'$backlink'" . ');"><span>'.$wb['btn_back_txt'].'</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="'.$wb['btn_back_txt'].'" data-load-content="'.$backlink.'"><span>'.$wb['btn_back_txt'].'</span></button>
     </div>
 ';
 ?>
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index 5e79629..5092aeb 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -43,9 +43,11 @@
 if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin' || $app->auth->has_clients($_SESSION['s_old']['user']['userid']))) &&
 	(!$forceLogout)){
 	$utype = ($_SESSION['s_old']['user']['typ'] == 'admin' ? 'admin' : 'reseller');
+	$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_login_as.lng';
+	include $lng_file;
 	echo '
 		<br /> <br />	<br /> <br />
-		Do you want to re-login as ' . $utype . ' or log out?<br />
+		'.str_replace('{UTYPE}', $utype, $wb['login_as_or_logout_txt']).'<br />
 		<div style="visibility:hidden">
 			<input type="text" name="username" value="' . $_SESSION['s_old']['user']['username'] . '" />
 			<input type="password" name="passwort" value="' . $_SESSION['s_old']['user']['passwort'] .'" />
@@ -54,7 +56,7 @@
 		<input type="hidden" name="s_pg" value="index" />
 	    <div class="wf_actions buttons">
 	      <button class="positive iconstxt icoPositive" type="button" value="Yes, re-login as ' . $utype . '" onclick="submitLoginForm(' . "'pageForm'" . ');"><span>Yes, re-login as ' . $utype . '</span></button>
-	      <button class="negative iconstxt icoNegative" type="button" value="No, logout" onclick="loadContent('. "'login/logout.php?l=1'" . ');"><span>No, logout</span></button>
+	      <button class="negative iconstxt icoNegative" type="button" value="No, logout" data-load-content="login/logout.php?l=1"><span>No, logout</span></button>
 	    </div>
 	';
 	exit;
diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php
index c466ac8..683a4bc 100644
--- a/interface/web/login/password_reset.php
+++ b/interface/web/login/password_reset.php
@@ -7,14 +7,14 @@
 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.
+	* 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
@@ -26,7 +26,7 @@
 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';
@@ -51,39 +51,45 @@
 	if(!preg_match("/^[\w\.\-\_]{1,64}$/", $_POST['username'])) die($app->lng('user_regex_error'));
 	if(!preg_match("/^\w+[\w.-]*\w+@\w+[\w.-]*\w+\.[a-z]{2,10}$/i", $_POST['email'])) die($app->lng('email_error'));
 
-	$username = $app->db->quote($_POST['username']);
-	$email = $app->db->quote($_POST['email']);
+	$username = $_POST['username'];
+	$email = $_POST['email'];
 
-	$client = $app->db->queryOneRecord("SELECT * FROM client WHERE username = '$username' AND email = '$email'");
+	$client = $app->db->queryOneRecord("SELECT client.*, sys_user.lost_password_function FROM client,sys_user WHERE client.username = ? AND client.email = ? AND client.client_id = sys_user.client_id", $username, $email);
 
-	if($client['client_id'] > 0) {
-		$new_password = $app->auth->get_random_password();
-		$new_password_encrypted = $app->auth->crypt_password($new_password);
-		$new_password_encrypted = $app->db->quote($new_password_encrypted);
-
-		$username = $app->db->quote($client['username']);
-		$app->db->query("UPDATE sys_user SET passwort = '$new_password_encrypted' WHERE username = '$username'");
-		$app->db->query("UPDATE client SET password = '$new_password_encrypted' WHERE username = '$username'");
-		$app->tpl->setVar("message", $wb['pw_reset']);
-
-		$app->uses('getconf,ispcmail');
-		$mail_config = $app->getconf->get_global_config('mail');
-		if($mail_config['smtp_enabled'] == 'y') {
-			$mail_config['use_smtp'] = true;
-			$app->ispcmail->setOptions($mail_config);
-		}
-		$app->ispcmail->setSender($mail_config['admin_mail'], $mail_config['admin_name']);
-		$app->ispcmail->setSubject($wb['pw_reset_mail_title']);
-		$app->ispcmail->setMailText($wb['pw_reset_mail_msg'].$new_password);
-		$app->ispcmail->send(array($client['contact_name'] => $client['email']));
-		$app->ispcmail->finish();
-
-		$app->plugin->raiseEvent('password_reset', true);
-		$app->tpl->setVar("msg", $wb['pw_reset']);
+	if($client['lost_password_function'] == 0) {
+		$app->tpl->setVar("error", $wb['lost_password_function_disabled_txt']);
 	} else {
-		$app->tpl->setVar("error", $wb['pw_error']);
-	}
+		if($client['client_id'] > 0) {
+			$server_config_array = $app->getconf->get_global_config();
+			$min_password_length = 8;
+			if(isset($server_config_array['misc']['min_password_length'])) $min_password_length = $server_config_array['misc']['min_password_length'];
+			
+			$new_password = $app->auth->get_random_password($min_password_length, true);
+			$new_password_encrypted = $app->auth->crypt_password($new_password);
 
+			$username = $client['username'];
+			$app->db->query("UPDATE sys_user SET passwort = ? WHERE username = ?", $new_password_encrypted, $username);
+			$app->db->query("UPDATE client SET password = ? WHERE username = ?", $new_password_encrypted, $username);
+			$app->tpl->setVar("message", $wb['pw_reset']);
+
+			$app->uses('getconf,ispcmail');
+			$mail_config = $server_config_array['mail'];
+			if($mail_config['smtp_enabled'] == 'y') {
+				$mail_config['use_smtp'] = true;
+				$app->ispcmail->setOptions($mail_config);
+			}
+			$app->ispcmail->setSender($mail_config['admin_mail'], $mail_config['admin_name']);
+			$app->ispcmail->setSubject($wb['pw_reset_mail_title']);
+			$app->ispcmail->setMailText($wb['pw_reset_mail_msg'].$new_password);
+			$app->ispcmail->send(array($client['contact_name'] => $client['email']));
+			$app->ispcmail->finish();
+
+			$app->plugin->raiseEvent('password_reset', true);
+			$app->tpl->setVar("msg", $wb['pw_reset']);
+		} else {
+			$app->tpl->setVar("error", $wb['pw_error']);
+		}
+	}
 } else {
 	$app->tpl->setVar("msg", $wb['pw_error_noinput']);
 }
diff --git a/interface/web/login/templates/index.htm b/interface/web/login/templates/index.htm
index bcdd8bd..3083148 100644
--- a/interface/web/login/templates/index.htm
+++ b/interface/web/login/templates/index.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="login_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="login_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_login">
@@ -7,36 +9,32 @@
         <div id="OKMsg"><p><tmpl_var name="msg"></p></div>
     </tmpl_if>
     <tmpl_if name="error">
-        <div id="errorMsg"><h3>ERROR</h3><ol><li><tmpl_var name="error"></li></ol><br /><a href="#" onclick="loadContent('login/password_reset.php');">{tmpl_var name='pw_lost_txt'}</a></div>
+        <div id="errorMsg"><h3>{tmpl_var name='error_txt'}</h3><ol><li><tmpl_var name="error"></li></ol><br /><a href="#" data-load-content="login/password_reset.php">{tmpl_var name='pw_lost_txt'}</a></div>
     </tmpl_if>
 
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='login_txt'}Login</legend>
-            <div class="ctrlHolder">
-                <label for="username">{tmpl_var name='username_txt'}</label>
-                <input name="username" id="username" value="" size="30" maxlength="255" type="text" class="formLengthEmailUser"  onkeypress="if (event.keyCode && event.keyCode == 13) {submitLoginForm('pageForm'); return false;};" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="passwort">{tmpl_var name='password_txt'}</label>
-                <input name="passwort" id="passwort" value="" size="30" maxlength="255" type="password" class="formLengthEmailUser"  onkeypress="if (event.keyCode && event.keyCode == 13) {submitLoginForm('pageForm'); return false;};" />
-            </div>
+            <div class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="username" id="username" value="" class="form-control"  onkeypress="if (event.keyCode && event.keyCode == 13) {ISPConfig.submitLoginForm('pageForm'); return false;};" /></div></div>
+            <div class="form-group">
+                <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="passwort" id="passwort" value="" class="form-control"  onkeypress="if (event.keyCode && event.keyCode == 13) {ISPConfig.submitLoginForm('pageForm'); return false;};" /></div></div>
             <tmpl_if name="session_timeout" op=">" value="0">
 				<tmpl_if name="session_allow_endless" value="y">
-            <div class="ctrlHolder">
-                <label for="passwort">{tmpl_var name='stay_logged_in_txt'}</label>
-                <input name="stay" id="stay" value="1" type="checkbox" onkeypress="if (event.keyCode && event.keyCode == 13) {submitLoginForm('pageForm'); return false;};" />
-            </div>
+            <div class="form-group">
+                <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='stay_logged_in_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="checkbox" name="stay" id="stay" value="1" onkeypress="if (event.keyCode && event.keyCode == 13) {ISPConfig.submitLoginForm('pageForm'); return false;};" /></div></div>
 				</tmpl_if>
             </tmpl_if>
-        </fieldset>
+        
 
         <input type="hidden" name="s_mod" value="login" />
         <input type="hidden" name="s_pg" value="index" />
 
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoKey" type="button" value="{tmpl_var name='add_new_record_txt'}" onclick="submitLoginForm('pageForm');"><span>{tmpl_var name='login_button_txt'}</span></button>
-            <tmpl_if name="pw_lost_show"><button class="negative iconstxt icoKey" type="button" value="{tmpl_var name='pw_lost_txt'}" onclick="loadContent('login/password_reset.php');"><span>{tmpl_var name='pw_lost_txt'}</span></button></tmpl_if>
-        </div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='add_new_record_txt'}" onclick="ISPConfig.submitLoginForm('pageForm');">{tmpl_var name='login_button_txt'}</button>
+            <tmpl_if name="pw_lost_show"><button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='pw_lost_txt'}" data-load-content="login/password_reset.php">{tmpl_var name='pw_lost_txt'}</button></tmpl_if>
+        </div></div>
     </div>
 
 </div>
diff --git a/interface/web/login/templates/password_reset.htm b/interface/web/login/templates/password_reset.htm
index 7055834..66dc06a 100644
--- a/interface/web/login/templates/password_reset.htm
+++ b/interface/web/login/templates/password_reset.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="pw_reset_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="pw_reset_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_password_reset">
@@ -7,29 +9,27 @@
         <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>
+        <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
     </tmpl_if>
 
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name='pw_reset_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="email"><em>*</em> {tmpl_var name='email_txt'}</label>
-                <input name="email" id="email" value="" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="username"><em>*</em> {tmpl_var name='username_txt'}</label>
-                <input name="username" id="username" value="" size="30" maxlength="255" type="text" class="textInput" />
-            </div>			
-        </fieldset>
+        <legend>{tmpl_var name='pw_reset_txt'}</legend>
+            <div class="form-group">
+                <label for="email" class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="email" id="email" value="" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="username" class="col-sm-3 control-label"><em>*</em> {tmpl_var name='username_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="username" id="username" value="" class="form-control" /></div></div>			
+        
 
         <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='pw_button_txt'}" onclick="submitForm('pageForm','login/password_reset.php');"><span>{tmpl_var name='pw_button_txt'}</span></button>
-            <button class="negative" type="button" value="{tmpl_var name='back_txt'}" onclick="loadInitContent();"><span>{tmpl_var name='back_txt'}</span></button>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='pw_button_txt'}" data-submit-form="pageForm" data-form-action="login/password_reset.php">{tmpl_var name='pw_button_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='back_txt'}" onclick="ISPConfig.loadInitContent();">{tmpl_var name='back_txt'}</button>
 
-        </div>
+        </div></div>
     </div>
   
 </div>
\ No newline at end of file
diff --git a/interface/web/mail/backup_stats.php b/interface/web/mail/backup_stats.php
new file mode 100644
index 0000000..ec32d35
--- /dev/null
+++ b/interface/web/mail/backup_stats.php
@@ -0,0 +1,42 @@
+<?php
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+$list_def_file = 'list/backup_stats.list.php';
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+$app->load('listform_actions','functions');
+
+class list_action extends listform_actions {
+
+	public function prepareDataRow($rec)
+	{
+		global $app;
+		$app->uses('functions');
+
+		$rec = parent::prepareDataRow($rec);
+
+		$rec['active'] = "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>";
+		if ($rec['backup_interval'] === 'none') {
+			$rec['active']        = "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>";
+			$rec['backup_copies'] = 0;
+		}
+		$recBackup = $app->db->queryOneRecord('SELECT COUNT(backup_id) AS backup_count FROM mail_backup WHERE mailuser_id = ?', $rec['mailuser_id']);
+		$rec['backup_copies_exists'] = $recBackup['backup_count'];
+		unset($recBackup);
+		$recBackup = $app->db->queryOneRecord('SELECT SUM(filesize) AS backup_size FROM mail_backup WHERE mailuser_id = ?', $rec['mailuser_id']);
+		$rec['backup_size'] = $app->functions->formatBytes($recBackup['backup_size']);
+
+		return $rec;
+	}
+}
+
+$list = new list_action;
+$list->SQLExtWhere = "";
+$list->onLoad();
diff --git a/interface/web/mail/form/mail_alias.tform.php b/interface/web/mail/form/mail_alias.tform.php
index e20ac76..d859895 100644
--- a/interface/web/mail/form/mail_alias.tform.php
+++ b/interface/web/mail/form/mail_alias.tform.php
@@ -124,6 +124,12 @@
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/mail/form/mail_forward.tform.php b/interface/web/mail/form/mail_forward.tform.php
index dcd5e54..520f18d 100644
--- a/interface/web/mail/form/mail_forward.tform.php
+++ b/interface/web/mail/form/mail_forward.tform.php
@@ -118,6 +118,12 @@
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index f8f9f44..8d5b625 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -233,6 +233,12 @@
 			'default' => 'y',
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
+		'greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		/*
 		'access' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/mail/form/spamfilter_users.tform.php b/interface/web/mail/form/spamfilter_users.tform.php
index 32a5e05..0eba0bb 100644
--- a/interface/web/mail/form/spamfilter_users.tform.php
+++ b/interface/web/mail/form/spamfilter_users.tform.php
@@ -91,10 +91,6 @@
 			'formtype' => 'TEXT',
 			'default' => '',
 			'filters'   => array( 0 => array( 'event' => 'SAVE',
-					'type' => 'IDNTOASCII'),
-				1 => array( 'event' => 'SHOW',
-					'type' => 'IDNTOUTF8'),
-				2 => array( 'event' => 'SAVE',
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
diff --git a/interface/web/mail/form/xmpp_domain.tform.php b/interface/web/mail/form/xmpp_domain.tform.php
new file mode 100644
index 0000000..095c72f
--- /dev/null
+++ b/interface/web/mail/form/xmpp_domain.tform.php
@@ -0,0 +1,432 @@
+<?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).
+
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
+
+
+*/
+
+$form["title"]    = "XMPP Domain";
+$form["description"]  = "";
+$form["name"]    = "xmpp_domain";
+$form["action"]   = "xmpp_domain_edit.php";
+$form["db_table"]  = "xmpp_domain";
+$form["db_table_idx"] = "domain_id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "domain";
+$form["list_default"] = "xmpp_domain_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
+
+$muc_available = $muc_pastebin_available = $muc_httparchive_available = $anon_available = $vjud_available = $proxy_available = $status_available = true;
+if(!$app->auth->is_admin()) {
+    $client_group_id = $_SESSION["s"]["user"]["default_group"];
+    $client = $app->db->queryOneRecord("SELECT limit_xmpp_muc, limit_xmpp_anon, limit_xmpp_vjud, limit_xmpp_proxy, limit_xmpp_status, limit_xmpp_pastebin, limit_xmpp_httparchive FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+    if($client['limit_xmpp_muc'] != 'y') $muc_available = false;
+    if($client['limit_xmpp_pastebin'] != 'y' || $client['limit_xmpp_muc'] != 'y') $muc_pastebin_available = false;
+    if($client['limit_xmpp_httparchive'] != 'y' || $client['limit_xmpp_muc'] != 'y') $muc_httparchive_available = false;
+    if($client['limit_xmpp_anon'] != 'y') $anon_available = false;
+    if($client['limit_xmpp_vjud'] != 'y') $vjud_available = false;
+    if($client['limit_xmpp_proxy'] != 'y') $proxy_available= false;
+    if($client['limit_xmpp_status'] != 'y') $status_available = false;
+}
+
+$form["tabs"]['domain'] = array (
+	'title'  => "Domain",
+	'width'  => 100,
+	'template'  => "templates/xmpp_domain_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 xmpp_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',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg'=> 'domain_error_empty'),
+				1 => array ( 'type' => 'UNIQUE',
+					'errmsg'=> 'domain_error_unique'),
+				2 => array ( 'type' => 'REGEX',
+					'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+					'errmsg'=> 'domain_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'searchable' => 1
+		),
+		'management_method' => array (
+			'datatype'      => 'VARCHAR',
+			'formtype'      => 'SELECT',
+			'default'       => '0',
+			'value'         => array(0 => 'Normal', 1 => 'By Mail Domain')
+		),
+        'public_registration' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'y',
+            'value'  => array(0 => 'n', 1 => 'y')
+        ),
+        'registration_url' => array (
+            'datatype' => 'VARCHAR',
+            'validators' => array (  0 => array ( 'type' => 'REGEX',
+                'regex' => '@^(([\.]{0})|((ftp|https?)://([-\w\.]+)+(:\d+)?(/([\w/_\.\,\-\+\?\~!:%]*(\?\S+)?)?)?)|(\[scheme\]://([-\w\.]+)+(:\d+)?(/([\w/_\.\-\,\+\?\~!:%]*(\?\S+)?)?)?)|(/(?!.*\.\.)[\w/_\.\-]{1,255}/))$@',
+                'errmsg'=> 'redirect_error_regex'),
+            ),
+            'formtype' => 'TEXT',
+            'default' => '',
+            'value'  => '',
+            'width'  => '30',
+            'maxlength' => '255'
+        ),
+        'registration_message' => array(
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXT',
+            'default' => "",
+            'value' => ''
+        ),
+        'domain_admins' => array(
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '',
+            'value' => '',
+            'width' => '15',
+            'maxlength' => '3'
+        ),
+
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		//#################################
+		// ENDE Datatable fields
+		//#################################
+	)
+);
+
+$form["tabs"]['features'] = array (
+    'title'  => "Modules",
+    'width'  => 100,
+    'template'  => "templates/xmpp_domain_edit_modules.htm",
+    'fields'  => array (
+        //#################################
+        // Begin Datatable fields
+        //#################################
+        'use_pubsub' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'CHECKBOX',
+            'default' => 'y',
+            'value'  => array(0 => 'n', 1 => 'y')
+        )
+        //#################################
+        // ENDE Datatable fields
+        //#################################
+    )
+);
+if($anon_available)
+    $form['tabs']['features']['fields']['use_anon_host'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+if($vjud_available){
+    $form['tabs']['features']['fields']['use_vjud'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+    $form['tabs']['features']['fields']['vjud_opt_mode'] = array (
+        'datatype'      => 'VARCHAR',
+        'formtype'      => 'SELECT',
+        'default'       => '0',
+        'value'         => array(0 => 'Opt-In', 1 => 'Opt-Out')
+    );
+}
+
+if($proxy_available)
+    $form['tabs']['features']['fields']['use_proxy'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+if($status_available)
+    $form['tabs']['features']['fields']['use_status_host'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+
+
+if($muc_available)
+    $form["tabs"]['muc'] = array (
+        'title'  => "MUC",
+        'width'  => 100,
+        'template'  => "templates/xmpp_domain_edit_muc.htm",
+        'fields'  => array (
+            //#################################
+            // Begin Datatable fields
+            //#################################
+            'use_muc_host' => array (
+                'datatype' => 'VARCHAR',
+                'formtype' => 'CHECKBOX',
+                'default' => 'y',
+                'value'  => array(0 => 'n', 1 => 'y')
+            ),
+            'muc_name' => array(
+                'datatype' => 'VARCHAR',
+                'formtype' => 'TEXT',
+                'default' => ''
+            ),
+            'muc_restrict_room_creation' => array (
+                'datatype'      => 'VARCHAR',
+                'formtype'      => 'SELECT',
+                'default'       => '1',
+                'value'         => array(0 => 'Everyone', 1 => 'Members', 2 => 'Admins')
+            ),
+            'muc_admins' => array(
+                'datatype' => 'VARCHAR',
+                'formtype' => 'TEXT',
+                'default' => 'admin@service.com, superuser@service.com',
+                'value' => '',
+                'width' => '15',
+                'maxlength' => '3'
+            ),
+            //#################################
+            // ENDE Datatable fields
+            //#################################
+        )
+    );
+if($muc_available && $muc_pastebin_available){
+    $form['tabs']['muc']['fields']['use_pastebin'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+    $form['tabs']['muc']['fields']['pastebin_expire_after'] = array(
+        'datatype' => 'VARCHAR',
+        'formtype' => 'TEXT',
+        'default' => '48',
+        'validators' => array(0 => array('type' => 'ISINT'),
+            array('type'=>'RANGE', 'range'=>'1:168')
+        ),
+        'value' => '',
+        'width' => '15'
+    );
+    $form['tabs']['muc']['fields']['pastebin_trigger'] = array(
+        'datatype' => 'VARCHAR',
+        'formtype' => 'TEXT',
+        'default' => '!paste',
+        'value' => '',
+        'width' => '15'
+    );
+}
+if($muc_available && $muc_httparchive_available){
+    $form['tabs']['muc']['fields']['use_http_archive'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+    $form['tabs']['muc']['fields']['http_archive_show_join'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+    $form['tabs']['muc']['fields']['http_archive_show_status'] = array (
+        'datatype' => 'VARCHAR',
+        'formtype' => 'CHECKBOX',
+        'default' => 'y',
+        'value'  => array(0 => 'n', 1 => 'y')
+    );
+}
+
+$form["tabs"]['ssl'] = array (
+    'title'  => "SSL",
+    'width'  => 100,
+    'template'  => "templates/xmpp_domain_edit_ssl.htm",
+    'readonly' => false,
+    'fields'  => array (
+        //#################################
+        // Begin Datatable fields
+        //#################################
+        'ssl_state' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'REGEX',
+                'regex' => '/^(([\.]{0})|([-a-zA-Z0-9._,&äöüÄÖÜ ]{1,255}))$/',
+                'errmsg'=> 'ssl_state_error_regex'),
+            ),
+            'default' => '',
+            'value'  => '',
+            'width'  => '30',
+            'maxlength' => '255'
+        ),
+        'ssl_locality' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'REGEX',
+                'regex' => '/^(([\.]{0})|([-a-zA-Z0-9._,&äöüÄÖÜ ]{1,255}))$/',
+                'errmsg'=> 'ssl_locality_error_regex'),
+            ),
+            'default' => '',
+            'value'  => '',
+            'width'  => '30',
+            'maxlength' => '255'
+        ),
+        'ssl_organisation' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'REGEX',
+                'regex' => '/^(([\.]{0})|([-a-zA-Z0-9._,&äöüÄÖÜ ]{1,255}))$/',
+                'errmsg'=> 'ssl_organisation_error_regex'),
+            ),
+            'default' => '',
+            'value'  => '',
+            'width'  => '30',
+            'maxlength' => '255'
+        ),
+        'ssl_organisation_unit' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'validators' => array (  0 => array ( 'type' => 'REGEX',
+                'regex' => '/^(([\.]{0})|([-a-zA-Z0-9._,&äöüÄÖÜ ]{1,255}))$/',
+                'errmsg'=> 'ssl_organistaion_unit_error_regex'),
+            ),
+            'default' => '',
+            'value'  => '',
+            'width'  => '30',
+            'maxlength' => '255'
+        ),
+        'ssl_country' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'SELECT',
+            'default' => '',
+            'datasource' => array (  'type' => 'SQL',
+                'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
+                'keyfield'=> 'iso',
+                'valuefield'=> 'printable_name'
+            ),
+            'value'  => ''
+        ),
+        'ssl_email' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'TEXT',
+            'default' => '',
+            'value'  => '',
+            'width'  => '30',
+            'maxlength' => '255',
+            'validators' => array (  0 => array ( 'type' => 'ISEMAIL',
+                'errmsg'=> 'ssl_error_isemail')
+            ),
+        ),
+        'ssl_key' => array (
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXTAREA',
+            'default' => '',
+            'value'  => '',
+            'cols'  => '30',
+            'rows'  => '10'
+        ),
+        'ssl_request' => array (
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXTAREA',
+            'default' => '',
+            'value'  => '',
+            'cols'  => '30',
+            'rows'  => '10'
+        ),
+        'ssl_cert' => array (
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXTAREA',
+            'default' => '',
+            'value'  => '',
+            'cols'  => '30',
+            'rows'  => '10'
+        ),
+        'ssl_bundle' => array (
+            'datatype' => 'TEXT',
+            'formtype' => 'TEXTAREA',
+            'default' => '',
+            'value'  => '',
+            'cols'  => '30',
+            'rows'  => '10'
+        ),
+        'ssl_action' => array (
+            'datatype' => 'VARCHAR',
+            'formtype' => 'SELECT',
+            'default' => '',
+            'value'  => array('' => 'none_txt', 'save' => 'save_certificate_txt', 'create' => 'create_certificate_txt', 'del' => 'delete_certificate_txt')
+        ),
+        //#################################
+        // ENDE Datatable fields
+        //#################################
+    )
+);
+
+
+?>
diff --git a/interface/web/mail/form/xmpp_user.tform.php b/interface/web/mail/form/xmpp_user.tform.php
new file mode 100644
index 0000000..c736078
--- /dev/null
+++ b/interface/web/mail/form/xmpp_user.tform.php
@@ -0,0 +1,127 @@
+<?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).
+
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
+
+
+*/
+global $app;
+$app->uses('getconf');
+$global_config = $app->getconf->get_global_config();
+
+$form["title"]    = "XMPP Account";
+$form["description"]  = "";
+$form["name"]    = "xmpp_user";
+$form["action"]   = "xmpp_user_edit.php";
+$form["db_table"]  = "xmpp_user";
+$form["db_table_idx"] = "xmppuser_id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "xmppuser";
+$form["list_default"] = "xmpp_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"]['xmppuser'] = array(
+	'title'  => "XMPP Account",
+	'width'  => 100,
+	'template'  => "templates/xmpp_user_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'jid' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'ISEMAIL',
+					'errmsg'=> 'jid_error_isemail'),
+				1 => array ( 'type' => 'UNIQUE',
+					'errmsg'=> 'jid_error_unique'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'searchable' => 1
+		),
+		'password' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'PASSWORD',
+			'validators' => array(
+				0 => array(
+					'type' => 'CUSTOM',
+					'class' => 'validate_password',
+					'function' => 'password_check',
+					'errmsg' => 'weak_password_txt'
+				)
+			),
+			'encryption'=> 'CRYPT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+?>
diff --git a/interface/web/mail/lib/lang/ar_backup_stats_list.lng b/interface/web/mail/lib/lang/ar_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/ar_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/ar_mail_alias.lng b/interface/web/mail/lib/lang/ar_mail_alias.lng
index 6736396..a0fa3b4 100644
--- a/interface/web/mail/lib/lang/ar_mail_alias.lng
+++ b/interface/web/mail/lib/lang/ar_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_forward.lng b/interface/web/mail/lib/lang/ar_mail_forward.lng
index 3baa601..120ec98 100644
--- a/interface/web/mail/lib/lang/ar_mail_forward.lng
+++ b/interface/web/mail/lib/lang/ar_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index 9574cd3..eae105f 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -20,6 +20,7 @@
 $wb['password_txt'] = 'Password';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- not enabled -';
diff --git a/interface/web/mail/lib/lang/bg_backup_stats_list.lng b/interface/web/mail/lib/lang/bg_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/bg_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/bg_mail_alias.lng b/interface/web/mail/lib/lang/bg_mail_alias.lng
index 6736396..a0fa3b4 100644
--- a/interface/web/mail/lib/lang/bg_mail_alias.lng
+++ b/interface/web/mail/lib/lang/bg_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_forward.lng b/interface/web/mail/lib/lang/bg_mail_forward.lng
index 2b9b4d4..a104032 100644
--- a/interface/web/mail/lib/lang/bg_mail_forward.lng
+++ b/interface/web/mail/lib/lang/bg_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Вече съществува пощенска кутия с такъв адрес.';
 $wb['domain_txt'] = 'Домейн';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 383dcb6..9d6cdbb 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'парола';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Разреши получаване';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Разреши достъп';
 $wb['policy_txt'] = 'Спам филтър';
 $wb['no_policy'] = '- забранен -';
diff --git a/interface/web/mail/lib/lang/br_backup_stats_list.lng b/interface/web/mail/lib/lang/br_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/br_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/br_mail_alias.lng b/interface/web/mail/lib/lang/br_mail_alias.lng
index 836885d..fbb4def 100644
--- a/interface/web/mail/lib/lang/br_mail_alias.lng
+++ b/interface/web/mail/lib/lang/br_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domínio';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_forward.lng b/interface/web/mail/lib/lang/br_mail_forward.lng
index 4f56fdd..9c1c3cd 100644
--- a/interface/web/mail/lib/lang/br_mail_forward.lng
+++ b/interface/web/mail/lib/lang/br_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Já existe uma caixa de correio com este endereço.';
 $wb['domain_txt'] = 'Domínio';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 5ddf6e7..2e88eba 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Senha';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Habilitar Recebimento';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Habilitar Acesso';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- desativado -';
diff --git a/interface/web/mail/lib/lang/cz_backup_stats_list.lng b/interface/web/mail/lib/lang/cz_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/cz_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/cz_mail_alias.lng b/interface/web/mail/lib/lang/cz_mail_alias.lng
index 119b849..60eb787 100644
--- a/interface/web/mail/lib/lang/cz_mail_alias.lng
+++ b/interface/web/mail/lib/lang/cz_mail_alias.lng
@@ -11,5 +11,6 @@
 $wb['domain_txt'] = 'Doména';
 $wb['duplicate_email_alias_txt'] = 'Tento e-mail alias již existuje.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
 
diff --git a/interface/web/mail/lib/lang/cz_mail_forward.lng b/interface/web/mail/lib/lang/cz_mail_forward.lng
index 054650a..a7e0d6c 100644
--- a/interface/web/mail/lib/lang/cz_mail_forward.lng
+++ b/interface/web/mail/lib/lang/cz_mail_forward.lng
@@ -6,5 +6,6 @@
 $wb['duplicate_mailbox_txt'] = 'Mailbox s touto adresou již existuje';
 $wb['domain_txt'] = 'Doména';
 $wb['source_txt'] = 'Zdrojový e-mail';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
 
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index 555d5d2..3f9a590 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -20,6 +20,7 @@
 $wb['password_txt'] = 'Heslo';
 $wb['maildir_txt'] = 'E-mailový adresář';
 $wb['postfix_txt'] = 'Povolit příjem';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povolit přístup';
 $wb['policy_txt'] = 'Spamový filtr';
 $wb['no_policy'] = '- nepovoleno -';
diff --git a/interface/web/mail/lib/lang/de_backup_stats_list.lng b/interface/web/mail/lib/lang/de_backup_stats_list.lng
new file mode 100644
index 0000000..e3b3fd6
--- /dev/null
+++ b/interface/web/mail/lib/lang/de_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Statistiken';
+$wb['active_txt']          = 'Aktiv';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Anz. Backups';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Intervall / Anz.';
+$wb['backup_size_txt'] = 'Backupgrösse';
+?>
diff --git a/interface/web/mail/lib/lang/de_mail_alias.lng b/interface/web/mail/lib/lang/de_mail_alias.lng
index c11499e..4115780 100644
--- a/interface/web/mail/lib/lang/de_mail_alias.lng
+++ b/interface/web/mail/lib/lang/de_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'Dieser E-Mail Alias existiert bereits.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Aktiviere Greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_domain.lng b/interface/web/mail/lib/lang/de_mail_domain.lng
index a795358..94c1bbe 100644
--- a/interface/web/mail/lib/lang/de_mail_domain.lng
+++ b/interface/web/mail/lib/lang/de_mail_domain.lng
@@ -4,10 +4,10 @@
 $wb['type_txt'] = 'Typ';
 $wb['active_txt'] = 'Aktiv';
 $wb["dkim_txt"] = 'DKIM aktivieren';
-$wb["dkim_private_txt"] = 'DKIM Private-key';
-$wb["dkim_public_txt"] = 'DKIM Public-key\nfor information only';
-$wb["dkim_generate_txt"] = 'erstelle DKIM Private-key';
-$wb["dkim_dns_txt"] = 'DNS-Record';
+$wb["dkim_private_txt"] = 'DKIM privater Schlüssel';
+$wb["dkim_public_txt"] = 'DKIM öffentlicher Schlüssel';
+$wb["dkim_generate_txt"] = 'erstelle DKIM Schlüssel';
+$wb["dkim_dns_txt"] = 'DNS Eintrag';
 $wb["dkim_private_key_error"] = 'ungueltiger DKIM-Private key';
 $wb['domain_error_empty'] = 'Domain ist leer';
 $wb['domain_error_unique'] = 'Doppelte Domain.';
diff --git a/interface/web/mail/lib/lang/de_mail_forward.lng b/interface/web/mail/lib/lang/de_mail_forward.lng
index a392ac4..15d0845 100644
--- a/interface/web/mail/lib/lang/de_mail_forward.lng
+++ b/interface/web/mail/lib/lang/de_mail_forward.lng
@@ -6,4 +6,6 @@
 $wb['duplicate_mailbox_txt'] = 'Es existiert bereits ein E-Mail Konto mit dieser Adresse.';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Quell E-Mail Adresse';
+$wb['email_error_isemail'] = 'Bitte geben Sie eine gültige E-Mail Adresse an.';
+$wb['greylisting_txt'] = 'Aktiviere greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 27ef433..33c08b0 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -17,6 +17,7 @@
 $wb['password_txt'] = 'Passwort';
 $wb['maildir_txt'] = 'E-Mail Verzeichnis';
 $wb['postfix_txt'] = 'Aktiviere Empfang';
+$wb['greylisting_txt'] = 'Aktiviere Greylisting';
 $wb['access_txt'] = 'Aktiviere Zugriff';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- nicht aktiviert -';
diff --git a/interface/web/mail/lib/lang/el_backup_stats_list.lng b/interface/web/mail/lib/lang/el_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/el_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/el_mail_alias.lng b/interface/web/mail/lib/lang/el_mail_alias.lng
index 7915af4..6902b50 100644
--- a/interface/web/mail/lib/lang/el_mail_alias.lng
+++ b/interface/web/mail/lib/lang/el_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_forward.lng b/interface/web/mail/lib/lang/el_mail_forward.lng
index ba16617..e4f2f64 100644
--- a/interface/web/mail/lib/lang/el_mail_forward.lng
+++ b/interface/web/mail/lib/lang/el_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Υπάρχει ήδη μια θυρίδα με αυτή τη διεύθυνση email';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 147874c..0e9db8c 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -20,6 +20,7 @@
 $wb['password_txt'] = 'Συνθηματικό';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Ενεργοποίηση Λήψης';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Ενεργοποίηση Πρόσβασης';
 $wb['policy_txt'] = 'Φίλτρο Spam';
 $wb['no_policy'] = '- ανενεργή -';
diff --git a/interface/web/mail/lib/lang/en_backup_stats_list.lng b/interface/web/mail/lib/lang/en_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/en_mail_alias.lng b/interface/web/mail/lib/lang/en_mail_alias.lng
index bcdafb3..6e9d828 100644
--- a/interface/web/mail/lib/lang/en_mail_alias.lng
+++ b/interface/web/mail/lib/lang/en_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb["duplicate_email_alias_txt"] = 'This email alias does already exist.';
 $wb["source_txt"] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_forward.lng b/interface/web/mail/lib/lang/en_mail_forward.lng
index 4482593..0704650 100644
--- a/interface/web/mail/lib/lang/en_mail_forward.lng
+++ b/interface/web/mail/lib/lang/en_mail_forward.lng
@@ -6,4 +6,6 @@
 $wb["duplicate_mailbox_txt"] = 'There is already a mailbox with this email address';
 $wb['domain_txt'] = 'Domain';
 $wb["source_txt"] = 'Source Email';
+$wb['email_error_isemail'] = 'Please enter a valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 65fdf4e..86c5b12 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -22,6 +22,7 @@
 $wb["password_txt"] = 'Password';
 $wb["maildir_txt"] = 'Maildir';
 $wb["postfix_txt"] = 'Enable receiving';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb["access_txt"] = 'Enable access';
 $wb["policy_txt"] = 'Spamfilter';
 $wb["no_policy"] = '- not enabled -';
diff --git a/interface/web/mail/lib/lang/en_xmpp_domain.lng b/interface/web/mail/lib/lang/en_xmpp_domain.lng
new file mode 100644
index 0000000..f1da77b
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_xmpp_domain.lng
@@ -0,0 +1,62 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["client_group_id_txt"] = 'Client';
+$wb["domain_txt"] = 'Domain';
+$wb["type_txt"] = 'Type';
+$wb["active_txt"] = 'Active';
+$wb["client_txt"] = 'Client';
+$wb["management_method_txt"] = 'Management of user accounts';
+$wb["public_registration_txt"] = 'Enable public registration';
+$wb["registration_url_txt"] = 'Registration URL';
+$wb["registration_message_txt"] = 'Registration Message';
+$wb["domain_admins_txt"] = 'Domain Admins (JIDs)';
+$wb["use_pubsub_txt"] = 'Enable Pubsub';
+$wb["use_proxy_txt"] = 'Enable Bytestream Proxy';
+$wb["use_anon_host_txt"] = 'Enable Anonymous Host';
+$wb["use_vjud_txt"] = 'Enable VJUD User Directory';
+$wb["vjud_opt_mode_txt"] = 'VJUD Opt Mode';
+$wb["use_muc_host_txt"] = 'Enable Multi User Chatrooms';
+$wb["muc_name_txt"] = 'Name in MUC Service Discovery';
+$wb["muc_restrict_room_creation_txt"] = 'Permission to create chatrooms';
+$wb["muc_admins_txt"] = 'MUC Admins (JIDs)';
+$wb["use_pastebin_txt"] = 'Enable Pastebin';
+$wb["pastebin_expire_after_txt"] = 'Pastes expire after (hours)';
+$wb["pastebin_trigger_txt"] = 'Pastebin trigger';
+$wb["use_http_archive_txt"] = 'Enable HTTP chatroom archive';
+$wb["http_archive_show_join_txt"] = 'Show join messages in archive';
+$wb["http_archive_show_status_txt"] = 'Show status changes in archive';
+$wb["use_status_host_txt"] = 'Enable XML Status host';
+$wb["cant_change_domainname_txt"] = 'The Domain name of existing XMPP domain cannot be changed.';
+$wb["about_registration_url_txt"] = 'Link to your registration form.';
+$wb["about_registration_message_txt"] = 'Description about your account registration process.';
+$wb["no_corresponding_maildomain_txt"] = 'Corresponding mail domain for user management not found. Please create the mail domain first.';
+$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_key_txt'] = 'SSL Key';
+$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_email_txt'] = 'Email Address';
+$wb['ssl_txt'] = 'SSL';
+$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['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['none_txt'] = 'None';
+$wb['save_certificate_txt'] = 'Save certificate';
+$wb['create_certificate_txt'] = 'Create certificate';
+$wb['delete_certificate_txt'] = 'Delete certificate';
+$wb['ssl_error_isemail'] = 'Please enter a valid email adress for generation of the SSL certificate';
+$wb["limit_xmppdomain_txt"] = 'The max. number of XMPP domains for your account is reached.';
+?>
diff --git a/interface/web/mail/lib/lang/en_xmpp_domain_admin_list.lng b/interface/web/mail/lib/lang/en_xmpp_domain_admin_list.lng
new file mode 100644
index 0000000..a3d1736
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_xmpp_domain_admin_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'XMPP 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_xmpp_domain_list.lng b/interface/web/mail/lib/lang/en_xmpp_domain_list.lng
new file mode 100644
index 0000000..f8c2fb9
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_xmpp_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb["list_head_txt"] = 'XMPP Domain';
+$wb["server_id_txt"] = 'Server';
+$wb["domain_txt"] = 'Domain';
+$wb["add_new_record_txt"] = 'Add new Domain';
+$wb["active_txt"] = 'Active';
+?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_xmpp_user.lng b/interface/web/mail/lib/lang/en_xmpp_user.lng
new file mode 100644
index 0000000..1cc852e
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_xmpp_user.lng
@@ -0,0 +1,15 @@
+<?php
+$wb["list_head_txt"] = 'XMPP User Accounts';
+$wb["jid_txt"] = 'Jabber ID';
+$wb["active_txt"] = 'Active';
+$wb["cryptpwd_txt"] = 'Password';
+$wb["password_strength_txt"] = 'Password strength';
+$wb["error_no_pwd"] = 'Password is empty.';
+$wb["password_txt"] = 'Password';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb["no_domain_perm"] = 'You have no permission for this domain.';
+$wb["limit_xmpp_user_txt"] = 'The max. number of xmpp accounts for your account is reached.';
+?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_xmpp_user_list.lng b/interface/web/mail/lib/lang/en_xmpp_user_list.lng
new file mode 100644
index 0000000..db88b0d
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_xmpp_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb["list_head_txt"] = 'XMPP User Accounts';
+$wb["jid_txt"] = 'Jabber ID';
+$wb["is_domain_admin_txt"] = 'Domain admin';
+$wb["is_muc_admin_txt"] = 'MUC admin';
+$wb["add_new_record_txt"] = 'Add new user';
+$wb["active_txt"] = 'Active';
+?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/es_backup_stats_list.lng b/interface/web/mail/lib/lang/es_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/es_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/es_mail_alias.lng b/interface/web/mail/lib/lang/es_mail_alias.lng
index 53c5be3..3dd122b 100644
--- a/interface/web/mail/lib/lang/es_mail_alias.lng
+++ b/interface/web/mail/lib/lang/es_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Dominio';
 $wb['duplicate_email_alias_txt'] = 'Este alias de correo ya existe.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_forward.lng b/interface/web/mail/lib/lang/es_mail_forward.lng
index d27d03e..5c63022 100644
--- a/interface/web/mail/lib/lang/es_mail_forward.lng
+++ b/interface/web/mail/lib/lang/es_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Ya existe un buzón de correo con esta dirección';
 $wb['domain_txt'] = 'Dominio';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_get.lng b/interface/web/mail/lib/lang/es_mail_get.lng
index f7ffc96..0ee18c5 100644
--- a/interface/web/mail/lib/lang/es_mail_get.lng
+++ b/interface/web/mail/lib/lang/es_mail_get.lng
@@ -14,6 +14,6 @@
 $wb['destination_error_isemail'] = 'No se ha seleccionado el destino.';
 $wb['source_server_error_regex'] = 'Servidor POP3/IMAP no es un nombre de dominio válido.';
 $wb['source_read_all_txt'] = 'Recoger todos los correos (incluído correos leídos)';
-$wb['error_delete_read_all_combination'] = 'Combinación de opciones no permitida. No puedes desactivar 'Borrar los correos después de recogerlos' y activar 'Recoger todos los correos'';
+$wb['error_delete_read_all_combination'] = "Combinación de opciones no permitida. No puedes desactivar 'Borrar los correos después de recogerlos' y activar 'Recoger todos los correos'";
 $wb['source_delete_note_txt'] = 'Por favor compruebe primero si la recogida de correo funciona antes de activar esta opción.';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index 9f83dae..21e34c9 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -19,6 +19,7 @@
 $wb['password_txt'] = 'Contraseña';
 $wb['maildir_txt'] = 'Directorio del buzón';
 $wb['postfix_txt'] = 'Habilitar la recepción';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Habilitar el acceso';
 $wb['policy_txt'] = 'Filtro de spam';
 $wb['no_policy'] = '- no habilitado -';
diff --git a/interface/web/mail/lib/lang/fi_backup_stats_list.lng b/interface/web/mail/lib/lang/fi_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/fi_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/fi_mail_alias.lng b/interface/web/mail/lib/lang/fi_mail_alias.lng
index 032bd52..d403806 100755
--- a/interface/web/mail/lib/lang/fi_mail_alias.lng
+++ b/interface/web/mail/lib/lang/fi_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_forward.lng b/interface/web/mail/lib/lang/fi_mail_forward.lng
index acdf7c1..d314bee 100755
--- a/interface/web/mail/lib/lang/fi_mail_forward.lng
+++ b/interface/web/mail/lib/lang/fi_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Edelleenlähetyssääntö osoitteelle on jo olemassa.';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index e92b7c1..68ca4d8 100755
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -15,6 +15,7 @@
 $wb['password_txt'] = 'Salasana';
 $wb['maildir_txt'] = 'Postikansio';
 $wb['postfix_txt'] = 'Salli vastaanotto';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Salli yhteys';
 $wb['policy_txt'] = 'Roskapostisuodatin';
 $wb['no_policy'] = '- ei käytössä -';
diff --git a/interface/web/mail/lib/lang/fr_backup_stats_list.lng b/interface/web/mail/lib/lang/fr_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/fr_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/fr_mail_alias.lng b/interface/web/mail/lib/lang/fr_mail_alias.lng
index 2b42733..22e7e51 100644
--- a/interface/web/mail/lib/lang/fr_mail_alias.lng
+++ b/interface/web/mail/lib/lang/fr_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domaine';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_forward.lng b/interface/web/mail/lib/lang/fr_mail_forward.lng
index e574dc5..e484cb3 100644
--- a/interface/web/mail/lib/lang/fr_mail_forward.lng
+++ b/interface/web/mail/lib/lang/fr_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Il y a déja une boite email avec cette adresse email';
 $wb['domain_txt'] = 'Domaine';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 8ed01af..1f60f96 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Mot de passe';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Activer l\'accès';
 $wb['policy_txt'] = 'Filtre antispam';
 $wb['no_policy'] = '- inactif -';
diff --git a/interface/web/mail/lib/lang/hr_backup_stats_list.lng b/interface/web/mail/lib/lang/hr_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/hr_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/hr_mail_alias.lng b/interface/web/mail/lib/lang/hr_mail_alias.lng
index 85cfcbd..06dc4cd 100644
--- a/interface/web/mail/lib/lang/hr_mail_alias.lng
+++ b/interface/web/mail/lib/lang/hr_mail_alias.lng
@@ -11,6 +11,7 @@
 $wb['domain_txt'] = 'Domena';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
 
 
diff --git a/interface/web/mail/lib/lang/hr_mail_forward.lng b/interface/web/mail/lib/lang/hr_mail_forward.lng
index b43a307..a4026e1 100644
--- a/interface/web/mail/lib/lang/hr_mail_forward.lng
+++ b/interface/web/mail/lib/lang/hr_mail_forward.lng
@@ -6,6 +6,7 @@
 $wb['duplicate_mailbox_txt'] = 'Već postoji mailbox sa tom email adresom';
 $wb['domain_txt'] = 'Domena';
 $wb['source_txt'] = 'Izvorni email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
 
 
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 8b3f3d7..83464c3 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -19,6 +19,7 @@
 $wb['password_txt'] = 'Šifra';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- not enabled -';
diff --git a/interface/web/mail/lib/lang/hu_backup_stats_list.lng b/interface/web/mail/lib/lang/hu_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/hu_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/hu_mail_alias.lng b/interface/web/mail/lib/lang/hu_mail_alias.lng
index e5c49a1..8eb1ab2 100644
--- a/interface/web/mail/lib/lang/hu_mail_alias.lng
+++ b/interface/web/mail/lib/lang/hu_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_forward.lng b/interface/web/mail/lib/lang/hu_mail_forward.lng
index 679937d..85db8a8 100644
--- a/interface/web/mail/lib/lang/hu_mail_forward.lng
+++ b/interface/web/mail/lib/lang/hu_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index b6da1ef..0d1a5a7 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -15,6 +15,7 @@
 $wb['password_txt'] = 'Jelszó';
 $wb['maildir_txt'] = 'levelezőláda';
 $wb['postfix_txt'] = 'Bejövő engedélyezés';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Hozzáférés engelyezés';
 $wb['policy_txt'] = 'Spam szűrő';
 $wb['no_policy'] = '- nem engelyézett -';
diff --git a/interface/web/mail/lib/lang/id_backup_stats_list.lng b/interface/web/mail/lib/lang/id_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/id_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/id_mail_alias.lng b/interface/web/mail/lib/lang/id_mail_alias.lng
index f92afe9..8a59091 100644
--- a/interface/web/mail/lib/lang/id_mail_alias.lng
+++ b/interface/web/mail/lib/lang/id_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_forward.lng b/interface/web/mail/lib/lang/id_mail_forward.lng
index 7677e56..f1c1a7d 100644
--- a/interface/web/mail/lib/lang/id_mail_forward.lng
+++ b/interface/web/mail/lib/lang/id_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Sudah ada mailbox untuk alamat email ini';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 4192ec1..896c3c4 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -20,6 +20,7 @@
 $wb['password_txt'] = 'Kata Sandi';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Dapat Menerima';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Dapat Mengakses';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- tidak diaktifkan -';
diff --git a/interface/web/mail/lib/lang/it_backup_stats_list.lng b/interface/web/mail/lib/lang/it_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/it_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/it_mail_alias.lng b/interface/web/mail/lib/lang/it_mail_alias.lng
index 0bf86d3..60efa1c 100644
--- a/interface/web/mail/lib/lang/it_mail_alias.lng
+++ b/interface/web/mail/lib/lang/it_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_forward.lng b/interface/web/mail/lib/lang/it_mail_forward.lng
index 3baa601..120ec98 100644
--- a/interface/web/mail/lib/lang/it_mail_forward.lng
+++ b/interface/web/mail/lib/lang/it_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index dd4bd0a..3ca8b77 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'password';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- not enabled -';
diff --git a/interface/web/mail/lib/lang/ja_backup_stats_list.lng b/interface/web/mail/lib/lang/ja_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/ja_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/ja_mail_alias.lng b/interface/web/mail/lib/lang/ja_mail_alias.lng
index d5b9cae..a2adf95 100644
--- a/interface/web/mail/lib/lang/ja_mail_alias.lng
+++ b/interface/web/mail/lib/lang/ja_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_forward.lng b/interface/web/mail/lib/lang/ja_mail_forward.lng
index 53adf76..0575498 100644
--- a/interface/web/mail/lib/lang/ja_mail_forward.lng
+++ b/interface/web/mail/lib/lang/ja_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'このメールアドレス向けのメールボックスが既に存在します。';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index 8e07a7b..48399ce 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'パスワード';
 $wb['maildir_txt'] = 'メールディレクトリ';
 $wb['postfix_txt'] = 'メールを受信する';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'アクセスを許可する';
 $wb['policy_txt'] = 'スパムフィルター';
 $wb['no_policy'] = '- 利用しない -';
diff --git a/interface/web/mail/lib/lang/nl_backup_stats_list.lng b/interface/web/mail/lib/lang/nl_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/nl_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/nl_mail_alias.lng b/interface/web/mail/lib/lang/nl_mail_alias.lng
index 5da82fa..fd1d2de 100644
--- a/interface/web/mail/lib/lang/nl_mail_alias.lng
+++ b/interface/web/mail/lib/lang/nl_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_forward.lng b/interface/web/mail/lib/lang/nl_mail_forward.lng
index b8ec9c4..8b34daa 100644
--- a/interface/web/mail/lib/lang/nl_mail_forward.lng
+++ b/interface/web/mail/lib/lang/nl_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Er is al een mailbox met dit e-mailadres';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 83e15b3..4a814b0 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -20,6 +20,7 @@
 $wb['password_txt'] = 'Wachtwoord';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Ontvangen inschakelen';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Toegang inschakelen';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- niet ingeschakeld -';
diff --git a/interface/web/mail/lib/lang/pl_backup_stats_list.lng b/interface/web/mail/lib/lang/pl_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/pl_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/pl_mail_alias.lng b/interface/web/mail/lib/lang/pl_mail_alias.lng
index ee50d0f..87c2e09 100644
--- a/interface/web/mail/lib/lang/pl_mail_alias.lng
+++ b/interface/web/mail/lib/lang/pl_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domena';
 $wb['duplicate_email_alias_txt'] = 'Istnieje już taki alias email.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_forward.lng b/interface/web/mail/lib/lang/pl_mail_forward.lng
index d975d5e..d0d57f2 100644
--- a/interface/web/mail/lib/lang/pl_mail_forward.lng
+++ b/interface/web/mail/lib/lang/pl_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Istnieje już skrzynka pocztowa o podanym adresie e-mail';
 $wb['domain_txt'] = 'Domena';
 $wb['source_txt'] = 'E-mail źródłowy';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index fab5903..7eb7b6d 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Hasło';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Zezwól na odbiór poczty';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Możliwy dostęp';
 $wb['policy_txt'] = 'Filtr spamu';
 $wb['no_policy'] = '- brak polityki -';
diff --git a/interface/web/mail/lib/lang/pt_backup_stats_list.lng b/interface/web/mail/lib/lang/pt_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/pt_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/pt_mail_alias.lng b/interface/web/mail/lib/lang/pt_mail_alias.lng
index 6e97678..f869413 100644
--- a/interface/web/mail/lib/lang/pt_mail_alias.lng
+++ b/interface/web/mail/lib/lang/pt_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_forward.lng b/interface/web/mail/lib/lang/pt_mail_forward.lng
index 05a609d..38569af 100644
--- a/interface/web/mail/lib/lang/pt_mail_forward.lng
+++ b/interface/web/mail/lib/lang/pt_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Já existe uma caixa de correio com este endereço.';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 56059a5..7a385d1 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Senha';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Permitir Recepção';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Permitir Acesso';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- desactivado -';
diff --git a/interface/web/mail/lib/lang/ro_backup_stats_list.lng b/interface/web/mail/lib/lang/ro_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/ro_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/ro_mail_alias.lng b/interface/web/mail/lib/lang/ro_mail_alias.lng
index 5e551d0..c67dd5b 100644
--- a/interface/web/mail/lib/lang/ro_mail_alias.lng
+++ b/interface/web/mail/lib/lang/ro_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_forward.lng b/interface/web/mail/lib/lang/ro_mail_forward.lng
index 5a744e1..5bea201 100644
--- a/interface/web/mail/lib/lang/ro_mail_forward.lng
+++ b/interface/web/mail/lib/lang/ro_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index a713ea9..7797195 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Password';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- not enabled -';
diff --git a/interface/web/mail/lib/lang/ru_backup_stats_list.lng b/interface/web/mail/lib/lang/ru_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/ru_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/ru_mail_alias.lng b/interface/web/mail/lib/lang/ru_mail_alias.lng
index c7fe52d..f5f8c7d 100644
--- a/interface/web/mail/lib/lang/ru_mail_alias.lng
+++ b/interface/web/mail/lib/lang/ru_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_forward.lng b/interface/web/mail/lib/lang/ru_mail_forward.lng
index 360e6a6..fcfbec1 100644
--- a/interface/web/mail/lib/lang/ru_mail_forward.lng
+++ b/interface/web/mail/lib/lang/ru_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Ящик с таким именем уже существует';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 4ec7718..1032b30 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -15,6 +15,7 @@
 $wb['password_txt'] = 'пароль';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Разрешить получение';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Включить доступ';
 $wb['policy_txt'] = 'Спам-фильтр';
 $wb['no_policy'] = '- не включено -';
diff --git a/interface/web/mail/lib/lang/se_backup_stats_list.lng b/interface/web/mail/lib/lang/se_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/se_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/se_mail_alias.lng b/interface/web/mail/lib/lang/se_mail_alias.lng
index e0f6135..bc30c0a 100644
--- a/interface/web/mail/lib/lang/se_mail_alias.lng
+++ b/interface/web/mail/lib/lang/se_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domän';
 $wb['duplicate_email_alias_txt'] = 'Detta epostalias finns redan';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_forward.lng b/interface/web/mail/lib/lang/se_mail_forward.lng
index af583f0..627d6eb 100644
--- a/interface/web/mail/lib/lang/se_mail_forward.lng
+++ b/interface/web/mail/lib/lang/se_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Det finns redan ett epostkonto med denna adress';
 $wb['domain_txt'] = 'Domän';
 $wb['source_txt'] = 'Källadress';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index d7d86b7..119a3df 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'lösenord';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Aktivera mottagning';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Aktivera åtkomst';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- ej aktiverat -';
diff --git a/interface/web/mail/lib/lang/sk_backup_stats_list.lng b/interface/web/mail/lib/lang/sk_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/sk_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/sk_mail_alias.lng b/interface/web/mail/lib/lang/sk_mail_alias.lng
index f5f8ace..bfd67e5 100644
--- a/interface/web/mail/lib/lang/sk_mail_alias.lng
+++ b/interface/web/mail/lib/lang/sk_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_forward.lng b/interface/web/mail/lib/lang/sk_mail_forward.lng
index 9ab8070..41444a6 100644
--- a/interface/web/mail/lib/lang/sk_mail_forward.lng
+++ b/interface/web/mail/lib/lang/sk_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Existuje už schránku s touto e-mailovou adresou';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index 3e8d794..07a90c5 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Heslo';
 $wb['maildir_txt'] = 'Mailová záložka';
 $wb['postfix_txt'] = 'Povoliť príjem';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povoliť Prístup';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- nepovolená -';
diff --git a/interface/web/mail/lib/lang/tr_backup_stats_list.lng b/interface/web/mail/lib/lang/tr_backup_stats_list.lng
new file mode 100644
index 0000000..9ae9658
--- /dev/null
+++ b/interface/web/mail/lib/lang/tr_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Email';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/mail/lib/lang/tr_mail_alias.lng b/interface/web/mail/lib/lang/tr_mail_alias.lng
index 263ab15..75bac3e 100644
--- a/interface/web/mail/lib/lang/tr_mail_alias.lng
+++ b/interface/web/mail/lib/lang/tr_mail_alias.lng
@@ -11,4 +11,5 @@
 $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
 $wb['source_txt'] = 'Alias';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_forward.lng b/interface/web/mail/lib/lang/tr_mail_forward.lng
index de13882..4da6d2f 100644
--- a/interface/web/mail/lib/lang/tr_mail_forward.lng
+++ b/interface/web/mail/lib/lang/tr_mail_forward.lng
@@ -6,4 +6,5 @@
 $wb['duplicate_mailbox_txt'] = 'Bu email adresiyle bir mail kutusu zaten bulunmakta';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 067c2c4..22566b7 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -16,6 +16,7 @@
 $wb['password_txt'] = 'Şifre';
 $wb['maildir_txt'] = 'Mail dizini';
 $wb['postfix_txt'] = 'Alış Aktif';
+$wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Erişim Aktif';
 $wb['policy_txt'] = 'Spam filtresi';
 $wb['no_policy'] = '- aktif değil -';
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index 45e06f2..ca7d177 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -7,6 +7,7 @@
 $module['template']  = 'module.tpl.htm';
 $module['startpage']  = 'mail/mail_domain_list.php';
 $module['tab_width']    = '';
+$module['order']    = '40';
 
 
 //**** Email accounts menu
@@ -148,6 +149,30 @@
 		'items' => $items);
 }
 
+//**** XMPP Menu
+$items = array();
+
+if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0)
+{
+    $items[] = array( 'title'  => 'XMPP Domain',
+        'target'  => 'content',
+        'link' => 'mail/xmpp_domain_list.php',
+        'html_id' => 'xmpp_domain_list');
+}
+
+if($app->auth->get_client_limit($userid, 'xmpp_user') != 0)
+{
+    $items[] = array( 'title'  => 'XMPP Account',
+        'target'  => 'content',
+        'link' => 'mail/xmpp_user_list.php',
+        'html_id' => 'xmpp_user_list');
+}
+
+if(count($items))
+    $module['nav'][] = array( 'title' => 'Jabber / XMPP',
+        'open'  => 1,
+        'items' => $items);
+
 
 
 //**** Statistics menu
@@ -164,7 +189,11 @@
 	'target'  => 'content',
 	'link' => 'mail/mail_user_stats.php',
 	'html_id' => 'mail_user_stats');
-
+$items[] = array (
+    'title'   => 'Backup Stats',
+    'target'  => 'content',
+    'link'    => 'mail/backup_stats.php',
+    'html_id' => 'backup_stats');
 
 
 $module['nav'][] = array( 'title' => 'Statistics',
diff --git a/interface/web/mail/lib/remote.conf.php b/interface/web/mail/lib/remote.conf.php
index 5ddec4e..ae03e99 100644
--- a/interface/web/mail/lib/remote.conf.php
+++ b/interface/web/mail/lib/remote.conf.php
@@ -17,6 +17,7 @@
 $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_user_backup'] = 'Mail Backup functions';
 $function_list['mail_filter_get,mail_filter_add,mail_filter_update,mail_filter_delete'] = 'Mail filter functions';
 
 
diff --git a/interface/web/mail/list/backup_stats.list.php b/interface/web/mail/list/backup_stats.list.php
new file mode 100644
index 0000000..22b87b3
--- /dev/null
+++ b/interface/web/mail/list/backup_stats.list.php
@@ -0,0 +1,54 @@
+<?php
+// Name of the list
+$liste["name"]     = "backup_stats";
+
+// Database table
+//$liste["table"]    = "mail_domain";
+$liste["table"]    = "mail_user";
+
+// Index index field of the database table
+//$liste["table_idx"]   = "domain_id";
+$liste["table_idx"]   = "mailuser_id";
+
+// Search Field Prefix
+$liste["search_prefix"]  = "search_";
+
+// Records per page
+$liste["records_per_page"]  = "15";
+
+// Script File of the list
+$liste["file"]    = "backup_stats.php";
+
+// Script file of the edit form
+$liste["edit_file"]   = "backup_stats_edit.php";
+
+// Paging Template
+$liste["paging_tpl"]  = "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]    = "yes";
+
+// mark columns for php sorting (no real mySQL columns)
+$liste["phpsort"] = array('used_sort', 'files');
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+$liste['item'][] = array (
+   	'field'    => 'server_id',
+	'datatype' => 'INTEGER',
+	'formtype' => 'SELECT',
+	'op'       => '=',
+	'prefix'   => '',
+	'width'    => '',
+	'value'    => '',
+	'suffix'   => '',
+	'datasource' => array (
+	  	'type'        => 'SQL',
+		'querystring' => 'SELECT a.server_id, a.server_name FROM server a, mail_domain b WHERE (a.server_id = b.server_id) ORDER BY a.server_name',
+		'keyfield'    => 'server_id',
+		'valuefield'  => 'server_name'
+	)
+);
diff --git a/interface/web/mail/list/mail_alias.list.php b/interface/web/mail/list/mail_alias.list.php
index 2f92e2c..fcbfb94 100644
--- a/interface/web/mail/list/mail_alias.list.php
+++ b/interface/web/mail/list/mail_alias.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "source",
diff --git a/interface/web/mail/list/mail_aliasdomain.list.php b/interface/web/mail/list/mail_aliasdomain.list.php
index c5dc4e3..8408e9e 100644
--- a/interface/web/mail/list/mail_aliasdomain.list.php
+++ b/interface/web/mail/list/mail_aliasdomain.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "source",
diff --git a/interface/web/mail/list/mail_blacklist.list.php b/interface/web/mail/list/mail_blacklist.list.php
index 434656b..4b6c81b 100644
--- a/interface/web/mail/list/mail_blacklist.list.php
+++ b/interface/web/mail/list/mail_blacklist.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 
diff --git a/interface/web/mail/list/mail_content_filter.list.php b/interface/web/mail/list/mail_content_filter.list.php
index aa79312..231460d 100644
--- a/interface/web/mail/list/mail_content_filter.list.php
+++ b/interface/web/mail/list/mail_content_filter.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 
diff --git a/interface/web/mail/list/mail_domain.list.php b/interface/web/mail/list/mail_domain.list.php
index 6756f5b..c2005ae 100644
--- a/interface/web/mail/list/mail_domain.list.php
+++ b/interface/web/mail/list/mail_domain.list.php
@@ -59,7 +59,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 if($_SESSION['s']['user']['typ'] == 'admin') {
@@ -70,7 +70,8 @@
 		'prefix' => "",
 		'suffix' => "",
 		'datasource' => array (  'type' => 'SQL',
-			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			//'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'querystring' => "SELECT sys_group.groupid,CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), IF(client.contact_firstname != '', CONCAT(client.contact_firstname, ' '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as name FROM sys_group, client WHERE sys_group.groupid != 1 AND sys_group.client_id = client.client_id ORDER BY client.company_name, client.contact_name",
 			'keyfield'=> 'groupid',
 			'valuefield'=> 'name'
 		),
diff --git a/interface/web/mail/list/mail_domain_catchall.list.php b/interface/web/mail/list/mail_domain_catchall.list.php
index 75d311d..4413c49 100644
--- a/interface/web/mail/list/mail_domain_catchall.list.php
+++ b/interface/web/mail/list/mail_domain_catchall.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "source",
diff --git a/interface/web/mail/list/mail_forward.list.php b/interface/web/mail/list/mail_forward.list.php
index 524c2a7..831e8b4 100644
--- a/interface/web/mail/list/mail_forward.list.php
+++ b/interface/web/mail/list/mail_forward.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "source",
diff --git a/interface/web/mail/list/mail_get.list.php b/interface/web/mail/list/mail_get.list.php
index aa93386..154401a 100644
--- a/interface/web/mail/list/mail_get.list.php
+++ b/interface/web/mail/list/mail_get.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/mail_relay_recipient.list.php b/interface/web/mail/list/mail_relay_recipient.list.php
index cc26721..eb6bdd9 100644
--- a/interface/web/mail/list/mail_relay_recipient.list.php
+++ b/interface/web/mail/list/mail_relay_recipient.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/mail_spamfilter.list.php b/interface/web/mail/list/mail_spamfilter.list.php
index 645feac..77bd491 100644
--- a/interface/web/mail/list/mail_spamfilter.list.php
+++ b/interface/web/mail/list/mail_spamfilter.list.php
@@ -54,7 +54,7 @@
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/mail_transport.list.php b/interface/web/mail/list/mail_transport.list.php
index d554da9..f45d083 100644
--- a/interface/web/mail/list/mail_transport.list.php
+++ b/interface/web/mail/list/mail_transport.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/mail_user.list.php b/interface/web/mail/list/mail_user.list.php
index 253aa90..fd15658 100644
--- a/interface/web/mail/list/mail_user.list.php
+++ b/interface/web/mail/list/mail_user.list.php
@@ -87,7 +87,7 @@
 	'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>"));
+	'value' => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "postfix",
 	'datatype' => "VARCHAR",
@@ -96,7 +96,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "disablesmtp",
 	'datatype' => "VARCHAR",
@@ -105,7 +105,7 @@
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "disableimap",
 	'datatype' => "VARCHAR",
@@ -114,7 +114,7 @@
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "disablepop3",
 	'datatype' => "VARCHAR",
@@ -123,6 +123,6 @@
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
+	'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 ?>
diff --git a/interface/web/mail/list/mail_whitelist.list.php b/interface/web/mail/list/mail_whitelist.list.php
index 2069a6b..d61da29 100644
--- a/interface/web/mail/list/mail_whitelist.list.php
+++ b/interface/web/mail/list/mail_whitelist.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/spamfilter_blacklist.list.php b/interface/web/mail/list/spamfilter_blacklist.list.php
index faadd53..76f9ebb 100644
--- a/interface/web/mail/list/spamfilter_blacklist.list.php
+++ b/interface/web/mail/list/spamfilter_blacklist.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/spamfilter_policy.list.php b/interface/web/mail/list/spamfilter_policy.list.php
index 03b3972..eeb8746 100644
--- a/interface/web/mail/list/spamfilter_policy.list.php
+++ b/interface/web/mail/list/spamfilter_policy.list.php
@@ -65,7 +65,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "spam_lover",
@@ -75,7 +75,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "banned_files_lover",
@@ -85,7 +85,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "bad_header_lover",
@@ -95,7 +95,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 
diff --git a/interface/web/mail/list/spamfilter_users.list.php b/interface/web/mail/list/spamfilter_users.list.php
index 6438d9f..0d65df5 100644
--- a/interface/web/mail/list/spamfilter_users.list.php
+++ b/interface/web/mail/list/spamfilter_users.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/spamfilter_whitelist.list.php b/interface/web/mail/list/spamfilter_whitelist.list.php
index 8e5d8b7..6f64638 100644
--- a/interface/web/mail/list/spamfilter_whitelist.list.php
+++ b/interface/web/mail/list/spamfilter_whitelist.list.php
@@ -54,7 +54,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/mail/list/xmpp_domain.list.php b/interface/web/mail/list/xmpp_domain.list.php
new file mode 100644
index 0000000..21257e4
--- /dev/null
+++ b/interface/web/mail/list/xmpp_domain.list.php
@@ -0,0 +1,109 @@
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+if($_SESSION['s']['user']['typ'] == 'admin') {
+	$liste["name"]     = "xmpp_domain_admin";
+} else {
+	$liste["name"]     = "xmpp_domain";
+}
+
+// Database table
+$liste["table"]    = "xmpp_domain";
+
+// Index index field of the database table
+$liste["table_idx"]   = "domain_id";
+
+// Search Field Prefix
+$liste["search_prefix"]  = "search_";
+
+// Records per page
+$liste["records_per_page"]  = "15";
+
+// Script File of the list
+$liste["file"]    = "xmpp_domain_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]   = "xmpp_domain_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]  = "xmpp_domain_del.php";
+
+// Paging Template
+$liste["paging_tpl"]  = "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]    = "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+
+$liste["item"][] = array( 'field'  => "active",
+	'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>"));
+
+
+if($_SESSION['s']['user']['typ'] == 'admin') {
+	$liste["item"][] = array( 'field'  => "sys_groupid",
+		'datatype' => "INTEGER",
+		'formtype' => "SELECT",
+		'op'  => "=",
+		'prefix' => "",
+		'suffix' => "",
+		'datasource' => array (  'type' => 'SQL',
+			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'keyfield'=> 'groupid',
+			'valuefield'=> 'name'
+		),
+		'width'  => "",
+		'value'  => "");
+}
+
+
+$liste["item"][] = array( 'field'  => "server_id",
+	'datatype' => "INTEGER",
+	'formtype' => "SELECT",
+	'op'  => "like",
+	'prefix' => "",
+	'suffix' => "",
+	'datasource' => array (  'type' => 'SQL',
+		'querystring' => 'SELECT a.server_id, a.server_name FROM server a, xmpp_domain b WHERE (a.server_id = b.server_id) AND ({AUTHSQL-B}) ORDER BY a.server_name',
+		'keyfield'=> 'server_id',
+		'valuefield'=> 'server_name'
+	),
+	'width'  => "",
+	'value'  => "");
+
+$liste["item"][] = array( 'field'  => "domain",
+	'datatype' => "VARCHAR",
+	'filters'   => array( 0 => array( 'event' => 'SHOW',
+			'type' => 'IDNTOUTF8')
+	),
+	'formtype' => "TEXT",
+	'op'  => "like",
+	'prefix' => "%",
+	'suffix' => "%",
+	'width'  => "",
+	'value'  => "");
+
+
+?>
diff --git a/interface/web/mail/list/xmpp_user.list.php b/interface/web/mail/list/xmpp_user.list.php
new file mode 100644
index 0000000..c1cdbb8
--- /dev/null
+++ b/interface/web/mail/list/xmpp_user.list.php
@@ -0,0 +1,62 @@
+<?php
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+
+// Name of the list
+$liste["name"]    = "xmpp_user";
+
+// Database table
+$liste["table"]   = "xmpp_user";
+
+// Index index field of the database table
+$liste["table_idx"]  = "xmppuser_id";
+
+// Search Field Prefix
+$liste["search_prefix"]  = "search_";
+
+// Records per page
+$liste["records_per_page"]  = "15";
+
+// Script File of the list
+$liste["file"]   = "xmpp_user_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]  = "xmpp_user_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]  = "xmpp_user_del.php";
+
+// Paging Template
+$liste["paging_tpl"]  = "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]   = "yes";
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+$liste["item"][] = array(   'field'     => "JID",
+	'datatype'  => "VARCHAR",
+	'filters'   => array( 0 => array( 'event' => 'SHOW',
+			'type' => 'IDNTOUTF8')
+	),
+	'formtype'  => "TEXT",
+	'op'        => "like",
+	'prefix'    => "%",
+	'suffix'    => "%",
+	'width'     => "",
+	'value'     => "");
+
+?>
diff --git a/interface/web/mail/mail_alias_edit.php b/interface/web/mail/mail_alias_edit.php
index ba08717..4292f8f 100644
--- a/interface/web/mail/mail_alias_edit.php
+++ b/interface/web/mail/mail_alias_edit.php
@@ -95,12 +95,12 @@
 		global $app, $conf;
 
 		// Check if Domain belongs to user
-		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
 		if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
 
 		//* Check if destination email belongs to user
 		if(isset($_POST["destination"])) {
-			$email = $app->db->queryOneRecord("SELECT email FROM mail_user WHERE email = '".$app->db->quote($app->functions->idn_encode($_POST["destination"]))."' AND ".$app->tform->getAuthSQL('r'));
+			$email = $app->db->queryOneRecord("SELECT email FROM mail_user WHERE email = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["destination"]));
 			if($email["email"] != $app->functions->idn_encode($_POST["destination"])) $app->tform->errorMessage .= $app->tform->lng("no_destination_perm");
 		}
 
@@ -108,11 +108,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailalias FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailalias FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_mailalias"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = $client_group_id AND type = 'alias'");
+				$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = ? AND type = 'alias'", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailalias"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailalias_txt"]."<br>";
 				}
@@ -130,15 +130,15 @@
 		unset($this->dataRecord["email_domain"]);
 
 		//* Check if there is no active mailbox with this address
-		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = '".$app->db->quote($this->dataRecord["source"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = ?", $this->dataRecord["source"]);
 		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_mailbox_txt")."<br>";
 		unset($tmp);
 
 		//* Check if email alias exists
 		if($this->id > 0) {
-			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE source = '".$app->db->quote($this->dataRecord["source"])."' AND destination = '".$app->db->quote($this->dataRecord["destination"])."' AND forwarding_id != ".$this->id);
+			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE source = ? AND destination = ? AND forwarding_id != ?", $this->dataRecord["source"], $this->dataRecord["destination"], $this->id);
 		} else {
-			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE source = '".$app->db->quote($this->dataRecord["source"])."' AND destination = '".$app->db->quote($this->dataRecord["destination"])."'");
+			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE source = ? AND destination = ?", $this->dataRecord["source"], $this->dataRecord["destination"]);
 		}
 		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_email_alias_txt")."<br>";
 		unset($tmp);
@@ -149,8 +149,8 @@
 	function onAfterInsert() {
 		global $app;
 
-		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->query("update mail_forwarding SET sys_groupid = ".$app->functions->intval($domain['sys_groupid'])." WHERE forwarding_id = ".$this->id);
+		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
+		$app->db->query("update mail_forwarding SET sys_groupid = ? WHERE forwarding_id = ?", $domain['sys_groupid'], $this->id);
 
 	}
 
diff --git a/interface/web/mail/mail_aliasdomain_edit.php b/interface/web/mail/mail_aliasdomain_edit.php
index 25e0484..918a5f3 100644
--- a/interface/web/mail/mail_aliasdomain_edit.php
+++ b/interface/web/mail/mail_aliasdomain_edit.php
@@ -97,11 +97,11 @@
 		global $app, $conf;
 
 		// Check if source Domain belongs to user
-		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["source"]))."' AND ".$app->tform->getAuthSQL('r'));
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["source"]));
 		if($domain["domain"] != $app->functions->idn_encode($_POST["source"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
 
 		// Check if the destination domain belongs to the user
-		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["destination"]))."' AND ".$app->tform->getAuthSQL('r'));
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["destination"]));
 		if($domain["domain"] != $app->functions->idn_encode($_POST["destination"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
 
 		// Check the client limits, if user is not the admin
@@ -115,10 +115,11 @@
 		} // end if user is not admin
 
 		if($this->dataRecord["source"] == $this->dataRecord["destination"]) $app->tform->errorMessage .= $app->tform->wordbook["source_destination_identical_txt"];
-
+		
+		/* TODO: check if this quoting is correkt! */
 		// compose the source and destination field
-		$this->dataRecord["source"] = "@".$app->db->quote($this->dataRecord["source"]);
-		$this->dataRecord["destination"] = "@".$app->db->quote($this->dataRecord["destination"]);
+		$this->dataRecord["source"] = "@".$this->dataRecord["source"];
+		$this->dataRecord["destination"] = "@".$this->dataRecord["destination"];
 		// Set the server id of the mailbox = server ID of mail domain.
 		$this->dataRecord["server_id"] = $app->functions->intval($domain["server_id"]);
 
@@ -128,8 +129,8 @@
 	function onAfterInsert() {
 		global $app;
 
-		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["destination"]))."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->query("update mail_forwarding SET sys_groupid = ".$app->functions->intval($domain['sys_groupid'])." WHERE forwarding_id = ".$this->id);
+		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["destination"]));
+		$app->db->query("update mail_forwarding SET sys_groupid = ? WHERE forwarding_id = ?", $domain['sys_groupid'], $this->id);
 
 	}
 
diff --git a/interface/web/mail/mail_blacklist_edit.php b/interface/web/mail/mail_blacklist_edit.php
index 23f7516..b4a2a22 100644
--- a/interface/web/mail/mail_blacklist_edit.php
+++ b/interface/web/mail/mail_blacklist_edit.php
@@ -73,7 +73,7 @@
 		//* 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 from mail_access WHERE access_id = ".$this->id);
+			$rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_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.');
@@ -90,11 +90,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?" , $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_mailfilter"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailfilter"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailfilter_txt"]."<br>";
 				}
diff --git a/interface/web/mail/mail_content_filter_edit.php b/interface/web/mail/mail_content_filter_edit.php
index 5672135..dce1f05 100644
--- a/interface/web/mail/mail_content_filter_edit.php
+++ b/interface/web/mail/mail_content_filter_edit.php
@@ -58,7 +58,7 @@
 		//* 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 from mail_content_filter WHERE content_filter_id = ".$this->id);
+			$rec = $app->db->queryOneRecord("SELECT server_id from mail_content_filter WHERE content_filter_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.');
diff --git a/interface/web/mail/mail_domain_catchall_edit.php b/interface/web/mail/mail_domain_catchall_edit.php
index 8072949..60da619 100644
--- a/interface/web/mail/mail_domain_catchall_edit.php
+++ b/interface/web/mail/mail_domain_catchall_edit.php
@@ -94,18 +94,18 @@
 		global $app, $conf;
 
 		// Check if Domain belongs to user
-		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
 		if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
 
 		// Check the client limits, if user is not the admin
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailcatchall FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailcatchall FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another catchall
 			if($this->id == 0 && $client["limit_mailcatchall"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = $client_group_id AND type = 'catchall'");
+				$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = ? AND type = 'catchall'", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailcatchall"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailcatchall_txt"]."<br>";
 				}
@@ -127,8 +127,8 @@
 	function onAfterInsert() {
 		global $app;
 
-		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->query("update mail_forwarding SET sys_groupid = ".$app->functions->intval($domain['sys_groupid'])." WHERE forwarding_id = ".$this->id);
+		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
+		$app->db->query("update mail_forwarding SET sys_groupid = ? WHERE forwarding_id = ?", $domain['sys_groupid'], $this->id);
 
 	}
 
diff --git a/interface/web/mail/mail_domain_del.php b/interface/web/mail/mail_domain_del.php
index ba715a6..6941cd6 100644
--- a/interface/web/mail/mail_domain_del.php
+++ b/interface/web/mail/mail_domain_del.php
@@ -60,31 +60,31 @@
 		// we will delete all depending records.
 
 		// Delete all forwardings where the source 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)."' AND type != 'forward')");
+		$records = $app->db->queryAllRecords("SELECT forwarding_id as id FROM mail_forwarding WHERE source like ? OR (destination like ? AND type != 'forward')", '%@' . $domain, '%@' . $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)."'");
+		$records = $app->db->queryAllRecords("SELECT mailget_id as id FROM mail_get WHERE destination like ?", '%@' . $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)."'");
+		$records = $app->db->queryAllRecords("SELECT mailuser_id as id FROM mail_user WHERE email like ?", '%@' . $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)."'");
+		$records = $app->db->queryAllRecords("SELECT id FROM spamfilter_users WHERE email = ?", '%@' . $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)."'");
+		$records = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = ?", $domain);
 		foreach($records as $rec) {
 			$app->db->datalogDelete('mail_mailinglist', 'mailinglist_id', $rec['id']);
 		}
diff --git a/interface/web/mail/mail_domain_dkim_create.php b/interface/web/mail/mail_domain_dkim_create.php
index bd9ff9c..940c110 100644
--- a/interface/web/mail/mail_domain_dkim_create.php
+++ b/interface/web/mail/mail_domain_dkim_create.php
@@ -57,23 +57,6 @@
 }
 
 /**
- * This function fix PHP's messing up POST input containing characters space, dot,
- * open square bracket and others to be compatible with with the deprecated register_globals
- * @return array POST
- */
-function getRealPOST() {
-	$pairs = explode("&", file_get_contents("php://input"));
-	$vars = array();
-	foreach ($pairs as $pair) {
-		$nv = explode("=", $pair, 2);
-		$name = urldecode($nv[0]);
-		$value = $nv[1];
-		$vars[$name] = $value;
-	}
-	return $vars;
-}
-
-/**
  * This function formats the public-key
  * @param array $pubkey
  * @return string public-key
@@ -101,7 +84,7 @@
  * @param string $old_selector
  * @return string selector
  */
-function new_selector ($old_selector, $domain) {
+function new_selector ($old_selector, $domain, $client_id = -1) {
 	global $app;
 	//* validate post-values
 	if ( validate_domain($domain) && validate_selector($old_selector) ) {
@@ -110,12 +93,23 @@
 		if ( isset($soa_rec) && !empty($soa_rec) ) {
 			//* check for a dkim-record in the dns?
 			$dns_data = $app->db->queryOneRecord("SELECT name FROM dns_rr WHERE name = ? AND active = 'Y'", $old_selector.'._domainkey.'.$domain.'.');
-			$selector = str_replace( '._domainkey.'.$domain.'.', '', $dns_data['name']);
-				if ( $old_selector == $selector) {
-					$selector = substr($old_selector, 0, 53) . time(); //* add unix-timestamp to delimiter to allow old and new key in the dns
-				} else {
-					$selector = $old_selector;
+			if ( !empty($dns_data) ){
+				$selector = str_replace( '._domainkey.'.$domain.'.', '', $dns_data['name']);
+			} else {
+			}
+		} else { //* no dns-zone found - check for existing mail-domain to create a new selector (we need this if a external dns is used)
+			if ( $client_id >= 0 ) {
+				$sql = "SELECT * from mail_domain WHERE dkim = 'y' AND domain = ? AND dkim_selector = ?";
+				$maildomain =  $app->db->queryOneRecord($sql, $domain, $old_selector);
+				if ( !empty($maildomain) ) {
+					$selector = $maildomain['selector'];
 				}
+			}
+		}
+		if ( $old_selector == $selector) {
+			$selector = substr($old_selector, 0, 53) . time(); //* add unix-timestamp to delimiter to allow old and new key in the dns
+		} else {
+			$selector = $old_selector;
 		}
 	} else {
 		$selector = 'invalid domain or selector';
@@ -123,35 +117,35 @@
 	return $selector;
 }
 
+$client_id = $app->functions->intval($_POST['client_id']);
+
 //* get dkim-strength for server_id
-//$mail_server_id = $app->functions->intval( $app->db->queryOneRecord("SELECT server_id from mail_domain WHERE domain = ?", $_POST['domain']) );
-//$dkim_strength = $app->functions->intval( $app->getconf->get_server_config($mail_server_id, 'mail')['dkim_strength'] );
-$rec = $app->db->queryOneRecord("SELECT server_id from mail_domain WHERE domain = ?", $_POST['domain']);
-$mail_server_id = $app->functions->intval($rec['server_id']);
-unset ($rec);
-$rec = $app->getconf->get_server_config($mail_server_id, 'mail');
-$dkim_strength = $app->functions->intval($rec['dkim_strength']);
-unset ($rec);
-if ( empty($dkim_strength) ) $dkim_strength = 1024;
-
-switch ($_POST['action']) {
-	case 'create': /* create DKIM Private-key */
-		$_POST=getRealPOST();
-		$rnd_val = $dkim_strength * 10;
-		exec('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
-		exec('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
-		unlink('../../temp/random-data.bin');
-		foreach($privkey as $values) $private_key=$private_key.$values."\n";
-		//* check the selector for updated dkim-settings only
-		if ( isset($_POST['dkim_public']) && !empty($_POST['dkim_public']) ) $selector = new_selector($_POST['dkim_selector'], $_POST['domain']); 
-	break;
-
-	case 'show': /* show the DNS-Record onLoad */
-		$private_key=$_POST['dkim_private'];
-	break;
+$sql = "SELECT server_id from mail_domain WHERE domain = ?";
+$mail_server = $app->db->queryOneRecord($sql, $_POST['domain']);
+if ( is_array($mail_server) ) { //* we are adding an existing mail-domain
+	$mail_server_id = $app->functions->intval( $mail_server['server_id'] );
+} else {
+	$sql = "SELECT default_mailserver FROM client WHERE client_id = ?";
+	$mail_server = $app->db->queryOneRecord($sql, $client_id);
+	$mail_server_id = $app->functions->intval( $mail_server['default_mailserver'] );
 }
+unset($mail_server);
+$mail_config = $app->getconf->get_server_config($mail_server_id, 'mail');
+$dkim_strength = $app->functions->intval($mail_config['dkim_strength']);
+unset($mail_config);
 
-$public_key=get_public_key($private_key, $dkim_strength);
+if ( empty($dkim_strength) ) $dkim_strength = 2048;
+
+$rnd_val = $dkim_strength * 10;
+exec('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
+exec('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
+unlink("../../temp/random-data.bin");
+foreach($privkey as $values) $private_key=$private_key.$values."\n";
+//* check the selector for updated dkim-settings only
+if ( isset($_POST['dkim_public']) && !empty($_POST['dkim_public']) ) $selector = new_selector($_POST['dkim_selector'], $_POST['domain'], $client_id); 
+
+if ( !isset($public_key) ) $public_key=get_public_key($private_key, $dkim_strength);
+
 $dns_record=str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$public_key);
 
 if ( !isset($selector) ) {
@@ -163,7 +157,7 @@
 echo "<privatekey>".$private_key."</privatekey>\n";
 echo "<publickey>".$public_key."</publickey>\n";
 if ( validate_domain($_POST['domain']) ) {
-	echo '<dns_record>'.$selector.'_domainkey.'.$_POST['domain'].'. 3600	TXT	"v=DKIM1; t=s; p='.$dns_record.'"</dns_record>';
+	echo '<dns_record>'.$selector.'._domainkey.'.$_POST['domain'].'. 3600	TXT	"v=DKIM1; t=s; p='.$dns_record.'"</dns_record>';
 }
 echo "</formatname>\n";
 ?>
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index b3ea30b..693013b 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -95,18 +95,18 @@
 
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.default_mailserver, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id order by client.contact_name");
+			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.default_mailserver, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ? order by client.contact_name", $client_group_id);
 
 			// 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]");
+			$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);
 
 			if ($settings['use_domain_module'] != 'y') {
 				// Fill the client select field
-				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$app->functions->intval($client['client_id'])." ORDER BY client.company_name, client.contact_name, sys_group.name";
-				$clients = $app->db->queryAllRecords($sql);
-				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
+				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+				$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 				//$tmp_data_record = $app->tform->getDataRecord($this->id);
 				if(is_array($clients)) {
@@ -122,7 +122,7 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin')
 		{
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client_mail = $app->db->queryOneRecord("SELECT mail_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client_mail = $app->db->queryOneRecord("SELECT mail_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			$client_mail['mail_servers_ids'] = explode(',', $client_mail['mail_servers']);
 
@@ -133,13 +133,13 @@
 				$app->tpl->setVar('server_id_value', $client_mail['mail_servers_ids'][0]);
 			}
 
-			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client_mail['mail_servers'] . ");";
-			$mail_servers = $app->db->queryAllRecords($sql);
+			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+			$mail_servers = $app->db->queryAllRecords($sql, $client_mail['mail_servers_ids']);
 
 			$options_mail_servers = "";
 
 			foreach ($mail_servers as $mail_server) {
-				$options_mail_servers .= "<option value='$mail_server[server_id]'>$mail_server[server_name]</option>";
+				$options_mail_servers .= '<option value="'.$mail_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $mail_server['server_id'] ? ' selected="selected"' : '').'>'.$mail_server['server_name'].'</option>';
 			}
 
 			$app->tpl->setVar("client_server_id", $options_mail_servers);
@@ -183,7 +183,7 @@
 
 
 		// Get the spamfilter policys for the user
-		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = '@".$app->db->quote($this->dataRecord["domain"])."'");
+		$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')." ORDER BY policy_name";
 		$policys = $app->db->queryAllRecords($sql);
 		$policy_select = "<option value='0'>".$app->tform->wordbook["no_policy"]."</option>";
@@ -205,6 +205,16 @@
 		} else {
 			$app->tpl->setVar("edit_disabled", 0);
 		}
+
+		// load dkim-values
+		$sql = "SELECT domain, dkim_private, dkim_public, dkim_selector FROM mail_domain WHERE domain_id = ?";
+		$rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id']));
+		$dns_key = str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$rec['dkim_public']);
+		$dns_record = '.' . $rec['dkim_selector'] . '_domainkey._' . $rec['domain'] . '. 3600   TXT   v=DKIM1; t=s; p=' . $dns_key;
+		$app->tpl->setVar('dkim_selector', $rec['dkim_selector']);
+		$app->tpl->setVar('dkim_private', $rec['dkim_private']);
+		$app->tpl->setVar('dkim_public', $rec['dkim_public']);
+		if (!empty($rec['dkim_public'])) $app->tpl->setVar('dns_record', $dns_record);
 
 		parent::onShowEnd();
 	}
@@ -231,11 +241,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_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");
+			$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 = ".$app->functions->intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT server_id FROM mail_domain WHERE domain_id = ?", $this->id);
 				$this->dataRecord["server_id"] = $tmp["server_id"];
 				unset($tmp);
 				// When the record is inserted
@@ -248,7 +258,7 @@
 				}
 
 				if($client["limit_maildomain"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE sys_groupid = $client_group_id");
+					$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"]);
 					}
@@ -272,50 +282,37 @@
 		// Spamfilter policy
 		$policy_id = $app->functions->intval($this->dataRecord["policy"]);
 		if($policy_id > 0) {
-			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($this->dataRecord["domain"])."'");
+			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->dataRecord["domain"]);
 			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"]);
+				$app->db->datalogUpdate('spamfilter_users', array("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);
+				$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"].", ".$app->functions->intval($tmp_domain["sys_groupid"]).", 'riud', 'riud', '', ".$app->functions->intval($this->dataRecord["server_id"]).", 5, ".$app->functions->intval($policy_id).", '@".$app->db->quote($this->dataRecord["domain"])."', '@".$app->db->quote($this->dataRecord["domain"])."', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $_SESSION["s"]["user"]["userid"], 
+					"sys_groupid" => $tmp_domain["sys_groupid"],
+					"sys_perm_user" => 'riud', 
+					"sys_perm_group" => 'riud', 
+					"sys_perm_other" => '',
+					"server_id" => $this->dataRecord["server_id"],
+					"priority" => 5,
+					"policy_id" => $policy_id,
+					"email" => '@' . $this->dataRecord["domain"],
+					"fullname" => '@' . $this->dataRecord["domain"],
+					"local" => 'Y'
+				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
 				unset($tmp_domain);
 			}
 		} // endif spamfilter policy
 
 		//* create dns-record with dkim-values if the zone exists
-		if ( (isset($this->dataRecord['dkim']) && $this->dataRecord['dkim'] == 'y') && (isset($this->dataRecord['active']) && $this->dataRecord['active'] == 'y') ) {
-			$soa_rec = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
-			if ( isset($soa_rec) && !empty($soa_rec) ) {
-				//* check for a dkim-record in the dns
-				$dns_data = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE name = ? AND sys_groupid = ?", $this->dataRecord['dkim_selector'].'._domainkey.'.$this->dataRecord['domain'].'.', $_SESSION["s"]["user"]['sys_groupid']);
-				if ( isset($dns_data) && !empty($dns_data) ) {
-					$dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $this->dataRecord['dkim_public']);
-					$dns_data['active'] = 'Y';
-					$dns_data['stamp'] = date('Y-m-d H:i:s');
-					$dns_data['serial'] = $app->validate_dns->increase_serial($dns_data['serial']);
-					$app->db->datalogUpdate('dns_rr', $dns_data, 'id', $dns_data['id']);
-					$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $dns_data['zone']);
-					$new_serial = $app->validate_dns->increase_serial($zone['serial']);
-					$app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
-				} else { //* no dkim-record found - create new record
-					$dns_data = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
-					$dns_data['name'] = $this->dataRecord['dkim_selector'].'._domainkey.'.$this->dataRecord['domain'].'.';
-					$dns_data['type'] = 'TXT';
-					$dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $this->dataRecord['dkim_public']);
-					$dns_data['aux'] = 0;
-					$dns_data['active'] = 'Y';
-					$dns_data['stamp'] = date('Y-m-d H:i:s');
-					$dns_data['serial'] = $app->validate_dns->increase_serial($dns_data['serial']);
-					$app->db->datalogInsert('dns_rr', $dns_data, 'id', $dns_data['zone']);
-					$new_serial = $app->validate_dns->increase_serial($soa_rec['serial']);
-					$app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $soa_rec['zone']);
-				}
-			}
-		} //* endif add dns-record
+		if ( $this->dataRecord['active'] == 'y' && $this->dataRecord['dkim'] == 'y' ) {
+			$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
+			if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
+		}
+
 	}
 
 	function onBeforeUpdate() {
@@ -324,7 +321,7 @@
 		//* 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);
+			$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.');
@@ -334,7 +331,7 @@
 			//* 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);
+			$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.');
@@ -343,68 +340,6 @@
 			unset($rec);
 		}
 
-		//* update dns-record when the dkim record was changed
-		// NOTE: only if the domain-name was not changed
-
-		//* get domain-data from the db
-		$mail_data = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $this->dataRecord['domain']);
-		
-		if ( isset($mail_data) && !empty($mail_data) ) {
-			$post_data = $mail_data;
-			$post_data['dkim_selector'] = $this->dataRecord['dkim_selector'];
-			$post_data['dkim_public'] = $this->dataRecord['dkim_public'];
-			$post_data['dkim_private'] = $this->dataRecord['dkim_private'];
-			if ( isset($this->dataRecord['dkim']) ) $post_data['dkim'] = 'y'; else $post_data['dkim'] = 'n';
-			if ( isset($this->dataRecord['active']) ) $post_data['active'] = 'y'; else      $post_data['active'] = 'n';
-		}
-
-		//* dkim-value changed
-		if ( $mail_data != $post_data ) {
-			//* get the dns-record for the public from the db
-			$dns_data = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE name = ? AND sys_groupid = ?", $mail_data['dkim_selector'].'._domainkey.'.$mail_data['domain'].'.', $mail_data['sys_groupid']);
-
-			//* we modify dkim dns-values for active mail-domains only
-			if ( $post_data['active'] == 'y' ) {
-				if ( $post_data['dkim'] == 'n' ) {
-					$new_dns_data['active'] = 'N';
-				} else {
-					if ( $post_data['dkim_selector'] != $mail_data['dkim_selector'] )
-						$new_dns_data['name'] = $post_data['dkim_selector'].'._domainkey.'.$post_data['domain'].'.';
-					if ( $post_data['dkim'] != $mail_data['dkim'] )
-						$new_dns_data['active'] = 'Y';
-					if ( $post_data['active'] != $mail_data['active'] && $post_data['active'] == 'y' )
-						$new_dns_data['active'] = 'Y';
-					if ( $post_data['dkim_public'] != $mail_data['dkim_public'] )
-						$new_dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $post_data['dkim_public']);
-				}
-			} else $new_dns_data['active'] = 'N';
-
-			if ( isset($dns_data) && !empty($dns_data) && isset($new_dns_data) ) {
-				//* update dns-record
-				$new_dns_data['serial'] = $app->validate_dns->increase_serial($dns_data['serial']);
-				$app->db->datalogUpdate('dns_rr', $new_dns_data, 'id', $dns_data['id']);
-				$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $dns_data['zone']);
-				$new_serial = $app->validate_dns->increase_serial($zone['serial']);
-				$app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
-			} else {
-				//* create a new dns-record
-				$new_dns_data = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $mail_data['domain'].'.');
-				//* create a new record only if the dns-zone exists
-				if ( isset($new_dns_data) && !empty($new_dns_data) && $post_data['dkim'] == 'y' ) {
-					$new_dns_data['name'] = $post_data['dkim_selector'].'._domainkey.'.$post_data['domain'].'.';
-					$new_dns_data['type'] = 'TXT';
-					$new_dns_data['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $post_data['dkim_public']);
-					$new_dns_data['aux'] = 0;
-					$new_dns_data['active'] = 'Y';
-					$new_dns_data['stamp'] = date('Y-m-d H:i:s');
-					$new_dns_data['serial'] = $app->validate_dns->increase_serial($new_dns_data['serial']);
-					$app->db->datalogInsert('dns_rr', $new_dns_data, 'id', $new_dns_data['zone']);
-					$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_dns_data['zone']);
-					$new_serial = $app->validate_dns->increase_serial($zone['serial']);
-					$app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
-				}
-			}
-		} //* endif $mail_data != $post_data
 	}
 
 	function onAfterUpdate() {
@@ -412,16 +347,27 @@
 
 		// Spamfilter policy
 		$policy_id = $app->functions->intval($this->dataRecord["policy"]);
-		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($this->dataRecord["domain"])."'");
+		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $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"]);
+				$app->db->datalogUpdate('spamfilter_users', array("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);
+				$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"].", ".$app->functions->intval($tmp_domain["sys_groupid"]).", 'riud', 'riud', '', ".$app->functions->intval($this->dataRecord["server_id"]).", 5, ".$app->functions->intval($policy_id).", '@".$app->db->quote($this->dataRecord["domain"])."', '@".$app->db->quote($this->dataRecord["domain"])."', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $_SESSION["s"]["user"]["userid"], 
+					"sys_groupid" => $tmp_domain["sys_groupid"],
+					"sys_perm_user" => 'riud', 
+					"sys_perm_group" => 'riud', 
+					"sys_perm_other" => '',
+					"server_id" => $this->dataRecord["server_id"],
+					"priority" => 5,
+					"policy_id" => $policy_id,
+					"email" => '@' . $this->dataRecord["domain"],
+					"fullname" => '@' . $this->dataRecord["domain"],
+					"local" => 'Y'
+				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
 				unset($tmp_domain);
 			}
@@ -437,9 +383,9 @@
 			$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 '%@".$app->db->quote($this->oldDataRecord['domain'])."'");
+			$mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like ?", '%@' . $this->oldDataRecord['domain']);
 			$sys_groupid = $app->functions->intval((isset($this->dataRecord['client_group_id']))?$this->dataRecord['client_group_id']:$this->oldDataRecord['sys_groupid']);
-			$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = $client_group_id");
+			$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id);
 			$client_user_id = $app->functions->intval(($tmp['userid'] > 0)?$tmp['userid']:1);
 			if(is_array($mailusers)) {
 				foreach($mailusers as $rec) {
@@ -447,41 +393,99 @@
 					$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 = $app->db->quote($maildir);
-					$email = $app->db->quote($mail_parts[0].'@'.$this->dataRecord['domain']);
-					$app->db->datalogUpdate('mail_user', "maildir = '$maildir', email = '$email', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailuser_id', $rec['mailuser_id']);
+					$email = $mail_parts[0].'@'.$this->dataRecord['domain'];
+					$app->db->datalogUpdate('mail_user', array("maildir" => $maildir, "email" => $email, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailuser_id', $rec['mailuser_id']);
 				}
 			}
 
 			//* Update the aliases
-			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like '%@".$app->db->quote($this->oldDataRecord['domain'])."' OR destination like '%@".$app->db->quote($this->oldDataRecord['domain'])."'");
+			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like ? OR destination like ?", '%@' . $this->oldDataRecord['domain'], '%@' . $this->oldDataRecord['domain']);
 			if(is_array($forwardings)) {
 				foreach($forwardings as $rec) {
-					$destination = $app->db->quote(str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']));
-					$source = $app->db->quote(str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['source']));
-					$app->db->datalogUpdate('mail_forwarding', "source = '$source', destination = '$destination', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'forwarding_id', $rec['forwarding_id']);
+					$destination = str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']);
+					$source = str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['source']);
+					$app->db->datalogUpdate('mail_forwarding', array("source" => $source, "destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'forwarding_id', $rec['forwarding_id']);
 				}
 			}
 
 			//* Update the mailinglist
-			$app->db->query("UPDATE mail_mailinglist SET sys_userid = $client_user_id, sys_groupid = $sys_groupid WHERE domain = '".$app->db->quote($this->oldDataRecord['domain'])."'");
+			$app->db->query("UPDATE mail_mailinglist SET sys_userid = ?, sys_groupid = ? WHERE domain = ?", $client_user_id, $sys_groupid, $this->oldDataRecord['domain']);
 			
 			//* Update fetchmail accounts
-			$fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like '%@".$app->db->quote($this->oldDataRecord['domain'])."'");
+			$fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like ?", '%@' . $this->oldDataRecord['domain']);
 			if(is_array($fetchmail)) {
 				foreach($fetchmail as $rec) {
-					$destination = $app->db->quote(str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']));
-					$app->db->datalogUpdate('mail_get', "destination = '$destination', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailget_id', $rec['mailget_id']);
+					$destination = str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']);
+					$app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']);
 				}
 			}
 			
 			//* Delete the old spamfilter record
-			$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($this->oldDataRecord["domain"])."'");
+			$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->oldDataRecord["domain"]);
 			$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
 			unset($tmp);
 
 		} // end if domain name changed
 
+		//* update dns-record when the dkim record was changed
+		// NOTE: only if the domain-name was not changed
+		if ( $this->dataRecord['active'] == 'y' && $this->dataRecord['domain'] ==  $this->oldDataRecord['domain'] ) {
+			$dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false; 
+			$selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false;
+			$dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false;
+
+			$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
+
+			if ( ($selector || $dkim_private || $dkim_active) && $dkim_active )
+				//* create a new record only if the dns-zone exists
+				if ( isset($soa) && !empty($soa) ) {
+					$this->update_dns($this->dataRecord, $soa);
+				}
+			if (! $dkim_active) {
+				// updated existing dmarc-record to policy 'none'
+				$sql = "SELECT * from dns_rr WHERE name = ? AND data LIKE 'v=DMARC1%' AND " . $app->tform->getAuthSQL('r');
+				$rec = $app->db->queryOneRecord($sql, '_dmarc.'.$this->dataRecord['domain'].'.');
+				if (is_array($rec))
+					if (strpos($rec['data'], 'p=none=') === false) {
+						$rec['data'] = str_replace(array('quarantine', 'reject'), 'none', $rec['data']);
+						$app->db->datalogUpdate('dns_rr', $rec, 'id', $rec['id']);
+						$soa_id = $app->functions->intval($soa['zone']);
+						$serial = $app->validate_dns->increase_serial($soa["serial"]);
+						$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
+					}	
+				}
+		}
+
+	}
+
+	private function update_dns($dataRecord, $new_rr) {
+		global $app, $conf;
+
+		// purge old rr-record(s)
+		$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND data LIKE 'v=DKIM1%' AND " . $app->tform->getAuthSQL('r') . " ORDER BY serial DESC";
+		$rec = $app->db->queryAllRecords($sql, '%._domainkey.'.$dataRecord['domain'].'.');
+		if (is_array($rec[1])) {
+			for ($i=1; $i < count($rec); ++$i)
+				$app->db->datalogDelete('dns_rr', 'id', $rec[$i]['id']);
+		}
+		// also delete a dsn-records with same selector 
+		$sql = "SELECT * from dns_rr WHERE name ? AND data LIKE 'v=DKIM1%' AND " . $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryAllRecords($sql, '._domainkey.'.$dataRecord['dkim_selector'].'.', $dataRecord['domain']);
+		if (is_array($rec))
+			foreach ($rec as $del)
+				$app->db->datalogDelete('dns_rr', 'id', $del['id']);
+
+		$new_rr['name'] = $dataRecord['dkim_selector'].'._domainkey.'.$dataRecord['domain'].'.';
+		$new_rr['type'] = 'TXT';
+		$new_rr['data'] = 'v=DKIM1; t=s; p='.str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"), '', $this->dataRecord['dkim_public']);
+		$new_rr['aux'] = 0;
+		$new_rr['active'] = 'Y';
+		$new_rr['stamp'] = date('Y-m-d H:i:s');
+		$new_rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
+		$app->db->datalogInsert('dns_rr', $new_rr, 'id', $new_rr['zone']);
+		$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_rr['zone']);
+		$new_serial = $app->validate_dns->increase_serial($zone['serial']);
+		$app->db->datalogUpdate('dns_soa', array("serial" => $new_serial), 'id', $zone['id']);
 	}
 }
 
diff --git a/interface/web/mail/mail_forward_edit.php b/interface/web/mail/mail_forward_edit.php
index 8add148..17ce213 100644
--- a/interface/web/mail/mail_forward_edit.php
+++ b/interface/web/mail/mail_forward_edit.php
@@ -93,18 +93,18 @@
 		global $app, $conf;
 
 		// Check if Domain belongs to user
-		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
 		if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
 
 		// Check the client limits, if user is not the admin
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailforward FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailforward FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_mailforward"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = $client_group_id AND type = 'forward'");
+				$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = ? AND type = 'forward'", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailforward"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailforward_txt"]."<br>";
 				}
@@ -121,7 +121,7 @@
 		unset($this->dataRecord["email_domain"]);
 
 		//* Check if there is no active mailbox with this address
-		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = '".$app->db->quote($this->dataRecord["source"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = ?", $this->dataRecord["source"]);
 		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_mailbox_txt")."<br>";
 		unset($tmp);
 
@@ -131,8 +131,8 @@
 	function onAfterInsert() {
 		global $app;
 
-		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->query("update mail_forwarding SET sys_groupid = ".$app->functions->intval($domain['sys_groupid'])." WHERE forwarding_id = ".$this->id);
+		$domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
+		$app->db->query("update mail_forwarding SET sys_groupid = ? WHERE forwarding_id = ?", $domain['sys_groupid'], $this->id);
 
 	}
 
diff --git a/interface/web/mail/mail_get_edit.php b/interface/web/mail/mail_get_edit.php
index 70d1fb2..fded96b 100644
--- a/interface/web/mail/mail_get_edit.php
+++ b/interface/web/mail/mail_get_edit.php
@@ -71,7 +71,7 @@
 
 		//* Check if destination email belongs to user
 		if(isset($_POST["destination"])) {
-			$email = $app->db->queryOneRecord("SELECT email FROM mail_user WHERE email = '".$app->db->quote($app->functions->idn_encode($_POST["destination"]))."' AND ".$app->tform->getAuthSQL('r'));
+			$email = $app->db->queryOneRecord("SELECT email FROM mail_user WHERE email = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["destination"]));
 			if($email["email"] != $app->functions->idn_encode($_POST["destination"])) $app->tform->errorMessage .= $app->tform->lng("no_destination_perm");
 		}
 
@@ -79,11 +79,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_fetchmail FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_fetchmail FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another transport.
 			if($this->id == 0 && $client["limit_fetchmail"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(mailget_id) as number FROM mail_get WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(mailget_id) as number FROM mail_get WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_fetchmail"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_fetchmail_txt"]."<br>";
 				}
@@ -93,7 +93,7 @@
 
 
 		// Set the server ID according to the selected destination
-		$tmp = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE email = '".$app->db->quote($this->dataRecord["destination"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE email = ?", $this->dataRecord["destination"]);
 		$this->dataRecord["server_id"] = $tmp["server_id"];
 		unset($tmp);
 
@@ -108,8 +108,8 @@
 	function onAfterInsert() {
 		global $app;
 
-		$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_user WHERE email = '".$app->db->quote($this->dataRecord["destination"])."'");
-		$app->db->query("update mail_get SET sys_groupid = ".$app->functions->intval($tmp['sys_groupid'])." WHERE mailget_id = ".$this->id);
+		$tmp = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_user WHERE email = ?", $this->dataRecord["destination"]);
+		$app->db->query("update mail_get SET sys_groupid = ? WHERE mailget_id = ?", $tmp['sys_groupid'], $this->id);
 
 	}
 
diff --git a/interface/web/mail/mail_mailinglist_edit.php b/interface/web/mail/mail_mailinglist_edit.php
index 1e03ea6..5515670 100644
--- a/interface/web/mail/mail_mailinglist_edit.php
+++ b/interface/web/mail/mail_mailinglist_edit.php
@@ -89,12 +89,12 @@
 
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.default_mailserver, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id order by contact_name");
+			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.default_mailserver, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ? order by contact_name", $client_group_id);
 
 			// Fill the client select field
-			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".intval($client['client_id'])." ORDER BY client.company_name, client.contact_name, sys_group.name";
-			$clients = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".intval($client['client_id']));
+			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+			$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 			$tmp_data_record = $app->tform->getDataRecord($this->id);
 			if(is_array($clients)) {
@@ -138,35 +138,35 @@
 
 			// Get the limits of the client
 			$client_group_id = intval($_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");
+			$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 = '".$app->db->quote($this->dataRecord["domain"])."' AND ".$app->tform->getAuthSQL('r'));
+				$domain = $app->db->queryOneRecord("SELECT domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $this->dataRecord["domain"]);
 				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 = '".$app->db->quote($this->dataRecord["listname"])."@".$app->db->quote($this->dataRecord["domain"])."'");
+				$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 = '".$app->db->quote($this->dataRecord["listname"])."@".$app->db->quote($this->dataRecord["domain"])."'");
+				$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 = '".$app->db->quote($this->dataRecord["listname"])."' AND domain = '".$app->db->quote($this->dataRecord["domain"])."'");
+				$check = $app->db->queryOneRecord("SELECT count(mailinglist_id) as number FROM mail_mailinglist WHERE listname = ? AND domain = ?", $this->dataRecord["listname"], $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");
+					$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"]);
 					}
@@ -187,7 +187,7 @@
 		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 = '".$app->db->quote($this->dataRecord["domain"])."'");
+		$domain = $app->db->queryOneRecord("SELECT server_id FROM mail_domain WHERE domain = ?", $this->dataRecord["domain"]);
 		$this->dataRecord["server_id"] = $domain['server_id'];
 	}
 
@@ -198,11 +198,11 @@
 		// 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 = $app->functions->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);
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = ?, sys_perm_group = 'ru' WHERE mailinglist_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->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->db->query("UPDATE mail_mailinglist SET sys_groupid = ?, sys_perm_group = 'riud' WHERE mailinglist_id = ?", $client_group_id, $this->id);
 		}
 	}
 
@@ -212,13 +212,13 @@
 		//* 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);
+			$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);
+			$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.');
@@ -235,11 +235,11 @@
 		// 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 = $app->functions->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);
+			$app->db->query("UPDATE mail_mailinglist SET sys_groupid = ?, sys_perm_group = 'ru' WHERE mailinglist_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->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->db->query("UPDATE mail_mailinglist SET sys_groupid = ?, sys_perm_group = 'riud' WHERE mailinglist_id = ?", $client_group_id, $this->id);
 		}
 	}
 
diff --git a/interface/web/mail/mail_spamfilter_edit.php b/interface/web/mail/mail_spamfilter_edit.php
index 1219f9f..81a4fde 100644
--- a/interface/web/mail/mail_spamfilter_edit.php
+++ b/interface/web/mail/mail_spamfilter_edit.php
@@ -76,8 +76,8 @@
 		}
 
 		// Changing maildir to mailbox_id
-		$sql = "SELECT mailbox_id FROM mail_box WHERE maildir = '".$app->db->quote($this->dataRecord["spam_redirect_maildir"])."' AND ".$app->tform->getAuthSQL('r');
-		$mailbox = $app->db->queryOneRecord($sql);
+		$sql = "SELECT mailbox_id FROM mail_box WHERE maildir = ? AND ".$app->tform->getAuthSQL('r');
+		$mailbox = $app->db->queryOneRecord($sql, $this->dataRecord["spam_redirect_maildir"]);
 		$this->dataRecord["spam_redirect_maildir"] = $mailbox["mailbox_id"];
 
 		parent::onShowEnd();
@@ -87,7 +87,7 @@
 		global $app, $conf;
 
 		// Check if Domain belongs to user
-		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r'));
+		$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $_POST["email_domain"]);
 		if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
 
 		// compose the email field
@@ -108,8 +108,8 @@
 		$this->dataRecord["spam_delete_score_int"]   = $_POST["spam_delete_score_int"] * 100;
 
 		// Changing mailbox_id to maildir
-		$sql = "SELECT maildir FROM mail_box WHERE mailbox_id = '".$app->functions->intval($_POST["spam_redirect_maildir"])."' AND ".$app->tform->getAuthSQL('r');
-		$mailbox = $app->db->queryOneRecord($sql);
+		$sql = "SELECT maildir FROM mail_box WHERE mailbox_id = ? AND ".$app->tform->getAuthSQL('r');
+		$mailbox = $app->db->queryOneRecord($sql, $_POST["spam_redirect_maildir"]);
 		$this->dataRecord["spam_redirect_maildir"] = $mailbox["maildir"];
 
 		parent::onSubmit();
diff --git a/interface/web/mail/mail_transport_edit.php b/interface/web/mail/mail_transport_edit.php
index b47869d..9707d2f 100644
--- a/interface/web/mail/mail_transport_edit.php
+++ b/interface/web/mail/mail_transport_edit.php
@@ -136,11 +136,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailrouting FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailrouting FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another transport.
 			if($this->id == 0 && $client["limit_mailrouting"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(transport_id) as number FROM mail_transport WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(transport_id) as number FROM mail_transport WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailrouting"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailrouting_txt"]."<br>";
 				}
diff --git a/interface/web/mail/mail_user_del.php b/interface/web/mail/mail_user_del.php
index 6b309f8..dc92047 100644
--- a/interface/web/mail/mail_user_del.php
+++ b/interface/web/mail/mail_user_del.php
@@ -54,10 +54,10 @@
 	function onBeforeDelete() {
 		global $app; $conf;
 
-		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '".$app->db->quote($this->dataRecord["email"])."'");
+		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $this->dataRecord["email"]);
 		$app->db->datalogDelete('spamfilter_users', 'id', $tmp_user["id"]);
 
-		$tmp_filters = $app->db->queryAllRecords("SELECT filter_id FROM mail_user_filter WHERE mailuser_id = '".$this->id."'");
+		$tmp_filters = $app->db->queryAllRecords("SELECT filter_id FROM mail_user_filter WHERE mailuser_id = ?", $this->id);
 		if(is_array($tmp_filters)) {
 			foreach($tmp_filters as $tmp) {
 				$app->db->datalogDelete('mail_user_filter', 'filter_id', $tmp["filter_id"]);
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index ddc0ceb..ab980ca 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -92,7 +92,7 @@
 		unset($domain_select);
 
 		// Get the spamfilter policys for the user
-		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = '".$app->db->quote($this->dataRecord["email"])."'");
+		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", $this->dataRecord["email"]);
 		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r') . " ORDER BY policy_name";
 		$policys = $app->db->queryAllRecords($sql);
 		$policy_select = "<option value='0'>".$app->tform->lng("no_policy")."</option>";
@@ -139,7 +139,7 @@
 
 		//* Check if Domain belongs to user
 		if(isset($_POST["email_domain"])) {
-			$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
+			$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
 			if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 		}
 
@@ -153,12 +153,12 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailbox, limit_mailquota, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailbox, limit_mailquota, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_mailbox"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailbox"]) {
 					$app->tform->errorMessage .= $app->tform->lng("limit_mailbox_txt")."<br>";
 				}
@@ -167,7 +167,7 @@
 
 			// Check the quota and adjust
 			if(isset($_POST["quota"]) && $client["limit_mailquota"] >= 0 && (($app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) || ($_POST["quota"] <= 0))) {
-				$tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user WHERE mailuser_id != ".$app->functions->intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
+				$tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user WHERE mailuser_id != ? AND ".$app->tform->getAuthSQL('u'), $this->id);
 				$mailquota = $tmp["mailquota"] / 1024 / 1024;
 				$new_mailbox_quota = $app->functions->intval($this->dataRecord["quota"]);
 				if(($mailquota + $new_mailbox_quota > $client["limit_mailquota"]) || ($new_mailbox_quota == 0 && $client["limit_mailquota"] != -1)) {
@@ -182,11 +182,11 @@
 
 			if($client['parent_client_id'] > 0) {
 				// Get the limits of the reseller
-				$reseller = $app->db->queryOneRecord("SELECT limit_mailquota, limit_maildomain FROM client WHERE client_id = ".$client['parent_client_id']);
+				$reseller = $app->db->queryOneRecord("SELECT limit_mailquota, limit_maildomain FROM client WHERE client_id = ?", $client['parent_client_id']);
 
 				//* Check the website quota of the client
 				if(isset($_POST["quota"]) && $reseller["limit_mailquota"] >= 0 && $app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) {
-					$tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user, sys_group, client WHERE mail_user.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ".$client['parent_client_id']." IN (client.parent_client_id, client.client_id) AND mailuser_id != ".$app->functions->intval($this->id));
+					$tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user, sys_group, client WHERE mail_user.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ? IN (client.parent_client_id, client.client_id) AND mailuser_id != ?", $client['parent_client_id'], $this->id);
 
 					$mailquota = $tmp["mailquota"] / 1024 / 1024;
 					$new_mailbox_quota = $app->functions->intval($this->dataRecord["quota"]);
@@ -207,6 +207,16 @@
 		$app->uses('getconf');
 		$mail_config = $app->getconf->get_server_config(!empty($domain["server_id"]) ? $domain["server_id"] : '', 'mail');
 
+		// Set Maildir format
+		if ($this->id == 0) {
+			$this->dataRecord['maildir_format'] = $sys_config['maildir_format'];
+		}
+		else {
+			// restore Maildir format
+			$tmp = $app->db->queryOneRecord("SELECT maildir_format FROM mail_user WHERE mailuser_id = ".$app->functions->intval($this->id));
+			$this->dataRecord['maildir_format'] = $tmp['maildir_format'];
+		}
+		
 		//* compose the email field
 		if(isset($_POST["email_local_part"]) && isset($_POST["email_domain"])) {
 			$this->dataRecord["email"] = strtolower($_POST["email_local_part"]."@".$app->functions->idn_encode($_POST["email_domain"]));
@@ -231,7 +241,7 @@
 			$this->dataRecord['gid'] = -1;
 				
 			//* Check if there is no alias or forward with this address
-			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE active = 'y' AND source = '".$app->db->quote($this->dataRecord["email"])."'");
+			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE active = 'y' AND source = ?", $this->dataRecord["email"]);
 			if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_alias_or_forward_txt")."<br>";
 			unset($tmp);
 
@@ -257,20 +267,31 @@
 		global $app, $conf;
 
 		// Set the domain owner as mailbox owner
-		$domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
-		$app->db->query("UPDATE mail_user SET sys_groupid = ".$app->functions->intval($domain["sys_groupid"])." WHERE mailuser_id = ".$this->id);
+		$domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
+		$app->db->query("UPDATE mail_user SET sys_groupid = ? WHERE mailuser_id = ?", $domain["sys_groupid"], $this->id);
 
 		// Spamfilter policy
 		$policy_id = $app->functions->intval($this->dataRecord["policy"]);
 		if($policy_id > 0) {
-			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '".$app->db->quote($this->dataRecord["email"])."'");
+			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $this->dataRecord["email"]);
 			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"]);
+				$app->db->datalogUpdate('spamfilter_users', array("policy_id" => $policy_id), 'id', $tmp_user["id"]);
 			} else {
 				// 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 (".$app->functions->intval($_SESSION["s"]["user"]["userid"]).", ".$app->functions->intval($domain["sys_groupid"]).", 'riud', 'riud', '', ".$app->functions->intval($domain["server_id"]).", 10, ".$app->functions->intval($policy_id).", '".$app->db->quote($this->dataRecord["email"])."', '".$app->db->quote($this->dataRecord["email"])."', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $_SESSION["s"]["user"]["userid"],
+					"sys_groupid" => $domain["sys_groupid"],
+					"sys_perm_user" => 'riud',
+					"sys_perm_group" => 'riud',
+					"sys_perm_other" => '',
+					"server_id" => $domain["server_id"],
+					"priority" => 10,
+					"policy_id" => $policy_id,
+					"email" => $this->dataRecord["email"],
+					"fullname" => $this->dataRecord["email"],
+					"local" => 'Y'
+				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
 			}
 		}  // endif spamfilter policy
@@ -283,8 +304,8 @@
 			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = ($this->dataRecord["disablesmtp"])?'y':'n';
 
-			$sql = "UPDATE mail_user SET disableimap = '$disableimap', disablesieve = '$disableimap', disablepop3 = '$disablepop3', disablesmtp = '$disablesmtp', disabledeliver = '$disabledeliver', disablelda = '$disabledeliver', disabledoveadm = '$disableimap' WHERE mailuser_id = ".$this->id;
-			$app->db->query($sql);
+			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disabledoveadm = ? WHERE mailuser_id = ?";
+			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disableimap, $this->id);
 		}
 	}
 
@@ -293,20 +314,31 @@
 
 		// Set the domain owner as mailbox owner
 		if(isset($_POST["email_domain"])) {
-			$domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r'));
-			$app->db->query("UPDATE mail_user SET sys_groupid = ".$app->functions->intval($domain["sys_groupid"])." WHERE mailuser_id = ".$this->id);
+			$domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["email_domain"]));
+			$app->db->query("UPDATE mail_user SET sys_groupid = ? WHERE mailuser_id = ?", $domain["sys_groupid"], $this->id);
 
 			// Spamfilter policy
 			$policy_id = $app->functions->intval($this->dataRecord["policy"]);
-			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '".$app->db->quote($this->dataRecord["email"])."'");
+			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $this->dataRecord["email"]);
 			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"]);
+					$app->db->datalogUpdate('spamfilter_users', array("policy_id" => $policy_id), 'id', $tmp_user["id"]);
 				} else {
 					// 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 (".$app->functions->intval($_SESSION["s"]["user"]["userid"]).", ".$app->functions->intval($domain["sys_groupid"]).", 'riud', 'riud', '', ".$app->functions->intval($domain["server_id"]).", 10, ".$app->functions->intval($policy_id).", '".$app->db->quote($this->dataRecord["email"])."', '".$app->db->quote($this->dataRecord["email"])."', 'Y')";
+					$insert_data = array(
+						"sys_userid" => $_SESSION["s"]["user"]["userid"],
+						"sys_groupid" => $domain["sys_groupid"],
+						"sys_perm_user" => 'riud',
+						"sys_perm_group" => 'riud',
+						"sys_perm_other" => '',
+						"server_id" => $domain["server_id"],
+						"priority" => 10,
+						"policy_id" => $policy_id,
+						"email" => $this->dataRecord["email"],
+						"fullname" => $this->dataRecord["email"],
+						"local" => 'Y'
+					);
 					$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
 				}
 			}else {
@@ -324,8 +356,8 @@
 			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = (isset($this->dataRecord["disablesmtp"]) && $this->dataRecord["disablesmtp"])?'y':'n';
 
-			$sql = "UPDATE mail_user SET disableimap = '$disableimap', disablesieve = '$disableimap', `disablesieve-filter` = '$disableimap', disablepop3 = '$disablepop3', disablesmtp = '$disablesmtp', disabledeliver = '$disabledeliver', disablelda = '$disabledeliver', disabledoveadm = '$disableimap' WHERE mailuser_id = ".$this->id;
-			$app->db->query($sql);
+			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disabledoveadm = ? WHERE mailuser_id = ?";
+			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disableimap, $this->id);
 		}
 
 		//** If the email address has been changed, change it in all aliases too
@@ -333,11 +365,11 @@
 			//if($this->oldDataRecord['email'] != $this->dataRecord['email']) {
 
 			//* Update the aliases
-			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE destination = '".$app->db->quote($this->oldDataRecord['email'])."'");
+			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE destination = ?", $this->oldDataRecord['email']);
 			if(is_array($forwardings)) {
 				foreach($forwardings as $rec) {
-					$destination = $app->db->quote($this->dataRecord['email']);
-					$app->db->datalogUpdate('mail_forwarding', "destination = '$destination'", 'forwarding_id', $rec['forwarding_id']);
+					$destination = $this->dataRecord['email'];
+					$app->db->datalogUpdate('mail_forwarding', array("destination" => $destination), 'forwarding_id', $rec['forwarding_id']);
 				}
 			}
 
@@ -345,9 +377,9 @@
 
 		//* Change backup options when user mail backup options have been changed
 		if(isset($this->dataRecord['backup_interval']) && ($this->dataRecord['backup_interval'] != $this->oldDataRecord['backup_interval'] || $this->dataRecord['backup_copies'] != $this->oldDataRecord['backup_copies'])) {
-			$backup_interval = $app->db->quote($this->dataRecord['backup_interval']);
+			$backup_interval = $this->dataRecord['backup_interval'];
 			$backup_copies = $app->functions->intval($this->dataRecord['backup_copies']);
-			$app->db->datalogUpdate('mail_user', "backup_interval = '$backup_interval', backup_copies = '$backup_copies'", 'mailuser_id', $rec['mailuser_id']);
+			$app->db->datalogUpdate('mail_user', array("backup_interval" => $backup_interval, "backup_copies" => $backup_copies), 'mailuser_id', $rec['mailuser_id']);
 			unset($backup_copies);
 			unset($backup_interval);
 		} // end if backup options changed
diff --git a/interface/web/mail/mail_user_filter_del.php b/interface/web/mail/mail_user_filter_del.php
index e352a8e..254e9f1 100644
--- a/interface/web/mail/mail_user_filter_del.php
+++ b/interface/web/mail/mail_user_filter_del.php
@@ -51,33 +51,6 @@
 
 class page_action extends tform_actions {
 
-	/*
-	//* Code moved to mailfilter plugin
-	function onAfterDelete() {
-		global $app, $conf;
-
-		$mailuser = $app->db->queryOneRecord("SELECT custom_mailfilter FROM mail_user WHERE mailuser_id = ".$this->dataRecord["mailuser_id"]);
-		$skip = false;
-		$lines = explode("\n",$mailuser['custom_mailfilter']);
-		$out = '';
-
-		foreach($lines as $line) {
-			$line = trim($line);
-			if($line == '### BEGIN FILTER_ID:'.$this->id) {
-				$skip = true;
-			}
-			if($skip == false && $line != '') $out .= $line ."\n";
-			if($line == '### END FILTER_ID:'.$this->id) {
-				$skip = false;
-			}
-		}
-
-		$out = $app->db->quote($out);
-		$app->db->datalogUpdate('mail_user', "custom_mailfilter = '$out'", 'mailuser_id', $this->dataRecord["mailuser_id"]);
-
-	}
-	*/
-
 }
 
 $page = new page_action;
diff --git a/interface/web/mail/mail_user_filter_edit.php b/interface/web/mail/mail_user_filter_edit.php
index c4331a2..52cab08 100644
--- a/interface/web/mail/mail_user_filter_edit.php
+++ b/interface/web/mail/mail_user_filter_edit.php
@@ -70,7 +70,7 @@
 		global $app, $conf;
 
 		// Get the parent mail_user record
-		$mailuser = $app->db->queryOneRecord("SELECT * FROM mail_user WHERE mailuser_id = '".$app->functions->intval($_REQUEST["mailuser_id"])."' AND ".$app->tform->getAuthSQL('r'));
+		$mailuser = $app->db->queryOneRecord("SELECT * FROM mail_user WHERE mailuser_id = ? AND ".$app->tform->getAuthSQL('r'). $_REQUEST["mailuser_id"]);
 
 		// Check if Domain belongs to user
 		if($mailuser["mailuser_id"] != $_POST["mailuser_id"]) $app->tform->errorMessage .= $app->tform->wordbook["no_mailuser_perm"];
@@ -85,11 +85,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another filter
 			if($this->id == 0 && $client["limit_mailfilter"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(filter_id) as number FROM mail_user_filter WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(filter_id) as number FROM mail_user_filter WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailfilter"]) {
 					$app->tform->errorMessage .= $app->tform->lng("limit_mailfilter_txt")."<br>";
 				}
diff --git a/interface/web/mail/mail_user_stats.php b/interface/web/mail/mail_user_stats.php
index 356d28c..abb5461 100644
--- a/interface/web/mail/mail_user_stats.php
+++ b/interface/web/mail/mail_user_stats.php
@@ -34,28 +34,28 @@
 		//* Set the statistics colums
 		//** Traffic of the current month
 		$tmp_date = date('Y-m');
-		$tmp_rec = $app->db->queryOneRecord("SELECT traffic as t FROM mail_traffic WHERE mailuser_id = ".$app->functions->intval($rec['mailuser_id'])." AND month = '$tmp_date'");
+		$tmp_rec = $app->db->queryOneRecord("SELECT traffic as t FROM mail_traffic WHERE mailuser_id = ? AND month = ?", $rec['mailuser_id'], $tmp_date);
 //		$rec['this_month'] = number_format($app->functions->intval($tmp_rec['t'])/1024/1024, 0, '.', ' ');
 		$rec['this_month'] = $app->functions->formatBytes($tmp_rec['t']);
 		if ($rec['this_month'] == 'NAN') $rec['this_month'] = '0 KB';
 
 		//** Traffic of the current year
 		$tmp_date = date('Y');
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic) as t FROM mail_traffic WHERE mailuser_id = ".$app->functions->intval($rec['mailuser_id'])." AND month like '$tmp_date%'");
+		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic) as t FROM mail_traffic WHERE mailuser_id = ? AND month like ?", $rec['mailuser_id'], $tmp_date . '%');
 //		$rec['this_year'] = number_format($app->functions->intval($tmp_rec['t'])/1024/1024, 0, '.', ' ');
 		$rec['this_year'] = $app->functions->formatBytes($tmp_rec['t']);
 		if ($rec['this_year'] == 'NAN') $rec['this_year'] = '0 KB';
 
 		//** Traffic of the last month
 		$tmp_date = date('Y-m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-		$tmp_rec = $app->db->queryOneRecord("SELECT traffic as t FROM mail_traffic WHERE mailuser_id = ".$app->functions->intval($rec['mailuser_id'])." AND month = '$tmp_date'");
+		$tmp_rec = $app->db->queryOneRecord("SELECT traffic as t FROM mail_traffic WHERE mailuser_id = ? AND month = ?", $rec['mailuser_id'], $tmp_date);
 //		$rec['last_month'] = number_format($app->functions->intval($tmp_rec['t'])/1024/1024, 0, '.', ' ');
 		$rec['last_month'] = $app->functions->formatBytes($tmp_rec['t']);
 		if ($rec['last_month'] == 'NAN') $rec['last_month'] = '0 KB';
 
 		//** Traffic of the last year
 		$tmp_date = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y")-1));
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic) as t FROM mail_traffic WHERE mailuser_id = ".$app->functions->intval($rec['mailuser_id'])." AND month like '$tmp_date%'");
+		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic) as t FROM mail_traffic WHERE mailuser_id = ? AND month like ?", $rec['mailuser_id'], $tmp_date . '%');
 //		$rec['last_year'] = number_format($app->functions->intval($tmp_rec['t'])/1024/1024, 0, '.', ' ');
 		$rec['last_year'] = $app->functions->formatBytes($tmp_rec['t']);
 		if ($rec['last_year'] == 'NAN') $rec['last_year'] = '0 KB';
diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php
index b55db9c..4bec041 100644
--- a/interface/web/mail/mail_whitelist_edit.php
+++ b/interface/web/mail/mail_whitelist_edit.php
@@ -72,7 +72,7 @@
 		//* 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 from mail_access WHERE access_id = ".$this->id);
+			$rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_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.');
@@ -89,11 +89,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_mailfilter"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailfilter"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailfilter_txt"]."<br>";
 				}
diff --git a/interface/web/mail/mailinglist.php b/interface/web/mail/mailinglist.php
index 6ef779c..15f61c9 100644
--- a/interface/web/mail/mailinglist.php
+++ b/interface/web/mail/mailinglist.php
@@ -43,13 +43,13 @@
 /*
  * Get the data to connect to the database
  */
-$dbData = $app->db->queryAllRecords("SELECT server_id, listname FROM mail_mailinglist WHERE mailinglist_id = " . $listId);
+$dbData = $app->db->queryAllRecords("SELECT server_id, listname FROM mail_mailinglist WHERE mailinglist_id = ?", $listId);
 $serverId = $app->functions->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);
+$serverData = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $serverId);
 
 $app->uses('getconf');
 $global_config = $app->getconf->get_global_config('mail');
diff --git a/interface/web/mail/spamfilter_blacklist_edit.php b/interface/web/mail/spamfilter_blacklist_edit.php
index b7b6391..b76334b 100644
--- a/interface/web/mail/spamfilter_blacklist_edit.php
+++ b/interface/web/mail/spamfilter_blacklist_edit.php
@@ -65,24 +65,6 @@
 		parent::onShowNew();
 	}
 
-	/*
-	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 from spamfilter_wblist WHERE 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);
-		}
-	}
-	*/
-
 	function onSubmit() {
 		global $app, $conf;
 
@@ -90,11 +72,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_spamfilter_wblist"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(wblist_id) as number FROM spamfilter_wblist WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(wblist_id) as number FROM spamfilter_wblist WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_spamfilter_wblist"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_spamfilter_wblist_txt"]."<br>";
 				}
@@ -103,7 +85,7 @@
 		} // end if user is not admin
 
 		// Select and set the server_id so it matches the server_id of the spa,filter_users record
-		$tmp = $app->db->queryOneRecord("SELECT server_id FROM spamfilter_users WHERE id = ".$app->functions->intval($this->dataRecord["rid"]));
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM spamfilter_users WHERE id = ?", $this->dataRecord["rid"]);
 		$this->dataRecord["server_id"] = $tmp["server_id"];
 		unset($tmp);
 
diff --git a/interface/web/mail/spamfilter_config_edit.php b/interface/web/mail/spamfilter_config_edit.php
index 3584c2f..5b3062a 100644
--- a/interface/web/mail/spamfilter_config_edit.php
+++ b/interface/web/mail/spamfilter_config_edit.php
@@ -83,8 +83,8 @@
 		$server_config_array[$section] = $app->tform->encode($this->dataRecord, $section);
 		$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
 
-		$sql = "UPDATE server SET config = '".$app->db->quote($server_config_str)."' WHERE server_id = ".$app->functions->intval($server_id);
-		$app->db->query($sql);
+		$sql = "UPDATE server SET config = ? WHERE server_id = ?";
+		$app->db->query($sql, $server_config_str, $server_id);
 	}
 
 }
diff --git a/interface/web/mail/spamfilter_policy_edit.php b/interface/web/mail/spamfilter_policy_edit.php
index 0b94d5d..5320506 100644
--- a/interface/web/mail/spamfilter_policy_edit.php
+++ b/interface/web/mail/spamfilter_policy_edit.php
@@ -72,11 +72,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_policy FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_policy FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_spamfilter_policy"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_policy WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_policy WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_spamfilter_policy"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_spamfilter_policy_txt"]."<br>";
 				}
diff --git a/interface/web/mail/spamfilter_users_edit.php b/interface/web/mail/spamfilter_users_edit.php
index 488d951..b8bc931 100644
--- a/interface/web/mail/spamfilter_users_edit.php
+++ b/interface/web/mail/spamfilter_users_edit.php
@@ -71,7 +71,7 @@
 		//* 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 from spamfilter_users WHERE id = ".$this->id);
+			$rec = $app->db->queryOneRecord("SELECT server_id from spamfilter_users WHERE 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.');
@@ -88,11 +88,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_user FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_user FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_spamfilter_user"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_users WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_users WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_spamfilter_user"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_spamfilter_user_txt"]."<br>";
 				}
diff --git a/interface/web/mail/spamfilter_whitelist_edit.php b/interface/web/mail/spamfilter_whitelist_edit.php
index 227f538..a404db0 100644
--- a/interface/web/mail/spamfilter_whitelist_edit.php
+++ b/interface/web/mail/spamfilter_whitelist_edit.php
@@ -65,24 +65,6 @@
 		parent::onShowNew();
 	}
 
-	/*
-	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 from spamfilter_wblist WHERE 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);
-		}
-	}
-	*/
-
 	function onSubmit() {
 		global $app, $conf;
 
@@ -90,11 +72,11 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_spamfilter_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another mailbox.
 			if($this->id == 0 && $client["limit_spamfilter_wblist"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(wblist_id) as number FROM spamfilter_wblist WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(wblist_id) as number FROM spamfilter_wblist WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_spamfilter_wblist"]) {
 					$app->tform->errorMessage .= $app->tform->wordbook["limit_spamfilter_wblist_txt"]."<br>";
 				}
@@ -103,7 +85,7 @@
 		} // end if user is not admin
 
 		// Select and set the server_id so it matches the server_id of the spa,filter_users record
-		$tmp = $app->db->queryOneRecord("SELECT server_id FROM spamfilter_users WHERE id = ".$app->functions->intval($this->dataRecord["rid"]));
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM spamfilter_users WHERE id = ?", $this->dataRecord["rid"]);
 		$this->dataRecord["server_id"] = $tmp["server_id"];
 		unset($tmp);
 
diff --git a/interface/web/mail/templates/backup_stats_list.htm b/interface/web/mail/templates/backup_stats_list.htm
new file mode 100644
index 0000000..285246c
--- /dev/null
+++ b/interface/web/mail/templates/backup_stats_list.htm
@@ -0,0 +1,42 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+					<tr>
+						<th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+						<th data-column="domain"><tmpl_var name="domain_txt"></th>
+						<th data-column="backup_server"><tmpl_var name="backup_server_txt"></th>
+						<th data-column="backup_interval"><tmpl_var name="backup_interval_txt"></th>
+						<th data-column="backup_count"><tmpl_var name="backup_count_txt"></th>
+						<th data-column="backup_size"><tmpl_var name="backup_size_txt"></th>
+					</tr>
+                </thead>
+				<tbody>
+					<tmpl_loop name="records">
+					<tr class="tbl_row_{tmpl_if name='__EVEN__'}even{tmpl_else}uneven{/tmpl_if}">
+						<td> <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a> </td>
+						<td> <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a> </td>
+						<td> <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a> </td>
+						<td> <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_interval"}</a> /  <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies"}</a> </td>
+						<td> <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies_exists"}</a> </td>
+						<td> <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_size"}</a> </td>
+					</tr>
+					</tmpl_loop>
+				</tbody>
+				<tfoot>
+					<tr>
+						<td colspan="5">
+							<tmpl_var name="paging">
+						</td>
+					</tr>
+				</tfoot>
+            </table>
+</div>
+        
+    </div>
diff --git a/interface/web/mail/templates/mail_alias_edit.htm b/interface/web/mail/templates/mail_alias_edit.htm
index c2a6e95..352210b 100644
--- a/interface/web/mail/templates/mail_alias_edit.htm
+++ b/interface/web/mail/templates/mail_alias_edit.htm
@@ -1,39 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9">
+                    <label for="email_local_part" class="col-sm-3 control-label">Alias<div class="col-sm-9"><input type="text" id="email_local_part" name="email_local_part" value="{tmpl_var name='email_local_part'}" class="form-control" /></div></label>
+                    <label for="email_at" class="col-sm-3 control-label">&nbsp;<span id="email_at" name="email_at" />@</label>
+                    <label for="email_domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}<div class="col-sm-9"><select name="email_domain" id="email_domain" class="form-control">{tmpl_var name='email_domain'}</select></div></label>
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="destination">{tmpl_var name='destination_txt'}</label>
-                <select name="destination" id="destination" class="selectInput">
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
+                <div class="col-sm-9"><select name="destination" id="destination" class="form-control">
                     {tmpl_var name='destination'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='greylisting'}
+                </div>
+            </div>
 
         <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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_alias_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_alias_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/mail_alias_list.htm b/interface/web/mail/templates/mail_alias_list.htm
index 73107d9..5f19fba 100644
--- a/interface/web/mail/templates/mail_alias_list.htm
+++ b/interface/web/mail/templates/mail_alias_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_alias">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,42 +20,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_alias_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_alias_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_source" scope="col"><tmpl_var name="source_txt"></th>
-                        <th class="tbl_col_destination" scope="col"><tmpl_var name="destination_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th data-column="destination"><tmpl_var name="destination_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_source"><input type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
-                        <td class="tbl_col_destination"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_alias_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td><input class="form-control" type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_alias_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_alias_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_source"><a href="#" onclick="loadContent('mail/mail_alias_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
-                            <td class="tbl_col_destination"><a href="#" onclick="loadContent('mail/mail_alias_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="destination"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_alias_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_alias_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -67,11 +65,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_aliasdomain_edit.htm b/interface/web/mail/templates/mail_aliasdomain_edit.htm
index 21ca7c7..9e19b5d 100644
--- a/interface/web/mail/templates/mail_aliasdomain_edit.htm
+++ b/interface/web/mail/templates/mail_aliasdomain_edit.htm
@@ -1,37 +1,34 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mail_aliasdomain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="destination">{tmpl_var name='source_txt'}</label>
-                <select name="source" id="source" class="selectInput">
+        
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9"><select name="source" id="source" class="form-control">
                     {tmpl_var name='source_domain'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="destination">{tmpl_var name='destination_txt'}</label>
-                <select name="destination" id="destination" class="selectInput">
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
+                <div class="col-sm-9"><select name="destination" id="destination" class="form-control">
                     {tmpl_var name='destination_domain'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="type" value="aliasdomain">
 
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','mail/mail_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('mail/mail_aliasdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_aliasdomain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_aliasdomain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_aliasdomain_list.htm b/interface/web/mail/templates/mail_aliasdomain_list.htm
index 30b88a6..6ce208b 100644
--- a/interface/web/mail/templates/mail_aliasdomain_list.htm
+++ b/interface/web/mail/templates/mail_aliasdomain_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_aliasdomain">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,42 +20,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_aliasdomain_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_aliasdomain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_source" scope="col"><tmpl_var name="source_txt"></th>
-                        <th class="tbl_col_destination" scope="col"><tmpl_var name="destination_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th data-column="destination"><tmpl_var name="destination_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_source"><input type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
-                        <td class="tbl_col_destination"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_aliasdomain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td><input class="form-control" type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_aliasdomain_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_source"><a href="#" onclick="loadContent('mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
-                            <td class="tbl_col_destination"><a href="#" onclick="loadContent('mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="destination"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_aliasdomain_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_aliasdomain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -67,11 +65,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_blacklist_edit.htm b/interface/web/mail/templates/mail_blacklist_edit.htm
index fcd5bf6..c68729c 100644
--- a/interface/web/mail/templates/mail_blacklist_edit.htm
+++ b/interface/web/mail/templates/mail_blacklist_edit.htm
@@ -1,41 +1,37 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="source" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="source" id="source" value="{tmpl_var name='source'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_blacklist_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_blacklist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_blacklist_list.htm b/interface/web/mail/templates/mail_blacklist_list.htm
index 7e4e492..b023f54 100644
--- a/interface/web/mail/templates/mail_blacklist_list.htm
+++ b/interface/web/mail/templates/mail_blacklist_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_blacklist">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,45 +20,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_blacklist_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_blacklist_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_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_type" scope="col"><tmpl_var name="type_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th data-column="type"><tmpl_var name="type_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{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_type"><select name="search_type">{tmpl_var name='search_type'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_blacklist_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td><select class="form-control" name="search_type">{tmpl_var name='search_type'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_blacklist_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_blacklist_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_blacklist_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_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
-                            <td class="tbl_col_type"><a href="#" onclick="loadContent('mail/mail_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="type"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_blacklist_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_blacklist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -70,11 +68,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_content_filter_edit.htm b/interface/web/mail/templates/mail_content_filter_edit.htm
index 0caf697..4aa59c8 100644
--- a/interface/web/mail/templates/mail_content_filter_edit.htm
+++ b/interface/web/mail/templates/mail_content_filter_edit.htm
@@ -1,50 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="type">{tmpl_var name='type_txt'}</label>
-                <select name="type" id="type" class="selectInput">
+            <div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="pattern" class="col-sm-3 control-label">{tmpl_var name='pattern_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="pattern" id="pattern" value="{tmpl_var name='pattern'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="action" class="col-sm-3 control-label">{tmpl_var name='action_txt'}</label>
+                <div class="col-sm-9"><select name="action" id="action" class="form-control">
                     {tmpl_var name='action'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_content_filter_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_content_filter_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_content_filter_list.htm b/interface/web/mail/templates/mail_content_filter_list.htm
index 735bf6a..01689aa 100644
--- a/interface/web/mail/templates/mail_content_filter_list.htm
+++ b/interface/web/mail/templates/mail_content_filter_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_content_filter">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,45 +20,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_content_filter_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_content_filter_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_pattern" scope="col"><tmpl_var name="pattern_txt"></th>
-                        <th class="tbl_col_action" scope="col"><tmpl_var name="action_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="pattern"><tmpl_var name="pattern_txt"></th>
+                        <th data-column="action"><tmpl_var name="action_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_pattern"><input type="text" name="search_pattern" value="{tmpl_var name='search_pattern'}" /></td>
-                        <td class="tbl_col_action"><select name="search_action">{tmpl_var name='search_action'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_content_filter_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_pattern" value="{tmpl_var name='search_pattern'}" /></td>
+                        <td><select class="form-control" name="search_action">{tmpl_var name='search_action'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_content_filter_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_content_filter_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_content_filter_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_pattern"><a href="#" onclick="loadContent('mail/mail_content_filter_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="pattern"}</a></td>
-                            <td class="tbl_col_action"><a href="#" onclick="loadContent('mail/mail_content_filter_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="action"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_content_filter_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="pattern"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="action"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_content_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -70,11 +68,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_domain_admin_list.htm b/interface/web/mail/templates/mail_domain_admin_list.htm
index 0c03c28..1b2b41f 100644
--- a/interface/web/mail/templates/mail_domain_admin_list.htm
+++ b/interface/web/mail/templates/mail_domain_admin_list.htm
@@ -1,47 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_mail_domain_admin">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_domain_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_domain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="sys_groupid"><tmpl_var name="sys_groupid_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_domain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_domain_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('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">
-                                <a class="button 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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -53,11 +51,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm
index 952d458..38a9246 100644
--- a/interface/web/mail/templates/mail_domain_catchall_edit.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm
@@ -1,36 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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='source_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 class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9">
+                    <label for="email_at" class="col-sm-3 control-label">&nbsp;<span id="email_at" name="email_at" />@</label>
+                    <label for="email_domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}<div class="col-sm-9"><select name="email_domain" id="email_domain" class="form-control">{tmpl_var name='email_domain'}</select></div></label>
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="destination">{tmpl_var name='destination_txt'}</label>
-                <input name="destination" id="destination" value="{tmpl_var name='destination'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="destination" id="destination" value="{tmpl_var name='destination'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_domain_catchall_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_domain_catchall_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_domain_catchall_list.htm b/interface/web/mail/templates/mail_domain_catchall_list.htm
index 9b25605..29483ae 100644
--- a/interface/web/mail/templates/mail_domain_catchall_list.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_domain_catchall">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,42 +20,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_domain_catchall_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_domain_catchall_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_source" scope="col"><tmpl_var name="source_txt"></th>
-                        <th class="tbl_col_destination" scope="col"><tmpl_var name="destination_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th data-column="destination"><tmpl_var name="destination_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_source"><input type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
-                        <td class="tbl_col_destination"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_domain_catchall_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td><input class="form-control" type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_domain_catchall_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_source"><a href="#" onclick="loadContent('mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
-                            <td class="tbl_col_destination"><a href="#" onclick="loadContent('mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="destination"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_domain_catchall_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_catchall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -67,11 +65,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm
old mode 100755
new mode 100644
index dbd5c6e..307b0d1
--- a/interface/web/mail/templates/mail_domain_edit.htm
+++ b/interface/web/mail/templates/mail_domain_edit.htm
@@ -1,49 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mail_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
+                <div class="form-group">
                     <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                     </tmpl_if>
                 </div>
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
                 <tmpl_else>
-                    <div class="ctrlHolder">
+                    <div class="form-group">
                         <tmpl_if name="edit_disabled">
-                            <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                            <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                                 {tmpl_var name='client_server_id'}
-                            </select>
+                            </select></div>
                             <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='client_server_id'}
-                            </select>
+                            </select></div>
                         </tmpl_if>
                     </div>
                 </tmpl_if>
@@ -51,34 +51,33 @@
 
             <tmpl_if name="is_reseller">
                 <tmpl_unless name="domain_option">
-                    <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">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             </tmpl_if>
 
-            <div class="ctrlHolder">
-                <label for="domain">{tmpl_var name='domain_txt'}</label>
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
                 <tmpl_if name="domain_option">
-                    <select name="domain" id="domain" class="selectInput">
+                    <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <tmpl_else>
-                        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-                </tmpl_if>
+                        <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <label for="policy">{tmpl_var name='policy_txt'}</label>
-                <select name="policy" id="policy" class="selectInput">
+            <div class="form-group">
+                <label for="policy" class="col-sm-3 control-label">{tmpl_var name='policy_txt'}</label>
+                <div class="col-sm-9"><select name="policy" id="policy" class="form-control">
                     {tmpl_var name='policy'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
@@ -87,42 +86,39 @@
 			<tmpl_else>
 				<input type="hidden" name="domain_module" value="0" id="domain_module" />
 			</tmpl_if>
-            <div class="subsectiontoggle"><span></span>{tmpl_var name='dkim_settings_txt'}<em></em></div>
-            <div style="display:none;">
-              <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='dkim_txt'}</p>
-                <div class="multiField">
+            <div class="col-sm-12"><button class="btn btn-default formbutton-default" type="button" data-toggle="collapse" data-target="#toggle-dkim" aria-expanded="false" aria-controls="toggle-dkim">{tmpl_var name='dkim_settings_txt'}</button></div>
+            <div id="toggle-dkim" class="collapse">
+              <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='dkim_txt'}</label>
+                <div class="col-sm-9">
                   {tmpl_var name='dkim'}
                 </div>
               </div>
-              <div class="ctrlHolder">
-                <label for="dkim_selector">{tmpl_var name='dkim_selector_txt'}</label>
-                <input name="dkim_selector" id="dkim_selector" value="{tmpl_var name='dkim_selector'}" size="20" maxlength="63" type="text" class="textInput" />
+              <div class="form-group">
+                <label for="dkim_selector" class="col-sm-3 control-label">{tmpl_var name='dkim_selector_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dkim_selector" id="dkim_selector" value="{tmpl_var name='dkim_selector'}" class="form-control" /></div></div>
+              <div class="form-group">
+                <label for="dkim_private" class="col-sm-3 control-label">{tmpl_var name='dkim_private_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="dkim_private" id="dkim_private" rows='10' cols='30'>{tmpl_var name='dkim_private'}</textarea></div>
               </div>
-              <div class="ctrlHolder">
-                <label for="dkim_private">{tmpl_var name='dkim_private_txt'}</label>
-                <textarea name="dkim_private" id="dkim_private" rows='10' cols='30'>{tmpl_var name='dkim_private'}</textarea>
-<a href="javascript:setRequest('create')">{tmpl_var name='dkim_generate_txt'}</a>
-              </div>
-		<div class="ctrlHolder">
-                <textarea name="dkim_public" style="display:none;" id="dkim_public" rows='5' cols='30' readonly>{tmpl_var name='dkim_public'}</textarea>
+				<a class="btn btn-default formbutton-default" href="javascript:setRequest('create')" value="{tmpl_var name='dkim_generate_txt'}">{tmpl_var name='dkim_generate_txt'}</a>
+		<div class="form-group">
+                <div class="col-sm-9"><textarea class="form-control" name="dkim_public" style="display:none;" id="dkim_public" rows='5' cols='30' readonly>{tmpl_var name='dkim_public'}</textarea></div>
               </div>
 
-              <div class="ctrlHolder">
-                <label for="dns_record">{tmpl_var name='dkim_dns_txt'}</label>
-                <textarea name="dns_record" id="dns_record" rows='10' cols='30' readonly>{tmpl_var name='dns_record'}</textarea>
+              <div class="form-group">
+                <label for="dns_record" class="col-sm-3 control-label">{tmpl_var name='dkim_dns_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="dns_record" id="dns_record" rows='10' cols='30' readonly>{tmpl_var name='dns_record'}</textarea></div>
               </div>
 
             </div>
 
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="type" value="local">
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','mail/mail_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('mail/mail_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript" src="js/mail_domain_dkim.js"></script>
diff --git a/interface/web/mail/templates/mail_domain_list.htm b/interface/web/mail/templates/mail_domain_list.htm
index 4025150..bb1eba1 100644
--- a/interface/web/mail/templates/mail_domain_list.htm
+++ b/interface/web/mail/templates/mail_domain_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_domain">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,42 +20,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_domain_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_domain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_domain_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_domain_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_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">
-                                <a class="button 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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -67,11 +65,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_forward_edit.htm b/interface/web/mail/templates/mail_forward_edit.htm
index 5e076dc..4a5a784 100644
--- a/interface/web/mail/templates/mail_forward_edit.htm
+++ b/interface/web/mail/templates/mail_forward_edit.htm
@@ -1,37 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mail_forward">
 
-    <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 class="form-group">
+                <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9">
+                    <label for="email_local_part" class="col-sm-3 control-label">Alias<div class="col-sm-9"><input type="text" id="email_local_part" name="email_local_part" value="{tmpl_var name='email_local_part'}" class="form-control" /></div></label>
+                    <label for="email_at" class="col-sm-3 control-label">&nbsp;<span id="email_at" name="email_at" />@</label>
+                    <label for="email_domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}<div class="col-sm-9"><select name="email_domain" id="email_domain" class="form-control">{tmpl_var name='email_domain'}</select></div></label>
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="destination">{tmpl_var name='destination_txt'}</label>
-                <textarea rows="10" cols="40" name="destination" id="destination" type="text" class="textInput">{tmpl_var name='destination'}</textarea>
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
+                <div class="col-sm-9"><textarea rows="10" cols="40" name="destination" id="destination" class="form-control">{tmpl_var name='destination'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='greylisting'}
+                </div>
+            </div>
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="type" value="forward">
 
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','mail/mail_forward_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_forward_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_forward_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_forward_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/mail_forward_list.htm b/interface/web/mail/templates/mail_forward_list.htm
index 48e85f1..bb4b95e 100644
--- a/interface/web/mail/templates/mail_forward_list.htm
+++ b/interface/web/mail/templates/mail_forward_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_forward">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,42 +20,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_forward_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_forward_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_source" scope="col"><tmpl_var name="source_txt"></th>
-                        <th class="tbl_col_destination" scope="col"><tmpl_var name="destination_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th data-column="destination"><tmpl_var name="destination_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_source"><input type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
-                        <td class="tbl_col_destination"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_forward_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td><input class="form-control" type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_forward_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_forward_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_source"><a href="#" onclick="loadContent('mail/mail_forward_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
-                            <td class="tbl_col_destination"><a href="#" onclick="loadContent('mail/mail_forward_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="destination"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_forward_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_forward_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -67,11 +65,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_get_edit.htm b/interface/web/mail/templates/mail_get_edit.htm
index 1f5e6a9..f3d8a3b 100644
--- a/interface/web/mail/templates/mail_get_edit.htm
+++ b/interface/web/mail/templates/mail_get_edit.htm
@@ -1,60 +1,54 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="source_server" class="col-sm-3 control-label">{tmpl_var name='source_server_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="source_server" id="source_server" value="{tmpl_var name='source_server'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="source_username" class="col-sm-3 control-label">{tmpl_var name='source_username_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="source_username" id="source_username" value="{tmpl_var name='source_username'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="source_password" class="col-sm-3 control-label">{tmpl_var name='source_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="source_password" id="source_password" value="{tmpl_var name='source_password'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='source_delete_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='source_delete'} {tmpl_var name="source_delete_note_txt"}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='source_read_all_txt'}</p>
-                <div class="multiField">        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='source_read_all_txt'}</label>
+                <div class="col-sm-9">        
                     {tmpl_var name='source_read_all'} 
                 </div>                          
             </div>
-            <div class="ctrlHolder">
-                <label for="destination">{tmpl_var name='destination_txt'}</label>
-                <select name="destination" id="destination" class="selectInput">
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
+                <div class="col-sm-9"><select name="destination" id="destination" class="form-control">
                     {tmpl_var name='destination'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_get_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_get_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_get_list.htm b/interface/web/mail/templates/mail_get_list.htm
index a4784f9..58a550a 100644
--- a/interface/web/mail/templates/mail_get_list.htm
+++ b/interface/web/mail/templates/mail_get_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_get">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,48 +20,46 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_get_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_get_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_source_server" scope="col"><tmpl_var name="source_server_txt"></th>
-                        <th class="tbl_col_source_username" scope="col"><tmpl_var name="source_username_txt"></th>
-                        <th class="tbl_col_destination" scope="col"><tmpl_var name="destination_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="source_server"><tmpl_var name="source_server_txt"></th>
+                        <th data-column="source_username"><tmpl_var name="source_username_txt"></th>
+                        <th data-column="destination"><tmpl_var name="destination_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_source_server"><input type="text" name="search_source_server" value="{tmpl_var name='search_source_server'}" /></td>
-                        <td class="tbl_col_source_username"><input type="text" name="search_source_username" value="{tmpl_var name='search_source_username'}" /></td>
-                        <td class="tbl_col_destination"><input type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_get_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source_server" value="{tmpl_var name='search_source_server'}" /></td>
+                        <td><input class="form-control" type="text" name="search_source_username" value="{tmpl_var name='search_source_username'}" /></td>
+                        <td><input class="form-control" type="text" name="search_destination" value="{tmpl_var name='search_destination'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_get_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_get_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_get_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_source_server"><a href="#" onclick="loadContent('mail/mail_get_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source_server"}</a></td>
-                            <td class="tbl_col_source_username"><a href="#" onclick="loadContent('mail/mail_get_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source_username"}</a></td>
-                            <td class="tbl_col_destination"><a href="#" onclick="loadContent('mail/mail_get_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="destination"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_get_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source_server"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source_username"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_get_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -73,11 +71,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_mailinglist_edit.htm b/interface/web/mail/templates/mail_mailinglist_edit.htm
index d9ec0ca..f6d7784 100644
--- a/interface/web/mail/templates/mail_mailinglist_edit.htm
+++ b/interface/web/mail/templates/mail_mailinglist_edit.htm
@@ -1,86 +1,78 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>	
+        <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">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </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">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </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">
+                <div class="form-group">
+                    <label for="domain_disabled" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                    <div class="col-sm-9"><select name="domain_disabled" id="domain_disabled" class="form-control" disabled="disabled">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <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 class="form-group">
+                    <label for="listname_disabled" class="col-sm-3 control-label">{tmpl_var name='listname_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="listname_disabled" id="listname_disabled" value="{tmpl_var name='listname'}" class="form-control" disabled="disabled" /></div><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 class="form-group">
+                    <label for="email_disabled" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="email_disabled" id="email_disabled" value="{tmpl_var name='email'}" class="form-control" disabled="disabled" /></div><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">
+                    <div class="form-group">
+                        <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                        <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                             {tmpl_var name='domain_option'}
-                        </select>
+                        </select></div>
                     </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>
+                    <div class="form-group">
+                        <label for="listname" class="col-sm-3 control-label">{tmpl_var name='listname_txt'}</label>
+                        <div class="col-sm-9"><input type="text" name="listname" id="listname" value="{tmpl_var name='listname'}" class="form-control" /></div></div>
+                    <div class="form-group">
+                        <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                        <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_mailinglist_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_mailinglist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/mail_mailinglist_list.htm b/interface/web/mail/templates/mail_mailinglist_list.htm
index 12ddd95..7e15df3 100644
--- a/interface/web/mail/templates/mail_mailinglist_list.htm
+++ b/interface/web/mail/templates/mail_mailinglist_list.htm
@@ -1,8 +1,8 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_mail_mailinglist">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -19,42 +19,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_mailinglist_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_mailinglist_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="listname"><tmpl_var name="listname_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_listname" value="{tmpl_var name='search_listname'}" /></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_mailinglist_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_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">
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_mailinglist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="listname"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_mailinglist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td class="text-right">
                                 <tmpl_if name="mailmailinglist_link">
-                                    <a class="button icons16 icoWebmailer" href="mail/mailinglist.php?id={tmpl_var name='id'}" target="mailmailinglist"><span>{tmpl_var name='mailinglist_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-default formbutton-narrow" href="mail/mailinglist.php?id={tmpl_var name='id'}" target="mailmailinglist"><span class="icon icon-mail"></span></a>
                                 </tmpl_if>
-                                <a class="button 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>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_mailinglist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -66,11 +64,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_relay_recipient_edit.htm b/interface/web/mail/templates/mail_relay_recipient_edit.htm
index 0e5999c..83e52aa 100644
--- a/interface/web/mail/templates/mail_relay_recipient_edit.htm
+++ b/interface/web/mail/templates/mail_relay_recipient_edit.htm
@@ -1,35 +1,31 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mail_relay_recipient">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Relay recipient</legend>
-            <div class="ctrlHolder">
-                <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                <select name="server_id" id="server_id" class="selectInput">
+        <legend>Relay recipient</legend>
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </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">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="source" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="source" id="source" value="{tmpl_var name='source'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="access" value="OK">
 
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','mail/mail_relay_recipient_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_relay_recipient_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_relay_recipient_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_relay_recipient_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_relay_recipient_list.htm b/interface/web/mail/templates/mail_relay_recipient_list.htm
index 33f5281..7dac3e7 100644
--- a/interface/web/mail/templates/mail_relay_recipient_list.htm
+++ b/interface/web/mail/templates/mail_relay_recipient_list.htm
@@ -1,8 +1,8 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_mail_relay_recipient">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -19,42 +19,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-        <div class="buttons">
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_relay_recipient_edit.php');">
-            <span>{tmpl_var name="add_new_record_txt"}</span>
-            </button>
-        </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+        
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_relay_recipient_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+        
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_relay_recipient_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('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">
-                                <a class="button 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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_relay_recipient_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -66,11 +64,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_transport_edit.htm b/interface/web/mail/templates/mail_transport_edit.htm
index cd1e8c9..ebde99e 100644
--- a/interface/web/mail/templates/mail_transport_edit.htm
+++ b/interface/web/mail/templates/mail_transport_edit.htm
@@ -1,56 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </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 class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='mx_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" 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">
+            <div class="form-group">
+                <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="destination" id="transport" value="{tmpl_var name='destination'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="sort_order" class="col-sm-3 control-label">{tmpl_var name='sort_order_txt'}</label>
+                <div class="col-sm-9"><select name="sort_order" id="sort_order" class="form-control">
                     {tmpl_var name='sort_order'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_transport_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_transport_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_transport_list.htm b/interface/web/mail/templates/mail_transport_list.htm
index cac01bd..4b4b2d9 100644
--- a/interface/web/mail/templates/mail_transport_list.htm
+++ b/interface/web/mail/templates/mail_transport_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_transport">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,48 +20,46 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_transport_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_transport_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_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_transport" scope="col"><tmpl_var name="transport_txt"></th>
-                        <th class="tbl_col_sort_order" scope="col"><tmpl_var name="sort_order_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th data-column="transport"><tmpl_var name="transport_txt"></th>
+                        <th data-column="sort_order"><tmpl_var name="sort_order_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{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_transport"><input type="text" name="search_transport" value="{tmpl_var name='search_transport'}" /></td>
-                        <td class="tbl_col_sort_order"><input type="text" name="search_sort_order" value="{tmpl_var name='search_sort_order'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_transport_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td><input class="form-control" type="text" name="search_transport" value="{tmpl_var name='search_transport'}" /></td>
+                        <td><input class="form-control" type="text" name="search_sort_order" value="{tmpl_var name='search_sort_order'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_transport_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_transport_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_transport_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_transport_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
-                            <td class="tbl_col_transport"><a href="#" onclick="loadContent('mail/mail_transport_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="transport"}</a></td>
-                            <td class="tbl_col_sort_order"><a href="#" onclick="loadContent('mail/mail_transport_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sort_order"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_transport_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="transport"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sort_order"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_transport_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -73,11 +71,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_autoresponder_edit.htm b/interface/web/mail/templates/mail_user_autoresponder_edit.htm
index 4ff8c81..afefb79 100644
--- a/interface/web/mail/templates/mail_user_autoresponder_edit.htm
+++ b/interface/web/mail/templates/mail_user_autoresponder_edit.htm
@@ -1,44 +1,34 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="autoresponder_subject">{tmpl_var name='autoresponder_subject_txt'}</label>
-                <input type="text" name="autoresponder_subject" id="autoresponder_subject" maxlength='250' value="{tmpl_var name='autoresponder_subject'}" />
+
+        
+            <div class="form-group">
+                <label for="autoresponder_subject" class="col-sm-3 control-label">{tmpl_var name='autoresponder_subject_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" name="autoresponder_subject" id="autoresponder_subject" value="{tmpl_var name='autoresponder_subject'}" /></div></div>
+            <div class="form-group">
+                <label for="autoresponder_text" class="col-sm-3 control-label">{tmpl_var name='autoresponder_text_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="autoresponder_text" id="autoresponder_text" rows='15' cols='30'>{tmpl_var name='autoresponder_text'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder_text">{tmpl_var name='autoresponder_text_txt'}</label>
-                <textarea name="autoresponder_text" id="autoresponder_text" rows='15' cols='30'>{tmpl_var name='autoresponder_text'}</textarea>
+            <div class="form-group">
+                <label for="autoresponder" class="col-sm-3 control-label">{tmpl_var name='autoresponder_active'}</label>
+                <div class="col-sm-9"><input type="checkbox" value="y" id="autoresponder" name="autoresponder" onclick="AR_ResetDates();" {tmpl_var name='ar_active'} /></div>
+			</div>
+            <div class="form-group">
+                <label for="autoresponder_start_date" class="col-sm-3 control-label">{tmpl_var name='autoresponder_start_date_txt'}</label>
+                <div class="col-sm-9">{tmpl_var name='autoresponder_start_date'}&nbsp;
+                <a href="javascript:AR_SetNow();">{tmpl_var name='now_txt'}</a></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder">{tmpl_var name='autoresponder_active'}</label>
-                <input type="checkbox" value="y" id="autoresponder" name="autoresponder"
-                       onclick="AR_ResetDates();" {tmpl_var name='ar_active'} />
+            <div class="form-group">
+                <label for="autoresponder_end_date" class="col-sm-3 control-label">{tmpl_var name='autoresponder_end_date_txt'}</label>
+                <div class="col-sm-9">{tmpl_var name='autoresponder_end_date'}</div>
             </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder_start_date">{tmpl_var name='autoresponder_start_date_txt'}</label>
-                {tmpl_var name='autoresponder_start_date'}&nbsp;
-                <a href="javascript:AR_SetNow();">{tmpl_var name='now_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder_end_date">{tmpl_var name='autoresponder_end_date_txt'}</label>
-                {tmpl_var name='autoresponder_end_date'}
-            </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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button"
+                    value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_backup.htm b/interface/web/mail/templates/mail_user_backup.htm
index e3aa096..f9abba3 100644
--- a/interface/web/mail/templates/mail_user_backup.htm
+++ b/interface/web/mail/templates/mail_user_backup.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,30 +12,25 @@
 </div>
 </tmpl_if>
 
-<div class="panel panel_mail_user">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Backup</legend>
-            <div class="ctrlHolder">
-                <label for="backup_interval">{tmpl_var name='backup_interval_txt'}</label>
-                <select name="backup_interval" id="backup_interval" class="selectInput">
+        <legend>Backup</legend>
+            <div class="form-group">
+                <label for="backup_interval" class="col-sm-3 control-label">{tmpl_var name='backup_interval_txt'}</label>
+                <div class="col-sm-9"><select name="backup_interval" id="backup_interval" class="form-control">
                     {tmpl_var name='backup_interval'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="backup_copies">{tmpl_var name='backup_copies_txt'}</label>
-                <select name="backup_copies" id="backup_copies" class="selectInput">
+            <div class="form-group">
+                <label for="backup_copies" class="col-sm-3 control-label">{tmpl_var name='backup_copies_txt'}</label>
+                <div class="col-sm-9"><select name="backup_copies" id="backup_copies" class="form-control">
                     {tmpl_var name='backup_copies'}
-                </select>
+                </select></div>
             </div>
-        </fieldset>
+        
         {tmpl_var name='backup_records'}
         <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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/mail_user_backup_list.htm b/interface/web/mail/templates/mail_user_backup_list.htm
index 7fc61fd..b8f29a8 100644
--- a/interface/web/mail/templates/mail_user_backup_list.htm
+++ b/interface/web/mail/templates/mail_user_backup_list.htm
@@ -2,34 +2,31 @@
     <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>
+    <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
 </tmpl_if>
 <h3><tmpl_var name="list_head_txt"></h3>
 
-<div class="panel panel_list_mail_backup">
-    
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_date" scope="col"><tmpl_var name="date_txt"></th>
-                        <th class="tbl_col_filename" scope="col"><tmpl_var name="filename_txt"></th>
-			<th class="tbl_col_filename" scope="col"><tmpl_var name="filesize_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="date"><tmpl_var name="date_txt"></th>
+                        <th data-column="filename"><tmpl_var name="filename_txt"></th>
+			<th data-column="filesize"><tmpl_var name="filesize_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</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_date">{tmpl_var name="date"}</td>
-                            <td class="tbl_col_filename">{tmpl_var name="filename"}</td>
-			    <td class="tbl_col_filesize">{tmpl_var name="filesize"}</td>
-                            <td class="tbl_col_buttons">
+                        <tr>
+                            <td>{tmpl_var name="date"}</td>
+                            <td>{tmpl_var name="filename"}</td>
+			    <td>{tmpl_var name="filesize"}</td>
+                            <td class="text-right">
                                 <div class="buttons">
-                                    <button class="button iconstxt icoRestore" type="button" onclick="confirm_action('mail/mail_user_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=restore&backup_id={tmpl_var name='backup_id'}','{tmpl_var name='restore_confirm_txt'}');"><span>{tmpl_var name="restore_backup_txt"}</span></button>
-<!--                                    <button class="button iconstxt icoDownload" type="button" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=download&backup_id={tmpl_var name='backup_id'}');"><span>{tmpl_var name="download_backup_txt"}</span></button>
--->
+                                    <button class="btn btn-default formbutton-default" type="button" onclick="ISPConfig.confirm_action('mail/mail_user_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=restore_mail&backup_id={tmpl_var name='backup_id'}','{tmpl_var name='restore_confirm_txt'}');">{tmpl_var name="restore_backup_txt"}</button>
                                 </div>
                             </td>
                         </tr>
@@ -41,7 +38,4 @@
                     </tmpl_unless>
                 </tbody>
             </table>
-        </fieldset>
-    </div>
-    
-</div>
+</div>
\ No newline at end of file
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 31549df..d123786 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,19 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label for="custom_mailfilter" class="col-sm-3 control-label">{tmpl_var name='custom_mailfilter_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="custom_mailfilter" id="custom_mailfilter" rows='15' cols='30'>{tmpl_var name='custom_mailfilter'}</textarea></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_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_filter_edit.htm b/interface/web/mail/templates/mail_user_filter_edit.htm
index f7fb4c7..cb2d79a 100644
--- a/interface/web/mail/templates/mail_user_filter_edit.htm
+++ b/interface/web/mail/templates/mail_user_filter_edit.htm
@@ -1,38 +1,35 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mail_user_filter">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="rulename" class="wf_preField">{tmpl_var name='rulename_txt'}</label>
-                <input type="text" id="rulename" name="rulename" value="{tmpl_var name='rulename'}" size="30" maxlength="255"  class="textInput">
+        
+            <div class="form-group">
+                <label for="rulename" class="col-sm-3 control-label">{tmpl_var name='rulename_txt'}</label>
+                <div class="col-sm-9"><input type="text" id="rulename" name="rulename" value="{tmpl_var name='rulename'}" class="form-control"></div>
+			</div>
+            <div class="form-group">
+                <label for="source" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9" style="margin-bottom:10px"><select id="source" name="source" class="form-control">{tmpl_var name='source'}</select></div>
+                <div class="col-sm-3"></div><div class="col-sm-9" style="margin-bottom:10px"><select id="op" name="op" class="form-control">{tmpl_var name='op'}</select></div>
+				<div class="col-sm-3"></div><div class="col-sm-9"><input type="text" id="searchterm" name="searchterm" value="{tmpl_var name='searchterm'}" class="form-control"></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="source" class="wf_preField">{tmpl_var name='source_txt'}</label>
-                <select id="source" name="source"  class="textInput formLengthHalf">{tmpl_var name='source'}</select>
-                <select id="op" name="op"  class="textInput formLengthHalf">{tmpl_var name='op'}</select><br><br>
-                <div><label></label><input type="text" id="searchterm" name="searchterm" value="{tmpl_var name='searchterm'}" size="30" maxlength="255"  class="textInput"></div>
+            <div class="form-group">
+                <label for="action" class="col-sm-3 control-label">{tmpl_var name='action_txt'}</label>
+                <div class="col-sm-9" style="margin-bottom:10px"><select id="action" name="action" class="form-control">{tmpl_var name='action'}</select></div>
+                <div class="col-sm-3"></div><div class="col-sm-9"><input type="text" id="target" name="target" value="{tmpl_var name='target'}" class="form-control"></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="action" class="wf_preField">{tmpl_var name='action_txt'}</label>
-                <select id="action" name="action" class="textInput formLengthHalf">{tmpl_var name='action'}</select><br><br>
-                <div><label></label><input type="text" id="target" name="target" value="{tmpl_var name='target'}" size="30" maxlength="255"  class="textInput formLengthHalf"></div>
+            <div class="form-group">
+                <label for="active" class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9"><span class="">{tmpl_var name='active'}</span></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="active" class="wf_preField">{tmpl_var name='active_txt'}</label>
-                <span class="">{tmpl_var name='active'}</span>
-            </div>
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input name="mailuser_id" type="hidden" value="{tmpl_var name='mailuser_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_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_user_edit.php?id={tmpl_var name='mailuser_id'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_filter_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='mailuser_id'}">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_filter_list.htm b/interface/web/mail/templates/mail_user_filter_list.htm
index 2d7a6de..990558b 100644
--- a/interface/web/mail/templates/mail_user_filter_list.htm
+++ b/interface/web/mail/templates/mail_user_filter_list.htm
@@ -15,36 +15,34 @@
             </div><br />
         </div>
         </tmpl_if>
-    <fieldset style="margin-top:20px;margin-bottom:20px;"><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-        <div class="buttons">
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_user_filter_edit.php?mailuser_id={tmpl_var name='parent_id'}');">
-                <span>{tmpl_var name="add_new_record_txt"}</span>
-            </button>
-        </div>
-    </fieldset>
-</div>
+    <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+        
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_user_filter_edit.php?mailuser_id={tmpl_var name='parent_id'}">{tmpl_var name="add_new_record_txt"}</button>
+        
+    
 
-<div class="pnl_listarea">
-    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-        <table class="list">
-            <thead>
-                <tr class="caption">
-                    <th class="tbl_col_rulename" scope="col"><tmpl_var name="rulename_txt"></th>
-                    <th class="tbl_col_buttons" scope="col">{tmpl_var name='search_limit'}</th>
+
+    <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+        <div class="table-wrapper marginTop15">
+<table class="table">
+            <thead class="dark form-group-sm">
+                <tr>
+                    <th data-column="rulename"><tmpl_var name="rulename_txt"></th>
+                    <th class="text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_rulename"><input type="text" name="search_rulename" value="{tmpl_var name='search_rulename'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="return changeTab('filter_records','mail/mail_user_edit.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><input class="form-control" type="text" name="search_rulename" value="{tmpl_var name='search_rulename'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="return ISPConfig.changeTab('filter_records','mail/mail_user_edit.php');"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
             </thead>
             <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_rulename"><a href="#" onclick="loadContent('mail/mail_user_filter_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="rulename"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_user_filter_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>
+                    <tr>
+                        <td><a href="#" data-load-content="mail/mail_user_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rulename"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -56,9 +54,9 @@
             </tbody>
             <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                    <td colspan="2"><tmpl_var name="paging"></td>
                 </tr>
             </tfoot>
         </table>
-    </fieldset>
-</div>
\ No newline at end of file
+</div>
+    
diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index 3d9f09f..0ac26e1 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_user">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,64 +20,62 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-                <tmpl_if name="enable_custom_login"><th class="tbl_col_login" scope="col"><tmpl_var name="login_txt"></th></tmpl_if>
-                <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                        <th class="tbl_col_autoresponder" scope="col"><tmpl_var name="autoresponder_txt"></th>
-                        <th class="tbl_col_postfix" scope="col"><tmpl_var name="postfix_txt"></th>
-                        <th class="tbl_col_disablesmtp" scope="col"><tmpl_var name="disablesmtp_txt"></th>
-                        <th class="tbl_col_disableimap" scope="col"><tmpl_var name="disableimap_txt"></th>
-                        <th class="tbl_col_disablepop3" scope="col"><tmpl_var name="disablepop3_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="email"><tmpl_var name="email_txt"></th>
+                <tmpl_if name="enable_custom_login"><th data-column="login"><tmpl_var name="login_txt"></th></tmpl_if>
+                <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th class="tiny-col" data-column="autoresponder"><tmpl_var name="autoresponder_txt"></th>
+                        <th class="tiny-col" data-column="postfix"><tmpl_var name="postfix_txt"></th>
+                        <th class="tiny-col" data-column="disablesmtp"><tmpl_var name="disablesmtp_txt"></th>
+                        <th class="tiny-col" data-column="disableimap"><tmpl_var name="disableimap_txt"></th>
+                        <th class="tiny-col" data-column="disablepop3"><tmpl_var name="disablepop3_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
-            <tmpl_if name="enable_custom_login"><td class="tbl_col_login"><input type="text" name="search_login" value="{tmpl_var name='search_login'}" /></td></tmpl_if>
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_autoresponder"><select name="search_autoresponder">{tmpl_var name='search_autoresponder'}</select></td>
-                        <td class="tbl_col_postfix"><select name="search_postfix">{tmpl_var name='search_postfix'}</select></th>
-                        <td class="tbl_col_disablesmtp"><select name="search_disablesmtp">{tmpl_var name='search_disablesmtp'}</select></th>
-                        <td class="tbl_col_disableimap"><select name="search_disableimap">{tmpl_var name='search_disableimap'}</select></th>
-                        <td class="tbl_col_disablepop3"><select name="search_disablepop3">{tmpl_var name='search_disablepop3'}</select></th>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
+            <tmpl_if name="enable_custom_login"><td><input class="form-control" type="text" name="search_login" value="{tmpl_var name='search_login'}" /></td></tmpl_if>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td><select class="form-control" name="search_autoresponder">{tmpl_var name='search_autoresponder'}</select></td>
+                        <td><select class="form-control" name="search_postfix">{tmpl_var name='search_postfix'}</select></td>
+                        <td><select class="form-control" name="search_disablesmtp">{tmpl_var name='search_disablesmtp'}</select></td>
+                        <td><select class="form-control" name="search_disableimap">{tmpl_var name='search_disableimap'}</select></td>
+                        <td><select class="form-control" name="search_disablepop3">{tmpl_var name='search_disablepop3'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_user_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_email"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="email"}</a></td>
+                    <tr>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
                         <tmpl_if name="enable_custom_login">
-                            <td class="tbl_col_login">
-                                <a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="login"}</a>
+                            <td>
+                                <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="login"}</a>
                             </td>
                         </tmpl_if>
-                        <td class="tbl_col_name"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                        <td class="tbl_col_autoresponder"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="autoresponder"}</a></td>
-                        <td class="tbl_col_postfix"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="postfix"}</a></td>
-                        <td class="tbl_col_disablesmtp"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="disablesmtp"}</a></td>
-                        <td class="tbl_col_disableimap"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="disableimap"}</a></td>
-                        <td class="tbl_col_disablepop3"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="disablepop3"}</a></td>
-                        <td class="tbl_col_buttons">
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="autoresponder"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="postfix"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disablesmtp"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disableimap"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disablepop3"}</a></td>
+                        <td class="text-right">
                             <tmpl_if name="mailboxlist_webmail_link">
-                                <a class="button icons16 icoWebmailer" href="mail/webmailer.php?id={tmpl_var name='id'}" target="webmail"><span>{tmpl_var name="webmail_txt"}</span></a>
+                                <a class="btn btn-default formbutton-default formbutton-narrow" href="mail/webmailer.php?id={tmpl_var name='id'}" target="webmail"><span class="icon icon-mail"></span></a>
                             </tmpl_if>
-                            <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_user_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>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -89,11 +87,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="<tmpl_if name="enable_custom_login">9<tmpl_else>8</tmpl_if>"><tmpl_var name="paging"></td>
+                        <td colspan="<tmpl_if name="enable_custom_login">9<tmpl_else>8</tmpl_if>"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index 186b03d..c8f1883 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -1,91 +1,93 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="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" /> &nbsp; {tmpl_var name='name_optional_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <p class="label"><em>*</em> {tmpl_var name='email_txt'}</p>
-                <div class="multiField">
-                    <label for="email_local_part" class="blockLabel formLengthEmailDomain">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 formLengthEmailDomain">{tmpl_var name='domain_txt'}<select name="email_domain" id="email_domain" class="selectInput">{tmpl_var name='email_domain'}</select></label>
+        
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp; {tmpl_var name='name_optional_txt'}
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9">
+                    <label for="email_local_part" class="col-sm-3 control-label">Alias<div class="col-sm-9"><input type="text" id="email_local_part" name="email_local_part" value="{tmpl_var name='email_local_part'}" class="form-control" /></div></label>
+                    <label for="email_at" class="col-sm-3 control-label">&nbsp;<span id="email_at" name="email_at" />@</label>
+                    <label for="email_domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}<div class="col-sm-9"><select name="email_domain" id="email_domain" class="form-control">{tmpl_var name='email_domain'}</select></div></label>
                 </div>
             </div>
-            <tmpl_if name="enable_custom_login"><div class="ctrlHolder">
-                    <label for="login">{tmpl_var name='login_txt'}</label>
-                    <input type="text" id="login" name="login" size="20" value="{tmpl_var name='login'}" class="textInput" /></label>
+            <tmpl_if name="enable_custom_login"><div class="form-group">
+                    <label for="login" class="col-sm-3 control-label">{tmpl_var name='login_txt'}</label>
+                    <div class="col-sm-9"><input type="text" id="login" name="login" value="{tmpl_var name='login'}" class="form-control" /></div></label>
                 </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <label for="quota">{tmpl_var name='quota_txt'}</label>
-                <input name="quota" id="quota" value="{tmpl_var name='quota'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /><p class="label">MB</p>
+            <div class="form-group">
+                <label for="quota" class="col-sm-3 control-label">{tmpl_var name='quota_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="quota" id="quota" value="{tmpl_var name='quota'}" class="form-control" /></div><label class="col-sm-3 control-label">MB</label>
             </div>
-            <div class="ctrlHolder">
-                <label for="name">{tmpl_var name='cc_txt'}</label>
-                <input name="cc" id="cc" value="{tmpl_var name='cc'}" size="30" maxlength="255" type="text" class="textInput" /> &nbsp; {tmpl_var name='name_optional_txt'} {tmpl_var name='cc_note_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="sender_name">{tmpl_var name='sender_cc_txt'}</label>
-                <input name="sender_cc" id="sender_cc" value="{tmpl_var name='sender_cc'}" size="30" maxlength="255" type="text" class="textInput" /> &nbsp; {tmpl_var name='name_optional_txt'} {tmpl_var name='sender_cc_note_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="policy">{tmpl_var name='policy_txt'}</label>
-                <select name="policy" id="policy" class="selectInput">
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='cc_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cc" id="cc" value="{tmpl_var name='cc'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp; {tmpl_var name='name_optional_txt'} {tmpl_var name='cc_note_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="sender_name" class="col-sm-3 control-label">{tmpl_var name='sender_cc_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="sender_cc" id="sender_cc" value="{tmpl_var name='sender_cc'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp; {tmpl_var name='name_optional_txt'} {tmpl_var name='sender_cc_note_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="policy" class="col-sm-3 control-label">{tmpl_var name='policy_txt'}</label>
+                <div class="col-sm-9"><select name="policy" id="policy" class="form-control">
                     {tmpl_var name='policy'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='postfix_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='postfix_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='postfix'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='disablesmtp_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='disablesmtp_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='disablesmtp'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='disableimap_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='greylisting'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='disableimap_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='disableimap'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='disablepop3_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='disablepop3_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='disablepop3'}
                 </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_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/mail_user_mailfilter_edit.htm b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
index 3274685..183a98b 100644
--- a/interface/web/mail/templates/mail_user_mailfilter_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
@@ -1,26 +1,23 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mail_user">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='move_junk_txt'}</p>
-                <div class="multiField">
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='move_junk_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='move_junk'}
                 </div>
             </div>
-        </fieldset>
+        
 
         {tmpl_var name='filter_records'}
 
         <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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_stats_list.htm b/interface/web/mail/templates/mail_user_stats_list.htm
index 35e2235..baca4dc 100644
--- a/interface/web/mail/templates/mail_user_stats_list.htm
+++ b/interface/web/mail/templates/mail_user_stats_list.htm
@@ -1,40 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="caption">
-                        <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-                        <th class="tbl_col_mail_traffic_this_month" scope="col"><tmpl_var name="this_month_txt"></th>
-                        <th class="tbl_col_mail_traffic_last_month" scope="col"><tmpl_var name="last_month_txt"></th>
-                        <th class="tbl_col_mail_traffic_this_year" scope="col"><tmpl_var name="this_year_txt"></th>
-                        <th class="tbl_col_mail_traffic_last_year" scope="col"><tmpl_var name="last_year_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="email"><tmpl_var name="email_txt"></th>
+                        <th data-column="this_month"><tmpl_var name="this_month_txt"></th>
+                        <th data-column="last_month"><tmpl_var name="last_month_txt"></th>
+                        <th data-column="this_year"><tmpl_var name="this_year_txt"></th>
+                        <th data-column="last_year"><tmpl_var name="last_year_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_user_stats.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_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"}</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"}</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"}</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"}</a></td>
-                            <td class="tbl_col_buttons"></td>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_month"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_month"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_year"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_year"}</a></td>
+                            <td class="text-right"></td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
@@ -46,11 +47,10 @@
 
                 <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                    <td colspan="6"><tmpl_var name="paging"></td>
                 </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    </div>
diff --git a/interface/web/mail/templates/mail_whitelist_edit.htm b/interface/web/mail/templates/mail_whitelist_edit.htm
index d364349..1f72e69 100644
--- a/interface/web/mail/templates/mail_whitelist_edit.htm
+++ b/interface/web/mail/templates/mail_whitelist_edit.htm
@@ -1,41 +1,37 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="source" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="source" id="source" value="{tmpl_var name='source'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/mail_whitelist_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/mail_whitelist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_whitelist_list.htm b/interface/web/mail/templates/mail_whitelist_list.htm
index 882aa58..cb3b783 100644
--- a/interface/web/mail/templates/mail_whitelist_list.htm
+++ b/interface/web/mail/templates/mail_whitelist_list.htm
@@ -1,48 +1,46 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_mail_whitelist">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/mail_whitelist_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_whitelist_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_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_type" scope="col"><tmpl_var name="type_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="source"><tmpl_var name="source_txt"></th>
+                        <th data-column="type"><tmpl_var name="type_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{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_type"><select name="search_type">{tmpl_var name='search_type'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_whitelist_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_source" value="{tmpl_var name='search_source'}" /></td>
+                        <td><select class="form-control" name="search_type">{tmpl_var name='search_type'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_whitelist_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/mail_whitelist_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_whitelist_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_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="source"}</a></td>
-                            <td class="tbl_col_type"><a href="#" onclick="loadContent('mail/mail_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="type"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/mail_whitelist_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_whitelist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -54,11 +52,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_blacklist_edit.htm b/interface/web/mail/templates/spamfilter_blacklist_edit.htm
index ae5b3ee..1db93dd 100644
--- a/interface/web/mail/templates/spamfilter_blacklist_edit.htm
+++ b/interface/web/mail/templates/spamfilter_blacklist_edit.htm
@@ -1,49 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+                <div class="form-group">
+                    <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                    <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                                     {tmpl_var name='server_id'}
-                                            </select>
+                                            </select></div>
                 </div>
             -->
-            <div class="ctrlHolder">
-                <label for="rid">{tmpl_var name='rid_txt'}</label>
-                <select name="rid" id="rid" class="selectInput">
+            <div class="form-group">
+                <label for="rid" class="col-sm-3 control-label">{tmpl_var name='rid_txt'}</label>
+                <div class="col-sm-9"><select name="rid" id="rid" class="form-control">
                     {tmpl_var name='rid'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="priority" class="col-sm-3 control-label">{tmpl_var name='priority_txt'}</label>
+                <div class="col-sm-9"><select name="priority" id="priority" class="form-control">
                     {tmpl_var name='priority'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_blacklist_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_blacklist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_blacklist_list.htm b/interface/web/mail/templates/spamfilter_blacklist_list.htm
index 3407d4a..91a4591 100644
--- a/interface/web/mail/templates/spamfilter_blacklist_list.htm
+++ b/interface/web/mail/templates/spamfilter_blacklist_list.htm
@@ -1,51 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_spamfilter_blacklist">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/spamfilter_blacklist_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/spamfilter_blacklist_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_priority" scope="col"><tmpl_var name="priority_txt"></th>
-                        <th class="tbl_col_rid" scope="col"><tmpl_var name="rid_txt"></th>
-                        <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="priority"><tmpl_var name="priority_txt"></th>
+                        <th data-column="rid"><tmpl_var name="rid_txt"></th>
+                        <th data-column="email"><tmpl_var name="email_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_priority"><select name="search_priority">{tmpl_var name='search_priority'}</select></td>
-                        <td class="tbl_col_rid"><select name="search_rid">{tmpl_var name='search_rid'}</select></td>
-                        <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/spamfilter_blacklist_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_priority">{tmpl_var name='search_priority'}</select></td>
+                        <td><select class="form-control" name="search_rid">{tmpl_var name='search_rid'}</select></td>
+                        <td><input class="form-control" type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_blacklist_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_priority"><a href="#" onclick="loadContent('mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="priority"}</a></td>
-                            <td class="tbl_col_rid"><a href="#" onclick="loadContent('mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="rid"}</a></td>
-                            <td class="tbl_col_email"><a href="#" onclick="loadContent('mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="email"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/spamfilter_blacklist_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="priority"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rid"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_blacklist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -57,11 +55,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_config_getmail_edit.htm b/interface/web/mail/templates/spamfilter_config_getmail_edit.htm
index 4dd0710..c6b6ba0 100644
--- a/interface/web/mail/templates/spamfilter_config_getmail_edit.htm
+++ b/interface/web/mail/templates/spamfilter_config_getmail_edit.htm
@@ -1,22 +1,18 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+                <label for="getmail_config_dir" class="col-sm-3 control-label">{tmpl_var name='getmail_config_dir_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="getmail_config_dir" name="getmail_config_dir" value="{tmpl_var name='getmail_config_dir'}"></div></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>
\ No newline at end of file
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_config_list.htm b/interface/web/mail/templates/spamfilter_config_list.htm
index cd43b4d..486a79e 100644
--- a/interface/web/mail/templates/spamfilter_config_list.htm
+++ b/interface/web/mail/templates/spamfilter_config_list.htm
@@ -1,39 +1,37 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_spamfilter_config">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/spamfilter_config_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/spamfilter_config_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
-                        <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="server_name"><tmpl_var name="server_name_txt"></th>
+                        <th class="text-right">&nbsp;</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/spamfilter_config_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_config_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_server_name"><a href="#" onclick="loadContent('mail/spamfilter_config_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/spamfilter_config_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/spamfilter_config_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -45,11 +43,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="2"><tmpl_var name="paging"></td>
+                        <td colspan="2"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_config_mail_edit.htm b/interface/web/mail/templates/spamfilter_config_mail_edit.htm
index 22f5b9f..909d654 100644
--- a/interface/web/mail/templates/spamfilter_config_mail_edit.htm
+++ b/interface/web/mail/templates/spamfilter_config_mail_edit.htm
@@ -1,66 +1,52 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+                <label for="module" class="col-sm-3 control-label">{tmpl_var name='module_txt'}</label>
+                <div class="col-sm-9"><select class="form-control" id="module" name="module">{tmpl_var name='module'}</select></div>
             </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>
+                <label for="maildir_path" class="col-sm-3 control-label">{tmpl_var name='maildir_path_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="maildir_path" name="maildir_path" value="{tmpl_var name='maildir_path'}"></div></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>
+                <label for="homedir_path" class="col-sm-3 control-label">{tmpl_var name='homedir_path_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="homedir_path" name="homedir_path" value="{tmpl_var name='homedir_path'}"></div></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>
+                <label for="mailuser_uid" class="col-sm-3 control-label">{tmpl_var name='mailuser_uid_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="mailuser_uid" name="mailuser_uid" value="{tmpl_var name='mailuser_uid'}"></div></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>
+                <label for="mailuser_gid" class="col-sm-3 control-label">{tmpl_var name='mailuser_gid_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="mailuser_gid" name="mailuser_gid" value="{tmpl_var name='mailuser_gid'}"></div></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>
+                <label for="mailuser_name" class="col-sm-3 control-label">{tmpl_var name='mailuser_name_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="mailuser_name" name="mailuser_name" value="{tmpl_var name='mailuser_name'}"></div></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>
+                <label for="mailuser_group" class="col-sm-3 control-label">{tmpl_var name='mailuser_group_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="mailuser_group" name="mailuser_group" value="{tmpl_var name='mailuser_group'}"></div></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>
+                <label for="relayhost" class="col-sm-3 control-label">{tmpl_var name='relayhost_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="relayhost" name="relayhost" value="{tmpl_var name='relayhost'}"></div></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>
+                <label for="relayhost_user" class="col-sm-3 control-label">{tmpl_var name='relayhost_user_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="relayhost_user" name="relayhost_user" value="{tmpl_var name='relayhost_user'}"></div></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>
+                <label for="relayhost_password" class="col-sm-3 control-label">{tmpl_var name='relayhost_password_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="relayhost_password" name="relayhost_password" value="{tmpl_var name='relayhost_password'}"></div></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>
+                <label for="mailbox_size_limit" class="col-sm-3 control-label">{tmpl_var name='mailbox_size_limit_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="mailbox_size_limit" name="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}"></div></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>
+                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="message_size_limit" name="message_size_limit" value="{tmpl_var name='message_size_limit'}"></div></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>
\ No newline at end of file
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_config_server_edit.htm b/interface/web/mail/templates/spamfilter_config_server_edit.htm
index e91d4a0..075149e 100644
--- a/interface/web/mail/templates/spamfilter_config_server_edit.htm
+++ b/interface/web/mail/templates/spamfilter_config_server_edit.htm
@@ -1,38 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+                <label for="ip_address" class="col-sm-3 control-label">{tmpl_var name='ip_address_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="ip_address" name="ip_address" value="{tmpl_var name='ip_address'}"></div></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>
+                <label for="netmask" class="col-sm-3 control-label">{tmpl_var name='netmask_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="netmask" name="netmask" value="{tmpl_var name='netmask'}"></div></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>
+                <label for="gateway" class="col-sm-3 control-label">{tmpl_var name='gateway_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="gateway" name="gateway" value="{tmpl_var name='gateway'}"></div></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>
+                <label for="hostname" class="col-sm-3 control-label">{tmpl_var name='hostname_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="hostname" name="hostname" value="{tmpl_var name='hostname'}"></div></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>
+                <label for="nameservers" class="col-sm-3 control-label">{tmpl_var name='nameservers_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="nameservers" name="nameservers" value="{tmpl_var name='nameservers'}"></div></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>
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_config_list.php">{tmpl_var name='btn_cancel_txt'}</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 a25a2e7..9716472 100644
--- a/interface/web/mail/templates/spamfilter_other_edit.htm
+++ b/interface/web/mail/templates/spamfilter_other_edit.htm
@@ -1,80 +1,67 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="addr_extension_virus" class="col-sm-3 control-label">{tmpl_var name='addr_extension_virus_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_spam" class="col-sm-3 control-label">{tmpl_var name='addr_extension_spam_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_banned" class="col-sm-3 control-label">{tmpl_var name='addr_extension_banned_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_bad_header" class="col-sm-3 control-label">{tmpl_var name='addr_extension_bad_header_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="warnvirusrecip" class="col-sm-3 control-label">{tmpl_var name='warnvirusrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnvirusrecip" id="warnvirusrecip" class="form-control">
                     {tmpl_var name='warnvirusrecip'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="warnbannedrecip">{tmpl_var name='warnbannedrecip_txt'}</label>
-                <select name="warnbannedrecip" id="warnbannedrecip" class="selectInput formLengthBool">
+            <div class="form-group">
+                <label for="warnbannedrecip" class="col-sm-3 control-label">{tmpl_var name='warnbannedrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnbannedrecip" id="warnbannedrecip" class="form-control">
                     {tmpl_var name='warnbannedrecip'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="warnbadhrecip">{tmpl_var name='warnbadhrecip_txt'}</label>
-                <select name="warnbadhrecip" id="warnbadhrecip" class="selectInput formLengthBool">
+            <div class="form-group">
+                <label for="warnbadhrecip" class="col-sm-3 control-label">{tmpl_var name='warnbadhrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnbadhrecip" id="warnbadhrecip" class="form-control">
                     {tmpl_var name='warnbadhrecip'}
-                </select>
+                </select></div>
             </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>
+            <div class="form-group">
+                <label for="newvirus_admin" class="col-sm-3 control-label">{tmpl_var name='newvirus_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="virus_admin" class="col-sm-3 control-label">{tmpl_var name='virus_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="banned_admin" class="col-sm-3 control-label">{tmpl_var name='banned_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bad_header_admin" class="col-sm-3 control-label">{tmpl_var name='bad_header_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_admin" class="col-sm-3 control-label">{tmpl_var name='spam_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;Bytes
+            </div></div>
+            <div class="form-group">
+                <label for="banned_rulenames" class="col-sm-3 control-label">{tmpl_var name='banned_rulenames_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" class="form-control" /></div></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','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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_policy_edit.htm b/interface/web/mail/templates/spamfilter_policy_edit.htm
index 3ed6b83..317bbdb 100644
--- a/interface/web/mail/templates/spamfilter_policy_edit.htm
+++ b/interface/web/mail/templates/spamfilter_policy_edit.htm
@@ -1,64 +1,60 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="policy_name" class="col-sm-3 control-label">{tmpl_var name='policy_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="policy_name" id="policy_name" value="{tmpl_var name='policy_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="virus_lover" class="col-sm-3 control-label">{tmpl_var name='virus_lover_txt'}</label>
+                <div class="col-sm-9"><select name="virus_lover" id="virus_lover" class="form-control">
                     {tmpl_var name='virus_lover'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="spam_lover" class="col-sm-3 control-label">{tmpl_var name='spam_lover_txt'}</label>
+                <div class="col-sm-9"><select name="spam_lover" id="spam_lover" class="form-control">
                     {tmpl_var name='spam_lover'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="banned_files_lover" class="col-sm-3 control-label">{tmpl_var name='banned_files_lover_txt'}</label>
+                <div class="col-sm-9"><select name="banned_files_lover" id="banned_files_lover" class="form-control">
                     {tmpl_var name='banned_files_lover'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="bad_header_lover" class="col-sm-3 control-label">{tmpl_var name='bad_header_lover_txt'}</label>
+                <div class="col-sm-9"><select name="bad_header_lover" id="bad_header_lover" class="form-control">
                     {tmpl_var name='bad_header_lover'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="bypass_virus_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_virus_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_virus_checks" id="bypass_virus_checks" class="form-control">
                     {tmpl_var name='bypass_virus_checks'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="bypass_banned_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_banned_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_banned_checks" id="bypass_banned_checks" class="form-control">
                     {tmpl_var name='bypass_banned_checks'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="bypass_header_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_header_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_header_checks" id="bypass_header_checks" class="form-control">
                     {tmpl_var name='bypass_header_checks'}
-                </select>
+                </select></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_policy_list.htm b/interface/web/mail/templates/spamfilter_policy_list.htm
index 269c514..da1183d 100644
--- a/interface/web/mail/templates/spamfilter_policy_list.htm
+++ b/interface/web/mail/templates/spamfilter_policy_list.htm
@@ -1,51 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_spamfilter_policy">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/spamfilter_policy_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/spamfilter_policy_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_policy_name" scope="col"><tmpl_var name="policy_name_txt"></th>
-                        <th class="tbl_col_virus_lover" scope="col"><tmpl_var name="virus_lover_txt"></th>
-                        <th class="tbl_col_spam_lover" scope="col"><tmpl_var name="spam_lover_txt"></th>
-                        <th class="tbl_col_banned_files_lover" scope="col"><tmpl_var name="banned_files_lover_txt"></th>
-                        <th class="tbl_col_bad_header_lover" scope="col"><tmpl_var name="bad_header_lover_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="policy_name"><tmpl_var name="policy_name_txt"></th>
+                        <th data-column="virus_lover"><tmpl_var name="virus_lover_txt"></th>
+                        <th data-column="spam_lover"><tmpl_var name="spam_lover_txt"></th>
+                        <th data-column="banned_files_lover"><tmpl_var name="banned_files_lover_txt"></th>
+                        <th data-column="bad_header_lover"><tmpl_var name="bad_header_lover_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_policy_name"><input type="text" name="search_policy_name" value="{tmpl_var name='search_policy_name'}" /></td>
-                        <td class="tbl_col_virus_lover"><select name="search_virus_lover">{tmpl_var name='search_virus_lover'}</select></td>
-                        <td class="tbl_col_spam_lover"><select name="search_spam_lover">{tmpl_var name='search_spam_lover'}</select></td>
-                        <td class="tbl_col_banned_files_lover"><select name="search_banned_files_lover">{tmpl_var name='search_banned_files_lover'}</select></td>
-                        <td class="tbl_col_bad_header_lover"><select name="search_bad_header_lover">{tmpl_var name='search_bad_header_lover'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/spamfilter_policy_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_policy_name" value="{tmpl_var name='search_policy_name'}" /></td>
+                        <td><select class="form-control" name="search_virus_lover">{tmpl_var name='search_virus_lover'}</select></td>
+                        <td><select class="form-control" name="search_spam_lover">{tmpl_var name='search_spam_lover'}</select></td>
+                        <td><select class="form-control" name="search_banned_files_lover">{tmpl_var name='search_banned_files_lover'}</select></td>
+                        <td><select class="form-control" name="search_bad_header_lover">{tmpl_var name='search_bad_header_lover'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_policy_name"><a href="#" onclick="loadContent('mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="policy_name"}</a></td>
-                        <td class="tbl_col_virus_lover"><a href="#" onclick="loadContent('mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="virus_lover"}</a></td>
-                        <td class="tbl_col_spam_lover"><a href="#" onclick="loadContent('mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="spam_lover"}</a></td>
-                        <td class="tbl_col_banned_files_lover"><a href="#" onclick="loadContent('mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="banned_files_lover"}</a></td>
-                        <td class="tbl_col_bad_header_lover"><a href="#" onclick="loadContent('mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="bad_header_lover"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('mail/spamfilter_policy_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>
+                    <tr>
+                        <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="policy_name"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virus_lover"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="spam_lover"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="banned_files_lover"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="bad_header_lover"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_policy_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -58,11 +56,10 @@
 
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_quarantine_edit.htm b/interface/web/mail/templates/spamfilter_quarantine_edit.htm
index 4a38d7f..7f44b58 100644
--- a/interface/web/mail/templates/spamfilter_quarantine_edit.htm
+++ b/interface/web/mail/templates/spamfilter_quarantine_edit.htm
@@ -1,44 +1,35 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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="form-group">
+                <label for="virus_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='virus_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="banned_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='banned_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bad_header_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" class="form-control" /></div></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>
+                  <div class="form-group">
+                    <label for="clean_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='clean_quarantine_to_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="clean_quarantine_to" id="clean_quarantine_to" value="{tmpl_var name='clean_quarantine_to'}" class="form-control" /></div></div>
+                  <div class="form-group">
+                    <label for="other_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='other_quarantine_to_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="other_quarantine_to" id="other_quarantine_to" value="{tmpl_var name='other_quarantine_to'}" class="form-control" /></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_taglevel_edit.htm b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
index 059ab15..ba92662 100644
--- a/interface/web/mail/templates/spamfilter_taglevel_edit.htm
+++ b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
@@ -1,52 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_tag2_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag2_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='spam_kill_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_dsn_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_quarantine_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_modifies_subj" class="col-sm-3 control-label">{tmpl_var name='spam_modifies_subj_txt'}</label>
+                <div class="col-sm-9"><select name="spam_modifies_subj" id="spam_modifies_subj" class="form-control">
                     {tmpl_var name='spam_modifies_subj'}
-                </select>
+                </select></div>
             </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>
+            <div class="form-group">
+                <label for="spam_subject_tag" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_subject_tag2" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag2_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" class="form-control" /></div></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','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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_users_edit.htm b/interface/web/mail/templates/spamfilter_users_edit.htm
index 52e5945..7c75c5e 100644
--- a/interface/web/mail/templates/spamfilter_users_edit.htm
+++ b/interface/web/mail/templates/spamfilter_users_edit.htm
@@ -1,50 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="priority">{tmpl_var name='priority_txt'}</label>
-                <select name="priority" id="priority" class="selectInput formLengthLimit">
+            <div class="form-group">
+                <label for="priority" class="col-sm-3 control-label">{tmpl_var name='priority_txt'}</label>
+                <div class="col-sm-9"><select name="priority" id="priority" class="form-control">
                     {tmpl_var name='priority'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="policy_id">{tmpl_var name='policy_id_txt'}</label>
-                <select name="policy_id" id="policy_id" class="selectInput">
+            <div class="form-group">
+                <label for="policy_id" class="col-sm-3 control-label">{tmpl_var name='policy_id_txt'}</label>
+                <div class="col-sm-9"><select name="policy_id" id="policy_id" class="form-control">
                     {tmpl_var name='policy_id'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="fullname" class="col-sm-3 control-label">{tmpl_var name='fullname_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="fullname" id="fullname" value="{tmpl_var name='fullname'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="local" class="col-sm-3 control-label">{tmpl_var name='local_txt'}</label>
+                <div class="col-sm-9"><select name="local" id="local" class="form-control">
                     {tmpl_var name='local'}
-                </select>
+                </select></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/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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_users_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_users_list.htm b/interface/web/mail/templates/spamfilter_users_list.htm
index 34b4b2d..5f8ef83 100644
--- a/interface/web/mail/templates/spamfilter_users_list.htm
+++ b/interface/web/mail/templates/spamfilter_users_list.htm
@@ -1,51 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_spamfilter_users">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/spamfilter_users_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/spamfilter_users_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_local" scope="col"><tmpl_var name="local_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_priority" scope="col"><tmpl_var name="priority_txt"></th>
-                        <th class="tbl_col_policy_id" scope="col"><tmpl_var name="policy_id_txt"></th>
-                        <th class="tbl_col_fullname" scope="col"><tmpl_var name="fullname_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="local"><tmpl_var name="local_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="priority"><tmpl_var name="priority_txt"></th>
+                        <th data-column="policy_id"><tmpl_var name="policy_id_txt"></th>
+                        <th data-column="fullname"><tmpl_var name="fullname_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_local"><select name="search_local">{tmpl_var name='search_local'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_priority"><select name="search_priority">{tmpl_var name='search_priority'}</select></td>
-                        <td class="tbl_col_policy_id"><select name="search_policy_id">{tmpl_var name='search_policy_id'}</select></td>
-                        <td class="tbl_col_fullname"><input type="text" name="search_fullname" value="{tmpl_var name='search_fullname'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/spamfilter_users_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_local">{tmpl_var name='search_local'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_priority">{tmpl_var name='search_priority'}</select></td>
+                        <td><select class="form-control" name="search_policy_id">{tmpl_var name='search_policy_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_fullname" value="{tmpl_var name='search_fullname'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_users_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_local"><a href="#" onclick="loadContent('mail/spamfilter_users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="local"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('mail/spamfilter_users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                        <td class="tbl_col_priority"><a href="#" onclick="loadContent('mail/spamfilter_users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="priority"}</a></td>
-                        <td class="tbl_col_policy_id"><a href="#" onclick="loadContent('mail/spamfilter_users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="policy_id"}</a></td>
-                        <td class="tbl_col_fullname"><a href="#" onclick="loadContent('mail/spamfilter_users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="fullname"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('mail/spamfilter_users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                    <tr>
+                        <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="local"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="priority"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="policy_id"}</a></td>
+                        <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="fullname"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                     </tmpl_loop>
@@ -57,11 +55,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_whitelist_edit.htm b/interface/web/mail/templates/spamfilter_whitelist_edit.htm
index efb7018..aefe5f9 100644
--- a/interface/web/mail/templates/spamfilter_whitelist_edit.htm
+++ b/interface/web/mail/templates/spamfilter_whitelist_edit.htm
@@ -1,49 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+                  <div class="form-group">
+                    <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                    <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                                     {tmpl_var name='server_id'}
-                                            </select>
+                                            </select></div>
                   </div>
             -->
-            <div class="ctrlHolder">
-                <label for="rid">{tmpl_var name='rid_txt'}</label>
-                <select name="rid" id="rid" class="selectInput">
+            <div class="form-group">
+                <label for="rid" class="col-sm-3 control-label">{tmpl_var name='rid_txt'}</label>
+                <div class="col-sm-9"><select name="rid" id="rid" class="form-control">
                     {tmpl_var name='rid'}
-                </select>
+                </select></div>
             </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">
+            <div class="form-group">
+                <label for="email" class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="email" id="email" value="{tmpl_var name='email'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="priority" class="col-sm-3 control-label">{tmpl_var name='priority_txt'}</label>
+                <div class="col-sm-9"><select name="priority" id="priority" class="form-control">
                     {tmpl_var name='priority'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_whitelist_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_whitelist_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_whitelist_list.htm b/interface/web/mail/templates/spamfilter_whitelist_list.htm
index ea4d724..87ef0bd 100644
--- a/interface/web/mail/templates/spamfilter_whitelist_list.htm
+++ b/interface/web/mail/templates/spamfilter_whitelist_list.htm
@@ -1,51 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_spamfilter_whitelist">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mail/spamfilter_whitelist_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/spamfilter_whitelist_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_priority" scope="col"><tmpl_var name="priority_txt"></th>
-                        <th class="tbl_col_rid" scope="col"><tmpl_var name="rid_txt"></th>
-                        <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="priority"><tmpl_var name="priority_txt"></th>
+                        <th data-column="rid"><tmpl_var name="rid_txt"></th>
+                        <th data-column="email"><tmpl_var name="email_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_priority"><select name="search_priority">{tmpl_var name='search_priority'}</select></td>
-                        <td class="tbl_col_rid"><select name="search_rid">{tmpl_var name='search_rid'}</select></td>
-                        <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/spamfilter_whitelist_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_priority">{tmpl_var name='search_priority'}</select></td>
+                        <td><select class="form-control" name="search_rid">{tmpl_var name='search_rid'}</select></td>
+                        <td><input class="form-control" type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_whitelist_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_priority"><a href="#" onclick="loadContent('mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="priority"}</a></td>
-                            <td class="tbl_col_rid"><a href="#" onclick="loadContent('mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="rid"}</a></td>
-                            <td class="tbl_col_email"><a href="#" onclick="loadContent('mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="email"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('mail/spamfilter_whitelist_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>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="priority"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rid"}</a></td>
+                            <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_whitelist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -58,11 +56,10 @@
 
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/user_quota_stats_list.htm b/interface/web/mail/templates/user_quota_stats_list.htm
index e700557..4b4b831 100644
--- a/interface/web/mail/templates/user_quota_stats_list.htm
+++ b/interface/web/mail/templates/user_quota_stats_list.htm
@@ -1,39 +1,40 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_user_quota_stats">
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_email" scope="col"><tmpl_var name="email_txt"></th>
-                        <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
-                        <th class="tbl_col_used_sort" scope="col"><tmpl_var name="used_txt"></th>
-                        <th class="tbl_col_quota" scope="col"><tmpl_var name="quota_txt"></th>
-                        <th class="tbl_col_percentage_sort" scope="col"><tmpl_var name="percentage_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="email"><tmpl_var name="email_txt"></th>
+                        <th data-column="name"><tmpl_var name="name_txt"></th>
+                        <th data-column="used"><tmpl_var name="used_txt"></th>
+                        <th data-column="quota"><tmpl_var name="quota_txt"></th>
+                        <th data-column="percentage"><tmpl_var name="percentage_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_email"><input type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
-                        <td class="tbl_col_name"><input type="text" name="search_system_user" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_used">&nbsp;</td>
-                        <td class="tbl_col_quota">&nbsp;</td>
-                        <td class="tbl_col_percentage">&nbsp;</td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/user_quota_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_email" value="{tmpl_var name='search_email'}" /></td>
+                        <td><input class="form-control" type="text" name="search_system_user" value="{tmpl_var name='search_name'}" /></td>
+                        <td>&nbsp;</td>
+                        <td>&nbsp;</td>
+                        <td>&nbsp;</td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/user_quota_stats.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_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_name"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
-                            <td class="tbl_col_used"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="used"}</a></td>
-                            <td class="tbl_col_quota"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="quota"}</a></td>
-                            <td class="tbl_col_percentage"><a href="#" onclick="loadContent('mail/mail_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="percentage"}</a></td>
-                            <td class="tbl_col_buttons"></td>
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="used"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="quota"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="percentage"}</a></td>
+                            <td class="text-right"></td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
@@ -44,11 +45,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    </div>
diff --git a/interface/web/mail/templates/xmpp_domain_admin_list.htm b/interface/web/mail/templates/xmpp_domain_admin_list.htm
new file mode 100644
index 0000000..ccda2d5
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_domain_admin_list.htm
@@ -0,0 +1,60 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+
+
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/xmpp_domain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
+
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="sys_groupid"><tmpl_var name="sys_groupid_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
+                    </tr>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/xmpp_domain_list.php"><span class="icon icon-filter"></span></button>
+                        </td>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tmpl_loop name="records">
+                        <tr>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                            </td>
+                        </tr>
+                    </tmpl_loop>
+                    <tmpl_unless name="records">
+                        <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                            <td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                        </tr>
+                    </tmpl_unless>
+                </tbody>
+                <tfoot>
+                    <tr>
+                        <td colspan="5"><tmpl_var name="paging"></td>
+                    </tr>
+                </tfoot>
+            </table>
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/xmpp_domain_edit.htm b/interface/web/mail/templates/xmpp_domain_edit.htm
new file mode 100644
index 0000000..5c4e8d7
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_domain_edit.htm
@@ -0,0 +1,130 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        
+            <tmpl_if name="is_admin">
+                <div class="form-group">
+                    <tmpl_if name="edit_disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
+                            {tmpl_var name='server_id'}
+                        </select></div>
+                        <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
+                        <tmpl_else>
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
+                                {tmpl_var name='server_id'}
+                            </select></div>
+                    </tmpl_if>
+                </div>
+                <tmpl_unless name="domain_option">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
+                            {tmpl_var name='client_group_id'}
+                        </select></div>
+                    </div>
+                </tmpl_unless>
+            <tmpl_else>
+                <tmpl_if name="only_one_server">
+                    <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
+                <tmpl_else>
+                    <div class="form-group">
+                        <tmpl_if name="edit_disabled">
+                            <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
+                                {tmpl_var name='client_server_id'}
+                            </select></div>
+                            <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
+                        <tmpl_else>
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
+                                {tmpl_var name='client_server_id'}
+                            </select></div>
+                        </tmpl_if>
+                    </div>
+                </tmpl_if>
+            </tmpl_if>
+
+            <tmpl_if name="is_reseller">
+                <tmpl_unless name="domain_option">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
+                            {tmpl_var name='client_group_id'}
+                        </select></div>
+                    </div>
+                </tmpl_unless>
+            </tmpl_if>
+
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                <tmpl_if name="domain_option">
+                    <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
+                        {tmpl_var name='domain_option'}
+                    </select></div>
+                    <tmpl_else>
+                        <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" <tmpl_if name="edit_disabled">readonly="readonly"</tmpl_if>/></div></tmpl_if>
+            </div>
+
+
+
+
+<!--
+management by maildomain is currently not supported
+<div class="form-group">
+    <label for="management_method" class="col-sm-3 control-label">{tmpl_var name='management_method_txt'}</label>
+    <div class="col-sm-9"><select name="management_method" id="management_method" class="form-control">
+        {tmpl_var name='management_method'}
+    </select></div>
+</div>
+-->
+<input type="hidden" name="management_method" id="management_method" value="0" />
+
+<div id="toggle-management-normal" class="collapse">
+    <!--
+    Currently not supported
+    div class="form-group">
+        <label class="col-sm-3 control-label">{tmpl_var name='public_registration_txt'}</label>
+        <div class="col-sm-9">
+            {tmpl_var name='public_registration'}
+        </div>
+    </div-->
+</div>
+        <input type="hidden" name="public_registration" id="public_registration" value="n" />
+<div id="toggle-registration-closed" class="collapse in">
+    <div class="form-group">
+        <label for="registration_url" class="col-sm-3 control-label">{tmpl_var name='registration_url_txt'}</label>
+        <div class="col-sm-9">
+            <input type="text" name="registration_url" id="registration_url" value="{tmpl_var name='registration_url'}" class="form-control" placeholder="<tmpl_var name='about_registration_url_txt'>" />
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="col-sm-3 control-label">{tmpl_var name='registration_message_txt'}</label>
+        <div class="col-sm-9"><textarea class="form-control" name="registration_message" id="registration_message" rows='3' cols='30' placeholder="<tmpl_var name='about_registration_message_txt'>">{tmpl_var name='registration_message'}</textarea></div>
+    </div>
+</div>
+
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='domain_admins_txt'}</label>
+    <div class="col-sm-9"><textarea class="form-control" name="domain_admins" id="domain_admins" rows='3' cols='30' placeholder="admin@service.com, superuser@service.com">{tmpl_var name='domain_admins'}</textarea></div>
+</div>
+
+
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+    <div class="col-sm-9">
+        {tmpl_var name='active'}
+    </div>
+</div>
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="type" value="domain">
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/xmpp_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/xmpp_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
+<script language="JavaScript" type="text/javascript" src="js/xmpp_domain_registration.js"></script>
diff --git a/interface/web/mail/templates/xmpp_domain_edit_modules.htm b/interface/web/mail/templates/xmpp_domain_edit_modules.htm
new file mode 100644
index 0000000..8efcf50
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_domain_edit_modules.htm
@@ -0,0 +1,59 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+<tmpl_if name="limit_xmpp_anon" value="y">
+    <div class="form-group">
+        <label class="col-sm-3 control-label">{tmpl_var name='use_anon_host_txt'}</label>
+        <div class="col-sm-9">
+            {tmpl_var name='use_anon_host'}
+        </div>
+    </div>
+</tmpl_if>
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='use_pubsub_txt'}</label>
+    <div class="col-sm-9">
+        {tmpl_var name='use_pubsub'}
+    </div>
+</div>
+<tmpl_if name="limit_xmpp_vjud" value="y">
+    <div class="form-group">
+        <label class="col-sm-3 control-label">{tmpl_var name='use_vjud_txt'}</label>
+        <div class="col-sm-9">
+            {tmpl_var name='use_vjud'}
+        </div>
+    </div>
+    <div class="form-group">
+        <label for="vjud_opt_mode" class="col-sm-3 control-label">{tmpl_var name='vjud_opt_mode_txt'}</label>
+        <div class="col-sm-3"><select name="vjud_opt_mode" id="vjud_opt_mode" class="form-control">
+            {tmpl_var name='vjud_opt_mode'}
+        </select></div>
+    </div>
+</tmpl_if>
+<tmpl_if name="limit_xmpp_proxy" value="y">
+    <div class="form-group">
+        <label class="col-sm-3 control-label">{tmpl_var name='use_proxy_txt'}</label>
+        <div class="col-sm-9">
+            {tmpl_var name='use_proxy'}
+        </div>
+    </div>
+</tmpl_if>
+<tmpl_if name="limit_xmpp_status" value="y">
+    <div class="form-group">
+        <label class="col-sm-3 control-label">{tmpl_var name='use_status_host_txt'}</label>
+        <div class="col-sm-9">
+            {tmpl_var name='use_status_host'}
+        </div>
+    </div>
+</tmpl_if>
+
+
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="type" value="modules" />
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/xmpp_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/xmpp_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/xmpp_domain_edit_muc.htm b/interface/web/mail/templates/xmpp_domain_edit_muc.htm
new file mode 100644
index 0000000..dd46514
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_domain_edit_muc.htm
@@ -0,0 +1,91 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+
+<div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='use_muc_host_txt'}</label>
+    <div class="col-sm-9">
+        {tmpl_var name='use_muc_host'}
+    </div>
+</div>
+
+<div id="toggle-use-muc" class="collapse">
+    <div class="form-group">
+        <label for="muc_name" class="col-sm-3 control-label">{tmpl_var name='muc_name_txt'}</label>
+        <div class="col-sm-9">
+            <input type="text" name="muc_name" id="muc_name" value="{tmpl_var name='muc_name'}" class="form-control" maxlength="30" />
+        </div>
+    </div>
+
+    <div class="form-group">
+        <label for="muc_restrict_room_creation" class="col-sm-3 control-label">{tmpl_var name='muc_restrict_room_creation_txt'}</label>
+        <div class="col-sm-3"><select name="muc_restrict_room_creation" id="muc_restrict_room_creation" class="form-control">
+            {tmpl_var name='muc_restrict_room_creation'}
+        </select></div>
+    </div>
+    <div class="form-group">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='muc_admins_txt'}</label>
+            <div class="col-sm-9"><textarea class="form-control" name="muc_admins" id="muc_admins" rows='3' cols='30'>{tmpl_var name='muc_admins'}</textarea></div>
+        </div>
+    </div>
+
+    <tmpl_if name='limit_xmpp_pastebin' value="y">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='use_pastebin_txt'}</label>
+            <div class="col-sm-9">
+                {tmpl_var name='use_pastebin'}
+            </div>
+        </div>
+        <div id="toggle-use-pastebin" class="collapse">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='pastebin_expire_after_txt'}</label>
+                <div class="col-sm-3">
+                    <input type="number" name="pastebin_expire_after" id="pastebin_expire_after" value="{tmpl_var name='pastebin_expire_after'}" class="form-control" />
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='pastebin_trigger_txt'}</label>
+                <div class="col-sm-3">
+                    <input type="text" name="pastebin_trigger" id="pastebin_trigger" value="{tmpl_var name='pastebin_trigger'}" class="form-control" />
+                </div>
+            </div>
+        </div>
+    </tmpl_if>
+
+    <tmpl_if name='limit_xmpp_httparchive' value="y">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='use_http_archive_txt'}</label>
+            <div class="col-sm-9">
+                {tmpl_var name='use_http_archive'}
+            </div>
+        </div>
+        <div id="toggle-use-archive" class="collapse">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='http_archive_show_join_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='http_archive_show_join'}
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='http_archive_show_status_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='http_archive_show_status'}
+                </div>
+            </div>
+        </div>
+    </tmpl_if>
+
+</div>
+
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="type" value="muc" />
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/xmpp_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/xmpp_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
+<script language="JavaScript" type="text/javascript" src="js/xmpp_domain_muc.js"></script>
diff --git a/interface/web/mail/templates/xmpp_domain_edit_ssl.htm b/interface/web/mail/templates/xmpp_domain_edit_ssl.htm
new file mode 100644
index 0000000..2bb7d05
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_domain_edit_ssl.htm
@@ -0,0 +1,100 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<tmpl_if name="config_error_msg">
+<div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
+                <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
+				<div>
+				<div style="float:left;width:150px;">{tmpl_var name='config_error_tstamp'} :&nbsp;</div><div style="padding-left:150px;">{tmpl_var name='config_error_msg'}</div>
+				</div>
+</div>
+</tmpl_if>
+
+
+			<tmpl_if name='show_helper_links'>
+				<div id="show_helper_links" style="display:none;">
+					<label></label>
+					<div class="col-sm-9">
+					<a href="javascript:void(0);" id="load_data"><tmpl_if name='is_admin'>{tmpl_var name='load_client_data_txt'}</tmpl_else>{tmpl_var name='load_my_data_txt'}</tmpl_if></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" id="reset_data">{tmpl_var name='reset_client_data_txt'}</a>
+					</div>
+				</div>
+			</tmpl_if>
+            <div class="form-group">
+                <label for="ssl_state" class="col-sm-3 control-label">{tmpl_var name='ssl_state_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_state" id="ssl_state" value="{tmpl_var name='ssl_state'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_locality" class="col-sm-3 control-label">{tmpl_var name='ssl_locality_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_locality" id="ssl_locality" value="{tmpl_var name='ssl_locality'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_organisation" class="col-sm-3 control-label">{tmpl_var name='ssl_organisation_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_organisation" id="ssl_organisation" value="{tmpl_var name='ssl_organisation'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_organisation_unit" class="col-sm-3 control-label">{tmpl_var name='ssl_organisation_unit_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_organisation_unit" id="ssl_organisation_unit" value="{tmpl_var name='ssl_organisation_unit'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_country" class="col-sm-3 control-label">{tmpl_var name='ssl_country_txt'}</label>
+                <div class="col-sm-9"><select name="ssl_country" id="ssl_country" class="form-control flags">
+                    {tmpl_var name='ssl_country'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="ssl_email" class="col-sm-3 control-label">{tmpl_var name='ssl_email_txt'}</label>
+                <div class="col-sm-9"><input type="email" name="ssl_email" id="ssl_email" value="{tmpl_var name='ssl_email'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="ssl_request" class="col-sm-3 control-label">{tmpl_var name='ssl_key_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_key" id="ssl_key" rows='10' cols='30'>{tmpl_var name='ssl_key'}</textarea></div>
+            </div>
+            <div class="form-group">
+                <label for="ssl_request" class="col-sm-3 control-label">{tmpl_var name='ssl_request_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_request" id="ssl_request" rows='10' cols='30'>{tmpl_var name='ssl_request'}</textarea></div>
+            </div>
+            <div class="form-group">
+                <label for="ssl_cert" class="col-sm-3 control-label">{tmpl_var name='ssl_cert_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_cert" id="ssl_cert" rows='10' cols='30'>{tmpl_var name='ssl_cert'}</textarea></div>
+            </div>
+            <div class="form-group">
+                <label for="ssl_action" class="col-sm-3 control-label">{tmpl_var name='ssl_action_txt'}</label>
+                <div class="col-sm-9"><select name="ssl_action" id="ssl_action" class="form-control">
+                    {tmpl_var name='ssl_action'}
+                </select></div>
+            </div>
+        
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="type" value="ssl">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/xmpp_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/xmpp_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
+
+<script>
+<!--
+	<tmpl_if name='show_helper_links'>
+	if($("input[name=id]").val() > 0) $('#show_helper_links:hidden').show();
+
+	$('#reset_data').click(function(){
+		$('#ssl_organisation').add('#ssl_locality').add('#ssl_state').add('#ssl_organisation_unit').val('');
+		$('#ssl_country').val($("#ssl_country option:first").val());
+	});
+	$('#load_data').click(function(){
+		loadClientData();
+	});
+	
+	
+	function loadClientData() {
+        var web_id = $("input[name=id]").val();
+        
+        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {'web_id': web_id, 'type': "getclientssldata"}, function(data) {
+			$('#ssl_organisation').val(data['company_name']);
+			$('#ssl_locality').val(data['city']);
+			$('#ssl_country').val(data['country']);
+			$('#ssl_state').val(data['state']);
+			$('#ssl_organisation_unit').val('IT');
+        });
+    }
+	</tmpl_if>
+//-->
+</script>
\ No newline at end of file
diff --git a/interface/web/mail/templates/xmpp_domain_list.htm b/interface/web/mail/templates/xmpp_domain_list.htm
new file mode 100644
index 0000000..7957914
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_domain_list.htm
@@ -0,0 +1,74 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        <tmpl_if name='datalog_changes_count' op='>' value='0'>
+        <div>
+            <div class="systemmonitor-state state-info">
+                <div class="status"></div>
+                <div class="statusMsg">
+                    {tmpl_var name="datalog_changes_txt"}
+                    <ul>
+                    <tmpl_loop name="datalog_changes">
+                        <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+                    </tmpl_loop>
+                    </ul>
+                    {tmpl_var name="datalog_changes_end_txt"}
+                </div>
+            </div><br />
+        </div>
+        </tmpl_if>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/xmpp_domain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
+
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
+                    </tr>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/xmpp_domain_list.php"><span class="icon icon-filter"></span></button>
+                        </td>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tmpl_loop name="records">
+                        <tr>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                            </td>
+                        </tr>
+                    </tmpl_loop>
+                    <tmpl_unless name="records">
+                        <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                            <td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                        </tr>
+                    </tmpl_unless>
+                </tbody>
+                <tfoot>
+                    <tr>
+                        <td colspan="4"><tmpl_var name="paging"></td>
+                    </tr>
+                </tfoot>
+            </table>
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/templates/xmpp_user_edit.htm b/interface/web/mail/templates/xmpp_user_edit.htm
new file mode 100644
index 0000000..e155ec0
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_user_edit.htm
@@ -0,0 +1,47 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        
+
+            <div class="form-group">
+                <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='jid_txt'}</label>
+                <div class="col-sm-4">
+                    <input type="text" id="jid_local_part" name="jid_local_part" value="{tmpl_var name='jid_local_part'}" class="form-control" />
+                </div>
+                <div class="col-sm-1 text-center">@</div>
+                <div class="col-sm-4">
+                    <select name="jid_domain" id="jid_domain" class="form-control">{tmpl_var name='jid_domain'}</select>
+                </div>
+            </div>
+
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
+                <div id="passBar"></div>
+                <p class="formHint"><span id="passText">&nbsp;</span></p>
+            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
+            <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+            <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
+             <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='active'}
+                </div>
+            </div>
+        
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/xmpp_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/xmpp_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/xmpp_user_list.htm b/interface/web/mail/templates/xmpp_user_list.htm
new file mode 100644
index 0000000..68668b4
--- /dev/null
+++ b/interface/web/mail/templates/xmpp_user_list.htm
@@ -0,0 +1,74 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        <tmpl_if name='datalog_changes_count' op='>' value='0'>
+        <div>
+            <div class="systemmonitor-state state-info">
+                <div class="status"></div>
+                <div class="statusMsg">
+                    {tmpl_var name="datalog_changes_txt"}
+                    <ul>
+                    <tmpl_loop name="datalog_changes">
+                        <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+                    </tmpl_loop>
+                    </ul>
+                    {tmpl_var name="datalog_changes_end_txt"}
+                </div>
+            </div><br />
+        </div>
+        </tmpl_if>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/xmpp_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
+
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="jid"><tmpl_var name="jid_txt"></th>
+                        <th class="small-col" data-column="is_domain_admin"><tmpl_var name="is_domain_admin_txt"></th>
+                        <th class="small-col" data-column="is_muc_admin"><tmpl_var name="is_muc_admin_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
+                    </tr>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_jid" value="{tmpl_var name='search_jid'}" /></td>
+                        <td><select class="form-control" name="search_is_domain_admin">{tmpl_var name='search_is_domain_admin'}</select></td>
+                        <td><select class="form-control" name="search_is_muc_admin">{tmpl_var name='search_is_muc_admin'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/xmpp_user_list.php"><span class="icon icon-filter"></span></button>
+                        </td>
+                    </tr>
+                </thead>
+                <tbody>
+                <tmpl_loop name="records">
+                    <tr>
+                        <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="jid"}</a></td>
+                        <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="is_domain_admin"}</a></td>
+                        <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="is_muc_admin"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                        </td>
+                    </tr>
+                </tmpl_loop>
+                <tmpl_unless name="records">
+                    <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                        <td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                    </tr>
+                </tmpl_unless>
+                </tbody>
+                <tfoot>
+                    <tr>
+                        <td colspan="4"><tmpl_var name="paging"></td>
+                    </tr>
+                </tfoot>
+            </table>
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mail/user_quota_stats.php b/interface/web/mail/user_quota_stats.php
index 88ab8f4..90a9255 100644
--- a/interface/web/mail/user_quota_stats.php
+++ b/interface/web/mail/user_quota_stats.php
@@ -19,8 +19,6 @@
 
 $app->load('listform_actions');
 
-// $tmp_rec = $app->db->queryOneRecord("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC");
-// $monitor_data = unserialize($app->db->unquote($tmp_rec['data']));
 $tmp_rec =  $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC");
 $monitor_data = array();
 if(is_array($tmp_rec)) {
diff --git a/interface/web/mail/webmailer.php b/interface/web/mail/webmailer.php
index 3a10c0f..d6f73cc 100644
--- a/interface/web/mail/webmailer.php
+++ b/interface/web/mail/webmailer.php
@@ -43,13 +43,13 @@
 /*
  * Get the data to connect to the database
  */
-$dbData = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE mailuser_id = " . $emailId);
+$dbData = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE mailuser_id = ?", $emailId);
 $serverId = $app->functions->intval($dbData['server_id']);
 if ($serverId == 0){
 	die ("No E-Mail - Server found!");
 }
 
-$serverData = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$serverId);
+$serverData = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $serverId);
 
 $app->uses('getconf');
 $global_config = $app->getconf->get_global_config('mail');
diff --git a/interface/web/mail/xmpp_domain_del.php b/interface/web/mail/xmpp_domain_del.php
new file mode 100644
index 0000000..5e4c826
--- /dev/null
+++ b/interface/web/mail/xmpp_domain_del.php
@@ -0,0 +1,93 @@
+<?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/xmpp_domain.list.php";
+$tform_def_file = "form/xmpp_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.
+        $this->delete_accounts($domain);
+        // and DNS entries
+        $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $domain.'.');
+        if ( isset($soa) && !empty($soa) ) $this->remove_dns($soa);
+	}
+
+    private function delete_accounts($domain){
+        global $app;
+        // get all accounts
+        $sql = "SELECT * FROM xmpp_user WHERE jid LIKE ? AND " . $app->tform->getAuthSQL('d');
+        $users = $app->db->queryAllRecords($sql, '%@'.$domain);
+        foreach($users AS $u)
+            $app->db->datalogDelete('xmpp_user', 'xmppuser_id', $u['xmppuser_id']);
+    }
+
+    private function remove_dns($new_rr) {
+        global $app;
+
+        // purge all xmpp related rr-record
+        $sql = "SELECT * FROM dns_rr WHERE zone = ? AND (name IN ? AND type = 'CNAME' OR name LIKE ? AND type = 'SRV')  AND " . $app->tform->getAuthSQL('r') . " ORDER BY serial DESC";
+        $rec = $app->db->queryAllRecords($sql, $new_rr['zone'], array('xmpp', 'pubsub', 'proxy', 'anon', 'vjud', 'muc'), '_xmpp-%');
+        if (is_array($rec[1])) {
+            for ($i=0; $i < count($rec); ++$i)
+                $app->db->datalogDelete('dns_rr', 'id', $rec[$i]['id']);
+        }
+    }
+
+}
+
+$page = new page_action;
+$page->onDelete();
+
+?>
diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php
new file mode 100644
index 0000000..b5858e0
--- /dev/null
+++ b/interface/web/mail/xmpp_domain_edit.php
@@ -0,0 +1,543 @@
+<?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/xmpp_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,tools_sites');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+    var $_xmpp_type = 'server';
+
+    function onLoad() {
+        $show_type = 'server';
+        if(isset($_REQUEST['type']) && $_REQUEST['type'] == 'modules') {
+            $show_type = 'modules';
+        } elseif(isset($_REQUEST['type']) && $_REQUEST['type'] == 'muc') {
+            $show_type = 'muc';
+        }elseif(isset($_REQUEST['type']) && $_REQUEST['type'] == 'ssl') {
+            $show_type = 'ssl';
+        }
+
+        $_SESSION['s']['var']['xmpp_type'] = $show_type;
+        $this->_xmpp_type = $show_type;
+
+        parent::onLoad();
+    }
+
+	function onShowNew() {
+		global $app, $conf;
+
+		// we will check only users, not admins
+		if($_SESSION["s"]["user"]["typ"] == 'user') {
+			if(!$app->tform->checkClientLimit('limit_xmpp_domain')) {
+				$app->error($app->tform->wordbook["limit_xmppdomain_txt"]);
+			}
+			if(!$app->tform->checkResellerLimit('limit_xmpp_domain')) {
+				$app->error('Reseller: '.$app->tform->wordbook["limit_xmppdomain_txt"]);
+			}
+		} else {
+			$settings = $app->getconf->get_global_config('xmpp');
+        }
+        $app->tform->formDef['tabs']['domain']['fields']['server_id']['default'] = intval($settings['default_xmppserver']);
+
+        parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		$app->uses('ini_parser,getconf');
+		$settings = $app->getconf->get_global_config('domains');
+
+        $read_limits = array('limit_xmpp_pastebin', 'limit_xmpp_httparchive', 'limit_xmpp_anon', 'limit_xmpp_vjud', 'limit_xmpp_proxy', 'limit_xmpp_status');
+        if($_SESSION["s"]["user"]["typ"] != 'admin') {
+            $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+            $client = $app->db->queryOneRecord("SELECT client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+            // add limits to template to be able to hide settings
+            foreach($read_limits as $limit) $app->tpl->setVar($limit, $client[$limit]);
+        }else{
+            foreach($read_limits as $limit) $app->tpl->setVar($limit, 'y');
+        }
+
+
+		if($_SESSION["s"]["user"]["typ"] == 'admin' && $settings['use_domain_module'] != 'y') {
+			// Getting Clients of the user
+			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY client.company_name, client.contact_name, sys_group.name";
+
+			$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 = @(is_array($this->dataRecord) && ($client["groupid"] == $this->dataRecord['client_group_id'] || $client["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
+					$client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</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, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ? order by client.contact_name", $client_group_id);
+
+			if ($settings['use_domain_module'] != 'y') {
+				// Fill the client select field
+				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+				$clients = $app->db->queryAllRecords($sql, $client['client_id']);
+				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
+				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
+				//$tmp_data_record = $app->tform->getDataRecord($this->id);
+				if(is_array($clients)) {
+					foreach( $clients as $client) {
+						$selected = @(is_array($this->dataRecord) && ($client["groupid"] == $this->dataRecord['client_group_id'] || $client["groupid"] == $this->dataRecord['sys_groupid']))?'SELECTED':'';
+						$client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
+					}
+				}
+				$app->tpl->setVar("client_group_id", $client_select);
+			}
+		}
+
+		if($_SESSION["s"]["user"]["typ"] != 'admin')
+		{
+			$client_group_id = $_SESSION["s"]["user"]["default_group"];
+			$client_xmpp = $app->db->queryOneRecord("SELECT xmpp_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			$client_xmpp['xmpp_servers_ids'] = explode(',', $client_xmpp['xmpp_servers']);
+
+			$only_one_server = count($client_xmpp['xmpp_servers_ids']) === 1;
+			$app->tpl->setVar('only_one_server', $only_one_server);
+
+			if ($only_one_server) {
+				$app->tpl->setVar('server_id_value', $client_xmpp['xmpp_servers_ids'][0]);
+			}
+
+			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+			$xmpp_servers = $app->db->queryAllRecords($sql, $client_xmpp['xmpp_servers_ids']);
+
+			$options_xmpp_servers = "";
+
+			foreach ($xmpp_servers as $xmpp_server) {
+				$options_xmpp_servers .= "<option value='$xmpp_server[server_id]'>$xmpp_server[server_name]</option>";
+			}
+
+			$app->tpl->setVar("client_server_id", $options_xmpp_servers);
+			unset($options_xmpp_servers);
+
+		}
+
+		/*
+		 * Now we have to check, if we should use the domain-module to select the domain
+		 * or not
+		 */
+		if ($settings['use_domain_module'] == 'y') {
+			/*
+			 * The domain-module is in use.
+			*/
+			$domains = $app->tools_sites->getDomainModuleDomains("xmpp_domain", $this->dataRecord["domain"]);
+			$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_id'] ;
+					if ($domain['domain'] == $this->dataRecord["domain"]) {
+						$domain_select .= " selected";
+					}
+					$domain_select .= ">" . $app->functions->idn_decode($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);
+			$app->tpl->setVar("domain_module", 1);
+		} else {
+			$app->tpl->setVar("domain_module", 0);
+		}
+
+
+		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;
+
+		/* check if the domain module is used - and check if the selected domain can be used! */
+		$app->uses('ini_parser,getconf');
+		$settings = $app->getconf->get_global_config('domains');
+		if ($settings['use_domain_module'] == 'y') {
+			if ($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+				$this->dataRecord['client_group_id'] = $app->tools_sites->getClientIdForDomain($this->dataRecord['domain']);
+			}
+			$domain_check = $app->tools_sites->checkDomainModuleDomain($this->dataRecord['domain']);
+			if(!$domain_check) {
+				// invalid domain selected
+				$app->tform->errorMessage .= $app->tform->lng("domain_error_empty")."<br />";
+			} else {
+				$this->dataRecord['domain'] = $domain_check;
+			}
+		}
+
+		if($_SESSION["s"]["user"]["typ"] != 'admin') {
+			// Get the limits of the client
+			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_xmpp_domain 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 xmpp_domain WHERE domain_id = ?", $this->id);
+				$this->dataRecord["server_id"] = $tmp["server_id"];
+				unset($tmp);
+				// When the record is inserted
+			} else {
+				$client['xmpp_servers_ids'] = explode(',', $client['xmpp_servers']);
+
+				// Check if chosen server is in authorized servers for this client
+				if (!(is_array($client['xmpp_servers_ids']) && in_array($this->dataRecord["server_id"], $client['xmpp_servers_ids']))) {
+					$app->error($app->tform->wordbook['error_not_allowed_server_id']);
+				}
+
+				if($client["limit_xmpp_domain"] >= 0) {
+					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM xmpp_domain WHERE sys_groupid = ?", $client_group_id);
+					if($tmp["number"] >= $client["limit_xmpp_domain"]) {
+						$app->error($app->tform->wordbook["limit_xmppdomain_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 xmpp domain is lowercase
+		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+
+        // Read management method
+        if(isset($this->dataRecord["management_method"]))
+            // Set management method to 0 as long as the mailaccount hook is not implemented
+            $this->dataRecord["management_method"] = 0;
+            switch($this->dataRecord["management_method"]){
+                case 0:
+                    $this->dataRecord["management_method"] = 'normal';
+                    break;
+                case 1:
+                    $this->dataRecord["management_method"] = 'maildomain';
+                    // Check for corresponding mail domain
+                    $tmp = $app->db->queryOneRecord("SELECT count(domain_id) AS number FROM mail_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r')." ORDER BY domain", $this->dataRecord["domain"]);
+                    if($tmp['number']==0){
+                        $app->error($app->tform->wordbook["no_corresponding_maildomain_txt"]);
+                        break;
+                    }
+                    break;
+            }
+        // vjud opt mode
+        if(isset($this->dataRecord["vjud_opt_mode"]))
+            $this->dataRecord["vjud_opt_mode"] = $this->dataRecord["vjud_opt_mode"] == 0 ? 'in' : 'out';
+        if(isset($this->dataRecord["muc_restrict_room_creation"])){
+            switch($this->dataRecord["muc_restrict_room_creation"]){
+                case 0:
+                    $this->dataRecord["muc_restrict_room_creation"] = 'false';
+                    break;
+                case 1:
+                    $this->dataRecord["muc_restrict_room_creation"] = 'member';
+                    break;
+                case 2:
+                    $this->dataRecord["muc_restrict_room_creation"] = 'true';
+                    break;
+            }
+        }
+
+        // Reset public registration to 'n', is not yet supported
+        $this->dataRecord["public_registration"] = 'n';
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+        global $app, $conf;
+
+        // make sure that the record belongs to the client 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 = $app->functions->intval($this->dataRecord["client_group_id"]);
+            $app->db->query("UPDATE xmpp_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $this->id);
+        }
+        if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
+            $client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
+            $app->db->query("UPDATE xmpp_domain SET sys_groupid = ?, sys_perm_group = 'riud' WHERE domain_id = ?", $client_group_id, $this->id);
+        }
+
+        //* make sure that the xmpp domain is lowercase
+        if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+
+        // create new accounts from mail domain
+        //if($this->dataRecord['management_method']=='maildomain')
+        //    $this->syncMailusers($this->dataRecord['domain']);
+
+        // Insert DNS Records
+        $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
+        if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
+	}
+
+	function onBeforeUpdate() {
+        global $app, $conf;
+
+        if($this->_xmpp_type == 'server') {
+            // Check if the domain has been changed
+            $rec = $app->db->queryOneRecord("SELECT domain from xmpp_domain WHERE domain_id = ?", $this->id);
+            if($this->dataRecord['domain']!=$rec['domain'])
+                $app->error($app->tform->wordbook["cant_change_domainname_txt"]);
+
+            //* 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'])) {
+                if (isset($this->dataRecord["server_id"])) {
+                    $rec = $app->db->queryOneRecord("SELECT server_id from xmpp_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 sys_perm_group, domain from xmpp_domain WHERE domain_id = ?", $this->id);
+                if(isset($this->dataRecord["domain"]) && $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);
+            }
+        }
+
+        if($this->_xmpp_type == 'ssl'){
+            //* Check that all fields for the SSL cert creation are filled
+            if(isset($this->dataRecord['ssl_action']) && $this->dataRecord['ssl_action'] == 'create') {
+                if($this->dataRecord['ssl_state'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_state_empty').'<br />';
+                if($this->dataRecord['ssl_locality'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_locality_empty').'<br />';
+                if($this->dataRecord['ssl_organisation'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_organisation_empty').'<br />';
+                if($this->dataRecord['ssl_organisation_unit'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_organisation_unit_empty').'<br />';
+                if($this->dataRecord['ssl_country'] == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_country_empty').'<br />';
+            }
+
+            if(isset($this->dataRecord['ssl_action']) && $this->dataRecord['ssl_action'] == 'save') {
+                if(trim($this->dataRecord['ssl_cert']) == '') $app->tform->errorMessage .= $app->tform->lng('error_ssl_cert_empty').'<br />';
+            }
+        }
+
+        //* make sure that the xmpp domain is lowercase
+        if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+
+	}
+
+	function onAfterUpdate() {
+		global $app, $conf;
+
+        // create new accounts from mail domain
+        //if($this->oldDataRecord['management_method'] != 'maildomain' && $this->dataRecord['management_method']=='maildomain')
+        //    $this->syncMailusers($this->dataRecord['domain']);
+        // or reset to normal permissions
+        //elseif($this->oldDataRecord['management_method'] == 'maildomain' && $this->dataRecord['management_method']!='maildomain')
+        //    $this->desyncMailusers($this->dataRecord['domain']);
+        // Update DNS Records
+        // TODO: Update gets only triggered from main form. WHY?
+        $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND  = ?", $this->dataRecord['domain'].'.');
+        if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
+	}
+
+
+
+    private function update_dns($dataRecord, $new_rr) {
+        global $app, $conf;
+
+        $rec = $app->db->queryOneRecord("SELECT use_pubsub, use_proxy, use_anon_host, use_vjud, use_muc_host from xmpp_domain WHERE domain_id = ?", $this->id);
+        $required_hosts = array('xmpp');
+        if($rec['use_pubsub']=='y')
+            $required_hosts[] = 'pubsub';
+        if($rec['use_proxy']=='y')
+            $required_hosts[] = 'proxy';
+        if($rec['use_anon_host']=='y')
+            $required_hosts[] = 'anon';
+        if($rec['use_vjud']=='y')
+            $required_hosts[] = 'vjud';
+        if($rec['use_muc_host']=='y')
+            $required_hosts[] = 'muc';
+
+        // purge old rr-record
+        $sql = "SELECT * FROM dns_rr WHERE zone = ? AND (name IN ? AND type = 'CNAME' OR name LIKE ? AND type = 'SRV')  AND " . $app->tform->getAuthSQL('r') . " ORDER BY serial DESC";
+        $rec = $app->db->queryAllRecords($sql, $new_rr['zone'], array('xmpp', 'pubsub', 'proxy', 'anon', 'vjud', 'muc'), '_xmpp-%');
+        if (is_array($rec[1])) {
+            for ($i=0; $i < count($rec); ++$i)
+                $app->db->datalogDelete('dns_rr', 'id', $rec[$i]['id']);
+        }
+
+        // create new cname rr-records
+        foreach($required_hosts AS $h){
+            $rr = $new_rr;
+            $rr['name'] = $h;
+            $rr['type'] = 'CNAME';
+            $rr['data'] = 'jalapeno.spicyweb.de.';
+            $rr['aux'] = 0;
+            $rr['active'] = 'Y';
+            $rr['stamp'] = date('Y-m-d H:i:s');
+            $rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
+            $app->db->datalogInsert('dns_rr', $rr, 'id', $rr['zone']);
+        }
+
+        //create new srv rr-records
+        $rr = $new_rr;
+        $rr['name'] = '_xmpp-client._tcp.'.$dataRecord['domain'].'.';
+        $rr['type'] = 'SRV';
+        $rr['data'] = '5 5222 jalapeno.spicyweb.de.';
+        $rr['aux'] = 0;
+        $rr['active'] = 'Y';
+        $rr['stamp'] = date('Y-m-d H:i:s');
+        $rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
+        $app->db->datalogInsert('dns_rr', $rr, 'id', $rr['zone']);
+        $rr = $new_rr;
+        $rr['name'] = '_xmpp-server._tcp.'.$dataRecord['domain'].'.';
+        $rr['type'] = 'SRV';
+        $rr['data'] = '5 5269 jalapeno.spicyweb.de.';
+        $rr['aux'] = 0;
+        $rr['active'] = 'Y';
+        $rr['stamp'] = date('Y-m-d H:i:s');
+        $rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
+        $app->db->datalogInsert('dns_rr', $rr, 'id', $rr['zone']);
+
+        // Refresh zone
+        $zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_rr['zone']);
+        $new_serial = $app->validate_dns->increase_serial($zone['serial']);
+        $app->db->datalogUpdate('dns_soa', array("serial" => $new_serial), 'id', $zone['id']);
+    }
+
+    /*
+     * NOT YET FINISHED
+
+    private function syncMailusers($domain){
+        global $app, $conf;
+        // get all mailusers
+        $db_mailusers = $app->db->queryAllRecords("SELECT email, password, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM mail_user WHERE email like ?", '@'.$this->dataRecord['domain'].'.');
+        // get existing xmpp users
+        $db_xmppusers = $app->db->queryAllRecords("SELECT jid, password, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM xmpp_user WHERE jid like ?", '@'.$this->dataRecord['domain'].'.');
+
+        // Migrate user accounts
+        $users_delete = array();
+        $users_update = array();
+        $users_create = array();
+        foreach($db_xmppusers AS $ix=>$x){
+            $matched = false;
+            foreach($db_mailusers AS $im=>$m){
+                if($x['jid']==$m['email']){
+                    // User matched, mark for update
+                    $x['password'] = $m['password'];
+                    $users_update[] = $x;
+                    unset($db_xmppusers[$ix]);
+                    unset($db_mailusers[$im]);
+                    $matched = true;
+                    break;
+                }
+            }
+            // XMPP user not matched, mark for deletion
+            if(!$matched){
+                $users_delete[] = $x;
+                unset($db_xmppusers[$ix]);
+            }
+        }
+        // Mark remaining mail users for creation
+        $users_create = $db_xmppusers;
+        foreach($users_create AS $u){
+            $u['server_id'] = $this->dataRecord['server_id'];
+            $u['sys_perm_user'] = 'r';
+            $u['sys_perm_group'] = 'r';
+            $app->db->datalogInsert('xmpp_user', $u, 'xmppuser_id');
+        }
+        foreach($users_update AS $u){
+            $u['sys_perm_user'] = 'r';
+            $u['sys_perm_group'] = 'r';
+            $app->db->datalogUpdate('xmpp_user', $u, 'xmppuser_id', $u['xmppuser_id']);
+        }
+        foreach($users_delete AS $u){
+            $app->db->datalogDelete('xmpp_user', 'xmppuser_id', $u['xmppuser_id']);
+        }
+
+    }
+
+    private function desyncMailusers($domain){
+        global $app, $conf;
+        // get existing xmpp users
+        $db_xmppusers = $app->db->queryAllRecords("SELECT jid, password, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM xmpp_user WHERE jid like ?", '@'.$this->dataRecord['domain'].'.');
+        foreach($db_xmppusers AS $u){
+            $u['sys_perm_user'] = 'riud';
+            $u['sys_perm_group'] = 'riud';
+            $app->db->datalogUpdate('xmpp_user', $u, 'xmppuser_id', $u['xmppuser_id']);
+        }
+    }
+    */
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/mail/xmpp_domain_list.php b/interface/web/mail/xmpp_domain_list.php
new file mode 100644
index 0000000..ff632e3
--- /dev/null
+++ b/interface/web/mail/xmpp_domain_list.php
@@ -0,0 +1,28 @@
+<?php
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/xmpp_domain.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+$app->uses('listform_actions');
+
+// Limit the results to alias domains
+// $app->listform_actions->SQLExtWhere = "type = 'local'";
+
+$app->listform_actions->SQLOrderBy = 'ORDER BY xmpp_domain.domain';
+$app->listform_actions->onLoad();
+
+
+?>
diff --git a/interface/web/mail/xmpp_user_del.php b/interface/web/mail/xmpp_user_del.php
new file mode 100644
index 0000000..cf0cc62
--- /dev/null
+++ b/interface/web/mail/xmpp_user_del.php
@@ -0,0 +1,72 @@
+<?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/xmpp_user.list.php";
+$tform_def_file = "form/xmpp_user.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;
+
+        $jid_parts = explode("@", $this->dataRecord['jid']);
+		$domain = $jid_parts[1];
+
+        // check if domain is managed through mail domain
+        // if yes, manual deletion is not allowed
+        //$app->error('blubb');
+
+
+	}
+
+}
+
+$page = new page_action;
+$page->onDelete();
+
+?>
diff --git a/interface/web/mail/xmpp_user_edit.php b/interface/web/mail/xmpp_user_edit.php
new file mode 100644
index 0000000..16d440a
--- /dev/null
+++ b/interface/web/mail/xmpp_user_edit.php
@@ -0,0 +1,172 @@
+<?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/xmpp_user.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_xmpp_user')) {
+				$app->error($app->tform->wordbook["limit_xmpp_user_txt"]);
+			}
+			if(!$app->tform->checkResellerLimit('limit_xmpp_user')) {
+				$app->error('Reseller: '.$app->tform->wordbook["limit_xmpp_user_txt"]);
+			}
+		}
+
+		parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		$jid = $this->dataRecord["jid"];
+		$jid_parts = explode("@", $jid);
+		$app->tpl->setVar("jid_local_part", $jid_parts[0]);
+		$jid_parts[1] = $app->functions->idn_decode($jid_parts[1]);
+
+		// Getting Domains of the user
+		$sql = "SELECT domain, server_id FROM xmpp_domain WHERE ".$app->tform->getAuthSQL('r')." ORDER BY domain";
+		$domains = $app->db->queryAllRecords($sql);
+		$domain_select = '';
+		if(is_array($domains)) {
+			foreach( $domains as $domain) {
+				$domain['domain'] = $app->functions->idn_decode($domain['domain']);
+				$selected = ($domain["domain"] == @$jid_parts[1])?'SELECTED':'';
+				$domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n";
+			}
+		}
+		$app->tpl->setVar("jid_domain", $domain_select);
+		unset($domains);
+		unset($domain_select);
+
+
+		parent::onShowEnd();
+	}
+
+	function onSubmit() {
+		global $app, $conf;
+		//* Check if Domain belongs to user
+		if(isset($_POST["jid_domain"])) {
+			$domain = $app->db->queryOneRecord("SELECT server_id, domain FROM xmpp_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["jid_domain"]));
+			if($domain["domain"] != $app->functions->idn_encode($_POST["jid_domain"])) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
+		}
+
+
+		//* if its an insert, check that the password is not empty
+		if($this->id == 0 && $_POST["password"] == '') {
+			$app->tform->errorMessage .= $app->tform->lng("error_no_pwd")."<br>";
+		}
+
+		//* Check the client limits, if user is not the admin
+		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
+			// Get the limits of the client
+			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+			$client = $app->db->queryOneRecord("SELECT limit_xmpp_user, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+
+			// Check if the user may add another xmpp user.
+			if($this->id == 0 && $client["limit_xmpp_user"] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(xmppuser_id) as number FROM xmpp_user WHERE sys_groupid = ?", $client_group_id);
+				if($tmp["number"] >= $client["limit_xmpp_user"]) {
+					$app->tform->errorMessage .= $app->tform->lng("limit_xmpp_user_txt")."<br>";
+				}
+				unset($tmp);
+			}
+		} // end if user is not admin
+
+
+		$app->uses('getconf');
+		$xmpp_config = $app->getconf->get_server_config(!empty($domain["server_id"]) ? $domain["server_id"] : '', 'xmpp');
+
+		//* compose the xmpp field
+		if(isset($_POST["jid_local_part"]) && isset($_POST["jid_domain"])) {
+			$this->dataRecord["jid"] = strtolower($_POST["jid_local_part"]."@".$app->functions->idn_encode($_POST["jid_domain"]));
+
+			// Set the server id of the xmpp user = server ID of xmpp domain.
+			$this->dataRecord["server_id"] = $domain["server_id"];
+
+			unset($this->dataRecord["jid_local_part"]);
+			unset($this->dataRecord["jid_domain"]);
+
+		}
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+		global $app, $conf;
+
+		// Set the domain owner as xmpp user owner
+		$domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM xmpp_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["jid_domain"]));
+		$app->db->query("UPDATE xmpp_user SET sys_groupid = ? WHERE xmppuser_id = ?", $domain["sys_groupid"], $this->id);
+
+	}
+
+	function onAfterUpdate() {
+		global $app, $conf;
+
+		// Set the domain owner as mailbox owner
+		if(isset($_POST["xmpp_domain"])) {
+			$domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM xmpp_domain WHERE domain = ? AND ".$app->tform->getAuthSQL('r'), $app->functions->idn_encode($_POST["jid_domain"]));
+			$app->db->query("UPDATE xmpp_user SET sys_groupid = ? WHERE xmppuser_id = ?", $domain["sys_groupid"], $this->id);
+
+		}
+	}
+
+}
+
+$app->tform_actions = new page_action;
+$app->tform_actions->onLoad();
+
+?>
diff --git a/interface/web/mail/xmpp_user_list.php b/interface/web/mail/xmpp_user_list.php
new file mode 100644
index 0000000..ea44e4d
--- /dev/null
+++ b/interface/web/mail/xmpp_user_list.php
@@ -0,0 +1,39 @@
+<?php
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/xmpp_user.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('xmpp');
+
+		parent::onShow();
+	}
+
+}
+
+$list = new list_action;
+$list->SQLOrderBy = 'ORDER BY xmpp_user.jid';
+$list->onLoad();
+
+
+?>
diff --git a/interface/web/mailuser/index.php b/interface/web/mailuser/index.php
index 73505ae..b7748ac 100644
--- a/interface/web/mailuser/index.php
+++ b/interface/web/mailuser/index.php
@@ -17,8 +17,8 @@
 include $lng_file;
 $app->tpl->setVar($wb);
 
-$sql = "SELECT * FROM mail_user WHERE mailuser_id = ".$app->functions->intval($_SESSION['s']['user']['mailuser_id']);
-$rec = $app->db->queryOneRecord($sql);
+$sql = "SELECT * FROM mail_user WHERE mailuser_id = ?";
+$rec = $app->db->queryOneRecord($sql, $_SESSION['s']['user']['mailuser_id']);
 
 if($rec['quota'] == 0) {
 	$rec['quota'] = $wb['unlimited_txt'];
@@ -30,8 +30,8 @@
 
 $app->tpl->setVar($rec);
 
-$sql2 = "SELECT * FROM server WHERE server_id = ".$app->functions->intval($rec['server_id']);
-$rec2 = $app->db->queryOneRecord($sql2);
+$sql2 = "SELECT * FROM server WHERE server_id = ?";
+$rec2 = $app->db->queryOneRecord($sql2, $rec['server_id']);
 
 $app->tpl->setVar($rec2);
 
diff --git a/interface/web/mailuser/mail_user_filter_edit.php b/interface/web/mailuser/mail_user_filter_edit.php
index ff93bd9..d398b65 100644
--- a/interface/web/mailuser/mail_user_filter_edit.php
+++ b/interface/web/mailuser/mail_user_filter_edit.php
@@ -71,7 +71,7 @@
 		global $app, $conf;
 
 		// Get the parent mail_user record
-		$mailuser = $app->db->queryOneRecord("SELECT * FROM mail_user WHERE mailuser_id = '".$app->functions->intval($_SESSION['s']['user']['mailuser_id'])."'");
+		$mailuser = $app->db->queryOneRecord("SELECT * FROM mail_user WHERE mailuser_id = ?", $_SESSION['s']['user']['mailuser_id']);
 
 		// Set the mailuser_id
 		$this->dataRecord["mailuser_id"] = $mailuser["mailuser_id"];
@@ -84,11 +84,11 @@
 		if($_SESSION["s"]["user"]["default_group"] > 0) { // if user is not admin
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Check if the user may add another filter
 			if($this->id == 0 && $client["limit_mailfilter"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(filter_id) as number FROM mail_user_filter WHERE sys_groupid = $client_group_id");
+				$tmp = $app->db->queryOneRecord("SELECT count(filter_id) as number FROM mail_user_filter WHERE sys_groupid = ?", $client_group_id);
 				if($tmp["number"] >= $client["limit_mailfilter"]) {
 					$app->tform->errorMessage .= $app->tform->lng("limit_mailfilter_txt")."<br>";
 				}
diff --git a/interface/web/mailuser/mail_user_spamfilter_edit.php b/interface/web/mailuser/mail_user_spamfilter_edit.php
index 3ea2aa5..9d37356 100644
--- a/interface/web/mailuser/mail_user_spamfilter_edit.php
+++ b/interface/web/mailuser/mail_user_spamfilter_edit.php
@@ -74,19 +74,30 @@
 		$rec = $app->tform->getDataRecord($this->id);
 		$email_parts = explode('@', $rec['email']);
 		$email_domain = $email_parts[1];
-		$domain = $app->db->queryOneRecord("SELECT sys_userid, sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($email_domain)."'");
+		$domain = $app->db->queryOneRecord("SELECT sys_userid, sys_groupid, server_id FROM mail_domain WHERE domain = ?", $email_domain);
 
 		// Spamfilter policy
 		$policy_id = $app->functions->intval($this->dataRecord["policy"]);
-		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '".$app->db->quote($rec["email"])."'");
+		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $rec["email"]);
 		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"]);
+				$app->db->datalogUpdate('spamfilter_users', array("policy_id" => $policy_id), 'id', $tmp_user["id"]);
 			} else {
 				// 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 (".$app->functions->intval($domain["sys_userid"]).", ".$app->functions->intval($domain["sys_groupid"]).", 'riud', 'riud', '', ".$app->functions->intval($domain["server_id"]).", 10, ".$app->functions->intval($policy_id).", '".$app->db->quote($rec["email"])."', '".$app->db->quote($rec["email"])."', 'Y')";
+				$insert_data = array(
+					"sys_userid" => $domain["sys_userid"],
+					"sys_groupid" => $domain["sys_groupid"],
+					"sys_perm_user" => 'riud',
+					"sys_perm_group" => 'riud',
+					"sys_perm_other" => '',
+					"server_id" => $domain["server_id"],
+					"priority" => 10,
+					"policy_id" => $policy_id,
+					"email" => $rec["email"],
+					"fullname" => $rec["email"],
+					"local" => 'Y'
+				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
 			}
 		}else {
@@ -104,7 +115,7 @@
 		$app->tpl->setVar("email", $rec['email']);
 
 		// Get the spamfilter policys for the user
-		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = '".$app->db->quote($rec['email'])."'");
+		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", $rec['email']);
 		$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->lng("no_policy")."</option>";
diff --git a/interface/web/mailuser/templates/index.htm b/interface/web/mailuser/templates/index.htm
index c320253..e9ac8ad 100644
--- a/interface/web/mailuser/templates/index.htm
+++ b/interface/web/mailuser/templates/index.htm
@@ -1,34 +1,36 @@
-<h2><tmpl_var name="page_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="page_head_txt"></h1>
+</div>
 <p><tmpl_var name="page_desc_txt"></p>
 
 <div class="panel panel_mailuser">
 
   <div class="pnl_formsarea">
-    <fieldset class="inlineLabels">
-        <div class="ctrlHolder">
-            <p class="label">{tmpl_var name='email_txt'}</p>
+    
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
             <p class="value">{tmpl_var name='email'}</p>
         </div>
-        <div class="ctrlHolder">
-            <p class="label">{tmpl_var name='login_txt'}</p>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='login_txt'}</label>
             <p class="value">{tmpl_var name='login'}</p>
         </div>
-        <div class="ctrlHolder">
-            <p class="label">{tmpl_var name='server_address_txt'}</p>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='server_address_txt'}</label>
             <p class="value">{tmpl_var name='server_name'}</p>
         </div>
-        <div class="ctrlHolder">
-            <p class="label">{tmpl_var name='quota_txt'}</p>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='quota_txt'}</label>
             <p class="value">{tmpl_var name='quota'}</p>
         </div>
-        <div class="ctrlHolder">
-            <p class="label">{tmpl_var name='cc_txt'}</p>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='cc_txt'}</label>
             <p class="value">{tmpl_var name='cc'}</p>
         </div>
-        <div class="buttonHolder buttons">
+        <div class="clear"><div class="right">
             &nbsp;
-        </div>
-    </fieldset>
+        </div></div>
+    
   </div>
   
 </div>
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm b/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm
index 34b7f0d..d450f67 100644
--- a/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_autoresponder_edit.htm
@@ -1,37 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mailuser_autoresponder">
-    
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="autoresponder_subject">{tmpl_var name='autoresponder_subject_txt'}</label>
-                <input type="text" name="autoresponder_subject" id="autoresponder_subject" maxlength='250' value="{tmpl_var name='autoresponder_subject'}" />
+
+        
+            <div class="form-group">
+                <label for="autoresponder_subject" class="col-sm-3 control-label">{tmpl_var name='autoresponder_subject_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="text" name="autoresponder_subject" id="autoresponder_subject" value="{tmpl_var name='autoresponder_subject'}" /></div></div>
+            <div class="form-group">
+                <label for="autoresponder_text" class="col-sm-3 control-label">{tmpl_var name='autoresponder_text_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="autoresponder_text" id="autoresponder_text" rows='15' cols='30'>{tmpl_var name='autoresponder_text'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder_text">{tmpl_var name='autoresponder_text_txt'}</label>
-                <textarea name="autoresponder_text" id="autoresponder_text" rows='15' cols='30'>{tmpl_var name='autoresponder_text'}</textarea>
-            </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder">{tmpl_var name='autoresponder_active'}</label>
-                <input type="checkbox" value="y" id="autoresponder" name="autoresponder" onclick="AR_ResetDates();" {tmpl_var name='ar_active'} />
-            </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder_start_date">{tmpl_var name='autoresponder_start_date_txt'}</label>
+            <div class="form-group">
+                <label for="autoresponder" class="col-sm-3 control-label">{tmpl_var name='autoresponder_active'}</label>
+                <div class="col-sm-9"><input class="form-control" type="checkbox" value="y" id="autoresponder" name="autoresponder" onclick="AR_ResetDates();" {tmpl_var name='ar_active'} /></div></div>
+            <div class="form-group">
+                <label for="autoresponder_start_date" class="col-sm-3 control-label">{tmpl_var name='autoresponder_start_date_txt'}</label>
                 {tmpl_var name='autoresponder_start_date'}&nbsp;
                 <a href="javascript:AR_SetNow();">{tmpl_var name='now_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <label for="autoresponder_end_date">{tmpl_var name='autoresponder_end_date_txt'}</label>
+            <div class="form-group">
+                <label for="autoresponder_end_date" class="col-sm-3 control-label">{tmpl_var name='autoresponder_end_date_txt'}</label>
                 {tmpl_var name='autoresponder_end_date'}
             </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','mailuser/mail_user_autoresponder_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('mailuser/index.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-    
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_autoresponder_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_cc_edit.htm b/interface/web/mailuser/templates/mail_user_cc_edit.htm
index 3b82c46..b622390 100644
--- a/interface/web/mailuser/templates/mail_user_cc_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_cc_edit.htm
@@ -1,26 +1,23 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mailuser_cc">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='email_txt'}</p>
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
                 <p class="value">{tmpl_var name='email'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="name">{tmpl_var name='cc_txt'}</label>
-                <input name="cc" id="cc" value="{tmpl_var name='cc'}" size="30" maxlength="255" type="text" class="textInput" /> &nbsp; {tmpl_var name='name_optional_txt'} {tmpl_var name='cc_note_txt'}
-            </div>
-        </fieldset>
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='cc_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cc" id="cc" value="{tmpl_var name='cc'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp; {tmpl_var name='name_optional_txt'} {tmpl_var name='cc_note_txt'}
+            </div></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','mailuser/mail_user_cc_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('mailuser/index.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_cc_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_filter_edit.htm b/interface/web/mailuser/templates/mail_user_filter_edit.htm
index 3205677..d4ffced 100644
--- a/interface/web/mailuser/templates/mail_user_filter_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_filter_edit.htm
@@ -1,38 +1,32 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mailuser_filter">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="rulename" class="wf_preField">{tmpl_var name='rulename_txt'}</label>
-                <input type="text" id="rulename" name="rulename" value="{tmpl_var name='rulename'}" size="30" maxlength="255"  class="textInput">
-            </div>
-            <div class="ctrlHolder">
-                <label for="source" class="wf_preField">{tmpl_var name='source_txt'}</label>
-                <select id="source" name="source"  class="textInput formLengthHalf">{tmpl_var name='source'}</select>
-                <select id="op" name="op"  class="textInput formLengthHalf">{tmpl_var name='op'}</select>
-                <input type="text" id="searchterm" name="searchterm" value="{tmpl_var name='searchterm'}" size="30" maxlength="255"  class="textInput">
-            </div>
-            <div class="ctrlHolder">
-                <label for="action" class="wf_preField">{tmpl_var name='action_txt'}</label>
-                <select id="action" name="action" class="textInput formLengthHalf">{tmpl_var name='action'}</select>
-                <input type="text" id="target" name="target" value="{tmpl_var name='target'}" size="30" maxlength="255"  class="textInput formLengthHalf">
-            </div>
-            <div class="ctrlHolder">
-                <label for="active" class="wf_preField">{tmpl_var name='active_txt'}</label>
+        
+            <div class="form-group">
+                <label for="rulename" class="col-sm-3 control-label">{tmpl_var name='rulename_txt'}</label>
+                <div class="col-sm-9"><input type="text" id="rulename" name="rulename" value="{tmpl_var name='rulename'}" class="form-control"></div></div>
+            <div class="form-group">
+                <label for="source" class="col-sm-3 control-label">{tmpl_var name='source_txt'}</label>
+                <div class="col-sm-9"><select id="source" name="source" class="form-control">{tmpl_var name='source'}</select></div>
+                <div class="col-sm-9"><select id="op" name="op" class="form-control">{tmpl_var name='op'}</select></div>
+                <div class="col-sm-9"><input type="text" id="searchterm" name="searchterm" value="{tmpl_var name='searchterm'}" class="form-control"></div></div>
+            <div class="form-group">
+                <label for="action" class="col-sm-3 control-label">{tmpl_var name='action_txt'}</label>
+                <div class="col-sm-9"><select id="action" name="action" class="form-control">{tmpl_var name='action'}</select></div>
+                <div class="col-sm-9"><input type="text" id="target" name="target" value="{tmpl_var name='target'}" class="form-control"></div></div>
+            <div class="form-group">
+                <label for="active" class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
                 <span class="">{tmpl_var name='active'}</span>
             </div>
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input name="mailuser_id" type="hidden" value="{tmpl_var name='mailuser_id'}">
 
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onclick="submitForm('pageForm','mailuser/mail_user_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('mailuser/mail_user_filter_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_filter_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/mail_user_filter_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_filter_list.htm b/interface/web/mailuser/templates/mail_user_filter_list.htm
index 0725183..8b9ea17 100644
--- a/interface/web/mailuser/templates/mail_user_filter_list.htm
+++ b/interface/web/mailuser/templates/mail_user_filter_list.htm
@@ -1,38 +1,36 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_mailuser_filter">
+
+    <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+      
+        <button class="btn btn-default formbutton-success" type="button" data-load-content="mailuser/mail_user_filter_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+      
     
-  <div class="pnl_toolsarea">
-    <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-      <div class="buttons">
-        <button class="button iconstxt icoAdd" type="button" onclick="loadContent('mailuser/mail_user_filter_edit.php');">
-          <span>{tmpl_var name="add_new_record_txt"}</span>
-        </button>
-      </div>
-    </fieldset>
-  </div>
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                    <th class="tbl_col_rulename" scope="col"><tmpl_var name="rulename_txt"></th>
-                    <th class="tbl_col_buttons" scope="col">&nbsp;</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                    <th data-column="rulename"><tmpl_var name="rulename_txt"></th>
+                    <th class="text-right">&nbsp;</th>
                 </tr>
-                <tr class="filter">
-                    <td class="tbl_col_rulename"><input type="text" name="search_rulename" value="{tmpl_var name='search_rulename'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','mail/mail_user_edit.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><input class="form-control" type="text" name="search_rulename" value="{tmpl_var name='search_rulename'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/mail_user_edit.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                    <td class="tbl_col_rulename"><a href="#" onclick="loadContent('mailuser/mail_user_filter_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="rulename"}</a></td>
-                    <td class="tbl_col_buttons">
-                        <a class="button icons16 icoDelete" href="javascript: del_record('mailuser/mail_user_filter_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>
+                <tr>
+                    <td><a href="#" data-load-content="mailuser/mail_user_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rulename"}</a></td>
+                    <td class="text-right">
+                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mailuser/mail_user_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                     </td>
                 </tr>
                 </tmpl_loop>
@@ -45,11 +43,10 @@
 
                 <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                    <td colspan="3"><tmpl_var name="paging"></td>
                 </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-    
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_password_edit.htm b/interface/web/mailuser/templates/mail_user_password_edit.htm
index b28d3a3..d1e04fa 100644
--- a/interface/web/mailuser/templates/mail_user_password_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_password_edit.htm
@@ -1,37 +1,33 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mailuser_password">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='email_txt'}</p>
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
                 <p class="value">{tmpl_var name='email'}</p>
             </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</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','mailuser/mail_user_password_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('mailuser/index.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-    
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_password_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm b/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm
index 4fdc5f8..9e5360f 100644
--- a/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_spamfilter_edit.htm
@@ -1,28 +1,25 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_mailuser_spamfilter">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='email_txt'}</p>
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='email_txt'}</label>
                 <p class="value">{tmpl_var name='email'}</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="policy">{tmpl_var name='policy_txt'}</label>
-                <select name="policy" id="policy" class="selectInput">
+            <div class="form-group">
+                <label for="policy" class="col-sm-3 control-label">{tmpl_var name='policy_txt'}</label>
+                <div class="col-sm-9"><select name="policy" id="policy" class="form-control">
                     {tmpl_var name='policy'}
-                </select>
+                </select></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','mailuser/mail_user_spamfilter_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('mailuser/index.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-    
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mailuser/mail_user_spamfilter_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mailuser/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php
index dc51ae3..964d3c8 100644
--- a/interface/web/monitor/lib/module.conf.php
+++ b/interface/web/monitor/lib/module.conf.php
@@ -8,6 +8,7 @@
 $module["template"]  = "module.tpl.htm";
 $module["tab_width"]    = '';
 $module["startpage"]  = "monitor/show_sys_state.php?state=system";
+$module['order']    = '60';
 
 unset($items);
 $items[] = array( 'title'  => "Show Overview",
@@ -37,7 +38,7 @@
 
 $servers = $app->db->queryAllRecords("SELECT server_id, server_name FROM server order by server_name");
 
-$dropDown = "<select id='server_id' onchange=\"loadContent('monitor/show_sys_state.php?state=server&server=' + document.getElementById('server_id').value);\">";
+$dropDown = "<select id='server_id' onchange=\"ISPConfig.loadContent('monitor/show_sys_state.php?state=server&server=' + document.getElementById('server_id').value);\">";
 foreach ($servers as $server)
 {
 	$dropDown .= "<option value='" . $server['server_id'] . "|" . $server['server_name'] . "'>" . $server['server_name'] . "</option>";
diff --git a/interface/web/monitor/list/datalog.list.php b/interface/web/monitor/list/datalog.list.php
index 81326e3..3164b7f 100644
--- a/interface/web/monitor/list/datalog.list.php
+++ b/interface/web/monitor/list/datalog.list.php
@@ -55,11 +55,11 @@
 
 
 $liste['item'][] = array( 'field'  => 'server_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
-	'op'  => 'like',
-	'prefix' => '%',
-	'suffix' => '%',
+	'op'  => '=',
+	'prefix' => '',
+	'suffix' => '',
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/monitor/list/log.list.php b/interface/web/monitor/list/log.list.php
index 49e0a08..26c898e 100644
--- a/interface/web/monitor/list/log.list.php
+++ b/interface/web/monitor/list/log.list.php
@@ -54,11 +54,11 @@
 
 
 $liste['item'][] = array( 'field'  => 'server_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
-	'op'  => 'like',
-	'prefix' => '%',
-	'suffix' => '%',
+	'op'  => '=',
+	'prefix' => '',
+	'suffix' => '',
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/monitor/log_del.php b/interface/web/monitor/log_del.php
index 04d11e9..40fe185 100644
--- a/interface/web/monitor/log_del.php
+++ b/interface/web/monitor/log_del.php
@@ -35,7 +35,7 @@
 $app->auth->check_module_permissions('monitor');
 
 $syslog_id = $app->functions->intval($_GET['id']);
-$app->db->query("UPDATE sys_log SET loglevel = 0 WHERE syslog_id = '$syslog_id'");
+$app->db->query("UPDATE sys_log SET loglevel = 0 WHERE syslog_id = ?", $syslog_id);
 
 header('Location: log_list.php');
 exit;
diff --git a/interface/web/monitor/show_log.php b/interface/web/monitor/show_log.php
index 96217da..e8f3acc 100644
--- a/interface/web/monitor/show_log.php
+++ b/interface/web/monitor/show_log.php
@@ -120,7 +120,7 @@
 
 
 /* fetch the Data from the DB */
-$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = '" . $app->db->quote($logId) . "' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = ? and server_id = ? order by created desc", $logId, $_SESSION['monitor']['server_id']);
 
 if(isset($record['data'])) {
 	$data = unserialize($record['data']);
diff --git a/interface/web/monitor/show_sys_state.php b/interface/web/monitor/show_sys_state.php
index 93d1f95..53997bc 100644
--- a/interface/web/monitor/show_sys_state.php
+++ b/interface/web/monitor/show_sys_state.php
@@ -191,7 +191,7 @@
 	/*
      * Get all monitoring-data from the server and process then
 	*/
-	$records = $app->db->queryAllRecords("SELECT DISTINCT type, data FROM monitor_data WHERE server_id = " . $serverId);
+	$records = $app->db->queryAllRecords("SELECT DISTINCT type, data FROM monitor_data WHERE server_id = ?", $serverId);
 	$osData = null;
 	$veInfo = null;
 	$ispcData = null;
@@ -287,8 +287,8 @@
 	/*
 	 * The normal info also needs a link to the verbose info
 	*/
-	$html_ve .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
-	$html_server .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
+	$html_ve .= "<a href='#' data-load-content='monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
+	$html_server .= "<a href='#' data-load-content='monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
 
 	/*
 	 * Finish all html's
@@ -320,7 +320,7 @@
     * state
 	*/
 	// get the State from the DB
-	$record = $app->db->queryOneRecord("SELECT state FROM monitor_data WHERE type = '" . $type . "' and server_id = " . $serverId . " order by created desc");
+	$record = $app->db->queryOneRecord("SELECT state FROM monitor_data WHERE type = ? and server_id = ? order by created desc", $type, $serverId);
 
 	// change the new state to the highest state
 	/*
@@ -341,28 +341,28 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_hdok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_hdgoingfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_hdnearlyfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_hdveryfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_hdfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_hdunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -373,27 +373,27 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_loadok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_loadheavy_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_loadhigh_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_loadhigher_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_loadhighest_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_loadunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -401,16 +401,16 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_servicesonline_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=services'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_servicesoffline_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=services'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_servicesunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=services'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -418,12 +418,12 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_updatesok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=system_update'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_updatesneeded_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=system_update'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'no_state':
 			/*
@@ -432,7 +432,7 @@
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_updatesunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=system_update'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -441,19 +441,19 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_raidok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_raidresync_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_raidfault_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_raiderror_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'no_state':
 			/*
@@ -462,7 +462,7 @@
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_raidunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -474,23 +474,23 @@
 	//  switch ($record['state']) {
 	//   case 'ok':
 	//    $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_beancounterok_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'info':
 	//    $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_beancounterinfo_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'warning':
 	//    $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_beancounterwarning_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'critical':
 	//    $messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_beancountercritical_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'error':
 	//    $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_beancountererror_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   default:
 	//    break;
@@ -502,27 +502,27 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_mailqok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_mailqheavy_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_mailqhigh_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_mailqhigher_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_mailqhighest_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_mailqunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -531,19 +531,19 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_syslogok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_syslogwarning_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_syslogerror_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_syslogunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -556,15 +556,15 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_fclamok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_log.php?log=log_freshclam'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_fclamoutdated_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_log.php?log=log_freshclam'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_fclamunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_log.php?log=log_freshclam'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
diff --git a/interface/web/monitor/templates/datalog_list.htm b/interface/web/monitor/templates/datalog_list.htm
index 480aa94..eb79f46 100644
--- a/interface/web/monitor/templates/datalog_list.htm
+++ b/interface/web/monitor/templates/datalog_list.htm
@@ -1,38 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="caption">
-                        <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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="tstamp"><tmpl_var name="tstamp_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="action"><tmpl_var name="action_txt"></th>
+                        <th data-column="dbtable"><tmpl_var name="dbtable_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_tstamp">&nbsp;</td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_action"><select name="search_action">{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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td>&nbsp;</td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_action">{tmpl_var name='search_action'}</select></td>
+                        <td><input class="form-control" type="text" name="search_dbtable" value="{tmpl_var name='search_dbtable'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="monitor/datalog_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_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">    
-                                <!--<a class="button 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> -->
+                        <tr>
+                            <td>{tmpl_var name="tstamp"}</td>
+                            <td>{tmpl_var name="server_id"}</td>
+                            <td>{tmpl_var name="action"}</td>
+                            <td>{tmpl_var name="dbtable"}</td>
+                            <td class="text-right">    
+                                <!--<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/datalog_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a> -->
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -44,11 +45,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/show_data.htm b/interface/web/monitor/templates/show_data.htm
index 818208d..85ca40c 100644
--- a/interface/web/monitor/templates/show_data.htm
+++ b/interface/web/monitor/templates/show_data.htm
@@ -1,12 +1,14 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+        <p class="fieldset-legend"><tmpl_var name="monTransDate"><tmpl_var name="time"></p>
             <div class="systemmonitor"><tmpl_var name="output"></div>
-        </fieldset>
+        
     </div>
 
 </div>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/show_log.htm b/interface/web/monitor/templates/show_log.htm
index 271d46b..dc5792d 100644
--- a/interface/web/monitor/templates/show_log.htm
+++ b/interface/web/monitor/templates/show_log.htm
@@ -1,25 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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" onChange="loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">
+        <legend><tmpl_var name="monTransRefreshsq"></legend>
+            
+                <div class="form-group">
+                    <label for="refreshinterval" class="col-sm-3 control-label">{tmpl_var name='refreshinterval_txt'}</label>
+                    <div class="col-sm-9"><select name="refreshinterval" id="refreshinterval" class="form-control" onChange="ISPConfig.loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">
                         {tmpl_var name='refresh'}
-                    </select>
-                </div>
-            </div>
-        </fieldset>
+                    </select></div>
+                
+        
     </div>
   
     <div class="pnl_formarea">
-        <fieldset><legend><tmpl_var name="monTransDate"><tmpl_var name="time"></legend>
+        <p class="fieldset-legend"><tmpl_var name="monTransDate"><tmpl_var name="time"></p>
             <div class="codeview"><tmpl_var name="log_data"></div>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/show_monit.htm b/interface/web/monitor/templates/show_monit.htm
index 27265bd..5053458 100644
--- a/interface/web/monitor/templates/show_monit.htm
+++ b/interface/web/monitor/templates/show_monit.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_system">
diff --git a/interface/web/monitor/templates/show_munin.htm b/interface/web/monitor/templates/show_munin.htm
index 86d33f1..3119413 100644
--- a/interface/web/monitor/templates/show_munin.htm
+++ b/interface/web/monitor/templates/show_munin.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_system">
diff --git a/interface/web/monitor/templates/show_sys_state.htm b/interface/web/monitor/templates/show_sys_state.htm
index ceb4195..4586fc3 100644
--- a/interface/web/monitor/templates/show_sys_state.htm
+++ b/interface/web/monitor/templates/show_sys_state.htm
@@ -1,25 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">&nbsp;</label>
-                    <select name="refreshinterval" id="refreshinterval" class="selectInput withicons" onChange="loadContentRefresh('monitor/show_sys_state.php?state={tmpl_var name="state_type"}')">
+        <legend><tmpl_var name="monTransRefreshsq"></legend>
+            
+                <div class="form-group">
+                    <label for="refreshinterval" class="col-sm-3 control-label">&nbsp;</label>
+                    <div class="col-sm-9"><select name="refreshinterval" id="refreshinterval" class="form-control" onChange="ISPConfig.loadContentRefresh('monitor/show_sys_state.php?state={tmpl_var name="state_type"}')">
                         {tmpl_var name='refresh'}
-                    </select>
-                </div>
-            </div>
-        </fieldset>
+                    </select></div>
+                
+        
     </div>
   
     <div class="pnl_formarea">
-        <fieldset><legend></legend>
+        <p class="fieldset-legend"></p>
             <div class="stateview"><tmpl_var name="state_data"></div>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/syslog_list.htm b/interface/web/monitor/templates/syslog_list.htm
index a14f68d..8f62422 100644
--- a/interface/web/monitor/templates/syslog_list.htm
+++ b/interface/web/monitor/templates/syslog_list.htm
@@ -1,42 +1,43 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="caption">
-                        <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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="tstamp"><tmpl_var name="tstamp_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="loglevel"><tmpl_var name="loglevel_txt"></th>
+                        <th data-column="message"><tmpl_var name="message_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_tstamp">&nbsp;</td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_loglevel"><select name="search_loglevel">{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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td>&nbsp;</td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_loglevel">{tmpl_var name='search_loglevel'}</select></td>
+                        <td><input class="form-control" type="text" name="search_message" value="{tmpl_var name='search_message'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="monitor/log_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_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">
+                        <tr>
+                            <td>{tmpl_var name="tstamp"}</td>
+                            <td>{tmpl_var name="server_id"}</td>
+                            <td>{tmpl_var name="loglevel"}</td>
+                            <td>{tmpl_var name="message"}</td>
+                            <td class="text-right">
                                 <tmpl_if name="loglevel" op="==" value="Error">
-                                    <a class="button 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>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                                 <tmpl_if name="loglevel" op="==" value="Warning">
-                                    <a class="button 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>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                             </td>
                         </tr>
@@ -49,11 +50,10 @@
                 </tbody>
                 <tfoot>
                 <tr>
-                    <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                    <td colspan="5"><tmpl_var name="paging"></td>
                 </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/nav.php b/interface/web/nav.php
index 4d8617c..773f7d1 100644
--- a/interface/web/nav.php
+++ b/interface/web/nav.php
@@ -45,25 +45,41 @@
 		/*
 		 * If the dashboard is in the list of modules it always has to be the first!
 		 */
+		/*
 		asort($modules);
 		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.');
+					if($mt == 'dns'){
+						$dns_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE dns_server = 1 AND active = 1");
+						if($dns_servers['cnt'] == 0) continue;
+					}
+					if($mt == 'mail'){
+						$mail_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE mail_server = 1 AND active = 1");
+						if($mail_servers['cnt'] == 0) continue;
+					}
+					if($mt == 'sites'){
+						$web_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE web_server = 1 AND active = 1");
+						if($web_servers['cnt'] == 0) continue;
+					}
+					
 					include_once $mt.'/lib/module.conf.php';
 					$language = (isset($_SESSION['s']['user']['language']))?$_SESSION['s']['user']['language']:$conf['language'];
 					$app->load_language_file('web/'.$mt.'/lib/'.$language.'.lng');
 					$active = ($module['name'] == $_SESSION['s']['module']['name']) ? 1 : 0;
-					$topnav[] = array( 'title'  => $app->lng($module['title']),
+					$topnav[$module['order'].'-'.$module['name']] = array( 'title'  => $app->lng($module['title']),
 						'active'  => $active,
 						'module' => $module['name']);
 				}
 			}
+			ksort($topnav);
 		}
 	} else {
 		//*  Loading Login Module
diff --git a/interface/web/remote/monitor.php b/interface/web/remote/monitor.php
index 9cc0084..132bcf2 100644
--- a/interface/web/remote/monitor.php
+++ b/interface/web/remote/monitor.php
@@ -30,7 +30,7 @@
 		$sql = 'SELECT server_id, server_name FROM server WHERE 1 ORDER BY server_id';
 		$records = $app->db->queryAllRecords($sql);
 		foreach($records as $index => $rec) {
-			$rec = $app->db->queryOneRecord("SELECT * FROM monitor_data WHERE server_id = " . $rec['server_id'] . " AND state NOT IN ('ok', 'no_state', 'info')");
+			$rec = $app->db->queryOneRecord("SELECT * FROM monitor_data WHERE server_id = ? AND state NOT IN ('ok', 'no_state', 'info')", $rec['server_id']);
 			if($rec) $records[$index]['state'] = 'warn';
 			else $records[$index]['state'] = 'ok';
 		}
@@ -38,7 +38,7 @@
 		$out['data'] = $records;
 		$out['time'] = date('Y-m-d H:i', $rec['created']);
 	} else {
-		$rec = $app->db->queryOneRecord("SELECT * FROM monitor_data WHERE type = '$type' AND server_id = $server_id");
+		$rec = $app->db->queryOneRecord("SELECT * FROM monitor_data WHERE type = ? AND server_id = ?", $type, $server_id);
 		if(is_array($rec)) {
 			$out['state'] = $rec['state'];
 			$out['data'] = unserialize(stripslashes($rec['data']));
diff --git a/interface/web/sites/ajax_get_ip.php b/interface/web/sites/ajax_get_ip.php
index 4101a80..205be48 100644
--- a/interface/web/sites/ajax_get_ip.php
+++ b/interface/web/sites/ajax_get_ip.php
@@ -37,15 +37,15 @@
 
 $server_id = $app->functions->intval($_GET["server_id"]);
 $client_group_id = $app->functions->intval($_GET["client_group_id"]);
-$ip_type = $app->db->quote($_GET['ip_type']);
+$ip_type = $_GET['ip_type'];
 
 if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 
 	//* Get global web config
 	$web_config = $app->getconf->get_server_config($server_id, 'web');
 
-	$sql = "SELECT ip_address FROM server_ip WHERE ip_type = '$ip_type' AND server_id = $server_id";
-	$ips = $app->db->queryAllRecords($sql);
+	$sql = "SELECT ip_address FROM server_ip WHERE ip_type = ? AND server_id = ?";
+	$ips = $app->db->queryAllRecords($sql, $ip_type, $server_id);
 	// $ip_select = "<option value=''></option>";
 	if($ip_type == 'IPv4'){
 		$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"*#":"";
diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index ddf7d85..5e93843 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -56,8 +56,8 @@
 
 if($type == 'getserverid'){
 	$json = '{"serverid":"';
-	$sql = "SELECT server_id FROM web_domain WHERE domain_id = $web_id AND ".$app->tform->getAuthSQL('r');
-	$server = $app->db->queryOneRecord($sql);
+	$sql = "SELECT server_id FROM web_domain WHERE domain_id = ?? AND ".$app->tform->getAuthSQL('r');
+	$server = $app->db->queryOneRecord($sql, $web_id);
 	$json .= $server['server_id'];
 	unset($server);
 	$json .= '"}';
@@ -77,7 +77,7 @@
 		$sql_where = " AND (client_id = 0 OR client_id = ".$app->functions->intval($_SESSION["s"]["user"]["client_id"]) . ")";
 		//* Reseller: If the logged in user is not admin and has sub clients (is a reseller)
 	} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-		$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = $client_group_id");
+		$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $client_group_id);
 		//$sql_where = " AND (client_id = 0 OR client_id = ".$_SESSION["s"]["user"]["client_id"];
 		$sql_where = " AND (client_id = 0";
 		if($app->functions->intval($client['client_id']) > 0) $sql_where .= " OR client_id = ".$app->functions->intval($client['client_id']);
@@ -85,7 +85,7 @@
 		//* Admin: If the logged in user is admin
 	} else {
 		//$sql_where = '';
-		$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = $client_group_id");
+		$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $client_group_id);
 		//$sql_where = " AND (client_id = 0 OR client_id = ".$_SESSION["s"]["user"]["client_id"];
 		$sql_where = " AND (client_id = 0";
 		if($app->functions->intval($client['client_id']) > 0) $sql_where .= " OR client_id = ".$app->functions->intval($client['client_id']);
@@ -93,10 +93,9 @@
 	}
 
 	if($php_type == 'php-fpm'){
-		$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = $server_id".$sql_where);
-	}
-	if($php_type == 'fast-cgi'){
-		$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = $server_id".$sql_where);
+		$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?".$sql_where, $server_id);
+	} elseif($php_type == 'fast-cgi'){
+		$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?".$sql_where, $server_id);
 	}
 	$php_select = "";
 	if(is_array($php_records) && !empty($php_records)) {
@@ -116,8 +115,8 @@
 
 if($type == 'getphptype'){
 	$json = '{"phptype":"';
-	$sql = "SELECT php FROM web_domain WHERE domain_id = $web_id AND ".$app->tform->getAuthSQL('r');
-	$php = $app->db->queryOneRecord($sql);
+	$sql = "SELECT php FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r');
+	$php = $app->db->queryOneRecord($sql, $web_id);
 	$json .= $php['php'];
 	unset($php);
 	$json .= '"}';
@@ -125,8 +124,8 @@
 
 if($type == 'getredirecttype'){
 	$json = '{"redirecttype":"';
-	$sql = "SELECT redirect_type FROM web_domain WHERE domain_id = $web_id AND ".$app->tform->getAuthSQL('r');
-	$redirect = $app->db->queryOneRecord($sql);
+	$sql = "SELECT redirect_type FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r');
+	$redirect = $app->db->queryOneRecord($sql, $web_id);
 	$json .= $redirect['redirect_type'];
 	unset($redirect);
 	$json .= '"}';
@@ -155,11 +154,11 @@
 if($type == 'getdatabaseusers') {
 	$json = '{}';
 
-	$sql = "SELECT sys_groupid FROM web_domain WHERE domain_id = $web_id AND ".$app->tform->getAuthSQL('r');
-	$group = $app->db->queryOneRecord($sql);
+	$sql = "SELECT sys_groupid FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r');
+	$group = $app->db->queryOneRecord($sql, $web_id);
 	if($group) {
-		$sql = "SELECT database_user_id, database_user FROM web_database_user WHERE sys_groupid = '" . $app->functions->intval($group['sys_groupid']) . "'";
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT database_user_id, database_user FROM web_database_user WHERE sys_groupid = ?";
+		$records = $app->db->queryAllRecords($sql, $group['sys_groupid']);
 
 		$tmp_array = array();
 		foreach($records as $record) {
@@ -190,6 +189,55 @@
 	$json .= '"}';
 }
 
+if ($type == 'getdirectivesnippet') {
+	$server_type = 'apache';
+	$web_config = $app->getconf->get_server_config($server_id, 'web');
+	if (!empty($web_config['server_type']))
+		$server_type = $web_config['server_type'];
+
+	$snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND type = ? ORDER BY name ASC", $server_type);
+
+	$json = json_encode($snippets);
+}
+
+if($type == 'getclientssldata'){
+	$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $web_id);
+	$sys_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE groupid = ?", $web['sys_groupid']);
+	$client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $sys_group['client_id']);
+	if(is_array($client) && !empty($client)){
+		if($client['telephone'] == '' && $client['mobile'] != '') $client['telephone'] = $client['mobile'];
+		
+		$fname = '';
+		$lname = '';
+		$parts = preg_split("/\s+/", $client['contact_name']);
+		if(sizeof($parts) == 2){
+			$fname = $parts[0];
+			$lname = $parts[1];
+		}
+		if(sizeof($parts) > 2){
+			$fname = $parts[0].' ';
+			for($i=1;$i<sizeof($parts);$i++){
+				if($i == (sizeof($parts) - 1)){
+					$lname .= $parts[$i];
+				} else {
+					if(preg_match('@^(von|van|ten|ter|zur|zu|auf|sieber)$@i', $parts[$i])){
+						$lname .= implode(' ', array_slice($parts, $i));
+						break;
+					} else {
+						$fname .= $parts[$i].' ';
+					}
+				}
+			}
+		}
+		$fname = trim($fname);
+		$lname = trim($lname);
+		$client['fname'] = $fname;
+		$client['lname'] = $lname;
+		if(trim($client['company_name']) == '') $client['company_name'] = $fname.' '.$lname;
+	}
+	$json = $app->functions->json_encode($client);
+}
+
 //}
 
 header('Content-type: application/json');
diff --git a/interface/web/sites/aps_do_operation.php b/interface/web/sites/aps_do_operation.php
index b4d9493..ff0705f 100644
--- a/interface/web/sites/aps_do_operation.php
+++ b/interface/web/sites/aps_do_operation.php
@@ -50,15 +50,15 @@
 	if(!$gui->isValidPackageID($_GET['id'], true)) die($app->lng('Invalid ID'));
 
 	// Change the existing status to the opposite
-	$get_status = $app->db->queryOneRecord("SELECT package_status FROM aps_packages WHERE id = '".$app->functions->intval($_GET['id'])."';");
+	$get_status = $app->db->queryOneRecord("SELECT package_status FROM aps_packages WHERE id = ?", $_GET['id']);
 	if($get_status['package_status'] == strval(PACKAGE_LOCKED))
 	{
-		$app->db->query("UPDATE aps_packages SET package_status = ".PACKAGE_ENABLED." WHERE id = '".$app->functions->intval($_GET['id'])."';");
+		$app->db->query("UPDATE aps_packages SET package_status = ? WHERE id = ?", PACKAGE_ENABLED, $_GET['id']);
 		echo '<div class="swap" id="ir-Yes"><span>'.$app->lng('Yes').'</span></div>';
 	}
 	else
 	{
-		$app->db->query("UPDATE aps_packages SET Package_status = ".PACKAGE_LOCKED." WHERE id = '".$app->functions->intval($_GET['id'])."';");
+		$app->db->query("UPDATE aps_packages SET Package_status = ? WHERE id = ?", PACKAGE_LOCKED, $_GET['id']);
 		echo '<div class="swap" id="ir-No"><span>'.$app->lng('No').'</span></div>';
 	}
 }
@@ -69,7 +69,7 @@
 		$is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
 		if(!$is_admin)
 		{
-			$cid = $app->db->queryOneRecord("SELECT client_id FROM client WHERE username = '".$app->db->quote($_SESSION['s']['user']['username'])."';");
+			$cid = $app->db->queryOneRecord("SELECT client_id FROM client WHERE username = ?", $_SESSION['s']['user']['username']);
 			$client_id = $cid['client_id'];
 		}
 
@@ -78,35 +78,10 @@
 
 		// Only delete the instance if the status is "installed" or "flawed"
 		$check = $app->db->queryOneRecord("SELECT id FROM aps_instances
-        WHERE id = ".$app->db->quote($_GET['id'])." AND
-        (instance_status = ".INSTANCE_SUCCESS." OR instance_status = ".INSTANCE_ERROR.");");
+        WHERE id = ? AND
+        (instance_status = ? OR instance_status = ?)", $_GET['id'], INSTANCE_SUCCESS, INSTANCE_ERROR);
 		if($check['id'] > 0) $gui->deleteInstance($_GET['id']);
 		//echo $app->lng('Installation_remove');
-		@header('Location:aps_installedpackages_list.php');
-	}
-else if($_GET['action'] == 'reinstall_instance')
-	{
-		// Make sure a valid package ID is given (also corresponding to the calling user)
-		$client_id = 0;
-		$is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
-		if(!$is_admin)
-		{
-			$cid = $app->db->queryOneRecord("SELECT client_id FROM client WHERE username = '".$app->db->quote($_SESSION['s']['user']['username'])."';");
-			$client_id = $cid['client_id'];
-		}
-		// Assume that the given instance belongs to the currently calling client_id. Unimportant if status is admin
-		if(!$gui->isValidInstanceID($_GET['id'], $client_id, $is_admin)) die($app->lng('Invalid ID'));
-
-		// We've an InstanceID, so make sure the package is not enabled and InstanceStatus is still "installed"
-		$check = $app->db->queryOneRecord("SELECT aps_instances.id FROM aps_instances, aps_packages
-        WHERE aps_instances.package_id = aps_packages.id
-        AND aps_instances.instance_status = ".INSTANCE_SUCCESS."
-        AND aps_packages.package_status = ".PACKAGE_ENABLED."
-        AND aps_instances.id = ".$app->db->quote($_GET['id']).";");
-		if(!$check) die('Check failed'); // normally this might not happen at all, so just die
-
-		$gui->reinstallInstance($_GET['id']);
-		//echo $app->lng('Installation_task');
 		@header('Location:aps_installedpackages_list.php');
 	}
 ?>
diff --git a/interface/web/sites/aps_install_package.php b/interface/web/sites/aps_install_package.php
index 5d62322..05e4e9e 100644
--- a/interface/web/sites/aps_install_package.php
+++ b/interface/web/sites/aps_install_package.php
@@ -62,7 +62,7 @@
 
 $adminflag = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
 $gui = new ApsGUIController($app);
-$pkg_id = (isset($_GET['id'])) ? $app->db->quote($_GET['id']) : '';
+$pkg_id = (isset($_GET['id'])) ? $_GET['id'] : '';
 
 // Check if a newer version is available for the current package
 // Note: It's intended that here is no strict ID check (see below)
@@ -85,9 +85,8 @@
 // Get domain list
 $domains = array();
 $domain_for_user = '';
-if(!$adminflag) $domain_for_user = "AND (sys_userid = '".$app->db->quote($_SESSION['s']['user']['userid'])."'
-    OR sys_groupid = '".$app->db->quote($_SESSION['s']['user']['default_group'])."' )";
-$domains_assoc = $app->db->queryAllRecords("SELECT domain FROM web_domain WHERE document_root != '' AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y' ".$domain_for_user." ORDER BY domain;");
+if(!$adminflag) $domain_for_user = "AND (sys_userid = ? OR sys_groupid = ?)";
+$domains_assoc = $app->db->queryAllRecords("SELECT domain FROM web_domain WHERE document_root != '' AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y' ".$domain_for_user." ORDER BY domain", $_SESSION['s']['user']['userid'], $_SESSION['s']['user']['default_group']);
 if(!empty($domains_assoc)) foreach($domains_assoc as $domain) $domains[] = $domain['domain'];
 
 	// If data has been submitted, validate it
diff --git a/interface/web/sites/aps_installedpackages_list.php b/interface/web/sites/aps_installedpackages_list.php
index 418cc43..f323a9c 100644
--- a/interface/web/sites/aps_installedpackages_list.php
+++ b/interface/web/sites/aps_installedpackages_list.php
@@ -51,7 +51,7 @@
 $is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
 if(!$is_admin)
 {
-	$cid = $app->db->queryOneRecord('SELECT client_id FROM client WHERE username = "'.$app->db->quote($_SESSION['s']['user']['username']).'";');
+	$cid = $app->db->queryOneRecord('SELECT client_id FROM client WHERE username = ?', $_SESSION['s']['user']['username']);
 	//$client_ext = ' AND aps_instances.customer_id = '.$cid['client_id'];
 	$client_ext = ' AND '.$app->tform->getAuthSQL('r', 'aps_instances');
 }
@@ -125,10 +125,6 @@
 		else $ils = $rec['install_location'];
 		$rec['install_location_short'] = $ils;
 
-		// Also set a boolean-like variable for the reinstall button (vlibTemplate doesn't allow variable comparisons)
-		// For a reinstall, the package must be already installed successfully and (still be) enabled
-		if($rec['instance_status'] == INSTANCE_SUCCESS && $rec['package_status'] == PACKAGE_ENABLED)
-			$rec['reinstall_possible'] = 'true';
 		// Of course an instance can only then be removed when it's not already tagged for removal
 		if($rec['instance_status'] != INSTANCE_REMOVE && $rec['instance_status'] != INSTANCE_INSTALL)
 			$rec['delete_possible'] = 'true';
diff --git a/interface/web/sites/aps_packagedetails_show.php b/interface/web/sites/aps_packagedetails_show.php
index 7f8ca6b..6da5610 100644
--- a/interface/web/sites/aps_packagedetails_show.php
+++ b/interface/web/sites/aps_packagedetails_show.php
@@ -47,7 +47,7 @@
 $app->tpl->setVar($wb);
 
 $gui = new ApsGUIController($app);
-$pkg_id = (isset($_GET['id'])) ? $app->db->quote($_GET['id']) : '';
+$pkg_id = (isset($_GET['id'])) ? $_GET['id'] : '';
 
 // Check if a newer version is available for the current package
 // Note: It's intended that here is no strict ID check (see below)
diff --git a/interface/web/sites/backup_stats.php b/interface/web/sites/backup_stats.php
new file mode 100644
index 0000000..1d10ee1
--- /dev/null
+++ b/interface/web/sites/backup_stats.php
@@ -0,0 +1,43 @@
+<?php
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+$list_def_file = 'list/backup_stats.list.php';
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('sites');
+
+$app->load('listform_actions','functions');
+
+class list_action extends listform_actions {
+
+	public function prepareDataRow($rec)
+	{
+		global $app;
+		$app->uses('functions');
+
+		$rec = parent::prepareDataRow($rec);
+
+		$rec['active'] = "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>";
+		if ($rec['backup_interval'] === 'none') {
+			$rec['active']        = "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>";
+			$rec['backup_copies'] = 0;
+		}
+
+		$recBackup = $app->db->queryOneRecord('SELECT COUNT(backup_id) AS backup_count FROM web_backup WHERE parent_domain_id = ?', $rec['domain_id']);
+		$rec['backup_copies_exists'] = $recBackup['backup_count'];
+		unset($recBackup);
+		$recBackup = $app->db->queryOneRecord('SELECT SUM(filesize) AS backup_size FROM web_backup WHERE parent_domain_id = ?', $rec['domain_id']);
+		$rec['backup_size'] = $app->functions->formatBytes($recBackup['backup_size']);
+
+		return $rec;
+	}
+}
+
+$list = new list_action;
+$list->SQLExtWhere = "";
+$list->onLoad();
diff --git a/interface/web/sites/cron_edit.php b/interface/web/sites/cron_edit.php
index 6ec02c7..a832649 100644
--- a/interface/web/sites/cron_edit.php
+++ b/interface/web/sites/cron_edit.php
@@ -87,7 +87,7 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_cron, limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_cron, limit_cron_type 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) {
@@ -95,7 +95,7 @@
 			} else {
 				// Check if the user may add another cron job.
 				if($client["limit_cron"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM cron WHERE sys_groupid = $client_group_id");
+					$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM cron WHERE sys_groupid = ?", $client_group_id);
 					if($tmp["number"] >= $client["limit_cron"]) {
 						$app->error($app->tform->wordbook["limit_cron_txt"]);
 					}
@@ -104,7 +104,7 @@
 		}
 
 		// Get the record of the parent domain
-		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 
 		// Set fixed values
@@ -115,7 +115,7 @@
 		if(preg_match("'^http(s)?:\/\/'i", $command)) {
 			$this->dataRecord["type"] = 'url';
 		} else {
-			$domain_owner = $app->db->queryOneRecord("SELECT limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ".$app->functions->intval($parent_domain["sys_groupid"]));
+			$domain_owner = $app->db->queryOneRecord("SELECT limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $parent_domain["sys_groupid"]);
 			//* True when the site is assigned to a client
 			if(isset($domain_owner["limit_cron_type"])) {
 				if($domain_owner["limit_cron_type"] == 'full') {
@@ -140,7 +140,7 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_cron_frequency, limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_cron_frequency, limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			if($client["limit_cron_frequency"] > 1) {
 				if($app->tform->cron_min_freq < $client["limit_cron_frequency"]) {
@@ -170,7 +170,7 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_cron_frequency, limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_cron_frequency, limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			if($client["limit_cron_frequency"] > 1) {
 				if($app->tform->cron_min_freq < $client["limit_cron_frequency"]) {
@@ -196,14 +196,14 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 		$server_id = $web["server_id"];
 
 		// The cron shall be owned by the same group then the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-		$sql = "UPDATE cron SET server_id = $server_id, sys_groupid = '$sys_groupid' WHERE id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE cron SET server_id = ?, sys_groupid = ? WHERE id = ?";
+		$app->db->query($sql, $server_id, $sys_groupid, $this->id);
 	}
 
 	function onAfterUpdate() {
diff --git a/interface/web/sites/database_edit.php b/interface/web/sites/database_edit.php
index 9494cd3..2d051d1 100644
--- a/interface/web/sites/database_edit.php
+++ b/interface/web/sites/database_edit.php
@@ -79,7 +79,7 @@
 			$client = $app->db->queryOneRecord("SELECT db_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Set the webserver to the default server of the client
-			$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE server_id IN ($client[db_servers])");
+			$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE server_id IN ?", explode(',', $client['db_servers']));
 
 			$only_one_server = count($tmp) === 1;
 			$app->tpl->setVar('only_one_server', $only_one_server);
@@ -89,7 +89,7 @@
 			}
 
 			foreach ($tmp as $db_server) {
-				$options_db_servers .= "<option value='$db_server[server_id]'>$db_server[server_name]</option>";
+				$options_db_servers .= '<option value="'.$db_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $db_server['server_id'] ? ' selected="selected"' : '').'>'.$db_server['server_name'].'</option>';
 			}
 
 			$app->tpl->setVar("server_id", $options_db_servers);
@@ -102,7 +102,7 @@
 			$client = $app->db->queryOneRecord("SELECT client.client_id, limit_web_domain, db_servers, contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Set the webserver to the default server of the client
-			$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE server_id IN ($client[db_servers])");
+			$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE server_id IN ?", explode(',', $client['db_servers']));
 
 			$only_one_server = count($tmp) === 1;
 			$app->tpl->setVar('only_one_server', $only_one_server);
@@ -112,7 +112,7 @@
 			}
 
 			foreach ($tmp as $db_server) {
-				$options_db_servers .= "<option value='$db_server[server_id]'>$db_server[server_name]</option>";
+				$options_db_servers .= '<option value="'.$db_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $db_server['server_id'] ? ' selected="selected"' : '').'>'.$db_server['server_name'].'</option>';
 			}
 
 			$app->tpl->setVar("server_id", $options_db_servers);
@@ -168,13 +168,13 @@
 	function onSubmit() {
 		global $app, $conf;
 
-		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 
 		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 db_servers, limit_database, limit_database_quota, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT db_servers, limit_database, limit_database_quota, parent_client_id 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) {
@@ -207,7 +207,7 @@
 
 				if($client['parent_client_id'] > 0) {
 					// Get the limits of the reseller
-					$reseller = $app->db->queryOneRecord("SELECT limit_database, limit_database_quota FROM client WHERE client_id = ".$client['parent_client_id']);
+					$reseller = $app->db->queryOneRecord("SELECT limit_database, limit_database_quota FROM client WHERE client_id = ?", $client['parent_client_id']);
 
 					//* Check the website quota of the client
 					if ($reseller['limit_database_quota'] >= 0) {
@@ -265,15 +265,15 @@
 			}
 		} else {
 			// check if client of database parent domain is client of db user!
-			$web_group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = '".$app->functions->intval($this->dataRecord['parent_domain_id'])."'");
+			$web_group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = ?", $this->dataRecord['parent_domain_id']);
 			if($this->dataRecord['database_user_id']) {
-				$group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_database_user WHERE database_user_id = '".$app->functions->intval($this->dataRecord['database_user_id'])."'");
+				$group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_database_user WHERE database_user_id = ?", $this->dataRecord['database_user_id']);
 				if($group['sys_groupid'] != $web_group['sys_groupid']) {
 					$app->error($app->tform->wordbook['database_client_differs_txt']);
 				}
 			}
 			if($this->dataRecord['database_ro_user_id']) {
-				$group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_database_user WHERE database_user_id = '".$app->functions->intval($this->dataRecord['database_ro_user_id'])."'");
+				$group = $app->db->queryOneRecord("SELECT sys_groupid FROM web_database_user WHERE database_user_id = ?", $this->dataRecord['database_ro_user_id']);
 				if($group['sys_groupid'] != $web_group['sys_groupid']) {
 					$app->error($app->tform->wordbook['database_client_differs_txt']);
 				}
@@ -340,11 +340,11 @@
 		}
 
 		//* Check for duplicates
-		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = '".$app->db->quote($this->dataRecord['database_name'])."' AND server_id = '".$app->functions->intval($this->dataRecord["server_id"])."' AND database_id != '".$this->id."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = ? AND server_id = ? AND database_id != ?", $this->dataRecord['database_name'], $this->dataRecord["server_id"], $this->id);
 		if($tmp['dbnum'] > 0) $app->tform->errorMessage .= $app->lng('database_name_error_unique').'<br />';
 
 		// get the web server ip (parent domain)
-		$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = '".$app->functions->intval($this->dataRecord['parent_domain_id'])."'");
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->dataRecord['parent_domain_id']);
 		if($tmp['server_id'] && $tmp['server_id'] != $this->dataRecord['server_id']) {
 			// we need remote access rights for this server, so get it's ip address
 			$server_config = $app->getconf->get_server_config($tmp['server_id'], 'server');
@@ -369,7 +369,7 @@
 		if ($app->tform->errorMessage == '') {
 			// force update of the used database user
 			if($this->dataRecord['database_user_id']) {
-				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ' . $app->functions->intval($this->dataRecord['database_user_id']));
+				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ?', $this->dataRecord['database_user_id']);
 				if($user_old_rec) {
 					$user_new_rec = $user_old_rec;
 					$user_new_rec['server_id'] = $this->dataRecord['server_id'];
@@ -377,7 +377,7 @@
 				}
 			}
 			if($this->dataRecord['database_ro_user_id']) {
-				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ' . $app->functions->intval($this->dataRecord['database_ro_user_id']));
+				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ?', $this->dataRecord['database_ro_user_id']);
 				if($user_old_rec) {
 					$user_new_rec = $user_old_rec;
 					$user_new_rec['server_id'] = $this->dataRecord['server_id'];
@@ -419,11 +419,11 @@
 		}
 
 		//* Check for duplicates
-		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = '".$app->db->quote($this->dataRecord['database_name'])."' AND server_id = '".$app->functions->intval($this->dataRecord["server_id"])."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(database_id) as dbnum FROM web_database WHERE database_name = ? AND server_id = ?", $this->dataRecord['database_name'], $this->dataRecord["server_id"]);
 		if($tmp['dbnum'] > 0) $app->tform->errorMessage .= $app->tform->lng('database_name_error_unique').'<br />';
 
 		// get the web server ip (parent domain)
-		$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = '".$app->functions->intval($this->dataRecord['parent_domain_id'])."'");
+		$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->dataRecord['parent_domain_id']);
 		if($tmp['server_id'] && $tmp['server_id'] != $this->dataRecord['server_id']) {
 			// we need remote access rights for this server, so get it's ip address
 			$server_config = $app->getconf->get_server_config($tmp['server_id'], 'server');
@@ -448,7 +448,7 @@
 		if ($app->tform->errorMessage == '') {
 			// force update of the used database user
 			if($this->dataRecord['database_user_id']) {
-				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ' . $app->functions->intval($this->dataRecord['database_user_id']));
+				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ?', $this->dataRecord['database_user_id']);
 				if($user_old_rec) {
 					$user_new_rec = $user_old_rec;
 					$user_new_rec['server_id'] = $this->dataRecord['server_id'];
@@ -456,7 +456,7 @@
 				}
 			}
 			if($this->dataRecord['database_ro_user_id']) {
-				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ' . $app->functions->intval($this->dataRecord['database_ro_user_id']));
+				$user_old_rec = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user_id` = ?', $this->dataRecord['database_ro_user_id']);
 				if($user_old_rec) {
 					$user_new_rec = $user_old_rec;
 					$user_new_rec['server_id'] = $this->dataRecord['server_id'];
diff --git a/interface/web/sites/database_phpmyadmin.php b/interface/web/sites/database_phpmyadmin.php
index 5e640df..481b4ea 100644
--- a/interface/web/sites/database_phpmyadmin.php
+++ b/interface/web/sites/database_phpmyadmin.php
@@ -45,14 +45,12 @@
 /*
  * Get the data to connect to the database
  */
-$dbData = $app->db->queryOneRecord("SELECT server_id, database_name FROM web_database WHERE database_id = " . $databaseId);
+$dbData = $app->db->queryOneRecord("SELECT server_id, database_name FROM web_database WHERE database_id = ?", $databaseId);
 $serverId = $app->functions->intval($dbData['server_id']);
 if ($serverId == 0){
 	die ("No DB-Server found!");
 }
-$serverData = $app->db->queryOneRecord(
-	"SELECT server_name FROM server WHERE server_id = " .
-	$serverId);
+$serverData = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $serverId);
 
 $app->uses('getconf');
 $global_config = $app->getconf->get_global_config('sites');
diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php
index f7e5da5..7815faa 100644
--- a/interface/web/sites/database_quota_stats.php
+++ b/interface/web/sites/database_quota_stats.php
@@ -13,9 +13,11 @@
 ******************************************/
 
 //* Check permissions for module
-$app->auth->check_module_permissions('mail');
+$app->auth->check_module_permissions('sites');
 
-$app->load('listform_actions','functions');
+$app->uses('functions');
+
+$app->load('listform_actions');
 
 $tmp_rec =  $app->db->queryOneRecord("SELECT data from monitor_data WHERE type = 'database_size' ORDER BY created DESC");
 $monitor_data = array();
@@ -24,12 +26,12 @@
 foreach($tmp_array as $database_name => $data) {
 	$db_name = $data['database_name'];
 
-	$temp = $app->db->queryOneRecord("SELECT client.username, web_database.database_quota FROM web_database, sys_group, client WHERE web_database.sys_groupid = sys_group.groupid AND sys_group.client_id = client.client_id AND web_database.database_name = ?'", $db_name);
+	$temp = $app->db->queryOneRecord("SELECT client.username, web_database.database_quota FROM web_database, sys_group, client WHERE web_database.sys_groupid = sys_group.groupid AND sys_group.client_id = client.client_id AND web_database.database_name = ?", $db_name);
 
 	$monitor_data[$db_name]['database_name'] = $data['database_name'];
-	$monitor_data[$db_name]['client']=$temp['username'];
-	$monitor_data[$db_name]['used'] = $data['size'];
-	$monitor_data[$db_name]['quota']=$temp['database_quota'];
+	$monitor_data[$db_name]['client'] = isset($temp['username']) ? $temp['username'] : '';
+	$monitor_data[$db_name]['used'] = isset($data['size']) ? $data['size'] : 0;
+	$monitor_data[$db_name]['quota'] = isset($temp['database_quota']) ? $temp['database_quota'] : 0;
 
 	unset($temp);
 }
@@ -47,18 +49,17 @@
 
 		$database_name = $rec['database_name'];
 
-		$rec['database'] = isset($monitor_data[$database_name]['database_name']) ? $monitor_data[$database_name]['database_name'] : array(1 => 0);
-		$rec['client'] = isset($monitor_data[$database_name]['client']) ? $monitor_data[$database_name]['client'] : array(1 => 0);
-		$rec['used'] = isset($monitor_data[$database_name]['used']) ? $monitor_data[$database_name]['used'] : array(1 => 0);
-		$rec['quota'] = isset($monitor_data[$database_name]['quota']) ? $monitor_data[$database_name]['quota'] : array(1 => 0);
-
-		if (!is_numeric($rec['used'])) $rec['used']=$rec['used'][1];
+		$rec['database'] = $monitor_data[$database_name]['database_name'];
+		$rec['client'] = $monitor_data[$database_name]['client'];
+		$rec['server_name'] = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $rec['server_id'])['server_name'];
+		$rec['used'] = $monitor_data[$database_name]['used'];
+		$rec['quota'] = $monitor_data[$database_name]['quota'];
 
 		if($rec['quota'] == 0){
 			$rec['quota'] = $app->lng('unlimited');
 			$rec['percentage'] = '';
 		} else {
-			$rec['percentage'] = round(100 * $rec['used'] / ( $rec['quota']*1024*1024) ).'%';
+			if ($rec['used'] > 0 ) $rec['percentage'] = round(100 * intval($rec['used']) / ( intval($rec['quota'])*1024*1024) ).'%';
 			$rec['quota'] .= ' MB';
 		}
 
@@ -73,7 +74,7 @@
 
 $list = new list_action;
 $list->SQLExtWhere = "";
-
+$list->SQLOrderBy = "";
 $list->onLoad();
 
 ?>
diff --git a/interface/web/sites/database_user_del.php b/interface/web/sites/database_user_del.php
index 3667539..d80ba4f 100644
--- a/interface/web/sites/database_user_del.php
+++ b/interface/web/sites/database_user_del.php
@@ -55,7 +55,7 @@
 		$old_record = $app->tform->getDataRecord($this->id);
 
 		/* we cannot use datalogDelete here, as we need to set server_id to 0 */
-		$app->db->query("DELETE FROM `web_database_user` WHERE $index_field = '$index_value'");
+		$app->db->query("DELETE FROM `web_database_user` WHERE ?? = ?", $index_field, $index_value);
 		$new_rec = array();
 		$old_record['server_id'] = 0;
 		$app->db->datalogSave('web_database_user', 'DELETE', 'database_user_id', $this->id, $old_record, $new_rec);
@@ -65,14 +65,14 @@
 		global $app; $conf;
 
 		//* Update all records that belog to this user
-		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_user_id = '".$app->functions->intval($this->id)."'");
+		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_user_id = ?", $this->id);
 		foreach($records as $rec) {
-			$app->db->datalogUpdate('web_database', 'database_user_id=NULL', 'database_id', $rec['database_id']);
+			$app->db->datalogUpdate('web_database', array('database_user_id' => null), 'database_id', $rec['database_id']);
 
 		}
-		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_ro_user_id = '".$app->functions->intval($this->id)."'");
+		$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE database_ro_user_id = ?", $this->id);
 		foreach($records as $rec) {
-			$app->db->datalogUpdate('web_database', 'database_ro_user_id=NULL', 'database_id', $rec['database_id']);
+			$app->db->datalogUpdate('web_database', array('database_ro_user_id' => null), 'database_id', $rec['database_id']);
 		}
 	}
 
diff --git a/interface/web/sites/database_user_edit.php b/interface/web/sites/database_user_edit.php
index 18b46b9..90b28ef 100644
--- a/interface/web/sites/database_user_edit.php
+++ b/interface/web/sites/database_user_edit.php
@@ -66,12 +66,12 @@
 		if ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client.company_name, client.contact_name, client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT client.company_name, client.contact_name, client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			// Fill the client select field
-			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$app->functions->intval($client['client_id'])." ORDER BY client.company_name, client.contact_name, sys_group.name";
-			$records = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
+			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+			$records = $app->db->queryAllRecords($sql, $client['client_id']);
+			$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($records)) {
@@ -128,7 +128,7 @@
 		$global_config = $app->getconf->get_global_config('sites');
 		$dbuser_prefix = $app->tools_sites->replacePrefix($global_config['dbuser_prefix'], $this->dataRecord);
 
-		$this->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM web_database_user WHERE database_user_id = '".$this->id."'");
+		$this->oldDataRecord = $app->db->queryOneRecord("SELECT * FROM web_database_user WHERE database_user_id = ?", $this->id);
 
 		$dbuser_prefix = $app->tools_sites->getPrefix($this->oldDataRecord['database_user_prefix'], $dbuser_prefix);
 		$this->dataRecord['database_user_prefix'] = $dbuser_prefix;
@@ -200,11 +200,11 @@
 
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_database_user SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_user_id = ".$this->id);
+			$app->db->query("UPDATE web_database_user SET sys_groupid = ?, sys_perm_group = 'riud' WHERE database_user_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_database_user SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_user_id = ".$this->id);
+			$app->db->query("UPDATE web_database_user SET sys_groupid = ?, sys_perm_group = 'riud' WHERE database_user_id = ?", $client_group_id, $this->id);
 		}
 	}
 
@@ -213,24 +213,12 @@
 
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_database_user SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_user_id = ".$this->id);
+			$app->db->query("UPDATE web_database_user SET sys_groupid = ?, sys_perm_group = 'riud' WHERE database_user_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_database_user SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE database_user_id = ".$this->id);
+			$app->db->query("UPDATE web_database_user SET sys_groupid = ?, sys_perm_group = 'riud' WHERE database_user_id = ?", $client_group_id, $this->id);
 		}
-
-		/*$password = $app->db->queryOneRecord("SELECT database_password FROM web_database_user WHERE database_user_id = ".$this->id);
-
-        $records = $app->db->queryAllRecords("SELECT DISTINCT server_id FROM web_database WHERE database_user_id = '".$app->functions->intval($this->id)."' UNION SELECT DISTINCT server_id FROM web_database WHERE database_ro_user_id = '".$app->functions->intval($this->id)."'");
-        foreach($records as $rec) {
-            $new_rec = $this->dataRecord;
-            $new_rec['server_id'] = $rec['server_id'];
-			// Make sure to store the password in encrypted form in sys_datalog
-			$new_rec['database_password'] = $password['database_password'];
-            $app->db->datalogSave('web_database_user', 'UPDATE', 'database_user_id', $this->id, $this->oldDataRecord, $new_rec);
-        }
-        unset($new_rec);*/
 	}
 
 }
diff --git a/interface/web/sites/form/web_childdomain.tform.php b/interface/web/sites/form/web_childdomain.tform.php
index 1081a23..09145f9 100644
--- a/interface/web/sites/form/web_childdomain.tform.php
+++ b/interface/web/sites/form/web_childdomain.tform.php
@@ -58,7 +58,7 @@
 $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
 
 $form["tabs"]['domain'] = array (
-	'title'  => "Domain",
+	'title'  => ($childdomain_type == 'aliasdomain'? 'Aliasdomain' : 'Subdomain'),
 	'width'  => 100,
 	'template'  => "templates/web_childdomain_edit.htm",
 	'fields'  => array (
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 7d50b97..b457be7 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -41,16 +41,19 @@
 $vhostdomain_type = 'domain';
 $form_title = "Web Domain";
 $validator_function = 'web_domain';
+$first_tab_title = "Domain";
 
 if(isset($_SESSION['s']['var']['vhostdomain_type'])) {
 	if($_SESSION['s']['var']['vhostdomain_type'] == 'subdomain') {
 		$vhostdomain_type = 'subdomain';
 		$form_title = "Subdomain";
 		$validator_function = 'sub_domain';
+		$first_tab_title = "Subomain";
 	} elseif($_SESSION['s']['var']['vhostdomain_type'] == 'aliasdomain') {
 		$vhostdomain_type = 'aliasdomain';
 		$form_title = "Aliasdomain";
 		$validator_function = 'alias_domain';
+		$first_tab_title = "Aliasomain";
 	}
 }
 
@@ -85,7 +88,7 @@
 $backup_available = ($vhostdomain_type == 'domain');
 if(!$app->auth->is_admin()) {
 	$client_group_id = $_SESSION["s"]["user"]["default_group"];
-	$client = $app->db->queryOneRecord("SELECT limit_wildcard, limit_ssl, limit_backup FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+	$client = $app->db->queryOneRecord("SELECT limit_wildcard, limit_ssl, limit_backup FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 	if($client['limit_wildcard'] != 'y') $wildcard_available = false;
 	if($client['limit_ssl'] != 'y') $ssl_available = false;
@@ -96,7 +99,7 @@
 $web_config = $app->getconf->get_global_config('sites');
 
 $form["tabs"]['domain'] = array (
-	'title'  => "Domain",
+	'title'  => $first_tab_title,
 	'width'  => 100,
 	'template'  => "templates/web_vhost_domain_edit.htm",
 	'readonly' => $web_domain_edit_readonly,
@@ -273,6 +276,15 @@
 			'default' => 'n',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'enable_pagespeed' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default'  => 'n',
+			'value' => array (
+				0 => 'n',
+				1 => 'y'
+			)
+		),
 		'active' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
@@ -282,7 +294,13 @@
 		//#################################
 		// ENDE Datatable fields
 		//#################################
-	)
+	),
+	'plugins' => array (
+		// needs serverId for web.server_type
+		'directive_snippets_id' => array (
+			'class' => 'plugin_directive_snippets'
+		),
+ 	)
 );
 
 // add type-specific field attributes
@@ -517,6 +535,15 @@
 				'default' => '',
 				'value'  => array('' => 'none_txt', 'save' => 'save_certificate_txt', 'create' => 'create_certificate_txt', 'del' => 'delete_certificate_txt')
 			),
+			'enable_spdy' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'CHECKBOX',
+				'default'  => 'n',
+				'value' => array (
+					0 => 'n',
+					1 => 'y'
+				)
+			),
 			//#################################
 			// ENDE Datatable fields
 			//#################################
diff --git a/interface/web/sites/ftp_user_edit.php b/interface/web/sites/ftp_user_edit.php
index bdbf3c2..9de400c 100644
--- a/interface/web/sites/ftp_user_edit.php
+++ b/interface/web/sites/ftp_user_edit.php
@@ -96,11 +96,11 @@
 
 		// Get the record of the parent domain
 		if(isset($this->dataRecord["parent_domain_id"])) {
-			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 			if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 		} else {
 			$tmp = $app->tform->getDataRecord($this->id);
-			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval($tmp["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), $tmp["parent_domain_id"]);
 			if(!$parent_domain) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 			unset($tmp);
 		}
@@ -137,11 +137,11 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 		$server_id = $app->functions->intval($web["server_id"]);
-		$dir = $app->db->quote($web["document_root"]);
-		$uid = $app->db->quote($web["system_user"]);
-		$gid = $app->db->quote($web["system_group"]);
+		$dir = $web["document_root"];
+		$uid = $web["system_user"];
+		$gid = $web["system_group"];
 		
 		// Check system user and group
 		if($app->functions->is_allowed_user($uid) == false || $app->functions->is_allowed_group($gid) == false) {
@@ -151,8 +151,8 @@
 		// The FTP user shall be owned by the same group then the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-		$sql = "UPDATE ftp_user SET server_id = $server_id, dir = '$dir', uid = '$uid', gid = '$gid', sys_groupid = '$sys_groupid' WHERE ftp_user_id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE ftp_user SET server_id = ?, dir = ?, uid = ?, gid = ?, sys_groupid = ? WHERE ftp_user_id = ?";
+		$app->db->query($sql, $server_id, $dir, $uid, $gid, $sys_groupid, $this->id);
 	}
 
 	function onBeforeUpdate() {
@@ -181,17 +181,17 @@
 
 		//* When the site of the FTP user has been changed
 		if(isset($this->dataRecord['parent_domain_id']) && $this->oldDataRecord['parent_domain_id'] != $this->dataRecord['parent_domain_id']) {
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 			$server_id = $app->functions->intval($web["server_id"]);
-			$dir = $app->db->quote($web["document_root"]);
-			$uid = $app->db->quote($web["system_user"]);
-			$gid = $app->db->quote($web["system_group"]);
+			$dir = $web["document_root"];
+			$uid = $web["system_user"];
+			$gid = $web["system_group"];
 
 			// The FTP user shall be owned by the same group then the website
 			$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-			$sql = "UPDATE ftp_user SET server_id = $server_id, dir = '$dir', uid = '$uid', gid = '$gid', sys_groupid = '$sys_groupid' WHERE ftp_user_id = ".$this->id;
-			$app->db->query($sql);
+			$sql = "UPDATE ftp_user SET server_id = ?, dir = ?, uid = ?, gid = ?, sys_groupid = ? WHERE ftp_user_id = ?";
+			$app->db->query($sql, $server_id, $dir, $uid, $gid, $sys_groupid, $this->id);
 		}
 
 		//* 2. check to ensure that the FTP user path is not changed to a path outside of the docroot by a normal user
@@ -201,11 +201,11 @@
 			//* This check should normally never be triggered
 			//* Set the path to a safe path (web doc root).
 			if($error_message != '') {
-				$ftp_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM ftp_user WHERE ftp_user_id = '".$app->db->quote($app->tform->primary_id)."'");
-				$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($ftp_data["parent_domain_id"]));
-				$dir = $app->db->quote($web["document_root"]);
-				$sql = "UPDATE ftp_user SET dir = '$dir' WHERE ftp_user_id = ".$this->id;
-				$app->db->query($sql);
+				$ftp_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM ftp_user WHERE ftp_user_id = ?", $app->tform->primary_id);
+				$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $ftp_data["parent_domain_id"]);
+				$dir = $web["document_root"];
+				$sql = "UPDATE ftp_user SET dir = ? WHERE ftp_user_id = ?";
+				$app->db->query($sql, $dir, $this->id);
 				$app->log("Error in FTP path settings of FTP user ".$this->dataRecord['username'], 1);
 			}
 
diff --git a/interface/web/sites/lib/lang/ar_aps_instances_list.lng b/interface/web/sites/lib/lang/ar_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/ar_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/ar_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_backup_stats_list.lng b/interface/web/sites/lib/lang/ar_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/ar_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/ar_database_quota_stats_list.lng b/interface/web/sites/lib/lang/ar_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/ar_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/ar_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/bg_aps_instances_list.lng b/interface/web/sites/lib/lang/bg_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/bg_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/bg_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_backup_stats_list.lng b/interface/web/sites/lib/lang/bg_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/bg_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/bg_database_quota_stats_list.lng b/interface/web/sites/lib/lang/bg_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/bg_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/bg_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/br_aps_instances_list.lng b/interface/web/sites/lib/lang/br_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/br_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/br_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/br_backup_stats_list.lng b/interface/web/sites/lib/lang/br_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/br_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/br_database_quota_stats_list.lng b/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/cz_aps_instances_list.lng b/interface/web/sites/lib/lang/cz_aps_instances_list.lng
index 16e863e..8f7c248 100644
--- a/interface/web/sites/lib/lang/cz_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/cz_aps_instances_list.lng
@@ -6,9 +6,7 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Umístění instalace';
 $wb['pkg_delete_confirmation'] = 'Opravdu chcete smazat tuto instalaci ?';
-$wb['pkg_reinstall_confirmation'] = 'Opravdu chcete přeinstalovat tento balíček se stejným nastavením ?';
 $wb['filter_txt'] = 'Hledat';
 $wb['delete_txt'] = 'Smazat';
-$wb['reinstall_txt'] = 'Přeinstalovat';
 ?>
 
diff --git a/interface/web/sites/lib/lang/cz_backup_stats_list.lng b/interface/web/sites/lib/lang/cz_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/cz_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/cz_database_quota_stats_list.lng b/interface/web/sites/lib/lang/cz_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/cz_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/cz_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/de_aps_instances_list.lng b/interface/web/sites/lib/lang/de_aps_instances_list.lng
index e5f8b7b..ba381e8 100644
--- a/interface/web/sites/lib/lang/de_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/de_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Installationsort';
 $wb['pkg_delete_confirmation'] = 'Soll diese Installation wirklich gelöscht werden?';
-$wb['pkg_reinstall_confirmation'] = 'Soll das Paket wirklich mit den gleichen Einstellungen erneut installiert werden?';
 $wb['filter_txt'] = 'Suche';
 $wb['delete_txt'] = 'Löschen';
-$wb['reinstall_txt'] = 'Neuinstallieren';
 ?>
diff --git a/interface/web/sites/lib/lang/de_backup_stats_list.lng b/interface/web/sites/lib/lang/de_backup_stats_list.lng
new file mode 100644
index 0000000..a2a124a
--- /dev/null
+++ b/interface/web/sites/lib/lang/de_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Statistiken';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Aktiv';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Anz. Backups';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Intervall / Anz.';
+$wb['backup_size_txt'] = 'Backupgrösse';
+?>
diff --git a/interface/web/sites/lib/lang/de_database_quota_stats_list.lng b/interface/web/sites/lib/lang/de_database_quota_stats_list.lng
index 5c7f6be..4d1a367 100644
--- a/interface/web/sites/lib/lang/de_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/de_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Datenbank';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Kunde';
 $wb["used_txt"] = 'Verwendeter Speicherplatz';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/de_web_directive_snippets.lng b/interface/web/sites/lib/lang/de_web_directive_snippets.lng
new file mode 100644
index 0000000..b6d8984
--- /dev/null
+++ b/interface/web/sites/lib/lang/de_web_directive_snippets.lng
@@ -0,0 +1,3 @@
+<?php
+$wb['directive_snippets_id_txt'] = 'Gewünschte Konfiguration';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index 197d5ce..7917cae 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -134,4 +134,10 @@
 $wb['invalid_custom_php_ini_settings_txt'] = 'Unzulässige php.ini-Einstellungen';
 $wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
 $wb['apache_directive_blocked_error'] = 'Die Apache Direktive wurde durch die Sicherheitsrichtline blockiert:';
+$wb['btn_save_txt'] = 'Speichern';
+$wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['enable_spdy_txt'] = 'Aktiviere SPDY';
+$wb['load_client_data_txt'] = 'Kundendaten übernehmen';
+$wb['load_my_data_txt'] = 'Meine Kontaktdaten laden';
+$wb['reset_client_data_txt'] = 'Daten verwerfen';
 ?>
diff --git a/interface/web/sites/lib/lang/el_aps_instances_list.lng b/interface/web/sites/lib/lang/el_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/el_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/el_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/el_backup_stats_list.lng b/interface/web/sites/lib/lang/el_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/el_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/el_database_quota_stats_list.lng b/interface/web/sites/lib/lang/el_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/el_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/el_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/en_aps_instances_list.lng b/interface/web/sites/lib/lang/en_aps_instances_list.lng
index 611c37e..ce6df1a 100644
--- a/interface/web/sites/lib/lang/en_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/en_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_backup_stats_list.lng b/interface/web/sites/lib/lang/en_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/en_database_quota_stats_list.lng b/interface/web/sites/lib/lang/en_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/en_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/en_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/en_web_directive_snippets.lng b/interface/web/sites/lib/lang/en_web_directive_snippets.lng
new file mode 100644
index 0000000..05a004f
--- /dev/null
+++ b/interface/web/sites/lib/lang/en_web_directive_snippets.lng
@@ -0,0 +1,3 @@
+<?php
+$wb['directive_snippets_id_txt'] = 'Desired configuration';
+?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index f68ebb8..8af57ff 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -137,4 +137,10 @@
 $wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
+$wb['btn_save_txt'] = "Save";
+$wb['btn_cancel_txt'] = "Cancel";
+$wb['enable_spdy_txt'] = 'Enable SPDY';
+$wb['load_client_data_txt'] = 'Load client details';
+$wb['load_my_data_txt'] = 'Load my contact details';
+$wb['reset_client_data_txt'] = 'Reset data';
 ?>
diff --git a/interface/web/sites/lib/lang/es_aps_instances_list.lng b/interface/web/sites/lib/lang/es_aps_instances_list.lng
index f302a7a..71ccd53 100644
--- a/interface/web/sites/lib/lang/es_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/es_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Estado';
 $wb['install_location_txt'] = 'Localización de instalación';
 $wb['pkg_delete_confirmation'] = '¿Realmente quieres eliminar esta instalación?';
-$wb['pkg_reinstall_confirmation'] = '¿Realmente quieres reinstalar este paquete con la misma configuración?';
 $wb['filter_txt'] = 'Buscar';
 $wb['delete_txt'] = 'Eliminar';
-$wb['reinstall_txt'] = 'Reinstalar';
 ?>
diff --git a/interface/web/sites/lib/lang/es_backup_stats_list.lng b/interface/web/sites/lib/lang/es_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/es_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/es_database_quota_stats_list.lng b/interface/web/sites/lib/lang/es_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/es_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/es_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/fi_aps_instances_list.lng b/interface/web/sites/lib/lang/fi_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/fi_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/fi_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_backup_stats_list.lng b/interface/web/sites/lib/lang/fi_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/fi_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/fi_database_quota_stats_list.lng b/interface/web/sites/lib/lang/fi_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/fi_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/fi_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/fr_aps_instances_list.lng b/interface/web/sites/lib/lang/fr_aps_instances_list.lng
index 6a2dba1..63145b0 100644
--- a/interface/web/sites/lib/lang/fr_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/fr_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Statut';
 $wb['install_location_txt'] = 'Chemin d\'installation';
 $wb['pkg_delete_confirmation'] = 'Etes-vous sûr de vouloir supprimer cette installation ?';
-$wb['pkg_reinstall_confirmation'] = 'Etes-vous sûr de vouloir réinstaller ce package avec la même configuration ?';
 $wb['filter_txt'] = 'Chercher';
 $wb['delete_txt'] = 'Supprimer';
-$wb['reinstall_txt'] = 'Réinstaller';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_backup_stats_list.lng b/interface/web/sites/lib/lang/fr_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/fr_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/fr_database_quota_stats_list.lng b/interface/web/sites/lib/lang/fr_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/fr_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/fr_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/hr_aps_instances_list.lng b/interface/web/sites/lib/lang/hr_aps_instances_list.lng
index 2d737a6..5215f35 100644
--- a/interface/web/sites/lib/lang/hr_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/hr_aps_instances_list.lng
@@ -6,10 +6,8 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Lokacija instalacije';
 $wb['pkg_delete_confirmation'] = 'Da li stvarno želite obrisati ovu instalaciju?';
-$wb['pkg_reinstall_confirmation'] = 'Da li stvarno želite reinstalirati ovaj paket sa istim postavkama?';
 $wb['filter_txt'] = 'Traži';
 $wb['delete_txt'] = 'Obriši';
-$wb['reinstall_txt'] = 'Reinstaliraj';
 ?>
 
 
diff --git a/interface/web/sites/lib/lang/hr_backup_stats_list.lng b/interface/web/sites/lib/lang/hr_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/hr_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/hr_database_quota_stats_list.lng b/interface/web/sites/lib/lang/hr_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/hr_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/hr_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/hu_aps_instances_list.lng b/interface/web/sites/lib/lang/hu_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/hu_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/hu_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_backup_stats_list.lng b/interface/web/sites/lib/lang/hu_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/hu_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/hu_database_quota_stats_list.lng b/interface/web/sites/lib/lang/hu_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/hu_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/hu_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/id_aps_instances_list.lng b/interface/web/sites/lib/lang/id_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/id_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/id_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/id_backup_stats_list.lng b/interface/web/sites/lib/lang/id_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/id_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/id_database_quota_stats_list.lng b/interface/web/sites/lib/lang/id_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/id_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/id_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/it_aps_instances_list.lng b/interface/web/sites/lib/lang/it_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/it_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/it_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/it_backup_stats_list.lng b/interface/web/sites/lib/lang/it_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/it_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/it_database_quota_stats_list.lng b/interface/web/sites/lib/lang/it_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/it_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/it_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/ja_aps_instances_list.lng b/interface/web/sites/lib/lang/ja_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/ja_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/ja_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_backup_stats_list.lng b/interface/web/sites/lib/lang/ja_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/ja_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/ja_database_quota_stats_list.lng b/interface/web/sites/lib/lang/ja_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/ja_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/ja_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/nl_aps_instances_list.lng b/interface/web/sites/lib/lang/nl_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/nl_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/nl_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_backup_stats_list.lng b/interface/web/sites/lib/lang/nl_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/nl_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/nl_database_quota_stats_list.lng b/interface/web/sites/lib/lang/nl_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/nl_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/nl_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/pl_aps_instances_list.lng b/interface/web/sites/lib/lang/pl_aps_instances_list.lng
index 186dc7d..b587dc7 100644
--- a/interface/web/sites/lib/lang/pl_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/pl_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Lokalizacja instalacji';
 $wb['pkg_delete_confirmation'] = 'Na pewno chcesz usunąć tę instalację?';
-$wb['pkg_reinstall_confirmation'] = 'Na pewno chcesz przeinstalować ten pakiet z tymi samymi ustawieniami?';
 $wb['filter_txt'] = 'Szukaj';
 $wb['delete_txt'] = 'Usuń';
-$wb['reinstall_txt'] = 'Przeinstaluj';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_backup_stats_list.lng b/interface/web/sites/lib/lang/pl_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/pl_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/pl_database_quota_stats_list.lng b/interface/web/sites/lib/lang/pl_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/pl_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/pl_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/pt_aps_instances_list.lng b/interface/web/sites/lib/lang/pt_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/pt_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/pt_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_backup_stats_list.lng b/interface/web/sites/lib/lang/pt_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/pt_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/pt_database_quota_stats_list.lng b/interface/web/sites/lib/lang/pt_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/pt_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/pt_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/ro_aps_instances_list.lng b/interface/web/sites/lib/lang/ro_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/ro_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/ro_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_backup_stats_list.lng b/interface/web/sites/lib/lang/ro_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/ro_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/ro_database_quota_stats_list.lng b/interface/web/sites/lib/lang/ro_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/ro_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/ro_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/ru_aps_instances_list.lng b/interface/web/sites/lib/lang/ru_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/ru_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/ru_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_backup_stats_list.lng b/interface/web/sites/lib/lang/ru_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/ru_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/ru_database_quota_stats_list.lng b/interface/web/sites/lib/lang/ru_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/ru_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/ru_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/se_aps_instances_list.lng b/interface/web/sites/lib/lang/se_aps_instances_list.lng
index a9428aa..ae2791d 100644
--- a/interface/web/sites/lib/lang/se_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/se_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Installationsplats';
 $wb['pkg_delete_confirmation'] = 'Vill du verkligen radera denna installation?';
-$wb['pkg_reinstall_confirmation'] = 'Vill du verkligen installera om det här paketet med samma inställningar?';
 $wb['filter_txt'] = 'Sök';
 $wb['delete_txt'] = 'Radera';
-$wb['reinstall_txt'] = 'Ominstallera';
 ?>
diff --git a/interface/web/sites/lib/lang/se_backup_stats_list.lng b/interface/web/sites/lib/lang/se_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/se_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/se_database_quota_stats_list.lng b/interface/web/sites/lib/lang/se_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/se_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/se_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/sk_aps_instances_list.lng b/interface/web/sites/lib/lang/sk_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/sk_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/sk_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_backup_stats_list.lng b/interface/web/sites/lib/lang/sk_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/sk_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/sk_database_quota_stats_list.lng b/interface/web/sites/lib/lang/sk_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/sk_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/sk_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/lang/tr_aps_instances_list.lng b/interface/web/sites/lib/lang/tr_aps_instances_list.lng
index 052d834..5742b7a 100644
--- a/interface/web/sites/lib/lang/tr_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/tr_aps_instances_list.lng
@@ -6,8 +6,6 @@
 $wb['status_txt'] = 'Status';
 $wb['install_location_txt'] = 'Install location';
 $wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
-$wb['pkg_reinstall_confirmation'] = 'Do you really want to reinstall this package with the same settings?';
 $wb['filter_txt'] = 'Search';
 $wb['delete_txt'] = 'Delete';
-$wb['reinstall_txt'] = 'Reinstall';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_backup_stats_list.lng b/interface/web/sites/lib/lang/tr_backup_stats_list.lng
new file mode 100644
index 0000000..0f3803f
--- /dev/null
+++ b/interface/web/sites/lib/lang/tr_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"]       = 'Backup Stats';
+$wb["database_name_txt"]   = '';
+$wb['active_txt']          = 'Active';
+$wb['domain_txt']          = 'Domain';
+$wb['backup_count_txt']    = 'Backup count';
+$wb['backup_server_txt']   = 'Server';
+$wb['backup_interval_txt'] = 'Interval / cnt.';
+$wb['backup_size_txt'] = 'Backupsize';
+?>
diff --git a/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng b/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
index 1276a25..e1de70a 100644
--- a/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
@@ -1,5 +1,6 @@
 <?php
 $wb["database_txt"] = 'Database';
+$wb["server_name_txt"] = 'Server';
 $wb["client_txt"] = 'Client';
 $wb["used_txt"] = 'Used space';
 $wb["quota_txt"] = 'Quota';
diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php
index 5b3a2f8..979aa63 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -7,6 +7,7 @@
 $module["template"]  = "module.tpl.htm";
 $module["startpage"]  = "sites/web_vhost_domain_list.php";
 $module["tab_width"]    = '';
+$module['order']    = '30';
 
 // Websites menu
 $items=array();
@@ -96,10 +97,24 @@
 
 if($app->auth->get_client_limit($userid, 'webdav_user') != 0)
 {
-	$items[] = array(   'title'  => "Webdav-User",
-		'target'  => 'content',
-		'link' => 'sites/webdav_user_list.php',
-		'html_id'   => 'webdav_user_list');
+	$apache_in_use = false;
+	$servers = $app->db->queryAllRecords("SELECT * FROM server WHERE web_server = 1 AND active = 1");
+	if(is_array($servers) && !empty($servers)){
+		foreach($servers as $server){
+			$tmp_web_config = $app->getconf->get_server_config($server['server_id'], 'web');
+			if(strtolower($tmp_web_config['server_type']) == 'apache'){
+				$apache_in_use = true;
+				break;
+			}
+		}
+	}
+
+	if($apache_in_use == true){
+		$items[] = array(   'title'  => "Webdav-User",
+			'target'  => 'content',
+			'link' => 'sites/webdav_user_list.php',
+			'html_id'   => 'webdav_user_list');
+	}
 }
 
 $items[] = array(   'title'     => "Folder",
@@ -189,6 +204,13 @@
 	'link'    => 'sites/database_quota_stats.php',
 	'html_id' => 'databse_quota_stats');
 
+$items[] = array (
+	'title'   => 'Backup Stats',
+	'target'  => 'content',
+	'link'    => 'sites/backup_stats.php',
+	'html_id' => 'backup_stats'
+);
+
 $module['nav'][] = array(   'title' => 'Statistics',
 	'open'  => 1,
 	'items' => $items);
diff --git a/interface/web/sites/lib/remote.conf.php b/interface/web/sites/lib/remote.conf.php
index 30e41b9..6548ef0 100644
--- a/interface/web/sites/lib/remote.conf.php
+++ b/interface/web/sites/lib/remote.conf.php
@@ -8,6 +8,5 @@
 $function_list['sites_web_domain_backup'] = 'Sites Backup 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['sites_aps_update_package_list,sites_aps_available_packages_list,sites_aps_install_package,sites_aps_get_package_details,sites_aps_get_package_file,sites_aps_get_package_settings,sites_aps_instance_get,sites_aps_instance_delete'] = 'Sites APS functions';
 ?>
diff --git a/interface/web/sites/list/backup_stats.list.php b/interface/web/sites/list/backup_stats.list.php
new file mode 100644
index 0000000..cc7358b
--- /dev/null
+++ b/interface/web/sites/list/backup_stats.list.php
@@ -0,0 +1,52 @@
+<?php
+// Name of the list
+$liste["name"]     = "backup_stats";
+
+// Database table
+$liste["table"]    = "web_domain";
+
+// Index index field of the database table
+$liste["table_idx"]   = "domain_id";
+
+// Search Field Prefix
+$liste["search_prefix"]  = "search_";
+
+// Records per page
+$liste["records_per_page"]  = "15";
+
+// Script File of the list
+$liste["file"]    = "backup_stats.php";
+
+// Script file of the edit form
+$liste["edit_file"]   = "backup_stats_edit.php";
+
+// Paging Template
+$liste["paging_tpl"]  = "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]    = "yes";
+
+// mark columns for php sorting (no real mySQL columns)
+$liste["phpsort"] = array('used_sort', 'files');
+
+
+/*****************************************************
+* Suchfelder
+*****************************************************/
+
+$liste['item'][] = array (
+   	'field'    => 'server_id',
+	'datatype' => 'INTEGER',
+	'formtype' => 'SELECT',
+	'op'       => '=',
+	'prefix'   => '',
+	'width'    => '',
+	'value'    => '',
+	'suffix'   => '',
+	'datasource' => array (
+	  	'type'        => 'SQL',
+		'querystring' => 'SELECT a.server_id, a.server_name FROM server a, web_domain b WHERE (a.server_id = b.server_id) ORDER BY a.server_name',
+		'keyfield'    => 'server_id',
+		'valuefield'  => 'server_name'
+	)
+);
diff --git a/interface/web/sites/list/cron.list.php b/interface/web/sites/list/cron.list.php
index f13beab..b1625eb 100644
--- a/interface/web/sites/list/cron.list.php
+++ b/interface/web/sites/list/cron.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/sites/list/database.list.php b/interface/web/sites/list/database.list.php
index 599cf96..55450ef 100644
--- a/interface/web/sites/list/database.list.php
+++ b/interface/web/sites/list/database.list.php
@@ -59,7 +59,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "remote_access",
 	'datatype' => "VARCHAR",
@@ -68,7 +68,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 $liste["item"][] = array( 'field'  => "type",
 	'datatype' => "VARCHAR",
@@ -91,7 +91,8 @@
 		'prefix' => "",
 		'suffix' => "",
 		'datasource' => array (  'type' => 'SQL',
-			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			//'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'querystring' => "SELECT sys_group.groupid,CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), IF(client.contact_firstname != '', CONCAT(client.contact_firstname, ' '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as name FROM sys_group, client WHERE sys_group.groupid != 1 AND sys_group.client_id = client.client_id ORDER BY client.company_name, client.contact_name",
 			'keyfield'=> 'groupid',
 			'valuefield'=> 'name'
 		),
diff --git a/interface/web/sites/list/database_quota_stats.list.php b/interface/web/sites/list/database_quota_stats.list.php
index 65fe6e9..00e4a19 100644
--- a/interface/web/sites/list/database_quota_stats.list.php
+++ b/interface/web/sites/list/database_quota_stats.list.php
@@ -35,7 +35,6 @@
 * Suchfelder
 *****************************************************/
 
-//$liste["item"][] = array( 'field'  => "domain",
 $liste["item"][] = array( 'field'  => "database_name",
 	'datatype' => "VARCHAR",
 	'filters'   => array( 0 => array( 'event' => 'SHOW',
diff --git a/interface/web/sites/list/ftp_user.list.php b/interface/web/sites/list/ftp_user.list.php
index fc15170..122e2b0 100644
--- a/interface/web/sites/list/ftp_user.list.php
+++ b/interface/web/sites/list/ftp_user.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/sites/list/shell_user.list.php b/interface/web/sites/list/shell_user.list.php
index cd88eb2..33ba4ad 100644
--- a/interface/web/sites/list/shell_user.list.php
+++ b/interface/web/sites/list/shell_user.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/sites/list/web_childdomain.list.php b/interface/web/sites/list/web_childdomain.list.php
index 4916738..9a5f107 100644
--- a/interface/web/sites/list/web_childdomain.list.php
+++ b/interface/web/sites/list/web_childdomain.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/sites/list/web_folder.list.php b/interface/web/sites/list/web_folder.list.php
index fedef22..2c79892 100644
--- a/interface/web/sites/list/web_folder.list.php
+++ b/interface/web/sites/list/web_folder.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/sites/list/web_folder_user.list.php b/interface/web/sites/list/web_folder_user.list.php
index 04a8513..454e2c4 100644
--- a/interface/web/sites/list/web_folder_user.list.php
+++ b/interface/web/sites/list/web_folder_user.list.php
@@ -57,7 +57,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "web_folder_id",
diff --git a/interface/web/sites/list/web_vhost_domain.list.php b/interface/web/sites/list/web_vhost_domain.list.php
index f997d7b..ddeaacc 100644
--- a/interface/web/sites/list/web_vhost_domain.list.php
+++ b/interface/web/sites/list/web_vhost_domain.list.php
@@ -78,7 +78,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 if($_SESSION['s']['user']['typ'] == 'admin' && $vhostdomain_type == 'domain') {
 	$liste["item"][] = array( 'field'  => "sys_groupid",
@@ -88,7 +88,8 @@
 		'prefix' => "",
 		'suffix' => "",
 		'datasource' => array (  'type' => 'SQL',
-			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			//'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'querystring' => "SELECT sys_group.groupid,CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), IF(client.contact_firstname != '', CONCAT(client.contact_firstname, ' '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as name FROM sys_group, client WHERE sys_group.groupid != 1 AND sys_group.client_id = client.client_id ORDER BY client.company_name, client.contact_name",
 			'keyfield'=> 'groupid',
 			'valuefield'=> 'name'
 		),
diff --git a/interface/web/sites/list/webdav_user.list.php b/interface/web/sites/list/webdav_user.list.php
index 339bc0d..ab727ac 100644
--- a/interface/web/sites/list/webdav_user.list.php
+++ b/interface/web/sites/list/webdav_user.list.php
@@ -55,7 +55,7 @@
 	'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>"));
+	'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
 
 
 $liste["item"][] = array( 'field'  => "server_id",
diff --git a/interface/web/sites/shell_user_edit.php b/interface/web/sites/shell_user_edit.php
index 8de6be7..77c4509 100644
--- a/interface/web/sites/shell_user_edit.php
+++ b/interface/web/sites/shell_user_edit.php
@@ -103,14 +103,12 @@
 		global $app, $conf;
 
 		// Get the record of the parent domain
-		//$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
-		//if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 		if(isset($this->dataRecord["parent_domain_id"])) {
-			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 			if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 		} else {
 			$tmp = $app->tform->getDataRecord($this->id);
-			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval($tmp["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), $tmp["parent_domain_id"]);
 			if(!$parent_domain) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 			unset($tmp);
 		}
@@ -163,12 +161,12 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 
 		$server_id = $app->functions->intval($web["server_id"]);
-		$dir = $app->db->quote($web["document_root"]);
-		$uid = $app->db->quote($web["system_user"]);
-		$gid = $app->db->quote($web["system_group"]);
+		$dir = $web["document_root"];
+		$uid = $web["system_user"];
+		$gid = $web["system_group"];
 		
 		// Check system user and group
 		if($app->functions->is_allowed_user($uid) == false || $app->functions->is_allowed_group($gid) == false) {
@@ -178,8 +176,8 @@
 		// The FTP user shall be owned by the same group then the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-		$sql = "UPDATE shell_user SET server_id = $server_id, dir = '$dir', puser = '$uid', pgroup = '$gid', sys_groupid = '$sys_groupid' WHERE shell_user_id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE shell_user SET server_id = ?, dir = ?, puser = ?, pgroup = ?, sys_groupid = ? WHERE shell_user_id = ?";
+		$app->db->query($sql, $server_id, $dir, $uid, $gid, $sys_groupid, $this->id);
 
 	}
 
diff --git a/interface/web/sites/templates/aps_install_package.htm b/interface/web/sites/templates/aps_install_package.htm
index c911ced..c3f3d9a 100644
--- a/interface/web/sites/templates/aps_install_package.htm
+++ b/interface/web/sites/templates/aps_install_package.htm
@@ -11,46 +11,39 @@
     <div id="errorMsg"><h3>ERROR</h3><ol>{tmpl_var name='error'}</ol></div>
 </tmpl_if>
 
-<div class="panel panel_install_package">
-    
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+
+        
             <legend>{tmpl_var name='basic_settings_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="main_domain">{tmpl_var name='install_location_txt'}</label>
+            <div class="form-group">
+                <label for="main_domain" class="col-sm-3 control-label">{tmpl_var name='install_location_txt'}</label>
                 <div class="resetButton">http(s)://&nbsp;</div>DOMAIN_LIST_SPACE<div style="float:left;">&nbsp;/&nbsp;</div>
-                <input type="text" name="main_location" id="main_location" value="{tmpl_var name='inp_main_location'}" maxlength="255" class="textInput formLengthHalf" />
-            </div>
+                <div class="col-sm-9"><input type="text" name="main_location" id="main_location" value="{tmpl_var name='inp_main_location'}" class="form-control" /></div></div>
             <tmpl_if name='pkg_requirements_database' op='!=' value=''>
-                <div class="ctrlHolder">
-                    <label for="main_database_password">{tmpl_var name='new_database_password_txt'}</label>
-                    <input type="text" class="textInput" name="main_database_password" id="main_database_password" value="{tmpl_var name='inp_main_database_password'}" size="10" maxlength="255" />
-                </div>
+                <div class="form-group">
+                    <label for="main_database_password" class="col-sm-3 control-label">{tmpl_var name='new_database_password_txt'}</label>
+                    <div class="col-sm-9"><input type="text" class="form-control" name="main_database_password" id="main_database_password" value="{tmpl_var name='inp_main_database_password'}" /></div></div>
             </tmpl_if>
                 
             PKG_SETTINGS_SPACE
                 
             <legend>{tmpl_var name='license_txt'}</legend>
-            <div class="ctrlHolder">
-                <label for="license">{tmpl_var name='license_txt'}</label>
+            <div class="form-group">
+                <label for="license" class="col-sm-3 control-label">{tmpl_var name='license_txt'}</label>
                 <tmpl_if name='pkg_license_content' op='==' value=''>{tmpl_var name='pkg_license_name'}<br /></tmpl_if>
                 <tmpl_if name='pkg_license_type' op='==' value='url'>
                     <a href="{tmpl_var name='pkg_license_content'}" target="_blank">{tmpl_var name='pkg_license_content'}</a>
                     <tmpl_elseif name='pkg_license_content'>
-                        <textarea rows="10" cols="80" id="license_text">{tmpl_var name='pkg_license_content'}</textarea>
+                        <div class="col-sm-9"><textarea class="form-control" rows="10" cols="80" id="license_text">{tmpl_var name='pkg_license_content'}</textarea></div>
                 </tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <label for="license">{tmpl_var name='acceptance_txt'}</label>
-                <input type="checkbox" name="license" id="license" <tmpl_if name='inp_license' op='==' value='true'>checked</tmpl_if> />&nbsp;&nbsp;{tmpl_var name='acceptance_text'}
+            <div class="form-group">
+                <label for="license" class="col-sm-3 control-label">{tmpl_var name='acceptance_txt'}</label>
+                <div class="col-sm-6"><input class="form-control" type="checkbox" name="license" id="license" <tmpl_if name='inp_license' op='==' value='true'></div><div class="col-sm-3 input-sm">checked</div></tmpl_if> />&nbsp;&nbsp;{tmpl_var name='acceptance_text'}
             </div>
-        </fieldset>
+        
             
         <input type="hidden" name="install" value="0" />
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_install_txt'}" name="btn_install" onclick="document.pageForm.install.value=1; submitForm('pageForm','sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');"><span>{tmpl_var name='btn_install_txt'}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onclick="loadContent('sites/aps_availablepackages_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-    
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_install_txt'}" name="btn_install" onclick="document.pageForm.install.value=1; ISPConfig.submitForm('pageForm','sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='btn_install_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/aps_availablepackages_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/sites/templates/aps_instances_list.htm b/interface/web/sites/templates/aps_instances_list.htm
index 2d9c50f..e41c99a 100644
--- a/interface/web/sites/templates/aps_instances_list.htm
+++ b/interface/web/sites/templates/aps_instances_list.htm
@@ -1,50 +1,46 @@
 <h2>{tmpl_var name="list_head_txt"}</h2>
 
-<div class="panel panel_list_instances">
-    
-    <div class="pnl_listarea">
-        <fieldset><legend>{tmpl_var name="list_head_txt"}</legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_name" scope="col">{tmpl_var name='name_txt'}</th>
-                        <th class="tbl_col_version" scope="col">{tmpl_var name='version_txt'}</th>
+
+        <p class="fieldset-legend">{tmpl_var name="list_head_txt"}</p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th>{tmpl_var name='name_txt'}</th>
+                        <th>{tmpl_var name='version_txt'}</th>
                         <tmpl_if name='is_noclient'>
-                        <!--<th class="tbl_col_customer" scope="col">{tmpl_var name='customer_txt'}</th>-->
+                        <!--<th>{tmpl_var name='customer_txt'}</th>-->
                         </tmpl_if>
-                        <th class="tbl_col_installlocation" scope="col">{tmpl_var name='install_location_txt'}</th>
-                        <th class="tbl_col_instancestatus" scope="col">{tmpl_var name='status_txt'}</th>
-                        <th class="tbl_col_limit" scope="col" >&nbsp;</th>
+                        <th>{tmpl_var name='install_location_txt'}</th>
+                        <th>{tmpl_var name='status_txt'}</th>
+                        <th class="small-col text-right" >&nbsp;</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_version"><input type="text" name="search_version" value="{tmpl_var name='search_version'}" /></td>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_version" value="{tmpl_var name='search_version'}" /></td>
                         <tmpl_if name='is_noclient'>
-                        <!--<td class="tbl_col_customer"><input type="text" name="search_customer_name" value="{tmpl_var name='search_customer_name'}" /></td>-->
+                        <!--<td><input class="form-control" type="text" name="search_customer_name" value="{tmpl_var name='search_customer_name'}" /></td>-->
                         </tmpl_if>
-                        <td class="tbl_col_installlocation">&nbsp;</td>
-                        <td class="tbl_col_instancestatus"><select name="search_instance_status" onChange="submitForm('pageForm','sites/aps_installedpackages_list.php');">{tmpl_var name='search_instance_status'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name='filter_txt'}" onclick="submitForm('pageForm','sites/aps_installedpackages_list.php');"><span>{tmpl_var name='filter_txt'}</span></button>
+                        <td>&nbsp;</td>
+                        <td><select class="form-control" name="search_instance_status" onChange="ISPConfig.submitForm('pageForm','sites/aps_installedpackages_list.php');">{tmpl_var name='search_instance_status'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name='filter_txt'}" data-submit-form="pageForm" data-form-action="sites/aps_installedpackages_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name='records'>
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_name"><a href="#" onclick="loadContent('sites/aps_packagedetails_show.php?id={tmpl_var name='package_id'}');">{tmpl_var name='package_name'}</a></td>
-                            <td class="tbl_col_version">{tmpl_var name='package_version'}-{tmpl_var name='package_release'}</td>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='package_id'}">{tmpl_var name='package_name'}</a></td>
+                            <td>{tmpl_var name='package_version'}-{tmpl_var name='package_release'}</td>
                             <tmpl_if name='is_noclient'>
-                                <!--<td class="tbl_col_customer"><a href="#" onclick="loadContent('sites/aps_packagedetails_show.php?id={tmpl_var name='package_id'}');">{tmpl_var name='customer_name'}</a></td>-->
+                                <!--<td><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='package_id'}">{tmpl_var name='customer_name'}</a></td>-->
                             </tmpl_if>
-                            <td class="tbl_col_installlocation"><a href="http://{tmpl_var name='install_location'}" target="_blank">{tmpl_var name='install_location_short'}</a></td>
-                            <td class="tbl_col_instancestatus"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='instance_status'}</span></td>
-                            <td class="tbl_col_buttons">
+                            <td><a href="http://{tmpl_var name='install_location'}" target="_blank">{tmpl_var name='install_location_short'}</a></td>
+                            <td><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='instance_status'}</span></td>
+                            <td class="text-right">
                                 <tmpl_if name='delete_possible'>
-                                    <a class="button icons16 icoDelete" href="javascript: del_record('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_delete_confirmation'}')"><span>{tmpl_var name='delete_txt'}</span></a>
-                                </tmpl_if>
-                                <tmpl_if name='reinstall_possible'>
-                                    <a class="button icons16 icoEdit" href="javascript: del_record('sites/aps_do_operation.php?action=reinstall_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_reinstall_confirmation'}')"><span>{tmpl_var name='reinstall_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
                                 </tmpl_if>
                             </td>        
                         </tr>
@@ -52,11 +48,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6">{tmpl_var name='paging'}</td>
+                        <td colspan="6">{tmpl_var name='paging'}</td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-    
-</div>
\ No newline at end of file
+</div>
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/aps_packagedetails_show.htm b/interface/web/sites/templates/aps_packagedetails_show.htm
index 5456a89..47ff277 100644
--- a/interface/web/sites/templates/aps_packagedetails_show.htm
+++ b/interface/web/sites/templates/aps_packagedetails_show.htm
@@ -9,13 +9,10 @@
 
 <div class="pnl_toolsarea">
     <fieldset>
-        <div class="buttons">
-            <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');">
-                <span>{tmpl_var name="install_package_txt"}</span>
-            </button>
-        </div>
+        
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/aps_install_package.php?id={tmpl_var name='pkg_id'}">{tmpl_var name="install_package_txt"}</button>
+        
     </fieldset>
-</div>
 <p>&nbsp;</p><p>&nbsp;</p>
 
 
@@ -23,18 +20,18 @@
     <input type="hidden" name="next_tab" value="" />
     <ul>
         <li<tmpl_if name='next_tab' op='==' value='details'> class="active"</tmpl_if>>
-            <a href="#" onclick="return changeTab('details', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='details_txt'}</a>
+            <a href="#" onclick="return ISPConfig.changeTab('details', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='details_txt'}</a>
         </li>
         <tmpl_if name='pkg_screenshots'>
         <li<tmpl_if name='next_tab' op='==' value='screenshots'> class="active"</tmpl_if>>
-            <a href="#" onclick="return changeTab('screenshots', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='screenshots_txt'}</a>
+            <a href="#" onclick="return ISPConfig.changeTab('screenshots', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='screenshots_txt'}</a>
         </li></tmpl_if>
         <tmpl_if name='pkg_changelog'>
         <li<tmpl_if name='next_tab' op='==' value='changelog'> class="active"</tmpl_if>>
-            <a href="#" onclick="return changeTab('changelog', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='changelog_txt'}</a>
+            <a href="#" onclick="return ISPConfig.changeTab('changelog', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='changelog_txt'}</a>
         </li></tmpl_if>
         <li<tmpl_if name='next_tab' op='==' value='settings'> class="active"</tmpl_if>>
-            <a href="#" onclick="return changeTab('settings', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='settings_txt'}</a>
+            <a href="#" onclick="return ISPConfig.changeTab('settings', 'sites/aps_packagedetails_show.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='settings_txt'}</a>
         </li>
     </ul>
 </div>
@@ -42,53 +39,54 @@
 
 <div class="panel panel_list_packages">
     
-    <div class="pnl_listarea">
-        <table class="list">
+    
+        <div class="table-wrapper marginTop15">
+<table class="table">
             <tbody>
                 <tmpl_if name='next_tab' op='==' value='details'>
-                    <tr class="tbl_row_uneven">
+                    <tr>
                         <td width="25%">{tmpl_var name='version_txt'}</td>
                         <td>{tmpl_var name='pkg_version'} (Release {tmpl_var name='pkg_release'})</td>
                     </tr>
-                    <tr class="tbl_row_even">
+                    <tr>
                         <td>{tmpl_var name='category_txt'}</td>
                         <td>{tmpl_var name='pkg_category'}</td>
                     </tr>
-                    <tr class="tbl_row_uneven">
+                    <tr>
                         <td>{tmpl_var name='description_txt'}</td>
                         <td>{tmpl_var name='pkg_description'}</td>
                     </tr>
-                    <tr class="tbl_row_even">
+                    <tr>
                         <td>{tmpl_var name='homepage_txt'}</td>
                         <td>
                             <a href="{tmpl_var name='pkg_homepage'}" target="_blank">{tmpl_var name='pkg_homepage'}</a>
                         </td>
                     </tr>
-                    <tr class="tbl_row_uneven">
+                    <tr>
                         <td>{tmpl_var name='installed_size_txt'}</td>
                         <td>{tmpl_var name='pkg_installed_size'}</td>
                     </tr>
-                    <tr class="tbl_row_even">
+                    <tr>
                         <td>{tmpl_var name='supported_languages_txt'}</td>
                         <td>{tmpl_var name='pkg_languages'}</td>
                     </tr>
-                    <tr class="tbl_row_uneven">
+                    <tr>
                         <td>{tmpl_var name='config_script_txt'}</td>
                         <td>{tmpl_var name='pkg_config_script'}</td>
                     </tr>
-                    <tr class="tbl_row_even">
+                    <tr>
                         <td>{tmpl_var name='license_txt'}</td>
                         <td>
                             <tmpl_if name='pkg_license_name'>{tmpl_var name='pkg_license_name'}<br /></tmpl_if>
                             <tmpl_if name='pkg_license_type' op='==' value='url'><a href="{tmpl_var name='pkg_license_content'}" target="_blank">{tmpl_var name='pkg_license_content'}</a>
                             <tmpl_elseif name='pkg_license_content'>
-                                <textarea rows="10" cols="80">{tmpl_var name='pkg_license_content'}</textarea>
+                                <div class="col-sm-9"><textarea class="form-control" rows="10" cols="80">{tmpl_var name='pkg_license_content'}</textarea></div>
                             </tmpl_if>
                         </td>
                     </tr>
                 <tmpl_elseif name='next_tab' op='==' value='screenshots'>
                     <tmpl_if name='pkg_screenshots'>
-                        <tr class="tbl_row_even">
+                        <tr>
                             <td style="text-align:center;">
                                 <tmpl_loop name='pkg_screenshots'>
                                     <img src="{tmpl_var name='ScreenPath'}" alt="{tmpl_var name='ScreenDescription'}" /><br />
@@ -99,7 +97,7 @@
                     </tmpl_if>
                 <tmpl_elseif name='next_tab' op='==' value='changelog'>
                     <tmpl_if name='pkg_changelog'>
-                        <tr class="tbl_row_even">
+                        <tr>
                             <td>
                                 <ul>
                                     <tmpl_loop name='pkg_changelog'>
@@ -115,27 +113,27 @@
                         </tr>
                     </tmpl_if>
                 <tmpl_elseif name='next_tab' op='==' value='settings'>
-                    <tr class="tbl_row_uneven">
+                    <tr>
                         <td width="25%">{tmpl_var name='php_extensions_txt'}</td>
                         <td>{tmpl_var name='pkg_requirements_php_extensions'}</td>
                     </tr>
-                    <tr class="tbl_row_even">
+                    <tr>
                         <td>{tmpl_var name='php_settings_txt'}</td>
                         <td>
                             <tmpl_loop name='pkg_requirements_php_settings'>{tmpl_var name='PHPSettingName'} = {tmpl_var name='PHPSettingValue'}<br /></tmpl_loop>
                         </td>
                     </tr>
-                    <tr class="tbl_row_uneven">
+                    <tr>
                         <td>{tmpl_var name='supported_php_versions_txt'}</td>
                         <td>{tmpl_var name='pkg_requirements_supported_php_versions'}</td>
                     </tr>
-                    <tr class="tbl_row_even">
+                    <tr>
                         <td>{tmpl_var name='database_txt'}</td>
                         <td>{tmpl_var name='pkg_requirements_database'}</a></td>
                     </tr>
                 </tmpl_if>
             </tbody>
         </table>
+</div>
     </div>
     
-</div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/aps_packages_list.htm b/interface/web/sites/templates/aps_packages_list.htm
index 1042e71..c4a1c34 100644
--- a/interface/web/sites/templates/aps_packages_list.htm
+++ b/interface/web/sites/templates/aps_packages_list.htm
@@ -1,40 +1,39 @@
 <h2>{tmpl_var name="list_head_txt"}</h2>
 
-<div class="panel panel_list_packages">
-    
-    <div class="pnl_listarea">
-        <fieldset><legend>{tmpl_var name="list_head_txt"} ({tmpl_var name='package_count'})</legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_name" scope="col">{tmpl_var name='name_txt'}</th>
-                        <th class="tbl_col_version" scope="col">{tmpl_var name='version_txt'}</th>
-                        <th class="tbl_col_category" scope="col">{tmpl_var name='category_txt'}</th>
+
+        <p class="fieldset-legend">{tmpl_var name="list_head_txt"} ({tmpl_var name='package_count'})</p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th>{tmpl_var name='name_txt'}</th>
+                        <th>{tmpl_var name='version_txt'}</th>
+                        <th>{tmpl_var name='category_txt'}</th>
                             <tmpl_if name='is_admin'>
-                                <th class="tbl_col_package_status" scope="col">{tmpl_var name='status_txt'}</th>
+                                <th>{tmpl_var name='status_txt'}</th>
                             </tmpl_if>
-                        <th class="tbl_col_limit" scope="col">&nbsp;</th>
+                        <th class="small-col text-right">&nbsp;</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
-                        <td class="tbl_col_version"><input type="text" name="search_version" value="{tmpl_var name='search_version'}" /></td>
-                        <td class="tbl_col_customerid"><select name="search_category" onChange="submitForm('pageForm','sites/aps_availablepackages_list.php');">{tmpl_var name='search_category'}</select></td>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td><input class="form-control" type="text" name="search_version" value="{tmpl_var name='search_version'}" /></td>
+                        <td><select class="form-control" name="search_category" onChange="ISPConfig.submitForm('pageForm','sites/aps_availablepackages_list.php');">{tmpl_var name='search_category'}</select></td>
                             <tmpl_if name='is_admin'>
-                                <td class="tbl_col_status"><select name="search_package_status" onChange="submitForm('pageForm','sites/aps_availablepackages_list.php');">{tmpl_var name='search_package_status'}</select></td>
+                                <td><select class="form-control" name="search_package_status" onChange="ISPConfig.submitForm('pageForm','sites/aps_availablepackages_list.php');">{tmpl_var name='search_package_status'}</select></td>
                             </tmpl_if>
-                        <td class="tbl_col_buttons"><button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name='filter_txt'}" onclick="submitForm('pageForm','sites/aps_availablepackages_list.php');"><span>{tmpl_var name='filter_txt'}</span></button></td>
+                        <td class="text-right"><button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name='filter_txt'}" data-submit-form="pageForm" data-form-action="sites/aps_availablepackages_list.php"><span class="icon icon-filter"></span></button></td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name='records'>
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_name"><a href="#" onclick="loadContent('sites/aps_packagedetails_show.php?id={tmpl_var name='id'}');">{tmpl_var name='name'}</a></td>
-                            <td class="tbl_col_version">{tmpl_var name='version'}-{tmpl_var name='release'}</td>
-                            <td class="tbl_col_category">{tmpl_var name='category'}</td>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='id'}">{tmpl_var name='name'}</a></td>
+                            <td>{tmpl_var name='version'}-{tmpl_var name='release'}</td>
+                            <td>{tmpl_var name='category'}</td>
                                 <tmpl_if name='is_admin'>
-                                    <td class="tbl_col_status"><a href="javascript:loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
+                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
                                 </tmpl_if>
-                            <td class="tbl_col_buttons">&nbsp;</td>
+                            <td class="text-right">&nbsp;</td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
@@ -45,11 +44,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5">{tmpl_var name='paging'}</td>
+                        <td colspan="5">{tmpl_var name='paging'}</td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-    
-</div>
\ No newline at end of file
+</div>
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/aps_update_packagelist.htm b/interface/web/sites/templates/aps_update_packagelist.htm
index bd8edfd..a73d8b3 100644
--- a/interface/web/sites/templates/aps_update_packagelist.htm
+++ b/interface/web/sites/templates/aps_update_packagelist.htm
@@ -1,20 +1,12 @@
-<h2><tmpl_var name="head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_language_import">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name="legend_txt"}</legend>
+
+        <legend>{tmpl_var name="legend_txt"}</legend>
             
-            <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="Update Packagelist" onClick="loadContent('sites/aps_cron_apscrawler_if.php')"><span>{tmpl_var name="btn_start_txt"}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('sites/aps_availablepackages_list.php');"><span>{tmpl_var name="btn_cancel_txt"}</span></button>
-        </div>
-        </fieldset>
-
-
-
-        
-    </div>
-  
-</div>
+            <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="Update Packagelist" data-load-content="sites/aps_cron_apscrawler_if.php">{tmpl_var name="btn_start_txt"}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="sites/aps_availablepackages_list.php">{tmpl_var name="btn_cancel_txt"}</button>
+        </div></div>
diff --git a/interface/web/sites/templates/backup_stats_list.htm b/interface/web/sites/templates/backup_stats_list.htm
new file mode 100644
index 0000000..3dd0959
--- /dev/null
+++ b/interface/web/sites/templates/backup_stats_list.htm
@@ -0,0 +1,42 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+					<tr>
+						<th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+						<th data-column="domain"><tmpl_var name="domain_txt"></th>
+						<th data-column="backup_server"><tmpl_var name="backup_server_txt"></th>
+						<th data-column="backup_interval"><tmpl_var name="backup_interval_txt"></th>
+						<th data-column="backup_count"><tmpl_var name="backup_count_txt"></th>
+						<th data-column="backup_size"><tmpl_var name="backup_size_txt"></th>
+					</tr>
+                </thead>
+				<tbody>
+					<tmpl_loop name="records">
+					<tr class="tbl_row_{tmpl_if name='__EVEN__'}even{tmpl_else}uneven{/tmpl_if}">
+						<td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a> </td>
+						<td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a> </td>
+						<td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a> </td>
+						<td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_interval"}</a> /  <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies"}</a> </td>
+						<td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies_exists"}</a> </td>
+						<td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_size"}</a> </td>
+					</tr>
+					</tmpl_loop>
+				</tbody>
+				<tfoot>
+					<tr>
+						<td colspan="5">
+							<tmpl_var name="paging">
+						</td>
+					</tr>
+				</tfoot>
+            </table>
+</div>
+        
+    </div>
diff --git a/interface/web/sites/templates/cron_edit.htm b/interface/web/sites/templates/cron_edit.htm
index 20b1922..1ce22bf 100644
--- a/interface/web/sites/templates/cron_edit.htm
+++ b/interface/web/sites/templates/cron_edit.htm
@@ -1,74 +1,65 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        <legend>Cron Job</legend>
+            <div class="form-group">
                 <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">
+                    <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                    <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled">
                         {tmpl_var name='parent_domain_id'}
-                    </select>
+                    </select></div>
                     <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">
+                        <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                        <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                             {tmpl_var name='parent_domain_id'}
-                        </select>
+                        </select></div>
                 </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 class="form-group">
+                <label for="run_min" class="col-sm-3 control-label">{tmpl_var name='run_min_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="run_min" id="run_min" value="{tmpl_var name='run_min'}" class="form-control" /></div><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 class="form-group">
+                <label for="run_hour" class="col-sm-3 control-label">{tmpl_var name='run_hour_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="run_hour" id="run_hour" value="{tmpl_var name='run_hour'}" class="form-control" /></div><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 class="form-group">
+                <label for="run_mday" class="col-sm-3 control-label">{tmpl_var name='run_mday_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="run_mday" id="run_mday" value="{tmpl_var name='run_mday'}" class="form-control" /></div><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 class="form-group">
+                <label for="run_month" class="col-sm-3 control-label">{tmpl_var name='run_month_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="run_month" id="run_month" value="{tmpl_var name='run_month'}" class="form-control" /></div><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 class="form-group">
+                <label for="run_wday" class="col-sm-3 control-label">{tmpl_var name='run_wday_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="run_wday" id="run_wday" value="{tmpl_var name='run_wday'}" class="form-control" /></div><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">{tmpl_var name='command_hint_txt'}</p>
+            <div class="form-group">
+                <label for="command" class="col-sm-3 control-label">{tmpl_var name='command_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="command" id="command" value="{tmpl_var name='command'}" class="form-control" /></div><p class="formHint">{tmpl_var name='command_hint_txt'}</p>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='log_output_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='log_output_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='log'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/cron_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/cron_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/cron_list.htm b/interface/web/sites/templates/cron_list.htm
index 42d04e3..77c89ee 100644
--- a/interface/web/sites/templates/cron_list.htm
+++ b/interface/web/sites/templates/cron_list.htm
@@ -1,64 +1,62 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_cron">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/cron_edit.php');">
-                    <span>{tmpl_var name="add_new_cron_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/cron_edit.php">{tmpl_var name="add_new_cron_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_run_min" scope="col"><tmpl_var name="run_min_txt"></th>
-                        <th class="tbl_col_run_hour" scope="col"><tmpl_var name="run_hour_txt"></th>
-                        <th class="tbl_col_run_mday" scope="col"><tmpl_var name="run_mday_txt"></th>
-                        <th class="tbl_col_run_month" scope="col"><tmpl_var name="run_month_txt"></th>
-                        <th class="tbl_col_run_wday" scope="col"><tmpl_var name="run_wday_txt"></th>
-                        <th class="tbl_col_command" scope="col"><tmpl_var name="command_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="run_min"><tmpl_var name="run_min_txt"></th>
+                        <th data-column="run_hour"><tmpl_var name="run_hour_txt"></th>
+                        <th data-column="run_mday"><tmpl_var name="run_mday_txt"></th>
+                        <th data-column="run_month"><tmpl_var name="run_month_txt"></th>
+                        <th data-column="run_wday"><tmpl_var name="run_wday_txt"></th>
+                        <th data-column="command"><tmpl_var name="command_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_run_min"><input type="text" name="search_run_min" size="1" value="{tmpl_var name='search_run_min'}" /></td>
-                        <td class="tbl_col_run_hour"><input type="text" name="search_run_hour" size="1" value="{tmpl_var name='search_run_hour'}" /></td>
-                        <td class="tbl_col_run_mday"><input type="text" name="search_run_mday" size="1" value="{tmpl_var name='search_run_mday'}" /></td>
-                        <td class="tbl_col_run_month"><input type="text" name="search_run_month" size="1" value="{tmpl_var name='search_run_month'}" /></td>
-                        <td class="tbl_col_run_wday"><input type="text" name="search_run_wday" size="1" value="{tmpl_var name='search_run_wday'}" /></td>
-                        <td class="tbl_col_command"><input type="text" name="search_command" value="{tmpl_var name='search_command'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/cron_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_run_min" value="{tmpl_var name='search_run_min'}" /></td>
+                        <td><input class="form-control" type="text" name="search_run_hour" value="{tmpl_var name='search_run_hour'}" /></td>
+                        <td><input class="form-control" type="text" name="search_run_mday" value="{tmpl_var name='search_run_mday'}" /></td>
+                        <td><input class="form-control" type="text" name="search_run_month" value="{tmpl_var name='search_run_month'}" /></td>
+                        <td><input class="form-control" type="text" name="search_run_wday" value="{tmpl_var name='search_run_wday'}" /></td>
+                        <td><input class="form-control" type="text" name="search_command" value="{tmpl_var name='search_command'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/cron_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
-                            <td class="tbl_col_run_min"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_min"}</a></td>
-                            <td class="tbl_col_run_hour"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_hour"}</a></td>
-                            <td class="tbl_col_run_mday"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_mday"}</a></td>
-                            <td class="tbl_col_run_month"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_month"}</a></td>
-                            <td class="tbl_col_run_wday"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_wday"}</a></td>
-                            <td class="tbl_col_commnd"><a href="#" onclick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="command"}</a></td>
-                            <td class="tbl_col_buttons">
+                        <tr>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_min"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_hour"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_mday"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_month"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_wday"}</a></td>
+                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="command"}</a></td>
+                            <td class="text-right">
                                 <div class="buttons icons16">    
-                                    <a class="button icons16 icoDelete" href="javascript: del_record('sites/cron_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>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/cron_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </div>
                             </td>
                         </tr>
@@ -71,11 +69,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="10"><tmpl_var name="paging"></td>
+                        <td colspan="10"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/database_admin_list.htm b/interface/web/sites/templates/database_admin_list.htm
index d7fecea..8203fa1 100644
--- a/interface/web/sites/templates/database_admin_list.htm
+++ b/interface/web/sites/templates/database_admin_list.htm
@@ -1,79 +1,76 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_database_admin">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/database_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/database_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_remote_access" scope="col"><tmpl_var name="remote_access_txt"></th>
-                        <th class="tbl_col_type" scope="col"><tmpl_var name="type_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_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_database_user_id" 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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th class="tiny-col" data-column="remote_access"><tmpl_var name="remote_access_txt"></th>
+                        <th data-column="type"><tmpl_var name="type_txt"></th>
+                        <th data-column="sys_groupid"><tmpl_var name="sys_groupid_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+						<th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="database_user"><tmpl_var name="database_user_txt"></th>
+                        <th data-column="database_name"><tmpl_var name="database_name_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_remote_access"><select name="search_remote_access">{tmpl_var name='search_remote_access'}</select></td>
-                        <td class="tbl_col_type"><select name="search_type">{tmpl_var name='search_type'}</select></td>
-                        <td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-						<td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_database_user"><select name="search_database_user_id">{tmpl_var name='search_database_user_id'}</select></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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_remote_access">{tmpl_var name='search_remote_access'}</select></td>
+                        <td><select class="form-control" name="search_type">{tmpl_var name='search_type'}</select></td>
+                        <td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+						<td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><select class="form-control" name="search_database_user_id">{tmpl_var name='search_database_user_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_database_name" value="{tmpl_var name='search_database_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/database_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('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_type"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="type"}</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_parent_domain_id"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_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_id"}</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">
+                        <tr>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="remote_access"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_name"}</a></td>
+                            <td class="text-right">
                                 <tmpl_if name="dblist_phpmyadmin_link">
-                                    <a class="button icons16 icoDbAdmin" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span>{tmpl_var name='admin_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-default formbutton-narrow" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span class="icon icon-dbadmin"></span></a>
                                 </tmpl_if>
-                                <a class="button icons16 icoEdit" href="javascript: loadContent('sites/database_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='edit_txt'}</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                                <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
                         <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td colspan="8">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                            <td colspan="9">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                         </tr>
                     </tmpl_unless>
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
+                        <td colspan="9"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/database_edit.htm b/interface/web/sites/templates/database_edit.htm
index 3e1489c..ff80af5 100644
--- a/interface/web/sites/templates/database_edit.htm
+++ b/interface/web/sites/templates/database_edit.htm
@@ -1,124 +1,118 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_database">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
+                <div class="form-group">
                     <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                     </tmpl_if>
                 </div>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
                 <tmpl_else>
-                    <div class="ctrlHolder">
+                    <div class="form-group">
                         <tmpl_if name="edit_disabled">
-                            <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                            <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                             <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                             <tmpl_else>
-                                <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                                <select name="server_id" id="server_id" class="selectInput">
+                                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                     {tmpl_var name='server_id'}
-                                </select>
+                                </select></div>
                         </tmpl_if>
                     </div>
                 </tmpl_if>
             </tmpl_if>
-            <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">
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                     {tmpl_var name='parent_domain_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="type">{tmpl_var name='type_txt'}</label>
-                <select name="type" id="type" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="type" class="col-sm-3 control-label">{tmpl_var name='type_txt'}</label>
+                <div class="col-sm-9"><select name="type" id="type" class="form-control">
                     {tmpl_var name='type'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="database_name">{tmpl_var name='database_name_txt'}</label>
+            <div class="form-group">
+                <label for="database_name" class="col-sm-3 control-label">{tmpl_var name='database_name_txt'}</label>
                 <p class="prefix">{tmpl_var name='database_name_prefix'}</p>
                 <tmpl_if name="edit_disabled">
-                    <input name="database_name" id="database_name" value="{tmpl_var name='database_name'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" disabled="disabled" />
-                    <input name="database_name" type="hidden" value="{tmpl_var name='database_name'}" />
+                    <div class="col-sm-9"><input type="text" name="database_name" id="database_name" value="{tmpl_var name='database_name'}" class="form-control" disabled="disabled" /></div><input name="database_name" type="hidden" value="{tmpl_var name='database_name'}" />
                     <tmpl_else>
-                        <input name="database_name" id="database_name" value="{tmpl_var name='database_name'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
-                </tmpl_if>
+                        <div class="col-sm-9"><input type="text" name="database_name" id="database_name" value="{tmpl_var name='database_name'}" class="form-control" /></div></tmpl_if>
             </div>
-			<div class="ctrlHolder">
-				<label for="database_quota">{tmpl_var name='limit_database_quota_txt'}</label>
-				<input name="database_quota" id="database_quota" value="{tmpl_var name='limit_database_quota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
-			</div>
-            <div class="ctrlHolder">
-                <label for="database_user_id">{tmpl_var name='database_user_txt'}</label>
-                <select name="database_user_id" id="database_user_id" class="selectInput">
+			<div class="form-group">
+				<label for="database_quota" class="col-sm-3 control-label">{tmpl_var name='limit_database_quota_txt'}</label>
+				<div class="col-sm-6"><input type="text" name="database_quota" id="database_quota" value="{tmpl_var name='limit_database_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+			</div></div>
+            <div class="form-group">
+                <label for="database_user_id" class="col-sm-3 control-label">{tmpl_var name='database_user_txt'}</label>
+                <div class="col-sm-9"><select name="database_user_id" id="database_user_id" class="form-control">
                     {tmpl_var name='database_user_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="database_ro_user_id">{tmpl_var name='database_ro_user_txt'}</label>
-                <select name="database_ro_user_id" id="database_ro_user_id" class="selectInput">
+            <div class="form-group">
+                <label for="database_ro_user_id" class="col-sm-3 control-label">{tmpl_var name='database_ro_user_txt'}</label>
+                <div class="col-sm-9"><select name="database_ro_user_id" id="database_ro_user_id" class="form-control">
                     {tmpl_var name='database_ro_user_id'}
-                </select>&nbsp;{tmpl_var name='optional_txt'}
+                </select></div>&nbsp;{tmpl_var name='optional_txt'}
             </div>
-            <div class="ctrlHolder">
+            <div class="form-group">
                 <tmpl_if name="edit_disabled">
-                    <label for="database_charset_disabled">{tmpl_var name='database_charset_txt'}</label>
-                    <select name="database_charset_disabled" id="database_charset_disabled" class="selectInput formLengthHalf" disabled="disabled">
+                    <label for="database_charset_disabled" class="col-sm-3 control-label">{tmpl_var name='database_charset_txt'}</label>
+                    <div class="col-sm-9"><select name="database_charset_disabled" id="database_charset_disabled" class="form-control" disabled="disabled">
                         {tmpl_var name='database_charset'}
-                    </select>
+                    </select></div>
                     <input type="hidden" name="database_charset" value="{tmpl_var name='database_charset_value'}" />
                     <tmpl_else>
-                        <label for="database_charset">{tmpl_var name='database_charset_txt'}</label>
-                        <select name="database_charset" id="database_charset" class="selectInput formLengthHalf">
+                        <label for="database_charset" class="col-sm-3 control-label">{tmpl_var name='database_charset_txt'}</label>
+                        <div class="col-sm-9"><select name="database_charset" id="database_charset" class="form-control">
                             {tmpl_var name='database_charset'}
-                        </select>
+                        </select></div>
                 </tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='remote_access_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='remote_access_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='remote_access'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="remote_ips">{tmpl_var name='remote_ips_txt'}</label>
-                <input name="remote_ips" id="remote_ips" value="{tmpl_var name='remote_ips'}" size="30" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="remote_ips" class="col-sm-3 control-label">{tmpl_var name='remote_ips_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="remote_ips" id="remote_ips" value="{tmpl_var name='remote_ips'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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/database_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/database_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/database_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/database_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     <tmpl_if name="is_admin">    
     function reloadDatabaseUsers() {
@@ -151,6 +145,6 @@
         fillSearchField: true,
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
-        resultBoxPosition: 'e'
+        resultBoxPosition: ''
     });
 </script>
diff --git a/interface/web/sites/templates/database_list.htm b/interface/web/sites/templates/database_list.htm
index 15a8ae7..6aeb851 100644
--- a/interface/web/sites/templates/database_list.htm
+++ b/interface/web/sites/templates/database_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_database">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,74 +20,71 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/database_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/database_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_remote_access" scope="col"><tmpl_var name="remote_access_txt"></th>
-                        <th class="tbl_col_type" scope="col"><tmpl_var name="type_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-						<th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_database_user_id" 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_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th class="tiny-col" data-column="remote_access"><tmpl_var name="remote_access_txt"></th>
+                        <th data-column="type"><tmpl_var name="type_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+						<th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="database_user"><tmpl_var name="database_user_txt"></th>
+                        <th data-column="database_name"><tmpl_var name="database_name_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_remote_access"><select name="search_remote_access">{tmpl_var name='search_remote_access'}</select></td>
-                        <td class="tbl_col_type"><select name="search_type">{tmpl_var name='search_type'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-						<td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_database_user_id"><select name="search_database_user_id">{tmpl_var name='search_database_user_id'}</select></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">
-                            <button type="button" class="button 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>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_remote_access">{tmpl_var name='search_remote_access'}</select></td>
+                        <td><select class="form-control" name="search_type">{tmpl_var name='search_type'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+						<td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><select class="form-control" name="search_database_user_id">{tmpl_var name='search_database_user_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_database_name" value="{tmpl_var name='search_database_name'}"/></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/database_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('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_type"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="type"}</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_parent_domain_id"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_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_id"}</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">
+                        <tr>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="remote_access"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_name"}</a></td>
+                            <td class="text-right">
                                 <tmpl_if name="dblist_phpmyadmin_link">
-                                    <a class="button icons16 icoDbAdmin" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span>{tmpl_var name='admin_txt'}</span></a>
+                                    <a class="btn btn-default formbutton-default formbutton-narrow" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span class="icon icon-dbadmin"></span></a>
                                 </tmpl_if>
-                                <a class="button icons16 icoEdit" href="javascript: loadContent('sites/database_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='edit_txt'}</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                                <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
                         <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td colspan="7">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                            <td colspan="8">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                         </tr>
                     </tmpl_unless>
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                        <td colspan="8"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/database_quota_stats_list.htm b/interface/web/sites/templates/database_quota_stats_list.htm
index caa20b7..a41a199 100644
--- a/interface/web/sites/templates/database_quota_stats_list.htm
+++ b/interface/web/sites/templates/database_quota_stats_list.htm
@@ -1,39 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_database_quota_stats">
 
-	 <div class="pnl_listarea">
-		 <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-			 <table class="list">
-				<thead>
-				<tr class="caption">
-					<th class="tbl_col_database tbl_col_nosort" scope="col"><tmpl_var name="database_txt"></th>
-					<th class="tbl_col_client tbl_col_nosort" scope="col"><tmpl_var name="client_txt"></th>
-					<th class="tbl_col_used_sort" scope="col"><tmpl_var name="used_txt"></th>
-					<th class="tbl_col_quota tbl_col_nosort" scope="col"><tmpl_var name="quota_txt"></th>
-					<th class="tbl_col_percentage tbl_col_nosort" scope="col"><tmpl_var name="percentage_txt">
-					<th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+		 <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+			 <div class="table-wrapper marginTop15">
+<table class="table">
+				<thead class="dark form-group-sm">
+				<tr>
+					<th data-column="database"><tmpl_var name="database_txt"></th>
+					<th data-column="server_name"><tmpl_var name="server_name_txt"></th>
+					<th data-column="client"><tmpl_var name="client_txt"></th>
+					<th data-column="used"><tmpl_var name="used_txt"></th>
+					<th data-column="quota"><tmpl_var name="quota_txt"></th>
+					<th><tmpl_var name="percentage_txt">
+					<th class="small-col text-right">{tmpl_var name='search_limit'}</th>
 				</tr>
-				<tr class="filter">
-					<td class="tbl_col_database"><input type="text" name="search_database_name" value="{tmpl_var name='search_database_name'}" /></td>
-					<td class="tbl_col_client">&nbsp;</td>
-					<td class="tbl_col_used">&nbsp;</td>
-					<td class="tbl_col_quota">&nbsp;</td>
-					<td class="tbl_col_percentage">&nbsp;</td>
-					<td class="tbl_col_buttons">
-						<button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/database_quota_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+				<tr>
+					<td><input class="form-control" type="text" name="search_database_name" value="{tmpl_var name='search_database_name'}" /></td>
+					<td>&nbsp;</td>
+					<td>&nbsp;</td>
+					<td>&nbsp;</td>
+					<td>&nbsp;</td>
+					<td class="text-right">
+						<button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/database_quota_stats.php"><span class="icon icon-filter"></span></button>
 					</td>
 				</tr>
 				</thead>
 				<tbody>
 					<tmpl_loop name="records">
-						<tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-							<td class="tbl_col_database"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database"}</a></td>
-							<td class="tbl_col_client"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client"}</a></td>
-							<td class="tbl_col_used"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="used"}</a></td>
-							<td class="tbl_col_quota"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="quota"}</a></td>
-							<td class="tbl_col_percentage"><a href="#" onclick="loadContent('sites/database_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="percentage"}</a></td>
-							<td class="tbl_col_buttons"></td>
+						<tr>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="used"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="quota"}</a></td>
+							<td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="percentage"}</a></td>
+							<td class="text-right"></td>
 						</tr>
 					</tmpl_loop>
 					<tmpl_unless name="records">
@@ -44,11 +47,10 @@
 				</tbody>
 				<tfoot>
 					<tr>
-						<td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+						<td colspan="7"><tmpl_var name="paging"></td>
 					</tr>
 				</tfoot>
 			</table>
-		</fieldset>
-	</div>
-
 </div>
+		
+	</div>
diff --git a/interface/web/sites/templates/database_user_admin_list.htm b/interface/web/sites/templates/database_user_admin_list.htm
index d3c3332..f134238 100644
--- a/interface/web/sites/templates/database_user_admin_list.htm
+++ b/interface/web/sites/templates/database_user_admin_list.htm
@@ -1,38 +1,36 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_database_user_admin">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/database_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/database_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_database_user" scope="col"><tmpl_var name="database_user_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="database_user"><tmpl_var name="database_user_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <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_buttons"><button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/database_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></td>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_database_user" value="{tmpl_var name='search_database_user'}"/></td>
+                        <td class="text-right"><button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/database_user_list.php"><span class="icon icon-filter"></span></button></td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_database_user"><a href="#" onclick="loadContent('sites/database_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_user"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoEdit" href="javascript: loadContent('sites/database_user_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='edit_txt'}</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/database_user_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>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -44,11 +42,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="2"><tmpl_var name="paging"></td>
+                        <td colspan="2"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/database_user_edit.htm b/interface/web/sites/templates/database_user_edit.htm
index 9bcf886..a679859 100644
--- a/interface/web/sites/templates/database_user_edit.htm
+++ b/interface/web/sites/templates/database_user_edit.htm
@@ -1,54 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_database_user">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
             <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">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </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">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </div>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="database_user">{tmpl_var name='database_user_txt'}</label>
-                <p class="prefix">{tmpl_var name='database_user_prefix'}</p>
-                <input name="database_user" id="database_user" value="{tmpl_var name='database_user'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            <div class="form-group">
+                <label for="database_user" class="col-sm-3 control-label">{tmpl_var name='database_user_txt'}</label>
+                <div class="col-sm-2">{tmpl_var name='database_user_prefix'}</div>
+                <div class="col-sm-7"><input type="text" name="database_user" id="database_user" value="{tmpl_var name='database_user'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="database_password" class="col-sm-3 control-label">{tmpl_var name='database_password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="database_password" id="database_password" value="{tmpl_var name='database_password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('database_password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('database_password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <label for="database_password">{tmpl_var name='database_password_txt'}</label>
-                <input name="database_password" id="database_password" value="{tmpl_var name='database_password'}" size="30" maxlength="255" type="password" class="textInput formLengthHalf" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('database_password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('database_password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="30" maxlength="100" type="password" class="textInput formLengthHalf" autocomplete="off" onkeyup="checkPassMatch('database_password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('database_password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</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/database_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/database_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/database_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/database_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/database_user_list.htm b/interface/web/sites/templates/database_user_list.htm
index be133f2..b29d5c0 100644
--- a/interface/web/sites/templates/database_user_list.htm
+++ b/interface/web/sites/templates/database_user_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_database">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,35 +20,33 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/database_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/database_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_database_user" scope="col"><tmpl_var name="database_user_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="database_user"><tmpl_var name="database_user_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <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_buttons"><button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/database_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></td>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_database_user" value="{tmpl_var name='search_database_user'}"/></td>
+                        <td class="text-right"><button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/database_user_list.php"><span class="icon icon-filter"></span></button></td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_database_user"><a href="#" onclick="loadContent('sites/database_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="database_user"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoEdit" href="javascript: loadContent('sites/database_user_edit.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='edit_txt'}</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/database_user_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>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -60,11 +58,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="2"><tmpl_var name="paging"></td>
+                        <td colspan="2"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/ftp_user_advanced.htm b/interface/web/sites/templates/ftp_user_advanced.htm
index 2c452d8..11069ae 100644
--- a/interface/web/sites/templates/ftp_user_advanced.htm
+++ b/interface/web/sites/templates/ftp_user_advanced.htm
@@ -1,54 +1,48 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label for="uid" class="col-sm-3 control-label">{tmpl_var name='uid_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="uid" id="uid" value="{tmpl_var name='uid'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="gid" class="col-sm-3 control-label">{tmpl_var name='gid_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="gid" id="gid" value="{tmpl_var name='gid'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dir" class="col-sm-3 control-label">{tmpl_var name='dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dir" id="dir" value="{tmpl_var name='dir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="quota_files" class="col-sm-3 control-label">{tmpl_var name='quota_files_txt'}</label>
+                <div class="col-sm-8"><input type="text" name="quota_files" id="quota_files" value="{tmpl_var name='quota_files'}" class="form-control" /></div><div class="col-sm-1">{tmpl_var name='quota_files_unity_txt'}</div>
             </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 class="form-group">
+                <label for="ul_ratio" class="col-sm-3 control-label">{tmpl_var name='ul_ratio_txt'}</label>
+                <div class="col-sm-8"><input type="text" name="ul_ratio" id="ul_ratio" value="{tmpl_var name='ul_ratio'}" class="form-control" /></div><div class="col-sm-1"></div>
             </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 class="form-group">
+                <label for="dl_ratio" class="col-sm-3 control-label">{tmpl_var name='dl_ratio_txt'}</label>
+                <div class="col-sm-8"><input type="text" name="dl_ratio" id="dl_ratio" value="{tmpl_var name='dl_ratio'}" class="form-control" /></div><div class="col-sm-1"></div>
             </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="label">{tmpl_var name='quota_files_unity_txt'}</p>
+            <div class="form-group">
+                <label for="ul_bandwidth" class="col-sm-3 control-label">{tmpl_var name='ul_bandwidth_txt'}</label>
+                <div class="col-sm-8"><input type="text" name="ul_bandwidth" id="ul_bandwidth" value="{tmpl_var name='ul_bandwidth'}" class="form-control" /></div><div class="col-sm-1">kb/s</div>
             </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="label"></p>
+            <div class="form-group">
+                <label for="dl_bandwidth" class="col-sm-3 control-label">{tmpl_var name='dl_bandwidth_txt'}</label>
+                <div class="col-sm-8"><input type="text" name="dl_bandwidth" id="dl_bandwidth" value="{tmpl_var name='dl_bandwidth'}" class="form-control" /></div><div class="col-sm-1">kb/s</div>
             </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="label"></p>
+            <div class="form-group">
+                <label for="expires" class="col-sm-3 control-label">{tmpl_var name='expires_txt'}</label>
+                <div class="col-sm-9">{tmpl_var name='expires'}</div>
             </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="label">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="label">kb/s</p>
-            </div>
-            <div class="ctrlHolder">
-                <label for="expires">{tmpl_var name='expires_txt'}</label>
-                {tmpl_var name='expires'}
-            </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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/ftp_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/ftp_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </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 dfca480..02479c9 100644
--- a/interface/web/sites/templates/ftp_user_advanced_client.htm
+++ b/interface/web/sites/templates/ftp_user_advanced_client.htm
@@ -1,26 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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 class="form-group">
+                <label for="dir" class="col-sm-3 control-label">{tmpl_var name='dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dir" id="dir" value="{tmpl_var name='dir'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="expires" class="col-sm-3 control-label">{tmpl_var name='expires_txt'}</label>
+                <div class="col-sm-9">{tmpl_var name='expires'}</div>
             </div>
-            <div class="ctrlHolder">
-                <label for="expires">{tmpl_var name='expires_txt'}</label>
-                {tmpl_var name='expires'}
-            </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>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/ftp_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/ftp_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/sites/templates/ftp_user_edit.htm b/interface/web/sites/templates/ftp_user_edit.htm
index 24a0dc3..40f3ff1 100644
--- a/interface/web/sites/templates/ftp_user_edit.htm
+++ b/interface/web/sites/templates/ftp_user_edit.htm
@@ -1,54 +1,49 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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">
+        
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                     {tmpl_var name='parent_domain_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="username">{tmpl_var name='username_txt'}</label>
-                <p class="prefix">{tmpl_var name='username_prefix'}</p>
-                <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput" />
+            <div class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
+                <div class="col-sm-2">{tmpl_var name='username_prefix'}</div>
+                <div class="col-sm-7"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</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="label">MB</p>
+            <div class="form-group">
+                <label for="quota_size" class="col-sm-3 control-label">{tmpl_var name='quota_size_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" class="form-control" /></div><label class="col-sm-3 control-label">MB</label>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/ftp_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/ftp_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/ftp_user_list.htm b/interface/web/sites/templates/ftp_user_list.htm
index 89e81c7..43650da 100644
--- a/interface/web/sites/templates/ftp_user_list.htm
+++ b/interface/web/sites/templates/ftp_user_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_ftp_user">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,48 +20,46 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/ftp_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/ftp_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/ftp_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/ftp_user_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/ftp_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/ftp_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/ftp_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
-                            <td class="tbl_col_username"><a href="#" onclick="loadContent('sites/ftp_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
-                            <td class="tbl_col_buttons">
+                        <tr>
+                            <td><a href="#" data-load-content="sites/ftp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/ftp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/ftp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/ftp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
+                            <td class="text-right">
                             <tmpl_if name="webftp_link">
-                                <a class="button icons16 icoDbAdmin" href="{tmpl_var name='webftp_url'}" target="_blank"><span>{tmpl_var name='admin_txt'}</span></a>
+                                <a class="btn btn-default formbutton-default formbutton-narrow" href="{tmpl_var name='webftp_url'}" target="_blank"><span class="icon icon-dbadmin"></span></button>
                             </tmpl_if>
-                            <a class="button icons16 icoDelete" href="javascript: del_record('sites/ftp_user_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>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/ftp_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -73,11 +71,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/shell_user_advanced.htm b/interface/web/sites/templates/shell_user_advanced.htm
index a16b50c..3e335f9 100644
--- a/interface/web/sites/templates/shell_user_advanced.htm
+++ b/interface/web/sites/templates/shell_user_advanced.htm
@@ -1,34 +1,27 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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>
+        
+            <div class="form-group">
+                <label for="puser" class="col-sm-3 control-label">{tmpl_var name='puser_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="puser" id="puser" value="{tmpl_var name='puser'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="pgroup" class="col-sm-3 control-label">{tmpl_var name='pgroup_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="pgroup" id="pgroup" value="{tmpl_var name='pgroup'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="shell" class="col-sm-3 control-label">{tmpl_var name='shell_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="shell" id="shell" value="{tmpl_var name='shell'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dir" class="col-sm-3 control-label">{tmpl_var name='dir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dir" id="dir" value="{tmpl_var name='dir'}" class="form-control" /></div></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','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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/shell_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/shell_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/shell_user_edit.htm b/interface/web/sites/templates/shell_user_edit.htm
index 364b05e..4c9cceb 100644
--- a/interface/web/sites/templates/shell_user_edit.htm
+++ b/interface/web/sites/templates/shell_user_edit.htm
@@ -1,72 +1,67 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_shell_user">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
+        
+            <div class="form-group">
                 <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">
+                    <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                    <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled">
                         {tmpl_var name='parent_domain_id'}
-                    </select>
+                    </select></div>
                     <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">
+                        <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                        <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                             {tmpl_var name='parent_domain_id'}
-                        </select>
+                        </select></div>
                 </tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <label for="username">{tmpl_var name='username_txt'}</label>
-                <p class="prefix">{tmpl_var name='username_prefix'} </p>
-                <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput formLengthFourth"/>
+            <div class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
+                <div class="col-sm-2">{tmpl_var name='username_prefix'} </div>
+                <div class="col-sm-7"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control"/></div></div>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');"/></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <label for="chroot">{tmpl_var name='chroot_txt'}</label>
-                <select name="chroot" id="chroot" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="chroot" class="col-sm-3 control-label">{tmpl_var name='chroot_txt'}</label>
+                <div class="col-sm-9"><select name="chroot" id="chroot" class="form-control">
                     {tmpl_var name='chroot'}
-                </select>
+                </select></div>
             </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="label">MB</p>
+            <div class="form-group">
+                <label for="quota_size" class="col-sm-3 control-label">{tmpl_var name='quota_size_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" class="form-control" /></div><label class="col-sm-3 control-label">MB</label>
             </div>
-            <div class="ctrlHolder">
-                <label for="ssh_rsa">{tmpl_var name='ssh_rsa_txt'}</label>
-                <textarea name="ssh_rsa" id="ssh_rsa" rows="10" cols="30">{tmpl_var name='ssh_rsa'}</textarea>
+            <div class="form-group">
+                <label for="ssh_rsa" class="col-sm-3 control-label">{tmpl_var name='ssh_rsa_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssh_rsa" id="ssh_rsa" rows="10" cols="30">{tmpl_var name='ssh_rsa'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/shell_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/shell_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/shell_user_list.htm b/interface/web/sites/templates/shell_user_list.htm
index 65509cf..9be1d84 100644
--- a/interface/web/sites/templates/shell_user_list.htm
+++ b/interface/web/sites/templates/shell_user_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_shell_user">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,45 +20,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/shell_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/shell_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/shell_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/shell_user_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/shell_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/shell_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/shell_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
-                            <td class="tbl_col_username"><a href="#" onclick="loadContent('sites/shell_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/shell_user_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>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/shell_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -70,11 +68,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/user_quota_stats_list.htm b/interface/web/sites/templates/user_quota_stats_list.htm
index 1403a01..ee0fb61 100644
--- a/interface/web/sites/templates/user_quota_stats_list.htm
+++ b/interface/web/sites/templates/user_quota_stats_list.htm
@@ -1,42 +1,43 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_user_quota_stats">
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                    <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_used_sort" scope="col"><tmpl_var name="used_txt"></th>
-                    <th class="tbl_col_soft tbl_col_nosort" scope="col"><tmpl_var name="soft_txt"></th>
-                    <th class="tbl_col_hard tbl_col_nosort" scope="col"><tmpl_var name="hard_txt"></th>
-                    <th class="tbl_col_files" scope="col"><tmpl_var name="files_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                    <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                    <th data-column="system_user"><tmpl_var name="system_user_txt"></th>
+                    <th data-column="used"><tmpl_var name="used_txt"></th>
+                    <th data-column="soft"><tmpl_var name="soft_txt"></th>
+                    <th data-column="hard"><tmpl_var name="hard_txt"></th>
+                    <th data-column="files"><tmpl_var name="files_txt"></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <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_used">&nbsp;</td>
-                    <td class="tbl_col_soft">&nbsp;</td>
-                    <td class="tbl_col_hard">&nbsp;</td>
-                    <td class="tbl_col_files">&nbsp;</td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/user_quota_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                    <td><input class="form-control" type="text" name="search_system_user" value="{tmpl_var name='search_system_user'}" /></td>
+                    <td>&nbsp;</td>
+                    <td>&nbsp;</td>
+                    <td>&nbsp;</td>
+                    <td>&nbsp;</td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/user_quota_stats.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_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"><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"><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"><a href="#" onclick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="hard"}</a></td>
-                            <td class="tbl_col_files"><a href="#" onclick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="files"}</a></td>
-                            <td class="tbl_col_buttons"></td>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/web_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="system_user"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="used"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="soft"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="hard"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="files"}</a></td>
+                            <td class="text-right"></td>
                         </tr>
                     </tmpl_loop>
                     <tmpl_unless name="records">
@@ -47,11 +48,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                        <td colspan="7"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    </div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_backup_list.htm b/interface/web/sites/templates/web_backup_list.htm
index 780897d..d933d64 100644
--- a/interface/web/sites/templates/web_backup_list.htm
+++ b/interface/web/sites/templates/web_backup_list.htm
@@ -2,35 +2,36 @@
     <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>
+    <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
 </tmpl_if>
 <h3><tmpl_var name="list_head_txt"></h3>
 
-<div class="panel panel_list_web_backup">
-    
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_date" scope="col"><tmpl_var name="date_txt"></th>
-                        <th class="tbl_col_date" scope="col"><tmpl_var name="backup_type_txt"></th>
-                        <th class="tbl_col_filename" scope="col"><tmpl_var name="filename_txt"></th>
-                        <th class="tbl_col_filename" scope="col"><tmpl_var name="filesize_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="date"><tmpl_var name="date_txt"></th>
+                        <th data-column="backup_type"><tmpl_var name="backup_type_txt"></th>
+                        <th data-column="filename"><tmpl_var name="filename_txt"></th>
+                        <th data-column="filesize"><tmpl_var name="filesize_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</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_date">{tmpl_var name="date"}</td>
-                            <td class="tbl_col_date">{tmpl_var name="backup_type"}</td>
-                            <td class="tbl_col_filename">{tmpl_var name="filename"}</td>
-                            <td class="tbl_col_filesize">{tmpl_var name="filesize"}</td>
-                            <td class="tbl_col_buttons">
+                        <tr>
+                            <td>{tmpl_var name="date"}</td>
+                            <td>{tmpl_var name="backup_type"}</td>
+                            <td>{tmpl_var name="filename"}</td>
+                            <td>{tmpl_var name="filesize"}</td>
+                            <td class="text-right">
                                 <div class="buttons">
-                                    <button class="button iconstxt icoRestore" type="button" onclick="confirm_action('sites/web_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=restore&backup_id={tmpl_var name='backup_id'}','{tmpl_var name='restore_confirm_txt'}');"><span>{tmpl_var name="restore_backup_txt"}</span></button>
-                                    <button class="button iconstxt icoDownload" type="button" onclick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=download&backup_id={tmpl_var name='backup_id'}');"><span>{tmpl_var name="download_backup_txt"}</span></button>
+                                    <button class="btn btn-default formbutton-default" type="button" onclick="ISPConfig.confirm_action('sites/web_vhost_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=restore&backup_id={tmpl_var name='backup_id'}','{tmpl_var name='restore_confirm_txt'}');">{tmpl_var name="restore_backup_txt"}</button>
+                                    <tmpl_if name="download_available">
+										<button class="btn btn-default formbutton-default" type="button" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&backup_action=download&backup_id={tmpl_var name='backup_id'}">{tmpl_var name="download_backup_txt"}</button>
+									</tmpl_if>
                                 </div>
                             </td>
                         </tr>
@@ -42,7 +43,6 @@
                     </tmpl_unless>
                 </tbody>
             </table>
-        </fieldset>
-    </div>
-    
 </div>
+        
+    </div>
diff --git a/interface/web/sites/templates/web_childdomain_advanced.htm b/interface/web/sites/templates/web_childdomain_advanced.htm
index d2704ed..0d83fb2 100644
--- a/interface/web/sites/templates/web_childdomain_advanced.htm
+++ b/interface/web/sites/templates/web_childdomain_advanced.htm
@@ -1,25 +1,22 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_web_childdomain">
 
-  <div class="pnl_formsarea">
-    <fieldset class="inlineLabels"><legend>Options</legend>
-      <div class="ctrlHolder proxy">
-                <label for="proxy_directives">{tmpl_var name='proxy_directives_txt'}</label>
-                <textarea name="proxy_directives" id="proxy_directives" rows='10' cols='50' style="width:400px;">{tmpl_var name='proxy_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_proxy_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="proxy_directive_snippets_txt"}
+    <legend>Options</legend>
+      <div class="form-group proxy">
+                <label for="proxy_directives" class="col-sm-3 control-label">{tmpl_var name='proxy_directives_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="proxy_directives" id="proxy_directives" rows='10' cols='50'>{tmpl_var name='proxy_directives'}</textarea></div>&nbsp;<b>{tmpl_var name="available_proxy_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="proxy_directive_snippets_txt"}
             </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_childdomain_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_childdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-    </div>
-  </div>
-  
-</div>
+    <div class="clear"><div class="right">
+      <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_childdomain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+      <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_childdomain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+    </div></div>
 <script language="JavaScript" type="text/javascript">
     var webId = jQuery('input[name="id"]').val();
     adjustForm();
diff --git a/interface/web/sites/templates/web_childdomain_edit.htm b/interface/web/sites/templates/web_childdomain_edit.htm
index b0e0ebd..5165c32 100644
--- a/interface/web/sites/templates/web_childdomain_edit.htm
+++ b/interface/web/sites/templates/web_childdomain_edit.htm
@@ -1,94 +1,88 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_web_childdomain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
 			<tmpl_if name="childdomain_type" value="subdomain">
             <tmpl_if name="domain_option">
-            <div class="ctrlHolder">
-                <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-                <select id="parent_domain_id" name="parent_domain_id" class="selectInput formLengthHalf">{tmpl_var name='parent_domain_id'}</select>
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select id="parent_domain_id" name="parent_domain_id" class="form-control">{tmpl_var name='parent_domain_id'}</select></div>
             </div>
             </tmpl_if>
-            <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="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='host_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></div>
             <tmpl_if name="domain_option">
-            <div class="ctrlHolder">
-                <label for="sel_domain">{tmpl_var name='domain_txt'}</label>
-                    <select name="sel_domain" id="sel_domain" class="selectInput">
+            <div class="form-group">
+                <label for="sel_domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                    <div class="col-sm-9"><select name="sel_domain" id="sel_domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
             </div>
             <tmpl_else>
-            <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 class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                <div class="col-sm-9"><select id="parent_domain_id" name="parent_domain_id" class="form-control">{tmpl_var name='parent_domain_id'}</select></div>
             </div>
             </tmpl_if>
 			<tmpl_else>
-            <div class="ctrlHolder">
+            <div class="form-group">
                 <tmpl_if name="domain_option">
-                    <label for="domain">{tmpl_var name='domain_txt'}</label>
-                    <select name="domain" id="domain" class="selectInput">
+                    <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                    <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                 <tmpl_else>
-                    <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" />
-                </tmpl_if>
+                    <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-                <select id="parent_domain_id" name="parent_domain_id" class="selectInput">
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select id="parent_domain_id" name="parent_domain_id" class="form-control">
                     {tmpl_var name='parent_domain_id'}
-                </select>
+                </select></div>
             </div>
 			</tmpl_if>
-            <div class="ctrlHolder">
-                <label for="redirect_type">{tmpl_var name='redirect_type_txt'}</label>
-                <select name="redirect_type" id="redirect_type" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="redirect_type" class="col-sm-3 control-label">{tmpl_var name='redirect_type_txt'}</label>
+                <div class="col-sm-9"><select name="redirect_type" id="redirect_type" class="form-control">
                     {tmpl_var name='redirect_type'}
-                </select>
+                </select></div>
             </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="form-group">
+                <label for="redirect_path" class="col-sm-3 control-label">{tmpl_var name='redirect_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" class="form-control" /></div></div>
 			<tmpl_if name="childdomain_type" value="aliasdomain">
-            <div class="ctrlHolder">
-                <label for="subdomain">{tmpl_var name='subdomain_txt'}</label>
-                <select name="subdomain" id="subdomain" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="subdomain" class="col-sm-3 control-label">{tmpl_var name='subdomain_txt'}</label>
+                <div class="col-sm-9"><select name="subdomain" id="subdomain" class="form-control">
                     {tmpl_var name='subdomain'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="seo_redirect">{tmpl_var name='seo_redirect_txt'}</label>
-                <select name="seo_redirect" id="seo_redirect" class="selectInput">
+			<div class="form-group">
+                <label for="seo_redirect" class="col-sm-3 control-label">{tmpl_var name='seo_redirect_txt'}</label>
+                <div class="col-sm-9"><select name="seo_redirect" id="seo_redirect" class="form-control">
                     {tmpl_var name='seo_redirect'}
-                </select>
+                </select></div>
             </div>
 			</tmpl_if>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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_childdomain_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_childdomain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_childdomain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_childdomain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     var webId = jQuery('#parent_domain_id').val();
     var serverId;
diff --git a/interface/web/sites/templates/web_childdomain_list.htm b/interface/web/sites/templates/web_childdomain_list.htm
index 0895769..51aadc1 100644
--- a/interface/web/sites/templates/web_childdomain_list.htm
+++ b/interface/web/sites/templates/web_childdomain_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_if name='childdomain_type' op='==' value='aliasdomain'><tmpl_var name="aliasdomain_list_head_txt"></tmpl_else><tmpl_var name="subdomain_list_head_txt"></tmpl_if></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_web_childdomain">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,45 +20,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/web_childdomain_edit.php?type={tmpl_var name='childdomain_type'}');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_childdomain_edit.php?type={tmpl_var name='childdomain_type'}"><tmpl_if name='childdomain_type' op='==' value='aliasdomain'>{tmpl_var name="add_new_aliasdomain_txt"}</tmpl_else>{tmpl_var name="add_new_subdomain_txt"}</tmpl_if></button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="domain"><tmpl_if name='childdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_txt"}</tmpl_else>{tmpl_var name="subdomain_txt"}</tmpl_if></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_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">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_childdomain_list.php?type={tmpl_var name="childdomain_type"}');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/web_childdomain_list.php?type={tmpl_var name="childdomain_type"}"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/web_childdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/web_childdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/web_childdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
-                            <td class="tbl_col_domain"><a href="#" onclick="loadContent('sites/web_childdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/web_childdomain_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>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_childdomain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -70,11 +68,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                    <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                    <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_directive_snippets.htm b/interface/web/sites/templates/web_directive_snippets.htm
new file mode 100644
index 0000000..93e8b94
--- /dev/null
+++ b/interface/web/sites/templates/web_directive_snippets.htm
@@ -0,0 +1,14 @@
+<div class="form-group">
+	<label for="directive_snippets_id" class="col-sm-3 control-label">
+		{tmpl_var name='directive_snippets_id_txt'}
+	</label>
+
+	<div class="col-sm-9"><select name="directive_snippets_id" id="directive_snippets_id" class="form-control">
+		<option value="0"></option>
+		<tmpl_loop name="records">
+		<option {tmpl_if name='is_selected' op='==' value='true'}selected="selected" {/tmpl_if}value="{tmpl_var name='directive_snippets_id'}">
+			{tmpl_var name='name'}
+		</option>
+		</tmpl_loop>
+	</select></div>
+</div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_folder_edit.htm b/interface/web/sites/templates/web_folder_edit.htm
index a5dc3b9..dd24094 100644
--- a/interface/web/sites/templates/web_folder_edit.htm
+++ b/interface/web/sites/templates/web_folder_edit.htm
@@ -1,34 +1,30 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_web_folder">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Folder</legend>
-            <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">
+        <legend>Folder</legend>
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                     {tmpl_var name='parent_domain_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="path">{tmpl_var name='path_txt'}</label>
-                <input name="path" id="path" value="{tmpl_var name='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">
+            <div class="form-group">
+                <label for="path" class="col-sm-3 control-label">{tmpl_var name='path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="path" id="path" value="{tmpl_var name='path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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_folder_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_folder_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_folder_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_folder_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/sites/templates/web_folder_list.htm b/interface/web/sites/templates/web_folder_list.htm
index 9a274b5..aaccb48 100644
--- a/interface/web/sites/templates/web_folder_list.htm
+++ b/interface/web/sites/templates/web_folder_list.htm
@@ -1,8 +1,8 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_web_folder">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -19,45 +19,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/web_folder_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_folder_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_path" scope="col"><tmpl_var name="path_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="path"><tmpl_var name="path_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/web_folder_list.php');">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/web_folder_list.php');">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id" onChange="submitForm('pageForm','sites/web_folder_list.php');">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_path"><input type="text" name="search_path" value="{tmpl_var name='search_path'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_folder_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active" onChange="ISPConfig.submitForm('pageForm','sites/web_folder_list.php');">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id" onChange="ISPConfig.submitForm('pageForm','sites/web_folder_list.php');">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_parent_domain_id" onChange="ISPConfig.submitForm('pageForm','sites/web_folder_list.php');">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_path" value="{tmpl_var name='search_path'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/web_folder_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/web_folder_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/web_folder_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                        <td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/web_folder_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
-                        <td class="tbl_col_path"><a href="#" onclick="loadContent('sites/web_folder_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="path"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('sites/web_folder_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>
+                    <tr>
+                        <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="path"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -69,11 +67,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_folder_user_edit.htm b/interface/web/sites/templates/web_folder_user_edit.htm
index 7defdde..e589463 100644
--- a/interface/web/sites/templates/web_folder_user_edit.htm
+++ b/interface/web/sites/templates/web_folder_user_edit.htm
@@ -1,49 +1,44 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_web_folder_user">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Folder</legend>
-            <div class="ctrlHolder">
-                <label for="web_folder_id">{tmpl_var name='web_folder_id_txt'}</label>
-                <select name="web_folder_id" id="web_folder_id" class="selectInput">
+        <legend>Folder</legend>
+            <div class="form-group">
+                <label for="web_folder_id" class="col-sm-3 control-label">{tmpl_var name='web_folder_id_txt'}</label>
+                <div class="col-sm-9"><select name="web_folder_id" id="web_folder_id" class="form-control">
                     {tmpl_var name='web_folder_id'}
-                </select>
+                </select></div>
             </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 class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {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_folder_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/web_folder_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_folder_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_folder_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/sites/templates/web_folder_user_list.htm b/interface/web/sites/templates/web_folder_user_list.htm
index 500c647..6b67e05 100644
--- a/interface/web/sites/templates/web_folder_user_list.htm
+++ b/interface/web/sites/templates/web_folder_user_list.htm
@@ -1,8 +1,8 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_web_folder_user">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -19,42 +19,40 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/web_folder_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_folder_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_web_folder_id" scope="col"><tmpl_var name="web_folder_id_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="web_folder_id"><tmpl_var name="web_folder_id_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/web_folder_user_list.php');">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_web_folder_id"><select name="search_web_folder_id" onChange="submitForm('pageForm','sites/web_folder_user_list.php');">{tmpl_var name='search_web_folder_id'}</select></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_folder_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active" onChange="ISPConfig.submitForm('pageForm','sites/web_folder_user_list.php');">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_web_folder_id" onChange="ISPConfig.submitForm('pageForm','sites/web_folder_user_list.php');">{tmpl_var name='search_web_folder_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/web_folder_user_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/web_folder_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                        <td class="tbl_col_web_folder_id"><a href="#" onclick="loadContent('sites/web_folder_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="web_folder_id"}</a></td>
-                        <td class="tbl_col_username"><a href="#" onclick="loadContent('sites/web_folder_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('sites/web_folder_user_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>
+                    <tr>
+                        <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="web_folder_id"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
+                        <td class="text-right">
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -66,11 +64,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="4"><tmpl_var name="paging"></td>
+                        <td colspan="4"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_sites_stats_list.htm b/interface/web/sites/templates/web_sites_stats_list.htm
index 8a1241a..7736ac3 100644
--- a/interface/web/sites/templates/web_sites_stats_list.htm
+++ b/interface/web/sites/templates/web_sites_stats_list.htm
@@ -1,40 +1,41 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_web_sites_stats">
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                        <th class="tbl_col_web_traffic_this_month" scope="col"><tmpl_var name="this_month_txt"></th>
-                        <th class="tbl_col_web_traffic_last_month" scope="col"><tmpl_var name="last_month_txt"></th>
-                        <th class="tbl_col_web_traffic_this_year" scope="col"><tmpl_var name="this_year_txt"></th>
-                        <th class="tbl_col_web_traffic_last_year" scope="col"><tmpl_var name="last_year_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th data-column="this_month"><tmpl_var name="this_month_txt"></th>
+                        <th data-column="last_month"><tmpl_var name="last_month_txt"></th>
+                        <th data-column="this_year"><tmpl_var name="this_year_txt"></th>
+                        <th data-column="last_year"><tmpl_var name="last_year_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></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">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_sites_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/web_sites_stats.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_domain"><a target="_blank" href="http://{tmpl_var name="domain"}/stats">{tmpl_var name="domain"}</a></td>
-                        <td class="tbl_col_this_month"><a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_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('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_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('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_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('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_year"} MB</a></td>
-                        <td class="tbl_col_buttons"></td>
+                    <tr>
+                        <td><a target="_blank" href="http://{tmpl_var name="domain"}/stats">{tmpl_var name="domain"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_month"} MB</a></td>
+                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_month"} MB</a></td>
+                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_year"} MB</a></td>
+                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_year"} MB</a></td>
+                        <td class="text-right"></td>
                     </tr>
                 </tmpl_loop>
                 <tmpl_unless name="records">
@@ -42,22 +43,21 @@
                         <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                     </tr>
                 </tmpl_unless>
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td class="tbl_col_domain"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_txt"}</a></td>
-                        <td class="tbl_col_this_month"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_month"} MB</a></td>
-                        <td class="tbl_col_last_month"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_month"} MB</a></td>
-                        <td class="tbl_col_this_year"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_year"} MB</a></td>
-                        <td class="tbl_col_last_year"><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_year"} MB</a></td>
-                        <td class="tbl_col_buttons"></td>
+                    <tr>
+                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_txt"}</a></td>
+                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_month"} MB</a></td>
+                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_month"} MB</a></td>
+                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_year"} MB</a></td>
+                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_year"} MB</a></td>
+                        <td class="text-right"></td>
                     </tr>
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
 </div>
+        
+    </div>
diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
index 1ec96a6..ccd16e2 100644
--- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -1,53 +1,52 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="domain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="subdomain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_list_head_txt"}</tmpl_if></h1>
+</div>
 
-<div class="panel panel_list_web_vhost_domain_admin">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/web_vhost_domain_edit.php?type={tmpl_var name='vhostdomain_type'}');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_vhost_domain_edit.php?type={tmpl_var name='vhostdomain_type'}"><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="add_new_record_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="add_new_subdomain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="add_new_aliasdomain_txt"}</tmpl_if></button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                    <tmpl_if name="vhostdomain_type" value="domain"><th class="tbl_col_domain_id" scope="col"><tmpl_var name="domain_id_txt"></th></tmpl_if>
-                    <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>
-					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th></tmpl_if>
-                    <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                    <tmpl_if name="vhostdomain_type" value="domain"><th class="small-col" data-column="domain_id"><tmpl_var name="domain_id_txt"></th></tmpl_if>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                    <th data-column="sys_groupid"><tmpl_var name="sys_groupid_txt"></th>
+                    <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th></tmpl_if>
+                    <th data-column="domain"><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="domain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="subdomain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_txt"}</tmpl_if></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <tmpl_if name="vhostdomain_type" value="domain"><td class="tbl_col_domain_id"><input type="text" size="5" name="search_domain_id" value="{tmpl_var name='search_domain_id'}" /></td></tmpl_if>
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                    <td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
-                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td></tmpl_if>
-                    <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_vhost_domain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <tmpl_if name="vhostdomain_type" value="domain"><td><input class="form-control" type="text" name="search_domain_id" value="{tmpl_var name='search_domain_id'}" /></td></tmpl_if>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                    <td><select class="form-control" name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                    <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td></tmpl_if>
+                    <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_list.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                    	<tmpl_if name="vhostdomain_type" value="domain"><td class="tbl_col_domain_id"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="domain_id"}</a></td></tmpl_if>
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="active"}</a></td>
-                        <td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="sys_groupid"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="server_id"}</a></td>
-						<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
-                        <td class="tbl_col_domain"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="domain"}</a><a href="http://{tmpl_var name="domain"}" target="_blank" class="button icons16 icoLink"><span>Link</span></a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('sites/web_vhost_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>
+                    <tr>
+                    	<tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="sys_groupid"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="server_id"}</a></td>
+						<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain"}</a></td>
+                        <td class="text-right">
+							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -59,11 +58,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_vhost_domain_advanced.htm b/interface/web/sites/templates/web_vhost_domain_advanced.htm
index d2c3bb8..24d64fa 100644
--- a/interface/web/sites/templates/web_vhost_domain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_domain_advanced.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,105 +12,91 @@
 </div>
 </tmpl_if>
 
-<div class="panel panel_web_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
             <input name="document_root" id="document_root" value="{tmpl_var name='document_root'}" size="30" maxlength="255" type="hidden" class="textInput" />
-            <div class="ctrlHolder">
-                <label for="added_date">{tmpl_var name='added_date_txt'}</label>
-                <input name="added_date" id="added_date" value="{tmpl_var name='added_date'}" size="10" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="added_by">{tmpl_var name='added_by_txt'}</label>
-                <input name="added_by" id="added_by" value="{tmpl_var name='added_by'}" size="10" maxlength="255" type="text" class="textInput" />
-            </div>
-			<div class="ctrlHolder">
-                <label for="system_user">{tmpl_var name='system_user_txt'}</label>
-                <label for="system_user">{tmpl_var name='system_user'}</label>
+            <div class="form-group">
+                <label for="added_date" class="col-sm-3 control-label">{tmpl_var name='added_date_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="added_date" id="added_date" value="{tmpl_var name='added_date'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="added_by" class="col-sm-3 control-label">{tmpl_var name='added_by_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="added_by" id="added_by" value="{tmpl_var name='added_by'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="system_user" class="col-sm-3 control-label">{tmpl_var name='system_user_txt'}</label>
+                <label for="system_user" class="col-sm-3 control-label">{tmpl_var name='system_user'}</label>
                 <input name="system_user" id="system_user" value="{tmpl_var name='system_user'}" type="hidden" />
             </div>
-            <div class="ctrlHolder">
-                <label for="system_group">{tmpl_var name='system_group_txt'}</label>
-                <label for="system_group">{tmpl_var name='system_group'}</label>
+            <div class="form-group">
+                <label for="system_group" class="col-sm-3 control-label">{tmpl_var name='system_group_txt'}</label>
+                <label for="system_group" class="col-sm-3 control-label">{tmpl_var name='system_group'}</label>
                 <input name="system_group" id="system_group" value="{tmpl_var name='system_group'}" type="hidden" />
             </div>
-            <div class="ctrlHolder apache">
-                <label for="allow_override">{tmpl_var name='allow_override_txt'}</label>
-                <input name="allow_override" id="allow_override" value="{tmpl_var name='allow_override'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
+            <div class="form-group apache">
+                <label for="allow_override" class="col-sm-3 control-label">{tmpl_var name='allow_override_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="allow_override" id="allow_override" value="{tmpl_var name='allow_override'}" class="form-control" /></div></div>
             <div class="phpfpm">
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name='php_fpm_use_socket_txt'}</p>
-                    <div class="multiField">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_use_socket_txt'}</label>
+                    <div class="col-sm-9">
                         {tmpl_var name='php_fpm_use_socket'}
                     </div>
                 </div>
-                <div class="ctrlHolder">
-                    <label for="pm">{tmpl_var name='pm_txt'}</label>
-                    <select name="pm" id="pm" class="selectInput">
+                <div class="form-group">
+                    <label for="pm" class="col-sm-3 control-label">{tmpl_var name='pm_txt'}</label>
+                    <div class="col-sm-9"><select name="pm" id="pm" class="form-control">
                         {tmpl_var name='pm'}
-                    </select>
+                    </select></div>
                 </div>
                 <div class="ctrlHolder pm_ondemand" style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
                     {tmpl_var name='pm_ondemand_hint_txt'}
                 </div>
-                <div class="ctrlHolder">
-                    <label for="pm_max_children">{tmpl_var name='pm_max_children_txt'}</label>
-                    <input name="pm_max_children" id="pm_max_children" value="{tmpl_var name='pm_max_children'}" size="6" maxlength="6" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder pm_dynamic">
-                    <label for="pm_start_servers">{tmpl_var name='pm_start_servers_txt'}</label>
-                    <input name="pm_start_servers" id="pm_start_servers" value="{tmpl_var name='pm_start_servers'}" size="6" maxlength="6" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder pm_dynamic">
-                    <label for="pm_min_spare_servers">{tmpl_var name='pm_min_spare_servers_txt'}</label>
-                    <input name="pm_min_spare_servers" id="pm_min_spare_servers" value="{tmpl_var name='pm_min_spare_servers'}" size="6" maxlength="6" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder pm_dynamic">
-                    <label for="pm_max_spare_servers">{tmpl_var name='pm_max_spare_servers_txt'}</label>
-                    <input name="pm_max_spare_servers" id="pm_max_spare_servers" value="{tmpl_var name='pm_max_spare_servers'}" size="6" maxlength="6" type="text" class="textInput formLengthLimit" />
-                </div>
-                <div class="ctrlHolder pm_ondemand">
-                    <label for="pm_process_idle_timeout">{tmpl_var name='pm_process_idle_timeout_txt'}</label>
-                    <input name="pm_process_idle_timeout" id="pm_process_idle_timeout" value="{tmpl_var name='pm_process_idle_timeout'}" size="6" maxlength="6" type="text" class="textInput formLengthLimit" />&nbsp;s
-                </div>
-                <div class="ctrlHolder">
-                    <label for="pm_max_requests">{tmpl_var name='pm_max_requests_txt'}</label>
-                    <input name="pm_max_requests" id="pm_max_requests" value="{tmpl_var name='pm_max_requests'}" size="6" maxlength="6" type="text" class="textInput formLengthLimit" />
-                </div>
+                <div class="form-group">
+                    <label for="pm_max_children" class="col-sm-3 control-label">{tmpl_var name='pm_max_children_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="pm_max_children" id="pm_max_children" value="{tmpl_var name='pm_max_children'}" class="form-control" /></div></div>
+                <div class="form-group pm_dynamic">
+                    <label for="pm_start_servers" class="col-sm-3 control-label">{tmpl_var name='pm_start_servers_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="pm_start_servers" id="pm_start_servers" value="{tmpl_var name='pm_start_servers'}" class="form-control" /></div></div>
+                <div class="form-group pm_dynamic">
+                    <label for="pm_min_spare_servers" class="col-sm-3 control-label">{tmpl_var name='pm_min_spare_servers_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="pm_min_spare_servers" id="pm_min_spare_servers" value="{tmpl_var name='pm_min_spare_servers'}" class="form-control" /></div></div>
+                <div class="form-group pm_dynamic">
+                    <label for="pm_max_spare_servers" class="col-sm-3 control-label">{tmpl_var name='pm_max_spare_servers_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="pm_max_spare_servers" id="pm_max_spare_servers" value="{tmpl_var name='pm_max_spare_servers'}" class="form-control" /></div></div>
+                <div class="form-group pm_ondemand">
+                    <label for="pm_process_idle_timeout" class="col-sm-3 control-label">{tmpl_var name='pm_process_idle_timeout_txt'}</label>
+                    <div class="col-sm-6"><input type="text" name="pm_process_idle_timeout" id="pm_process_idle_timeout" value="{tmpl_var name='pm_process_idle_timeout'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;s
+                </div></div>
+                <div class="form-group">
+                    <label for="pm_max_requests" class="col-sm-3 control-label">{tmpl_var name='pm_max_requests_txt'}</label>
+                    <div class="col-sm-9"><input type="text" name="pm_max_requests" id="pm_max_requests" value="{tmpl_var name='pm_max_requests'}" class="form-control" /></div></div>
             </div>
-            <div class="ctrlHolder php">
-                <label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
-                <input name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" size="30" type="text" class="textInput"  style="width:400px;" />
+            <div class="form-group php">
+                <label for="php_open_basedir" class="col-sm-3 control-label">{tmpl_var name='php_open_basedir_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" class="form-control" /></div></div>
+            <div class="form-group php">
+                <label for="custom_php_ini" class="col-sm-3 control-label">{tmpl_var name='custom_php_ini_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="custom_php_ini" id="custom_php_ini" rows='10' cols='50'>{tmpl_var name='custom_php_ini'}</textarea></div>&nbsp;<b>{tmpl_var name="available_php_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="php_directive_snippets_txt"}
             </div>
-            <div class="ctrlHolder php">
-                <label for="custom_php_ini">{tmpl_var name='custom_php_ini_txt'}</label>
-                <textarea name="custom_php_ini" id="custom_php_ini" rows='10' cols='50' style="width:400px;">{tmpl_var name='custom_php_ini'}</textarea>&nbsp;<b>{tmpl_var name="available_php_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="php_directive_snippets_txt"}
+            <div class="form-group apache">
+                <label for="apache_directives" class="col-sm-3 control-label">{tmpl_var name='apache_directives_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="apache_directives" id="apache_directives" rows='10' cols='50'>{tmpl_var name='apache_directives'}</textarea></div>&nbsp;<b>{tmpl_var name="available_apache_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="apache_directive_snippets_txt"}<br>----<br><b>&nbsp;{tmpl_var name='variables_txt'}:</b> <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>
             </div>
-            <div class="ctrlHolder apache">
-                <label for="apache_directives">{tmpl_var name='apache_directives_txt'}</label>
-                <textarea name="apache_directives" id="apache_directives" rows='10' cols='50' style="width:400px;">{tmpl_var name='apache_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_apache_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="apache_directive_snippets_txt"}<br>----<br><b>&nbsp;{tmpl_var name='variables_txt'}:</b> <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>
+            <div class="form-group nginx">
+                <label for="nginx_directives" class="col-sm-3 control-label">{tmpl_var name='nginx_directives_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="nginx_directives" id="nginx_directives" rows='10' cols='50'>{tmpl_var name='nginx_directives'}</textarea></div>&nbsp;<b>{tmpl_var name="available_nginx_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="nginx_directive_snippets_txt"}<br>----<br><b>&nbsp;{tmpl_var name='variables_txt'}:</b> <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>
             </div>
-            <div class="ctrlHolder nginx">
-                <label for="nginx_directives">{tmpl_var name='nginx_directives_txt'}</label>
-                <textarea name="nginx_directives" id="nginx_directives" rows='10' cols='50' style="width:400px;">{tmpl_var name='nginx_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_nginx_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="nginx_directive_snippets_txt"}<br>----<br><b>&nbsp;{tmpl_var name='variables_txt'}:</b> <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>
+			<div class="form-group proxy">
+                <label for="proxy_directives" class="col-sm-3 control-label">{tmpl_var name='proxy_directives_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="proxy_directives" id="proxy_directives" rows='10'>{tmpl_var name='proxy_directives'}</textarea></div>&nbsp;<b>{tmpl_var name="available_proxy_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="proxy_directive_snippets_txt"}
             </div>
-			<div class="ctrlHolder proxy">
-                <label for="proxy_directives">{tmpl_var name='proxy_directives_txt'}</label>
-                <textarea name="proxy_directives" id="proxy_directives" rows='10' cols='50' style="width:400px;">{tmpl_var name='proxy_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_proxy_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="proxy_directive_snippets_txt"}
-            </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_vhost_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_vhost_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     var webId = jQuery('input[name="id"]').val();
     var serverId;
@@ -176,4 +164,4 @@
         });
     }
 			
-</script>
\ No newline at end of file
+</script>
diff --git a/interface/web/sites/templates/web_vhost_domain_backup.htm b/interface/web/sites/templates/web_vhost_domain_backup.htm
index 7f573b8..40b64de 100644
--- a/interface/web/sites/templates/web_vhost_domain_backup.htm
+++ b/interface/web/sites/templates/web_vhost_domain_backup.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,36 +12,31 @@
 </div>
 </tmpl_if>
 
-<div class="panel panel_web_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Backup</legend>
-            <div class="ctrlHolder">
-                <label for="backup_interval">{tmpl_var name='backup_interval_txt'}</label>
-                <select name="backup_interval" id="backup_interval" class="selectInput">
+        <legend>Backup</legend>
+            <div class="form-group">
+                <label for="backup_interval" class="col-sm-3 control-label">{tmpl_var name='backup_interval_txt'}</label>
+                <div class="col-sm-9"><select name="backup_interval" id="backup_interval" class="form-control">
                     {tmpl_var name='backup_interval'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="backup_copies">{tmpl_var name='backup_copies_txt'}</label>
-                <select name="backup_copies" id="backup_copies" class="selectInput">
+            <div class="form-group">
+                <label for="backup_copies" class="col-sm-3 control-label">{tmpl_var name='backup_copies_txt'}</label>
+                <div class="col-sm-9"><select name="backup_copies" id="backup_copies" class="form-control">
                     {tmpl_var name='backup_copies'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="backup_excludes">{tmpl_var name='backup_excludes_txt'}</label>
-                <input name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" size="30" type="text" class="textInput" />&nbsp;{tmpl_var name='backup_excludes_note_txt'}
-            </div>
-        </fieldset>
+			<div class="form-group">
+                <label for="backup_excludes" class="col-sm-3 control-label">{tmpl_var name='backup_excludes_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='backup_excludes_note_txt'}
+            </div></div>
+        
 
         {tmpl_var name='backup_records'}
 
         <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_vhost_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_vhost_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 0e0897a..801c69f 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,232 +12,231 @@
 </div>
 </tmpl_if>
 
-<div class="panel panel_web_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
 		<tmpl_if name="vhostdomain_type" value="domain">
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
+                <div class="form-group">
                     <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                     </tmpl_if>
                 </div>
                 <tmpl_unless name="domain_option">
-                    <div class="ctrlHolder">
-                        <label for="client_group_id">{tmpl_var name='client_group_id_txt'}</label>
-                        <select name="client_group_id" id="client_group_id" class="selectInput">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             <tmpl_else>
                 <tmpl_if name="only_one_server">
                     <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
                 <tmpl_else>
-                    <div class="ctrlHolder">
+                    <div class="form-group">
                         <tmpl_if name="edit_disabled">
-                            <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                            <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                             <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                         <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                         </tmpl_if>
                     </div>
                 </tmpl_if>
             </tmpl_if>
             <tmpl_if name="is_reseller">
                 <tmpl_unless name="domain_option">
-                    <div class="ctrlHolder">
-                        <label for="client_group_id">{tmpl_var name='client_group_id_txt'}</label>
-                        <select name="client_group_id" id="client_group_id" class="selectInput">
+                    <div class="form-group">
+                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                             {tmpl_var name='client_group_id'}
-                        </select>
+                        </select></div>
                     </div>
                 </tmpl_unless>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="ip_address">{tmpl_var name='ip_address_txt'}</label>
-                <select name="ip_address" id="ip_address" class="selectInput formLengthIPv4">
+            <div class="form-group">
+                <label for="ip_address" class="col-sm-3 control-label">{tmpl_var name='ip_address_txt'}</label>
+                <div class="col-sm-9"><select name="ip_address" id="ip_address" class="form-control">
                     {tmpl_var name='ip_address'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ipv6_address">{tmpl_var name='ipv6_address_txt'}</label>
-                <select name="ipv6_address" id="ipv6_address" class="selectInput formLengthIPv6">
+            <div class="form-group">
+                <label for="ipv6_address" class="col-sm-3 control-label">{tmpl_var name='ipv6_address_txt'}</label>
+                <div class="col-sm-9"><select name="ipv6_address" id="ipv6_address" class="form-control">
                     {tmpl_var name='ipv6_address'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="domain">{tmpl_var name='domain_txt'}</label>
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
                 <tmpl_if name="domain_option">
-                    <select name="domain" id="domain" class="selectInput">
+                    <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <tmpl_else>
-                        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-                </tmpl_if>
+                        <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <label for="hd_quota">{tmpl_var name='hd_quota_txt'}</label>
-                <input name="hd_quota" id="hd_quota" value="{tmpl_var name='hd_quota'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" />&nbsp;MB
-            </div>
+            <div class="form-group">
+                <label for="hd_quota" class="col-sm-3 control-label">{tmpl_var name='hd_quota_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="hd_quota" id="hd_quota" value="{tmpl_var name='hd_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
+            </div></div>
 		</tmpl_if>
 		<tmpl_if name="vhostdomain_type" value="subdomain">
             <input type="hidden" name="server_id" id="server_id" value="{tmpl_var name='server_id_value'}" />
             <tmpl_if name="domain_option">
-            <div class="ctrlHolder">
-                <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
-                <select id="parent_domain_id" name="parent_domain_id" class="selectInput formLengthHalf">{tmpl_var name='parent_domain_id'}</select>
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select id="parent_domain_id" name="parent_domain_id" class="form-control">{tmpl_var name='parent_domain_id'}</select></div>
             </div>
             </tmpl_if>
-            <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="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='host_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></div>
             <tmpl_if name="domain_option">
-            <div class="ctrlHolder">
-                <label for="sel_domain">{tmpl_var name='domain_txt'}</label>
-                    <select name="sel_domain" id="sel_domain" class="selectInput">
+            <div class="form-group">
+                <label for="sel_domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                    <div class="col-sm-9"><select name="sel_domain" id="sel_domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
             </div>
             <tmpl_else>
-            <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 class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+                <div class="col-sm-9"><select id="parent_domain_id" name="parent_domain_id" class="form-control">{tmpl_var name='parent_domain_id'}</select></div>
             </div>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="web_folder">{tmpl_var name='web_folder_txt'}</label>
-                <input name="web_folder" id="web_folder" value="{tmpl_var name='web_folder'}" size="30" maxlength="100" type="text" class="textInput formLengthHalf"<tmpl_if name='fixed_folder' op='==' value='y'> readonly="readonly"</tmpl_if> />
+            <div class="form-group">
+                <label for="web_folder" class="col-sm-3 control-label">{tmpl_var name='web_folder_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="web_folder" id="web_folder" value="{tmpl_var name='web_folder'}" class="form-control"<tmpl_if name='fixed_folder' op='==' value='y'></div><div class="col-sm-3 input-sm"> readonly="readonly"</div></tmpl_if> />
             </div>
 		</tmpl_if>
 		<tmpl_if name="vhostdomain_type" value="aliasdomain">
             <input type="hidden" name="server_id" id="server_id" value="{tmpl_var name='server_id_value'}" />
-            <div class="ctrlHolder">
-                <label for="domain">{tmpl_var name='domain_txt'}</label>
+            <div class="form-group">
+                <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
                 <tmpl_if name="domain_option">
-                    <select name="domain" id="domain" class="selectInput">
+                    <div class="col-sm-9"><select name="domain" id="domain" class="form-control">
                         {tmpl_var name='domain_option'}
-                    </select>
+                    </select></div>
                     <tmpl_else>
-                        <input name="domain" id="domain" value="{tmpl_var name='domain'}" size="30" maxlength="255" type="text" class="textInput" />
-                </tmpl_if>
+                        <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div></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">
+            <div class="form-group">
+                <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                     {tmpl_var name='parent_domain_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="web_folder">{tmpl_var name='web_folder_txt'}</label>
-                <input name="web_folder" id="web_folder" value="{tmpl_var name='web_folder'}" size="30" maxlength="100" type="text" class="textInput formLengthHalf"<tmpl_if name='fixed_folder' op='==' value='y'> readonly="readonly"</tmpl_if> />
+            <div class="form-group">
+                <label for="web_folder" class="col-sm-3 control-label">{tmpl_var name='web_folder_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="web_folder" id="web_folder" value="{tmpl_var name='web_folder'}" class="form-control"<tmpl_if name='fixed_folder' op='==' value='y'></div><div class="col-sm-3 input-sm"> readonly="readonly"</div></tmpl_if> />
             </div>
 		</tmpl_if>
-            <div class="ctrlHolder">
-                <label for="traffic_quota">{tmpl_var name='traffic_quota_txt'}</label>
-                <input name="traffic_quota" id="traffic_quota" value="{tmpl_var name='traffic_quota'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" />&nbsp;MB <tmpl_var name='traffic_quota_exceeded_txt'>
+            <div class="form-group">
+                <label for="traffic_quota" class="col-sm-3 control-label">{tmpl_var name='traffic_quota_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="traffic_quota" id="traffic_quota" value="{tmpl_var name='traffic_quota'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB </div><tmpl_var name='traffic_quota_exceeded_txt'>
             </div>
-            <tmpl_if name="limit_cgi" op="==" value="y"><div class="ctrlHolder">
-                <p class="label">{tmpl_var name='cgi_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_cgi" op="==" value="y"><div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='cgi_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='cgi'}
                 </div>
             </div></tmpl_if>
-            <tmpl_if name="limit_ssi" op="==" value="y"><div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ssi_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_ssi" op="==" value="y"><div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ssi_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='ssi'}
                 </div>
             </div></tmpl_if>
-            <tmpl_if name="limit_perl" op="==" value="y"><div class="ctrlHolder apache">
-                <p class="label">{tmpl_var name='perl_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_perl" op="==" value="y"><div class="form-group apache">
+                <label class="col-sm-3 control-label">{tmpl_var name='perl_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='perl'}
                 </div>
             </div></tmpl_if>
-            <tmpl_if name="limit_ruby" op="==" value="y"><div class="ctrlHolder apache">
-                <p class="label">{tmpl_var name='ruby_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_ruby" op="==" value="y"><div class="form-group apache">
+                <label class="col-sm-3 control-label">{tmpl_var name='ruby_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='ruby'}
                 </div>
             </div></tmpl_if>
-            <tmpl_if name="limit_python" op="==" value="y"><div class="ctrlHolder apache">
-                <p class="label">{tmpl_var name='python_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_python" op="==" value="y"><div class="form-group apache">
+                <label class="col-sm-3 control-label">{tmpl_var name='python_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='python'}
                 </div>
             </div></tmpl_if>
-            <tmpl_if name="force_suexec" op="==" value="n"><div class="ctrlHolder apache">
-                <p class="label">{tmpl_var name='suexec_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="force_suexec" op="==" value="n"><div class="form-group apache">
+                <label class="col-sm-3 control-label">{tmpl_var name='suexec_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='suexec'}
                 </div>
             </div></tmpl_if>
-            <tmpl_if name="limit_hterror" op="==" value="y"><div class="ctrlHolder">
-                <p class="label">{tmpl_var name='errordocs_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_hterror" op="==" value="y"><div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='errordocs_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='errordocs'}
                 </div>
             </div></tmpl_if>
 
-            <div class="ctrlHolder">
-                <label for="subdomain">{tmpl_var name='subdomain_txt'}</label>
-                <select name="subdomain" id="subdomain" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="subdomain" class="col-sm-3 control-label">{tmpl_var name='subdomain_txt'}</label>
+                <div class="col-sm-9"><select name="subdomain" id="subdomain" class="form-control">
                     {tmpl_var name='subdomain'}
-                </select>
+                </select></div>
             </div>
-            <tmpl_if name="limit_ssl" op="==" value="y"><div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ssl_txt'}</p>
-                <div class="multiField">
+            <tmpl_if name="limit_ssl" op="==" value="y"><div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ssl_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='ssl'}
                 </div>
             </div></tmpl_if>
-            <div class="ctrlHolder">
-                <label for="php">{tmpl_var name='php_txt'}</label>
-                <select name="php" id="php" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="php" class="col-sm-3 control-label">{tmpl_var name='php_txt'}</label>
+                <div class="col-sm-9"><select name="php" id="php" class="form-control">
                     {tmpl_var name='php'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder fastcgi_php_version">
-                <label for="fastcgi_php_version">{tmpl_var name='fastcgi_php_version_txt'}</label>
-                <select name="fastcgi_php_version" id="fastcgi_php_version" class="selectInput formLengthHalf">
+            <div class="form-group fastcgi_php_version">
+                <label for="fastcgi_php_version" class="col-sm-3 control-label">{tmpl_var name='fastcgi_php_version_txt'}</label>
+                <div class="col-sm-9"><select name="fastcgi_php_version" id="fastcgi_php_version" class="form-control">
                     {tmpl_var name='fastcgi_php_version'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+			{tmpl_var name="directive_snippets_id"}
+			<div class="form-group nginx pagespeed">
+				<label class="col-sm-3 control-label">{tmpl_var name='enable_pagespeed_txt'}</label>
+				<div class="col-sm-9">
+					{tmpl_var name="enable_pagespeed"}
+				</div>
+			</div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-        </fieldset>
+        
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
-        <div class="buttonHolder buttons">
-            <button id="dom-edit-submit" class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}"><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_vhost_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button id="dom-edit-submit" class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     var serverId;
     var clientGroupId = jQuery('#client_group_id').val();
@@ -249,6 +250,7 @@
             adjustForm();
             reloadWebIP();
             reloadFastcgiPHPVersions();
+			reloadDirectiveSnippets();
         });
     }
     adjustForm(true);
@@ -265,7 +267,7 @@
     } else {
         jQuery('.fastcgi_php_version:visible').hide();
     }
-    //resetFormChanged();
+    //ISPConfig.resetFormChanged();
     
     jQuery('#php').change(function(){
         reloadFastcgiPHPVersions();
@@ -278,6 +280,21 @@
     jQuery('#parent_domain_id').change(function() {
         reloadServerId(false);
     });
+	// new Vhostsubdomains/Vhostaliasdomains
+	if(serverId == '') jQuery('#parent_domain_id').trigger('change');
+	
+	if(jQuery('#directive_snippets_id').val() > 0){
+		jQuery('.pagespeed').show();
+	} else {
+		jQuery('.pagespeed').hide();
+	}
+	jQuery('#directive_snippets_id').change(function(){
+		if(jQuery(this).val() > 0){
+			jQuery('.pagespeed').show();
+		} else {
+			jQuery('.pagespeed').hide();
+		}
+	});
     
     function reloadServerId(noFormChange) {
         var parentWebId = jQuery('#parent_domain_id').val();
@@ -293,6 +310,19 @@
             if(data.servertype == "nginx"){
                 var selected = jQuery('#php').val();
                 jQuery('.apache').hide();
+				jQuery('.nginx').show();
+				if(jQuery('#directive_snippets_id').val() > 0){
+					jQuery('.pagespeed').show();
+				} else {
+					jQuery('.pagespeed').hide();
+				}
+				jQuery('#directive_snippets_id').change(function(){
+					if(jQuery(this).val() > 0){
+						jQuery('.pagespeed').show();
+					} else {
+						jQuery('.pagespeed').hide();
+					}
+				});
                 if(selected != "no" && selected != "php-fpm" && selected != "hhvm") {
                     jQuery('#php option[value="php-fpm"]').attr('selected', 'selected').val('php-fpm');
                 }
@@ -301,6 +331,7 @@
                 jQuery('#php option[value="mod"]').hide();
                 jQuery('#php option[value="suphp"]').hide();
             } else {
+				jQuery('.nginx').hide();
                 jQuery('.apache').show();
                 jQuery('#php option[value="fast-cgi"]').show();
                 jQuery('#php option[value="cgi"]').show();
@@ -308,7 +339,7 @@
                 jQuery('#php option[value="suphp"]').show();
             }
             if(noFormChange) {
-                resetFormChanged();
+                ISPConfig.resetFormChanged();
                 jQuery('#php').addClass('no-page-form-change').change();
                 jQuery('#php').removeClass('no-page-form-change');
             } else {
@@ -316,37 +347,76 @@
             }
         });
     }
+	
+	function reloadDirectiveSnippets() {
+        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, type : "getdirectivesnippet"}, function(data) {
+            var options = '<option value="0"></option>';
+			for (var i = 0, len = data.length; i < len; i++) {
+				var isSelected = '';
+
+				 if ($('#directive_snippets_id').val() == i + 1) {
+					 isSelected = 'selected="selected"';
+				 }
+
+				 options += '<option ' + isSelected + ' value="' + data[i]['directive_snippets_id'] + '">' + data[i]['name'] + '</option>';
+			}
+
+			$('#directive_snippets_id').html(options).change();
+		});
+	}
 		
     function reloadWebIP() {
-        loadOptionInto('ip_address','sites/ajax_get_ip.php?ip_type=IPv4&server_id='+serverId+'&client_group_id='+clientGroupId);
-        loadOptionInto('ipv6_address','sites/ajax_get_ip.php?ip_type=IPv6&server_id='+serverId+'&client_group_id='+clientGroupId);
+        ISPConfig.loadOptionInto('ip_address','sites/ajax_get_ip.php?ip_type=IPv4&server_id='+serverId+'&client_group_id='+clientGroupId<tmpl_if name="use_combobox" value="y">, rerenderSelect2</tmpl_if>);
+        ISPConfig.loadOptionInto('ipv6_address','sites/ajax_get_ip.php?ip_type=IPv6&server_id='+serverId+'&client_group_id='+clientGroupId<tmpl_if name="use_combobox" value="y">, rerenderSelect2</tmpl_if>);
+		<tmpl_if name="use_combobox" value="y">
+		//$('#ip_address').add('#ipv6_address').select2();
+		</tmpl_if>
     }
+	
+	function rerenderSelect2(elem) {
+		$('#'+elem).select2();
+	}
 		
     function reloadFastcgiPHPVersions(noFormChange) {
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getphpfastcgi", client_group_id : clientGroupId}, function(data) {
-            var options = '<option value="">Default</option>';
+            //var options = '<option value="">Default</option>';
+			var options = '';
             var phpfastcgiselected = '';
             $.each(data, function(key, val) {
+				<tmpl_if name="id">
                 if($('#fastcgi_php_version').val() == key){
                     phpfastcgiselected = ' selected="selected"';
                 } else {
                     phpfastcgiselected = '';
                 }
+				</tmpl_else>
+					phpfastcgiselected = '';
+				</tmpl_if>
                 options += '<option value="'+key+'"'+phpfastcgiselected+'>'+val+'</option>';
             });
+			<tmpl_if name="id">
+			if($('#fastcgi_php_version').val() == ''){
+                phpfastcgiselected = ' selected="selected"';
+            } else {
+                phpfastcgiselected = '';
+            }
+			</tmpl_else>
+				phpfastcgiselected = '';
+			</tmpl_if>
+			options += '<option value=""'+phpfastcgiselected+'>{tmpl_var name="default_php_txt"}</option>';
             $('#fastcgi_php_version').html(options).change();
-            if(noFormChange) resetFormChanged();
+            if(noFormChange) ISPConfig.resetFormChanged();
         });
     }
     
     <tmpl_if name="readonly_tab">
-        jQuery('div.panel_web_domain').find('fieldset').find('input,select,button').bind('click mousedown', function(e) { e.preventDefault(); }).focus(function() { $(this).blur(); });
+        jQuery('div.panel_web_domain').find('fieldset').find('input,select,button').not('#directive_snippets_id').bind('click mousedown', function(e) { e.preventDefault(); }).focus(function() { $(this).blur(); });
         jQuery('#dom-edit-submit').click(function() {
-               submitForm('pageForm','sites/web_vhost_domain_edit.php');
+			ISPConfig.submitForm('pageForm','sites/web_vhost_domain_edit.php');
         });
     <tmpl_else>
         jQuery('#dom-edit-submit').click(function() {
-            submitForm('pageForm','sites/web_vhost_domain_edit.php');
+            ISPConfig.submitForm('pageForm','sites/web_vhost_domain_edit.php');
         });
     </tmpl_if>
 			
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index f486b2f..b40db40 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="domain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="subdomain_list_head_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_list_head_txt"}</tmpl_if></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_web_vhost_domain">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,48 +20,47 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/web_vhost_domain_edit.php?type={tmpl_var name='vhostdomain_type'}');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/web_vhost_domain_edit.php?type={tmpl_var name='vhostdomain_type'}"><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="add_new_record_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="add_new_subdomain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="add_new_aliasdomain_txt"}</tmpl_if></button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                <tr class="caption">
-                    <tmpl_if name="vhostdomain_type" value="domain"><th class="tbl_col_domain_id" scope="col"><tmpl_var name="domain_id_txt"></th></tmpl_if>
-                    <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>
-					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th></tmpl_if>
-                    <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
-                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                <tr>
+                    <tmpl_if name="vhostdomain_type" value="domain"><th class="small-col" data-column="domain_id"><tmpl_var name="domain_id_txt"></th></tmpl_if>
+                    <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                    <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th></tmpl_if>
+                    <th data-column="domain"><tmpl_if name='vhostdomain_type' op='==' value='domain'>{tmpl_var name="domain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='subdomain'>{tmpl_var name="subdomain_txt"}</tmpl_if><tmpl_if name='vhostdomain_type' op='==' value='aliasdomain'>{tmpl_var name="aliasdomain_txt"}</tmpl_if></th>
+                    <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                 </tr>
-                <tr class="filter">
-                    <tmpl_if name="vhostdomain_type" value="domain"><td class="tbl_col_domain_id"><input type="text" size="5" name="search_domain_id" value="{tmpl_var name='search_domain_id'}" /></td></tmpl_if>
-                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td></tmpl_if>
-                    <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
-                    <td class="tbl_col_buttons">
-                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/web_vhost_domain_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                <tr>
+                    <tmpl_if name="vhostdomain_type" value="domain"><td><input class="form-control" type="text" name="search_domain_id" value="{tmpl_var name='search_domain_id'}" /></td></tmpl_if>
+                    <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                    <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+					<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td></tmpl_if>
+                    <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                    <td class="text-right">
+                        <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_list.php"><span class="icon icon-filter"></span></button>
                     </td>
                 </tr>
                 </thead>
                 <tbody>
                 <tmpl_loop name="records">
-                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                    	<tmpl_if name="vhostdomain_type" value="domain"><td class="tbl_col_domain_id"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="domain_id"}</a></td></tmpl_if>
-                        <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="active"}</a></td>
-                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="server_id"}</a></td>
-						<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
-                        <td class="tbl_col_domain"><a href="#" onclick="loadContent('sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}');">{tmpl_var name="domain"}</a><a href="http://{tmpl_var name="domain"}" target="_blank" class="button icons16 icoLink"><span>Link</span></a></td>
-                        <td class="tbl_col_buttons">
-                            <a class="button icons16 icoDelete" href="javascript: del_record('sites/web_vhost_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>
+                    <tr>
+                    	<tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="server_id"}</a></td>
+						<tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
+                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain"}</a></td>
+                        <td class="text-right">
+							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></button>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                         </td>
                     </tr>
                 </tmpl_loop>
@@ -73,11 +72,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_vhost_domain_redirect.htm b/interface/web/sites/templates/web_vhost_domain_redirect.htm
index 3cd8da3..1bdcf00 100644
--- a/interface/web/sites/templates/web_vhost_domain_redirect.htm
+++ b/interface/web/sites/templates/web_vhost_domain_redirect.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,41 +12,35 @@
 </div>
 </tmpl_if>
 
-<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">
+        
+            <div class="form-group">
+                <label for="redirect_type" class="col-sm-3 control-label">{tmpl_var name='redirect_type_txt'}</label>
+                <div class="col-sm-9"><select name="redirect_type" id="redirect_type" class="form-control">
                     {tmpl_var name='redirect_type'}
-                </select>
+                </select></div>
             </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="seo_redirect">{tmpl_var name='seo_redirect_txt'}</label>
-                <select name="seo_redirect" id="seo_redirect" class="selectInput">
+            <div class="form-group">
+                <label for="redirect_path" class="col-sm-3 control-label">{tmpl_var name='redirect_path_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="redirect_path" id="redirect_path" value="{tmpl_var name='redirect_path'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="seo_redirect" class="col-sm-3 control-label">{tmpl_var name='seo_redirect_txt'}</label>
+                <div class="col-sm-9"><select name="seo_redirect" id="seo_redirect" class="form-control">
                     {tmpl_var name='seo_redirect'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder nginx">
-                <label for="rewrite_rules">{tmpl_var name='rewrite_rules_txt'}</label>
-                <textarea name="rewrite_rules" id="rewrite_rules" rows='10' cols='50' style="width:400px;">{tmpl_var name='rewrite_rules'}</textarea>&nbsp;<b>{tmpl_var name="allowed_rewrite_rule_directives_txt"}</b><br><br>&nbsp;break<br>&nbsp;if<br>&nbsp;return<br>&nbsp;rewrite<br>&nbsp;set<br><br>&nbsp;<a href="http://wiki.nginx.org/HttpRewriteModule" target="_blank">http://wiki.nginx.org/HttpRewriteModule</a>
+			<div class="form-group nginx">
+                <label for="rewrite_rules" class="col-sm-3 control-label">{tmpl_var name='rewrite_rules_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="rewrite_rules" id="rewrite_rules" rows='10' cols='50'>{tmpl_var name='rewrite_rules'}</textarea></div>&nbsp;<b>{tmpl_var name="allowed_rewrite_rule_directives_txt"}</b><br><br>&nbsp;break<br>&nbsp;if<br>&nbsp;return<br>&nbsp;rewrite<br>&nbsp;set<br><br>&nbsp;<a href="http://wiki.nginx.org/HttpRewriteModule" target="_blank">http://wiki.nginx.org/HttpRewriteModule</a>
             </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_vhost_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_vhost_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     var webId = jQuery('input[name="id"]').val();
     var serverId;
diff --git a/interface/web/sites/templates/web_vhost_domain_ssl.htm b/interface/web/sites/templates/web_vhost_domain_ssl.htm
index 4869c19..ad9629f 100644
--- a/interface/web/sites/templates/web_vhost_domain_ssl.htm
+++ b/interface/web/sites/templates/web_vhost_domain_ssl.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,68 +12,103 @@
 </div>
 </tmpl_if>
 
-<div class="panel panel_web_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <label for="ssl_state">{tmpl_var name='ssl_state_txt'}</label>
-                <input name="ssl_state" id="ssl_state" value="{tmpl_var name='ssl_state'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ssl_locality">{tmpl_var name='ssl_locality_txt'}</label>
-                <input name="ssl_locality" id="ssl_locality" value="{tmpl_var name='ssl_locality'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ssl_organisation">{tmpl_var name='ssl_organisation_txt'}</label>
-                <input name="ssl_organisation" id="ssl_organisation" value="{tmpl_var name='ssl_organisation'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ssl_organisation_unit">{tmpl_var name='ssl_organisation_unit_txt'}</label>
-                <input name="ssl_organisation_unit" id="ssl_organisation_unit" value="{tmpl_var name='ssl_organisation_unit'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="ssl_country">{tmpl_var name='ssl_country_txt'}</label>
-                <select name="ssl_country" id="ssl_country" class="selectInput flags">
+			<tmpl_if name='show_helper_links'>
+				<div id="show_helper_links" style="display:none;">
+					<label></label>
+					<div class="col-sm-9">
+					<a href="javascript:void(0);" id="load_data"><tmpl_if name='is_admin'>{tmpl_var name='load_client_data_txt'}</tmpl_else>{tmpl_var name='load_my_data_txt'}</tmpl_if></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" id="reset_data">{tmpl_var name='reset_client_data_txt'}</a>
+					</div>
+				</div>
+			</tmpl_if>
+            <div class="form-group">
+                <label for="ssl_state" class="col-sm-3 control-label">{tmpl_var name='ssl_state_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_state" id="ssl_state" value="{tmpl_var name='ssl_state'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_locality" class="col-sm-3 control-label">{tmpl_var name='ssl_locality_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_locality" id="ssl_locality" value="{tmpl_var name='ssl_locality'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_organisation" class="col-sm-3 control-label">{tmpl_var name='ssl_organisation_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_organisation" id="ssl_organisation" value="{tmpl_var name='ssl_organisation'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_organisation_unit" class="col-sm-3 control-label">{tmpl_var name='ssl_organisation_unit_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ssl_organisation_unit" id="ssl_organisation_unit" value="{tmpl_var name='ssl_organisation_unit'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="ssl_country" class="col-sm-3 control-label">{tmpl_var name='ssl_country_txt'}</label>
+                <div class="col-sm-9"><select name="ssl_country" id="ssl_country" class="form-control flags">
                     {tmpl_var name='ssl_country'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="client_group_id">{tmpl_var name='ssl_domain_txt'}</label>
-                <select name="ssl_domain" id="ssl_domain" class="selectInput">
+            <div class="form-group">
+                <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='ssl_domain_txt'}</label>
+                <div class="col-sm-9"><select name="ssl_domain" id="ssl_domain" class="form-control">
                     {tmpl_var name='ssl_domain'}
-                </select>
+                </select></div>
             </div>
-			<div class="ctrlHolder">
-                <label for="ssl_request">{tmpl_var name='ssl_key_txt'}</label>
-                <textarea name="ssl_key" id="ssl_key" rows='10' cols='30'>{tmpl_var name='ssl_key'}</textarea>
+			<div class="form-group">
+                <label for="ssl_request" class="col-sm-3 control-label">{tmpl_var name='ssl_key_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_key" id="ssl_key" rows='10' cols='30'>{tmpl_var name='ssl_key'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ssl_request">{tmpl_var name='ssl_request_txt'}</label>
-                <textarea name="ssl_request" id="ssl_request" rows='10' cols='30'>{tmpl_var name='ssl_request'}</textarea>
+            <div class="form-group">
+                <label for="ssl_request" class="col-sm-3 control-label">{tmpl_var name='ssl_request_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_request" id="ssl_request" rows='10' cols='30'>{tmpl_var name='ssl_request'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ssl_cert">{tmpl_var name='ssl_cert_txt'}</label>
-                <textarea name="ssl_cert" id="ssl_cert" rows='10' cols='30'>{tmpl_var name='ssl_cert'}</textarea>
+            <div class="form-group">
+                <label for="ssl_cert" class="col-sm-3 control-label">{tmpl_var name='ssl_cert_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_cert" id="ssl_cert" rows='10' cols='30'>{tmpl_var name='ssl_cert'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ssl_bundle">{tmpl_var name='ssl_bundle_txt'}</label>
-                <textarea name="ssl_bundle" id="ssl_bundle" rows='10' cols='30'>{tmpl_var name='ssl_bundle'}</textarea>
+            <div class="form-group">
+                <label for="ssl_bundle" class="col-sm-3 control-label">{tmpl_var name='ssl_bundle_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="ssl_bundle" id="ssl_bundle" rows='10' cols='30'>{tmpl_var name='ssl_bundle'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ssl_action">{tmpl_var name='ssl_action_txt'}</label>
-                <select name="ssl_action" id="ssl_action" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="ssl_action" class="col-sm-3 control-label">{tmpl_var name='ssl_action_txt'}</label>
+                <div class="col-sm-9"><select name="ssl_action" id="ssl_action" class="form-control">
                     {tmpl_var name='ssl_action'}
-                </select>
+                </select></div>
             </div>
-        </fieldset>
+			{tmpl_if name="is_spdy_enabled"}
+			<div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='enable_spdy_txt'}</label>
+				<div class="col-sm-9">
+					{tmpl_var name="enable_spdy"}
+				</div>
+			</div>
+			{/tmpl_if}
+        
 
         <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_vhost_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_vhost_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 
-</div>
\ No newline at end of file
+<script>
+<!--
+	<tmpl_if name='show_helper_links'>
+	if($("input[name=id]").val() > 0) $('#show_helper_links:hidden').show();
+
+	$('#reset_data').click(function(){
+		$('#ssl_organisation').add('#ssl_locality').add('#ssl_state').add('#ssl_organisation_unit').val('');
+		$('#ssl_country').val($("#ssl_country option:first").val()).trigger('change');
+	});
+	$('#load_data').click(function(){
+		loadClientData();
+	});
+	
+	
+	function loadClientData() {
+        var web_id = $("input[name=id]").val();
+        
+        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {'web_id': web_id, 'type': "getclientssldata"}, function(data) {
+			$('#ssl_organisation').val(data['company_name']);
+			$('#ssl_locality').val(data['city']);
+			$('#ssl_country').val(data['country']).trigger('change');
+			$('#ssl_state').val(data['state']);
+			$('#ssl_organisation_unit').val('IT');
+        });
+    }
+	</tmpl_if>
+//-->
+</script>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_vhost_domain_stats.htm b/interface/web/sites/templates/web_vhost_domain_stats.htm
index 8ba753e..096c4c1 100644
--- a/interface/web/sites/templates/web_vhost_domain_stats.htm
+++ b/interface/web/sites/templates/web_vhost_domain_stats.htm
@@ -1,4 +1,6 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <tmpl_if name="config_error_msg">
@@ -10,42 +12,36 @@
 </div>
 </tmpl_if>
 
-<div class="panel panel_web_domain">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='stats_user_txt'}</p><p class="value">admin</p>
+        
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='stats_user_txt'}</label><p class="value">admin</p>
             </div>
-            <div class="ctrlHolder">
-                <label for="stats_password">{tmpl_var name='stats_password_txt'}</label>
-                <input name="stats_password" id="stats_password" value="{tmpl_var name='stats_password'}" size="15" maxlength="100" type="password" autocomplete="off" class="textInput" style="width:100px;" onkeyup="checkPassMatch('stats_password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onclick="generatePassword('stats_password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            <div class="form-group">
+                <label for="stats_password" class="col-sm-3 control-label">{tmpl_var name='stats_password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="stats_password" id="stats_password" value="{tmpl_var name='stats_password'}" autocomplete="off" class="form-control" onkeyup="checkPassMatch('stats_password','repeat_password');" /></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('stats_password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" autocomplete="off" class="textInput" style="width:100px;" onkeyup="checkPassMatch('stats_password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" autocomplete="off" class="form-control" onkeyup="checkPassMatch('stats_password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <label for="stats_type">{tmpl_var name='stats_type_txt'}</label>
-                <select name="stats_type" id="stats_type" class="selectInput" >
+            <div class="form-group">
+                <label for="stats_type" class="col-sm-3 control-label">{tmpl_var name='stats_type_txt'}</label>
+                <div class="col-sm-9"><select name="stats_type" id="stats_type" class="form-control" >
                     {tmpl_var name='stats_type'}
-                </select>
+                </select></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_vhost_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_vhost_domain_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/web_vhost_domain_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/sites/templates/webdav_user_edit.htm b/interface/web/sites/templates/webdav_user_edit.htm
index c0f658b..09d7d31 100644
--- a/interface/web/sites/templates/webdav_user_edit.htm
+++ b/interface/web/sites/templates/webdav_user_edit.htm
@@ -1,64 +1,60 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_webdav_user">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
+        
+            <div class="form-group">
                 <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">
+                    <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                    <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled">
                         {tmpl_var name='parent_domain_id'}
-                    </select>
+                    </select></div>
                     <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">
+                        <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label>
+                        <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control">
                             {tmpl_var name='parent_domain_id'}
-                        </select>
+                        </select></div>
                 </tmpl_if>
             </div>
-            <div class="ctrlHolder">
-                <label for="username">{tmpl_var name='username_txt'}</label>
+            <div class="form-group">
+                <label for="username" class="col-sm-3 control-label">{tmpl_var name='username_txt'}</label>
                 <p class="prefix">{tmpl_var name='username_prefix'}</p>
-                <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 class="col-sm-6"><input type="text" name="username" id="username" value="{tmpl_var name='username'}" class="form-control" <tmpl_if name="edit_disabled"></div><div class="col-sm-3 input-sm">disabled="disabled"</div></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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+            <div class="form-group">
+                <label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');"/></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="dir">{tmpl_var name='dir_txt'}</label>
+            <div class="form-group">
+                <label for="dir" class="col-sm-3 control-label">{tmpl_var name='dir_txt'}</label>
                 <p class="prefix">webdav/</p>
-                <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 class="col-sm-6"><input type="text" name="dir" id="dir" value="{tmpl_var name='dir'}" class="form-control" <tmpl_if name="edit_disabled"></div><div class="col-sm-3 input-sm">disabled="disabled"</div></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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="sites/webdav_user_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/webdav_user_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/sites/templates/webdav_user_list.htm b/interface/web/sites/templates/webdav_user_list.htm
index b34ce21..01764cc 100644
--- a/interface/web/sites/templates/webdav_user_list.htm
+++ b/interface/web/sites/templates/webdav_user_list.htm
@@ -1,9 +1,9 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_list_webdav_user">
 
-    <div class="pnl_toolsarea">
         <tmpl_if name='datalog_changes_count' op='>' value='0'>
         <div>
             <div class="systemmonitor-state state-info">
@@ -20,45 +20,43 @@
             </div><br />
         </div>
         </tmpl_if>
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('sites/webdav_user_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="sites/webdav_user_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_parent_domain_id" scope="col"><tmpl_var name="parent_domain_id_txt"></th>
-                        <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="parent_domain_id"><tmpl_var name="parent_domain_id_txt"></th>
+                        <th data-column="username"><tmpl_var name="username_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_parent_domain_id"><select name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
-                        <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','sites/webdav_user_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_parent_domain_id">{tmpl_var name='search_parent_domain_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="sites/webdav_user_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_parent_domain_id"><a href="#" onclick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="parent_domain_id"}</a></td>
-                            <td class="tbl_col_username"><a href="#" onclick="loadContent('sites/webdav_user_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('sites/webdav_user_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>
+                        <tr>
+                            <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
+                            <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/webdav_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -70,11 +68,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/sites/user_quota_stats.php b/interface/web/sites/user_quota_stats.php
index 2a791f1..9c93008 100644
--- a/interface/web/sites/user_quota_stats.php
+++ b/interface/web/sites/user_quota_stats.php
@@ -19,8 +19,6 @@
 
 $app->load('listform_actions');
 
-// $tmp_rec = $app->db->queryOneRecord("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC");
-// $monitor_data = unserialize($app->db->unquote($tmp_rec['data']));
 $tmp_rec =  $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC");
 $monitor_data = array();
 if(is_array($tmp_rec)) {
@@ -43,11 +41,10 @@
 		$rec['bgcolor'] = $this->DataRowColor;
 		$username = $rec['system_user'];
 
-		$server = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$rec['server_id']);
+		$server = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $rec['server_id']);
 		$rec['domain'] = $rec['domain'].($server['server_name'] != '' ? ' ('.$server['server_name'].')' : '');
 		
 		$rec['used'] = $monitor_data['user'][$username]['used'];
-		$rec['used_sort'] = $rec['used'];
 		$rec['soft'] = $monitor_data['user'][$username]['soft'];
 		$rec['hard'] = $monitor_data['user'][$username]['hard'];
 		$rec['files'] = $monitor_data['user'][$username]['files'];
@@ -59,6 +56,7 @@
 				$rec['used'] = $rec['used'][1];
 			}
 		}
+		$rec['used_sort'] = $rec['used'];
 		if (!is_numeric($rec['soft'])) $rec['soft']=$rec['soft'][1];
 		if (!is_numeric($rec['hard'])) $rec['hard']=$rec['hard'][1];
 		if (!is_numeric($rec['files'])) $rec['files']=$rec['files'][1];
diff --git a/interface/web/sites/web_childdomain_edit.php b/interface/web/sites/web_childdomain_edit.php
index a2a20ca..33c2422 100644
--- a/interface/web/sites/web_childdomain_edit.php
+++ b/interface/web/sites/web_childdomain_edit.php
@@ -136,7 +136,7 @@
 		} else {
 			if($this->_childdomain_type == 'subdomain') {
 				// Get the record of the parent domain
-				$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]));
+				$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ?", @$this->dataRecord["parent_domain_id"]);
 
 				// remove the parent domain part of the domain name before we show it in the text field.
 				$this->dataRecord["domain"] = str_replace('.'.$parent_domain["domain"], '', $this->dataRecord["domain"]);
@@ -168,13 +168,13 @@
 		
 		// Get the record of the parent domain
 		if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
-			$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+			$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ?", $this->id);
 			if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
 			unset($tmp);
 		}
 
 		// Get the record of the parent domain
-		$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 		/* check if the domain module is used - and check if the selected domain can be used! */
 		$app->uses('ini_parser,getconf');
@@ -236,7 +236,7 @@
 
 			//* Update the old website, so that the vhost alias gets removed
 			//* We force the update by inserting a transaction record without changes manually.
-			$old_website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$app->functions->intval($this->oldDataRecord['domain_id']));
+			$old_website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $this->oldDataRecord['domain_id']);
 			$app->db->datalogSave('web_domain', 'UPDATE', 'domain_id', $app->functions->intval($this->oldDataRecord['parent_domain_id']), $old_website, $old_website, true);
 		}
 
diff --git a/interface/web/sites/web_folder_del.php b/interface/web/sites/web_folder_del.php
index ec13c35..c7b6038 100644
--- a/interface/web/sites/web_folder_del.php
+++ b/interface/web/sites/web_folder_del.php
@@ -56,7 +56,7 @@
 		if($app->tform->checkPerm($this->id, 'd') == false) $app->error($app->lng('error_no_delete_permission'));
 
 		// Delete all users that belong to this folder.
-		$records = $app->db->queryAllRecords("SELECT web_folder_user_id FROM web_folder_user WHERE web_folder_id = '".$app->functions->intval($this->id)."'");
+		$records = $app->db->queryAllRecords("SELECT web_folder_user_id FROM web_folder_user WHERE web_folder_id = ?", $this->id);
 		foreach($records as $rec) {
 			$app->db->datalogDelete('web_folder_user', 'web_folder_user_id', $rec['web_folder_user_id']);
 		}
diff --git a/interface/web/sites/web_folder_edit.php b/interface/web/sites/web_folder_edit.php
index 009b039..04a80a1 100644
--- a/interface/web/sites/web_folder_edit.php
+++ b/interface/web/sites/web_folder_edit.php
@@ -55,7 +55,7 @@
 		global $app, $conf;
 
 		// Get the record of the parent domain
-		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 
 		// Set a few fixed values
@@ -63,9 +63,9 @@
 		
 		// make sure this folder isn't protected already
 		if($this->id > 0){
-			$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE parent_domain_id = ".$this->dataRecord['parent_domain_id']." AND path = '".$this->dataRecord['path']."' AND web_folder_id != ".$this->id);
+			$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE parent_domain_id = ? AND path = ? AND web_folder_id != ?", $this->dataRecord['parent_domain_id'], $this->dataRecord['path'], $this->id);
 		} else {
-			$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE parent_domain_id = ".$this->dataRecord['parent_domain_id']." AND path = '".$this->dataRecord['path']."'");
+			$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE parent_domain_id = ? AND path = ?", $this->dataRecord['parent_domain_id'], $this->dataRecord['path']);
 		}
 		if(is_array($folder) && !empty($folder)) $app->tform->errorMessage .= $app->tform->lng('error_folder_already_protected_txt');
 
@@ -75,13 +75,13 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 
 		// The web folder entry shall be owned by the same group as the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-		$sql = "UPDATE web_folder SET sys_groupid = '$sys_groupid' WHERE web_folder_id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE web_folder SET sys_groupid = ? WHERE web_folder_id = ?";
+		$app->db->query($sql, $sys_groupid, $this->id);
 	}
 	
 	function onAfterUpdate() {
@@ -89,13 +89,13 @@
 
 		//* When the site of the web folder has been changed
 		if(isset($this->dataRecord['parent_domain_id']) && $this->oldDataRecord['parent_domain_id'] != $this->dataRecord['parent_domain_id']) {
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 
 			// The web folder entry shall be owned by the same group as the website
 			$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-			$sql = "UPDATE web_folder SET sys_groupid = '$sys_groupid' WHERE web_folder_id = ".$this->id;
-			$app->db->query($sql);
+			$sql = "UPDATE web_folder SET sys_groupid = ? WHERE web_folder_id = ?";
+			$app->db->query($sql, $sys_groupid, $this->id);
 		}
 
 	}
diff --git a/interface/web/sites/web_folder_user_edit.php b/interface/web/sites/web_folder_user_edit.php
index ec3bdd1..654578a 100644
--- a/interface/web/sites/web_folder_user_edit.php
+++ b/interface/web/sites/web_folder_user_edit.php
@@ -55,7 +55,7 @@
 		global $app, $conf;
 
 		// Get the record of the parent domain
-		$folder = $app->db->queryOneRecord("select * FROM web_folder WHERE web_folder_id = ".$app->functions->intval(@$this->dataRecord["web_folder_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		$folder = $app->db->queryOneRecord("select * FROM web_folder WHERE web_folder_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["web_folder_id"]);
 		if(!$folder || $folder['web_folder_id'] != @$this->dataRecord['web_folder_id']) $app->tform->errorMessage .= $app->tform->lng("no_folder_perm");
 
 		// Set a few fixed values
@@ -63,9 +63,9 @@
 		
 		// make sure this folder/user combination does not exist already
 		if($this->id > 0){
-			$user = $app->db->queryOneRecord("SELECT * FROM web_folder_user WHERE web_folder_id = ".$this->dataRecord['web_folder_id']." AND username = '".$this->dataRecord['username']."' AND web_folder_user_id != ".$this->id);
+			$user = $app->db->queryOneRecord("SELECT * FROM web_folder_user WHERE web_folder_id = ? AND username = ? AND web_folder_user_id != ?", $this->dataRecord['web_folder_id'], $this->dataRecord['username'], $this->id);
 		} else {
-			$user = $app->db->queryOneRecord("SELECT * FROM web_folder_user WHERE web_folder_id = ".$this->dataRecord['web_folder_id']." AND username = '".$this->dataRecord['username']."'");
+			$user = $app->db->queryOneRecord("SELECT * FROM web_folder_user WHERE web_folder_id = ? AND username = ?", $this->dataRecord['web_folder_id'], $this->dataRecord['username']);
 		}
 		if(is_array($user) && !empty($user)) $app->tform->errorMessage .= $app->tform->lng('error_user_exists_already_txt');
 
@@ -75,13 +75,13 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ".$app->functions->intval($this->dataRecord["web_folder_id"]));
+		$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ?", $this->dataRecord["web_folder_id"]);
 
 		// The web folder user entry shall be owned by the same group as the web folder
 		$sys_groupid = $app->functions->intval($folder['sys_groupid']);
 
-		$sql = "UPDATE web_folder_user SET sys_groupid = '$sys_groupid' WHERE web_folder_user_id = ".$this->id;
-		$app->db->query($sql);
+		$sql = "UPDATE web_folder_user SET sys_groupid = ? WHERE web_folder_user_id = ?";
+		$app->db->query($sql, $sys_groupid, $this->id);
 	}
 	
 	function onAfterUpdate() {
@@ -89,13 +89,13 @@
 
 		//* When the web folder has been changed
 		if(isset($this->dataRecord['web_folder_id']) && $this->oldDataRecord['web_folder_id'] != $this->dataRecord['web_folder_id']) {
-			$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ".$app->functions->intval($this->dataRecord["web_folder_id"]));
+			$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ?", $this->dataRecord["web_folder_id"]);
 
 			// The web folder user entry shall be owned by the same group as the web folder
 			$sys_groupid = $app->functions->intval($folder['sys_groupid']);
 
-			$sql = "UPDATE web_folder_user SET sys_groupid = '$sys_groupid' WHERE web_folder_user_id = ".$this->id;
-			$app->db->query($sql);
+			$sql = "UPDATE web_folder_user SET sys_groupid = ? WHERE web_folder_user_id = ?";
+			$app->db->query($sql, $sys_groupid, $this->id);
 		}
 
 	}
diff --git a/interface/web/sites/web_sites_stats.php b/interface/web/sites/web_sites_stats.php
index 4e5535e..16c40d4 100644
--- a/interface/web/sites/web_sites_stats.php
+++ b/interface/web/sites/web_sites_stats.php
@@ -40,36 +40,28 @@
 		//** Traffic of the current month
 		$tmp_year = date('Y');
 		$tmp_month = date('m');
-		$tmp_rec = $app->db->queryOneRecord("SELECT SUM(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year' AND MONTH(traffic_date) = '$tmp_month'");
-//		$rec['this_month'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_this_month += ($tmp_rec['t']/1024/1024);
+		$tmp_rec = $app->db->queryOneRecord("SELECT SUM(traffic_bytes) as t FROM web_traffic WHERE hostname = ? AND YEAR(traffic_date) = ? AND MONTH(traffic_date) = ?", $rec['domain'], $tmp_year, $tmp_month);
 		$rec['this_month'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_this_month += $app->functions->formatBytes($tmp_rec['t']);
+		$this->sum_this_month += $tmp_rec['t'];
 
 
 		//** Traffic of the current year
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year'");
-//		$rec['this_year'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_this_year += ($tmp_rec['t']/1024/1024);
+		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = ? AND YEAR(traffic_date) = ?", $rec['domain'], $tmp_year);
 		$rec['this_year'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_this_year += $app->functions->formatBytes($tmp_rec['t']);
+		$this->sum_this_year += $tmp_rec['t'];
 
 		//** Traffic of the last month
 		$tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
 		$tmp_month = date('m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year' AND MONTH(traffic_date) = '$tmp_month'");
-//		$rec['last_month'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_last_month += ($tmp_rec['t']/1024/1024);
+		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = ? AND YEAR(traffic_date) = ? AND MONTH(traffic_date) = ?", $rec['domain'], $tmp_year, $tmp_month);
 		$rec['last_month'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_last_month += $app->functions->formatBytes($tmp_rec['t']);
+		$this->sum_last_month += $tmp_rec['t'];
 
 		//** Traffic of the last year
 		$tmp_year = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y")-1));
-		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$app->db->quote($rec['domain'])."' AND YEAR(traffic_date) = '$tmp_year'");
-//		$rec['last_year'] = number_format($tmp_rec['t']/1024/1024, 0, '.', ' ');
-//		$this->sum_last_year += ($tmp_rec['t']/1024/1024);
+		$tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = ? AND YEAR(traffic_date) = ?", $rec['domain'], $tmp_year);
 		$rec['last_year'] = $app->functions->formatBytes($tmp_rec['t']);
-		$this->sum_last_year += $app->functions->formatBytes($tmp_rec['t']);
+		$this->sum_last_year += $tmp_rec['t'];
 
 		//* The variable "id" contains always the index variable
 		$rec['id'] = $rec[$this->idx_key];
@@ -81,10 +73,10 @@
 	{
 		global $app;
 
-		$app->tpl->setVar('sum_this_month', number_format($app->functions->intval($this->sum_this_month), 0, '.', ' '));
-		$app->tpl->setVar('sum_this_year', number_format($app->functions->intval($this->sum_this_year), 0, '.', ' '));
-		$app->tpl->setVar('sum_last_month', number_format($app->functions->intval($this->sum_last_month), 0, '.', ' '));
-		$app->tpl->setVar('sum_last_year', number_format($app->functions->intval($this->sum_last_year), 0, '.', ' '));
+		$app->tpl->setVar('sum_this_month', $app->functions->formatBytes($this->sum_this_month));
+		$app->tpl->setVar('sum_this_year', $app->functions->formatBytes($this->sum_this_year));
+		$app->tpl->setVar('sum_last_month', $app->functions->formatBytes($this->sum_last_month));
+		$app->tpl->setVar('sum_last_year', $app->functions->formatBytes($this->sum_last_year));
 		$app->tpl->setVar('sum_txt', $app->listform->lng('sum_txt'));
 
 		$app->tpl_defaults();
diff --git a/interface/web/sites/web_vhost_domain_del.php b/interface/web/sites/web_vhost_domain_del.php
index 25c7425..125d92f 100644
--- a/interface/web/sites/web_vhost_domain_del.php
+++ b/interface/web/sites/web_vhost_domain_del.php
@@ -72,45 +72,45 @@
 			if($app->tform->checkPerm($this->id, 'd') == false) $app->error($app->lng('error_no_delete_permission'));
 
 			//* Delete all records that belong to this web.
-			$records = $app->db->queryAllRecords("SELECT domain_id FROM web_domain WHERE parent_domain_id = '".$app->functions->intval($this->id)."' AND type != 'vhost'");
+			$records = $app->db->queryAllRecords("SELECT domain_id FROM web_domain WHERE parent_domain_id = ? AND type != 'vhost'", $this->id);
 			foreach($records as $rec) {
 				$app->db->datalogDelete('web_domain', 'domain_id', $rec['domain_id']);
 			}
 
 			//* Delete all records that belong to this web.
-			$records = $app->db->queryAllRecords("SELECT ftp_user_id FROM ftp_user WHERE parent_domain_id = '".$app->functions->intval($this->id)."'");
+			$records = $app->db->queryAllRecords("SELECT ftp_user_id FROM ftp_user WHERE parent_domain_id = ?", $this->id);
 			foreach($records as $rec) {
 				$app->db->datalogDelete('ftp_user', 'ftp_user_id', $rec['ftp_user_id']);
 			}
 
 			//* Delete all records that belong to this web.
-			$records = $app->db->queryAllRecords("SELECT shell_user_id FROM shell_user WHERE parent_domain_id = '".$app->functions->intval($this->id)."'");
+			$records = $app->db->queryAllRecords("SELECT shell_user_id FROM shell_user WHERE parent_domain_id = ?", $this->id);
 			foreach($records as $rec) {
 				$app->db->datalogDelete('shell_user', 'shell_user_id', $rec['shell_user_id']);
 			}
 
 			//* Delete all records that belong to this web.
-			$records = $app->db->queryAllRecords("SELECT id FROM cron WHERE parent_domain_id = '".$app->functions->intval($this->id)."'");
+			$records = $app->db->queryAllRecords("SELECT id FROM cron WHERE parent_domain_id = ?", $this->id);
 			foreach($records as $rec) {
 				$app->db->datalogDelete('cron', 'id', $rec['id']);
 			}
 
 			//* Delete all records that belong to this web
-			$records = $app->db->queryAllRecords("SELECT webdav_user_id FROM webdav_user WHERE parent_domain_id = '".$app->functions->intval($this->id)."'");
+			$records = $app->db->queryAllRecords("SELECT webdav_user_id FROM webdav_user WHERE parent_domain_id = ?", $this->id);
 			foreach($records as $rec) {
 				$app->db->datalogDelete('webdav_user', 'webdav_user_id', $rec['webdav_user_id']);
 			}
 
 			//* Delete all records that belong to this web
-			$records = $app->db->queryAllRecords("SELECT backup_id FROM web_backup WHERE parent_domain_id = '".$app->functions->intval($this->id)."'");
+			$records = $app->db->queryAllRecords("SELECT backup_id FROM web_backup WHERE parent_domain_id = ?", $this->id);
 			foreach($records as $rec) {
 				$app->db->datalogDelete('web_backup', 'backup_id', $rec['backup_id']);
 			}
 
 			//* Delete all records that belog to this web.
-			$web_domain = $app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+			$web_domain = $app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = ?", $this->id);
 			if($web_domain['domain'] != ''){
-				$aps_instances = $app->db->queryAllRecords("SELECT instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = '".$app->db->quote($web_domain['domain'])."'");
+				$aps_instances = $app->db->queryAllRecords("SELECT instance_id FROM aps_instances_settings WHERE name = 'main_domain' AND value = ?", $web_domain['domain']);
 				if(is_array($aps_instances) && !empty($aps_instances)){
 					foreach($aps_instances as $aps_instance){
 						if($aps_instance['instance_id'] > 0){
@@ -123,10 +123,10 @@
 		}
 
 		//* Delete all web folders
-		$records = $app->db->queryAllRecords("SELECT web_folder_id FROM web_folder WHERE parent_domain_id = '".$app->functions->intval($this->id)."'");
+		$records = $app->db->queryAllRecords("SELECT web_folder_id FROM web_folder WHERE parent_domain_id = ?", $this->id);
 		foreach($records as $rec) {
 			//* Delete all web folder users
-			$records2 = $app->db->queryAllRecords("SELECT web_folder_user_id FROM web_folder_user WHERE web_folder_id = '".$app->functions->intval($rec['web_folder_id'])."'");
+			$records2 = $app->db->queryAllRecords("SELECT web_folder_user_id FROM web_folder_user WHERE web_folder_id = ?", $rec['web_folder_id']);
 			foreach($records2 as $rec2) {
 				$app->db->datalogDelete('web_folder_user', 'web_folder_user_id', $rec2['web_folder_user_id']);
 			}
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 057d263..a4a5a39 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -111,7 +111,7 @@
 			}
 			// Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client.web_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT client.web_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			$web_servers = explode(',', $client['web_servers']);
 			$server_id = $web_servers[0];
 			$app->tpl->setVar("server_id_value", $server_id);
@@ -120,6 +120,10 @@
 			$settings = $app->getconf->get_global_config('sites');
 			$server_id = intval($settings['default_webserver']);
 			$app->tform->formDef['tabs']['domain']['fields']['server_id']['default'] = $server_id;
+		}
+		if(!$server_id){
+			$default_web_server = $app->db->queryOneRecord("SELECT server_id FROM server WHERE web_server = ? ORDER BY server_id LIMIT 0,1", 1);
+			$server_id = $default_web_server['server_id'];
 		}
 		$web_config = $app->getconf->get_server_config($server_id, 'web');
 		$app->tform->formDef['tabs']['domain']['fields']['php']['default'] = $web_config['php_handler'];
@@ -137,7 +141,9 @@
 
 		$read_limits = array('limit_cgi', 'limit_ssi', 'limit_perl', 'limit_ruby', 'limit_python', 'force_suexec', 'limit_hterror', 'limit_wildcard', 'limit_ssl');
 
-		if($this->_vhostdomain_type != 'domain') $parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]));
+		if($this->_vhostdomain_type != 'domain') $parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ?", @$this->dataRecord["parent_domain_id"]);
+		
+		$is_admin = false;
 
 		//* Client: If the logged in user is not admin and has no sub clients (no reseller)
 		if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
@@ -145,11 +151,11 @@
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
 			if($this->_vhostdomain_type == 'domain') {
-				$client = $app->db->queryOneRecord("SELECT client.limit_web_domain, client.web_servers, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.limit_web_domain, client.web_servers, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			} elseif($this->_vhostdomain_type == 'subdomain') {
-				$client = $app->db->queryOneRecord("SELECT client.limit_web_subdomain, client.web_servers, client.default_webserver, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.limit_web_subdomain, client.web_servers, client.default_webserver, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			} elseif($this->_vhostdomain_type == 'aliasdomain') {
-				$client = $app->db->queryOneRecord("SELECT client.limit_web_aliasdomain, client.web_servers, client.default_webserver, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.limit_web_aliasdomain, client.web_servers, client.default_webserver, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			}
 
 			$client['web_servers_ids'] = explode(',', $client['web_servers']);
@@ -161,13 +167,13 @@
 				$web_config[$web_server_id] = $app->getconf->get_server_config($web_server_id, 'web');
 			}
 
-			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client['web_servers'] . ");";
-			$web_servers = $app->db->queryAllRecords($sql);
+			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+			$web_servers = $app->db->queryAllRecords($sql, $client['web_servers_ids']);
 
 			$options_web_servers = "";
 
 			foreach ($web_servers as $web_server) {
-				$options_web_servers .= "<option value='$web_server[server_id]'>$web_server[server_name]</option>";
+				$options_web_servers .= '<option value="'.$web_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $web_server['server_id'] ? ' selected="selected"' : '').'>'.$web_server['server_name'].'</option>';
 			}
 
 			$app->tpl->setVar("server_id", $options_web_servers);
@@ -175,7 +181,7 @@
 
 			if($this->id > 0) {
 				if(!isset($this->dataRecord["server_id"])){
-					$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+					$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id);
 					$this->dataRecord["server_id"] = $tmp["server_id"];
 					unset($tmp);
 				}
@@ -187,15 +193,15 @@
 			if($app->functions->intval($this->dataRecord["server_id"]) > 0) {
 				// check if server is in client's servers or add it.
 				$chk_sid = explode(',', $client['web_servers']);
-				if(in_array($this->dataRecord["server_id"], $client['web_servers']) == false) {
+				if(in_array($this->dataRecord["server_id"], explode(',', $client['web_servers'])) == false) {
 					if($client['web_servers'] != '') $client['web_servers'] .= ',';
 					$client['web_servers'] .= $app->functions->intval($this->dataRecord["server_id"]);
 				}
 			}
 			
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
+			$ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']));
 			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
 			//$ip_select = "";
@@ -210,8 +216,8 @@
 			unset($ips);
 
 			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
+			$ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
 			if(is_array($ips)) {
@@ -231,17 +237,17 @@
 
 			if($this->_vhostdomain_type == 'domain') {
 				if($this->dataRecord['php'] == 'php-fpm'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver']))." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $_SESSION['s']['user']['client_id']);
 				}
 				if($this->dataRecord['php'] == 'fast-cgi'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver']))." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $_SESSION['s']['user']['client_id']);
 				}
 			} else {
 				if($this->dataRecord['php'] == 'php-fpm'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".$app->functions->intval($parent_domain['server_id'])." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 				if($this->dataRecord['php'] == 'fast-cgi'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".$app->functions->intval($parent_domain['server_id'])." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 			}
 			$php_select = "<option value=''>Default</option>";
@@ -270,12 +276,12 @@
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
 
 			if($this->_vhostdomain_type == 'domain') {
-				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_domain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_domain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 				$app->tpl->setVar('only_one_server', $only_one_server);
 			} elseif($this->_vhostdomain_type == 'subdomain') {
-				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_subdomain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_subdomain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			} elseif($this->_vhostdomain_type == 'aliasdomain') {
-				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_aliasdomain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client.client_id, client.limit_web_aliasdomain, client.web_servers, client.default_webserver, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			}
 
 			$client['web_servers_ids'] = explode(',', $client['web_servers']);
@@ -286,13 +292,13 @@
 				$web_config[$web_server_id] = $app->getconf->get_server_config($web_server_id, 'web');
 			}
 
-			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN (" . $client['web_servers'] . ");";
-			$web_servers = $app->db->queryAllRecords($sql);
+			$sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
+			$web_servers = $app->db->queryAllRecords($sql, $client['web_servers_ids']);
 
 			$options_web_servers = "";
 
 			foreach ($web_servers as $web_server) {
-				$options_web_servers .= "<option value='$web_server[server_id]'>$web_server[server_name]</option>";
+				$options_web_servers .= '<option value="'.$web_server['server_id'].'"'.($this->id > 0 && $this->dataRecord["server_id"] == $web_server['server_id'] ? ' selected="selected"' : '').'>'.$web_server['server_name'].'</option>';
 			}
 
 			$app->tpl->setVar("server_id", $options_web_servers);
@@ -300,9 +306,9 @@
 
 			if ($settings['use_domain_module'] != 'y') {
 				// Fill the client select field
-				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id']." ORDER BY client.company_name, client.contact_name, sys_group.name";
-				$records = $app->db->queryAllRecords($sql);
-				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
+				$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+				$records = $app->db->queryAllRecords($sql, $client['client_id']);
+				$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 				$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 				//$tmp_data_record = $app->tform->getDataRecord($this->id);
 				if(is_array($records)) {
@@ -327,8 +333,8 @@
 			}
 			
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)";
+			$ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']);
 			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
 			//$ip_select = "";
@@ -343,8 +349,8 @@
 			unset($ips);
 
 			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN (" . $client['web_servers'] . ") AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
-			$ips = $app->db->queryAllRecords($sql);
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
+			$ips = $app->db->queryAllRecords($sql, $client['web_servers'], $_SESSION['s']['user']['client_id']);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
 			if(is_array($ips)) {
@@ -361,22 +367,21 @@
 			$server_type = 'apache';
 			if(!empty($web_config[$server_id]['server_type'])) $server_type = $web_config[$server_id]['server_type'];
 			if($server_type == 'nginx' && $this->dataRecord['php'] == 'fast-cgi') $this->dataRecord['php'] = 'php-fpm';
-			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ".$app->functions->intval($selected_client_group_id));
-			//$sql_where = " AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id']." OR client_id = ".intval($selected_client['client_id']).")";
-			$sql_where = " AND (client_id = 0 OR client_id = ".intval($selected_client['client_id']).")";
+			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $selected_client_group_id);
+			$sql_where = " AND (client_id = 0 OR client_id = ?)";
 			if($this->_vhostdomain_type == 'domain') {
 				if($this->dataRecord['php'] == 'php-fpm'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver'])).$sql_where);
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?".$sql_where, ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $selected_client['client_id']);
 				}
 				if($this->dataRecord['php'] == 'fast-cgi') {
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".($this->id > 0 ? $app->functions->intval($this->dataRecord['server_id']) : $app->functions->intval($client['default_webserver'])).$sql_where);
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?".$sql_where, ($this->id > 0 ? $this->dataRecord['server_id'] : $client['default_webserver']), $selected_client['client_id']);
 				}
 			} else {
 				if($this->dataRecord['php'] == 'php-fpm'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".$app->functions->intval($parent_domain['server_id'])." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 				if($this->dataRecord['php'] == 'fast-cgi') {
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".$app->functions->intval($parent_domain['server_id'])." AND (client_id = 0 OR client_id=".$app->functions->intval($_SESSION['s']['user']['client_id']).")");
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?)", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 			}
 			$php_select = "<option value=''>Default</option>";
@@ -404,6 +409,7 @@
 				$php_directive_snippets_txt = '';
 				if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
 					foreach($php_directive_snippets as $php_directive_snippet){
+						$php_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $php_directive_snippet['snippet'] . PHP_EOL;
 						$php_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$php_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($php_directive_snippet['snippet']).'</pre></a> ';
 					}
 				}
@@ -415,6 +421,7 @@
 					$apache_directive_snippets_txt = '';
 					if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
 						foreach($apache_directive_snippets as $apache_directive_snippet){
+							$apache_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $apache_directive_snippet['snippet'] . PHP_EOL;
 							$apache_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$apache_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($apache_directive_snippet['snippet']).'</pre></a> ';
 						}
 					}
@@ -427,6 +434,7 @@
 					$nginx_directive_snippets_txt = '';
 					if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
 						foreach($nginx_directive_snippets as $nginx_directive_snippet){
+							$nginx_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $nginx_directive_snippet['snippet'] . PHP_EOL;
 							$nginx_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$nginx_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($nginx_directive_snippet['snippet']).'</pre></a> ';
 						}
 					}
@@ -438,6 +446,7 @@
 				$proxy_directive_snippets_txt = '';
 				if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
 					foreach($proxy_directive_snippets as $proxy_directive_snippet){
+						$proxy_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $proxy_directive_snippet['snippet'] . PHP_EOL;
 						$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($proxy_directive_snippet['snippet']).'</pre></a> ';
 					}
 				}
@@ -447,12 +456,14 @@
 
 			//* Admin: If the logged in user is admin
 		} else {
+		
+			$is_admin = true;
 
 			if($this->_vhostdomain_type == 'domain') {
 				// The user is admin, so we fill in all IP addresses of the server
 				if($this->id > 0) {
 					if(!isset($this->dataRecord["server_id"])){
-						$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+						$tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id);
 						$this->dataRecord["server_id"] = $tmp["server_id"];
 						unset($tmp);
 					}
@@ -475,8 +486,8 @@
 			}
 
 			//* Fill the IPv4 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = ".$app->functions->intval($server_id);
-			$ips = $app->db->queryAllRecords($sql);
+			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = ?";
+			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//$ip_select = "";
 			if(is_array($ips)) {
@@ -490,8 +501,8 @@
 			unset($ips);
 
 			//* Fill the IPv6 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = ".$app->functions->intval($server_id);
-			$ips = $app->db->queryAllRecords($sql);
+			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = ?";
+			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
 			if(is_array($ips)) {
@@ -527,22 +538,21 @@
 			$server_type = 'apache';
 			if(!empty($web_config['server_type'])) $server_type = $web_config['server_type'];
 			if($server_type == 'nginx' && $this->dataRecord['php'] == 'fast-cgi') $this->dataRecord['php'] = 'php-fpm';
-			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ".$app->functions->intval($selected_client_group_id));
-			//$sql_where = " AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id']." OR client_id = ".intval($selected_client['client_id']).")";
-			$sql_where = " AND (client_id = 0 OR client_id = ".$app->functions->intval($selected_client['client_id']).")";
+			$selected_client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $selected_client_group_id);
+			$sql_where = " AND (client_id = 0 OR client_id = ?)";
 			if($this->_vhostdomain_type == 'domain') {
 				if($this->dataRecord['php'] == 'php-fpm'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = $server_id".$sql_where);
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?".$sql_where, $server_id, $selected_client['client_id']);
 				}
 				if($this->dataRecord['php'] == 'fast-cgi') {
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ".$app->functions->intval($server_id).$sql_where);
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?".$sql_where, $server_id, $selected_client['client_id']);
 				}
 			} else {
 				if($this->dataRecord['php'] == 'php-fpm'){
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = " . $app->functions->intval($parent_domain['server_id']));
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $parent_domain['server_id']);
 				}
 				if($this->dataRecord['php'] == 'fast-cgi') {
-					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = " . $app->functions->intval($parent_domain['server_id']));
+					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ?", $parent_domain['server_id']);
 				}
 			}
 			$php_select = "<option value=''>Default</option>";
@@ -567,6 +577,7 @@
 			$php_directive_snippets_txt = '';
 			if(is_array($php_directive_snippets) && !empty($php_directive_snippets)){
 				foreach($php_directive_snippets as $php_directive_snippet){
+					$php_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $php_directive_snippet['snippet'] . PHP_EOL;
 					$php_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$php_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($php_directive_snippet['snippet']).'</pre></a> ';
 				}
 			}
@@ -578,6 +589,7 @@
 				$apache_directive_snippets_txt = '';
 				if(is_array($apache_directive_snippets) && !empty($apache_directive_snippets)){
 					foreach($apache_directive_snippets as $apache_directive_snippet){
+						$apache_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $apache_directive_snippet['snippet'] . PHP_EOL;
 						$apache_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$apache_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($apache_directive_snippet['snippet']).'</pre></a> ';
 					}
 				}
@@ -590,6 +602,7 @@
 				$nginx_directive_snippets_txt = '';
 				if(is_array($nginx_directive_snippets) && !empty($nginx_directive_snippets)){
 					foreach($nginx_directive_snippets as $nginx_directive_snippet){
+						$nginx_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $nginx_directive_snippet['snippet'] . PHP_EOL;
 						$nginx_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$nginx_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($nginx_directive_snippet['snippet']).'</pre></a> ';
 					}
 				}
@@ -601,6 +614,7 @@
 			$proxy_directive_snippets_txt = '';
 			if(is_array($proxy_directive_snippets) && !empty($proxy_directive_snippets)){
 				foreach($proxy_directive_snippets as $proxy_directive_snippet){
+					$proxy_directive_snippet['snippet'] = PHP_EOL . PHP_EOL . $proxy_directive_snippet['snippet'] . PHP_EOL;
 					$proxy_directive_snippets_txt .= '<a href="javascript:void(0);" class="addPlaceholderContent">['.$proxy_directive_snippet['name'].']<pre class="addPlaceholderContent" style="display:none;">'.htmlentities($proxy_directive_snippet['snippet']).'</pre></a> ';
 				}
 			}
@@ -610,7 +624,7 @@
 
 		$ssl_domain_select = '';
 		$ssl_domains = array();
-		$tmpd = $app->db->queryAllRecords("SELECT domain, type FROM web_domain WHERE domain_id = ".$this->id." OR parent_domain_id = ".$this->id);
+		$tmpd = $app->db->queryAllRecords("SELECT domain, type FROM web_domain WHERE domain_id = ? OR parent_domain_id = ?", $this->id, $this->id);
 		foreach($tmpd as $tmp) {
 			if($tmp['type'] == 'subdomain' || $tmp['type'] == 'vhostsubdomain') {
 				$ssl_domains[] = $tmp["domain"];
@@ -621,7 +635,7 @@
 		if(is_array($ssl_domains)) {
 			foreach( $ssl_domains as $ssl_domain) {
 				$selected = ($ssl_domain == $this->dataRecord['ssl_domain'])?'SELECTED':'';
-				$ssl_domain_select .= "<option value='$ssl_domain' $selected>$ssl_domain</option>\r\n";
+				$ssl_domain_select .= "<option value='$ssl_domain' $selected>".$app->functions->idn_decode($ssl_domain)."</option>\r\n";
 			}
 		}
 		$app->tpl->setVar("ssl_domain", $ssl_domain_select);
@@ -679,12 +693,16 @@
 				$domain_select .= "<option value=''></option>\r\n";
 			}
 			$app->tpl->setVar("domain_option", $domain_select);
+		} else {
+
+			// remove the parent domain part of the domain name before we show it in the text field.
+			if($this->dataRecord["type"] == 'vhostsubdomain') $this->dataRecord["domain"] = str_replace('.'.$parent_domain["domain"], '', $this->dataRecord["domain"]);
 		}
 		if($this->_vhostdomain_type != 'domain') $app->tpl->setVar("domain", $this->dataRecord["domain"]);
 
 		// check for configuration errors in sys_datalog
 		if($this->id > 0) {
-			$datalog = $app->db->queryOneRecord("SELECT sys_datalog.error, sys_log.tstamp FROM sys_datalog, sys_log WHERE sys_datalog.dbtable = 'web_domain' AND sys_datalog.dbidx = 'domain_id:".$app->functions->intval($this->id)."' AND sys_datalog.datalog_id = sys_log.datalog_id AND sys_log.message = CONCAT('Processed datalog_id ',sys_log.datalog_id) ORDER BY sys_datalog.tstamp DESC");
+			$datalog = $app->db->queryOneRecord("SELECT sys_datalog.error, sys_log.tstamp FROM sys_datalog, sys_log WHERE sys_datalog.dbtable = 'web_domain' AND sys_datalog.dbidx = ? AND sys_datalog.datalog_id = sys_log.datalog_id AND sys_log.message = CONCAT('Processed datalog_id ',sys_log.datalog_id) ORDER BY sys_datalog.tstamp DESC", 'domain_id:' . $this->id);
 			if(is_array($datalog) && !empty($datalog)){
 				if(trim($datalog['error']) != ''){
 					$app->tpl->setVar("config_error_msg", nl2br(htmlentities($datalog['error'])));
@@ -695,6 +713,20 @@
 		
 		$app->tpl->setVar('vhostdomain_type', $this->_vhostdomain_type);
 
+		$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
+		$app->tpl->setVar("is_admin", $is_admin);
+		
+		if($this->id > 0) {
+			$tmp_web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", intval($this->id));
+			$tmp_sys_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE groupid = ?", intval($tmp_web['sys_groupid']));
+			if(intval($tmp_sys_group['client_id']) > 0) $tmp_client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", intval($tmp_sys_group['client_id']));
+			if(is_array($tmp_client) && !empty($tmp_client) && trim($this->dataRecord['ssl_organisation']) == '' && trim($this->dataRecord['ssl_locality']) == '' && trim($this->dataRecord['ssl_state']) == '' && trim($this->dataRecord['ssl_organisation_unit']) == '') $app->tpl->setVar("show_helper_links", true);
+		}
+
+		$sys_config = $app->getconf->get_global_config('misc');
+		if($sys_config['use_combobox'] == 'y') {
+			$app->tpl->setVar('use_combobox', 'y');
+		}
 		parent::onShowEnd();
 	}
 
@@ -715,12 +747,12 @@
 		} else {
 			// Get the record of the parent domain
 			if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
-				$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ?", $this->id);
 				if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
 				unset($tmp);
 			}
 
-			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+			$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 			if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 
 			if($this->_vhostdomain_type == 'subdomain') {
@@ -782,14 +814,6 @@
 
 				// vhostaliasdomains do not have a quota of their own
 				$this->dataRecord["hd_quota"] = 0;
-
-				// check for duplicate folder usage
-				/*
-		        $check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE `type` = 'vhostalias' AND `parent_domain_id` = '" . $app->functions->intval($this->dataRecord['parent_domain_id']) . "' AND `web_folder` = '" . $app->db->quote($this->dataRecord['web_folder']) . "' AND `domain_id` != '" . $app->functions->intval($this->id) . "'");
-		        if($check && $check['cnt'] > 0) {
-		            $app->tform->errorMessage .= $app->tform->lng("web_folder_unique_txt")."<br>";
-		        }
-				*/
 			}
 		}
 
@@ -798,7 +822,7 @@
 		if($_SESSION["s"]["user"]["typ"] != 'admin') {
 			// Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, limit_web_aliasdomain, limit_web_subdomain, web_servers, parent_client_id, limit_web_quota, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, limit_web_aliasdomain, limit_web_subdomain, web_servers, parent_client_id, limit_web_quota, client." . implode(", client.", $read_limits) . " FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			$client['web_servers_ids'] = explode(',', $client['web_servers']);
 
@@ -814,7 +838,7 @@
 
 			// only generate quota and traffic warnings if value has changed
 			if($this->id > 0) {
-				$old_web_values = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+				$old_web_values = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->id);
 			} else {
 				$old_web_values = array();
 			}
@@ -822,7 +846,7 @@
 			if($this->_vhostdomain_type == 'domain') {
 				//* Check the website quota of the client
 				if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
-					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'));
+					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ? AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'), $this->id);
 					$webquota = $tmp["webquota"];
 					$new_web_quota = $app->functions->intval($this->dataRecord["hd_quota"]);
 					if(($webquota + $new_web_quota > $client["limit_web_quota"]) || ($new_web_quota < 0 && $client["limit_web_quota"] >= 0)) {
@@ -839,7 +863,7 @@
 
 			//* Check the traffic quota of the client
 			if(isset($_POST["traffic_quota"]) && $client["limit_traffic_quota"] > 0 && $_POST["traffic_quota"] != $old_web_values["traffic_quota"]) {
-				$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
+				$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain WHERE domain_id != ? AND ".$app->tform->getAuthSQL('u'), $this->id);
 				$trafficquota = $tmp["trafficquota"];
 				$new_traffic_quota = $app->functions->intval($this->dataRecord["traffic_quota"]);
 				if(($trafficquota + $new_traffic_quota > $client["limit_traffic_quota"]) || ($new_traffic_quota < 0 && $client["limit_traffic_quota"] >= 0)) {
@@ -855,12 +879,12 @@
 
 			if($client['parent_client_id'] > 0) {
 				// Get the limits of the reseller
-				$reseller = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, limit_web_aliasdomain, limit_web_subdomain, web_servers, limit_web_quota FROM client WHERE client_id = ".$client['parent_client_id']);
+				$reseller = $app->db->queryOneRecord("SELECT limit_traffic_quota, limit_web_domain, limit_web_aliasdomain, limit_web_subdomain, web_servers, limit_web_quota FROM client WHERE client_id = ?", $client['parent_client_id']);
 
 				if($this->_vhostdomain_type == 'domain') {
 					//* Check the website quota of the client
 					if(isset($_POST["hd_quota"]) && $reseller["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
-						$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain, sys_group, client WHERE web_domain.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ".$client['parent_client_id']." IN (client.parent_client_id, client.client_id) AND domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost'");
+						$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain, sys_group, client WHERE web_domain.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ? IN (client.parent_client_id, client.client_id) AND domain_id != ? AND type = 'vhost'", $client['parent_client_id'], $this->id);
 
 						$webquota = $tmp["webquota"];
 						$new_web_quota = $app->functions->intval($this->dataRecord["hd_quota"]);
@@ -878,7 +902,7 @@
 
 				//* Check the traffic quota of the client
 				if(isset($_POST["traffic_quota"]) && $reseller["limit_traffic_quota"] > 0 && $_POST["traffic_quota"] != $old_web_values["traffic_quota"]) {
-					$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain, sys_group, client WHERE web_domain.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ".$client['parent_client_id']." IN (client.parent_client_id, client.client_id) AND domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost'");
+					$tmp = $app->db->queryOneRecord("SELECT sum(traffic_quota) as trafficquota FROM web_domain, sys_group, client WHERE web_domain.sys_groupid=sys_group.groupid AND sys_group.client_id=client.client_id AND ? IN (client.parent_client_id, client.client_id) AND domain_id != ? AND type = 'vhost'", $client['parent_client_id'], $this->id);
 					$trafficquota = $tmp["trafficquota"];
 					$new_traffic_quota = $app->functions->intval($this->dataRecord["traffic_quota"]);
 					if(($trafficquota + $new_traffic_quota > $reseller["limit_traffic_quota"]) || ($new_traffic_quota < 0 && $reseller["limit_traffic_quota"] >= 0)) {
@@ -896,7 +920,7 @@
 			// 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, `system_user`, `system_group`, `web_folder`, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT server_id, `system_user`, `system_group`, `web_folder`, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ?", $this->id);
 				$this->dataRecord["server_id"] = $tmp["server_id"];
 				$this->dataRecord['web_folder'] = $tmp['web_folder']; // cannot be changed!
 				$this->dataRecord['system_user'] = $tmp['system_user'];
@@ -925,17 +949,17 @@
 
 				// Check if the user may add another web_domain
 				if($this->_vhostdomain_type == 'domain' && $client["limit_web_domain"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and type = 'vhost'");
+					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = ? and type = 'vhost'", $client_group_id);
 					if($tmp["number"] >= $client["limit_web_domain"]) {
 						$app->error($app->tform->wordbook["limit_web_domain_txt"]);
 					}
 				} elseif($this->_vhostdomain_type == 'aliasdomain' && $client["limit_web_aliasdomain"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and (type = 'alias' OR type = 'vhostalias')");
+					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = ? and (type = 'alias' OR type = 'vhostalias')", $client_group_id);
 					if($tmp["number"] >= $client["limit_web_aliasdomain"]) {
 						$app->error($app->tform->wordbook["limit_web_aliasdomain_txt"]);
 					}
 				} elseif($this->_vhostdomain_type == 'subdomain' && $client["limit_web_subdomain"] >= 0) {
-					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and (type = 'subdomain' OR type = 'vhostsubdomain')");
+					$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = ? and (type = 'subdomain' OR type = 'vhostsubdomain')", $client_group_id);
 					if($tmp["number"] >= $client["limit_web_subdomain"]) {
 						$app->error($app->tform->wordbook["limit_web_subdomain_txt"]);
 					}
@@ -962,8 +986,8 @@
 		$web_config = $app->getconf->get_server_config($app->functions->intval(isset($this->dataRecord["server_id"]) ? $this->dataRecord["server_id"] : $server_id), 'web');
 		//* Check for duplicate ssl certs per IP if SNI is disabled
 		if(isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y' && $web_config['enable_sni'] != 'y') {
-			$sql = "SELECT count(domain_id) as number FROM web_domain WHERE `ssl` = 'y' AND ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."' and domain_id != ".$this->id;
-			$tmp = $app->db->queryOneRecord($sql);
+			$sql = "SELECT count(domain_id) as number FROM web_domain WHERE `ssl` = 'y' AND ip_address = ? and domain_id != ?";
+			$tmp = $app->db->queryOneRecord($sql, $this->dataRecord['ip_address'], $this->id);
 			if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("error_no_sni_txt");
 		}
 
@@ -1064,6 +1088,11 @@
 			}
 		}
 
+		if($web_config['enable_spdy'] === 'n') {
+			unset($app->tform->formDef["tabs"]['ssl']['fields']['enable_spdy']);
+		}
+		if($this->dataRecord["directive_snippets_id"] < 1) $this->dataRecord["enable_pagespeed"] = 'n';
+
 		parent::onSubmit();
 	}
 
@@ -1074,11 +1103,11 @@
 		// 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 = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE domain_id = ".$this->id);
+			$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $this->id);
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE domain_id = ".$this->id);
+			$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'riud' WHERE domain_id = ?", $client_group_id, $this->id);
 		}
 
 		// Get configuration for the web system
@@ -1096,47 +1125,48 @@
 			// get the ID of the client
 			if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = $client_group_id");
+				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $client_group_id);
 				$client_id = $app->functions->intval($client["client_id"]);
 			} else {
 				//$client_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".$app->functions->intval($this->dataRecord["client_group_id"]));
+				$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $this->dataRecord["client_group_id"]);
 				$client_id = $app->functions->intval($client["client_id"]);
 			}
 
 			// Set the values for document_root, system_user and system_group
-			$system_user = $app->db->quote('web'.$this->id);
-			$system_group = $app->db->quote('client'.$client_id);
+			$system_user = 'web'.$this->id;
+			$system_group = 'client'.$client_id;
 			$document_root = str_replace("[client_id]", $client_id, $document_root);
 			$document_root = str_replace("[client_idhash_1]", $this->id_hash($client_id, 1), $document_root);
 			$document_root = str_replace("[client_idhash_2]", $this->id_hash($client_id, 2), $document_root);
 			$document_root = str_replace("[client_idhash_3]", $this->id_hash($client_id, 3), $document_root);
 			$document_root = str_replace("[client_idhash_4]", $this->id_hash($client_id, 4), $document_root);
-			$document_root = $app->db->quote($document_root);
+			$document_root = $document_root;
 			$php_open_basedir = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
-			$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir));
-			$htaccess_allow_override = $app->db->quote($web_config["htaccess_allow_override"]);
+			$php_open_basedir = str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir);
+			$htaccess_allow_override = $web_config["htaccess_allow_override"];
 			$added_date = date($app->lng('conf_format_dateshort'));
-			$added_by = $app->db->quote($_SESSION['s']['user']['username']);
+			$added_by = $_SESSION['s']['user']['username'];
 
-			$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir', added_date = '$added_date', added_by = '$added_by'  WHERE domain_id = ".$this->id;
+			$sql = "UPDATE web_domain SET system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?, added_date = ?, added_by = ?  WHERE domain_id = ?";
+			$app->db->query($sql, $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_date, $added_by, $this->id);
 		} else  {
 			// Set the values for document_root, system_user and system_group
-			$system_user = $app->db->quote($this->parent_domain_record['system_user']);
-			$system_group = $app->db->quote($this->parent_domain_record['system_group']);
-			$document_root = $app->db->quote($this->parent_domain_record['document_root']);
+			$system_user = $this->parent_domain_record['system_user'];
+			$system_group = $this->parent_domain_record['system_group'];
+			$document_root = $this->parent_domain_record['document_root'];
 			$php_open_basedir = str_replace("[website_path]/web", $document_root.'/'.$web_rec['web_folder'], $web_config["php_open_basedir"]);
 			$php_open_basedir = str_replace("[website_domain]/web", $web_rec['domain'].'/'.$web_rec['web_folder'], $php_open_basedir);
 			$php_open_basedir = str_replace("[website_path]", $document_root, $php_open_basedir);
-			$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir));
-			$htaccess_allow_override = $app->db->quote($this->parent_domain_record['allow_override']);
+			$php_open_basedir = str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir);
+			$htaccess_allow_override = $this->parent_domain_record['allow_override'];
 			$added_date = date($app->lng('conf_format_dateshort'));
-			$added_by = $app->db->quote($_SESSION['s']['user']['username']);
-
-			$sql = "UPDATE web_domain SET sys_groupid = ".$app->functions->intval($this->parent_domain_record['sys_groupid']).",system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir', added_date = '$added_date', added_by = '$added_by' WHERE domain_id = ".$this->id;
+			$added_by = $_SESSION['s']['user']['username'];
+			
+			$sql = "UPDATE web_domain SET sys_groupid = ?, system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?, added_date = ?, added_by = ?  WHERE domain_id = ?";
+			$app->db->query($sql, $this->parent_domain_record['sys_groupid'], $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_date, $added_by, $this->id);
 		}
 
-		$app->db->query($sql);
 	}
 
 	function onBeforeUpdate () {
@@ -1147,7 +1177,7 @@
 			// 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'])) {
 				if (isset($this->dataRecord["server_id"])) {
-					$rec = $app->db->queryOneRecord("SELECT server_id from web_domain WHERE domain_id = ".$this->id);
+					$rec = $app->db->queryOneRecord("SELECT server_id from web_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.');
@@ -1158,7 +1188,7 @@
 				//* 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 sys_perm_group, domain, ip_address, ipv6_address from web_domain WHERE domain_id = ".$this->id);
+				$rec = $app->db->queryOneRecord("SELECT sys_perm_group, domain, ip_address, ipv6_address from web_domain WHERE domain_id = ?", $this->id);
 				if(isset($this->dataRecord["domain"]) && $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.');
diff --git a/interface/web/sites/web_vhost_domain_list.php b/interface/web/sites/web_vhost_domain_list.php
index f2089e2..378eeaa 100644
--- a/interface/web/sites/web_vhost_domain_list.php
+++ b/interface/web/sites/web_vhost_domain_list.php
@@ -76,7 +76,7 @@
 }
 
 $list = new list_action;
-$list->SQLExtWhere = "web_domain.type = '" . $query_type . "'" . ($show_type != 'domain' ? " AND web_domain.parent_domain_id = '0'" : "");
+$list->SQLExtWhere = "web_domain.type = '" . $query_type . "'" . ($show_type == 'domain' ? " AND web_domain.parent_domain_id = '0'" : "");
 $list->SQLOrderBy = 'ORDER BY web_domain.domain';
 $list->onLoad();
 
diff --git a/interface/web/sites/webdav_user_edit.php b/interface/web/sites/webdav_user_edit.php
index fcea99e..73e47eb 100644
--- a/interface/web/sites/webdav_user_edit.php
+++ b/interface/web/sites/webdav_user_edit.php
@@ -102,7 +102,7 @@
 		global $app, $conf;
 
 		/* Get the record of the parent domain */
-		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		$parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), @$this->dataRecord["parent_domain_id"]);
 		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 
 		/*
@@ -139,10 +139,13 @@
 			$this->dataRecord['username'] = $webdavuser_prefix . $this->dataRecord['username'];
 
 			/*
-			 * We shall not save the pwd in plaintext, so we store it as the hash, the apache-moule needs
-			 */
-			$hash = md5($this->dataRecord["username"] . ':' . $this->dataRecord["dir"] . ':' . $this->dataRecord["password"]);
-			$this->dataRecord["password"] = $hash;
+			*  Get the data of the domain, owning the webdav user
+			*/
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+			/* The server is the server of the domain */
+			$this->dataRecord["server_id"] = $web["server_id"];
+			/* The Webdav user shall be owned by the same group then the website */
+			$this->dataRecord["sys_groupid"] = $web['sys_groupid'];
 		}
 
 		parent::onBeforeInsert();
@@ -151,14 +154,20 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 		$server_id = $app->functions->intval($web["server_id"]);
 
 		// The webdav user shall be owned by the same group then the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
-
-		$sql = "UPDATE webdav_user SET server_id = $server_id, sys_groupid = '$sys_groupid' WHERE webdav_user_id = ".$this->id;
-		$app->db->query($sql);
+		
+		/*
+		 * We shall not save the pwd in plaintext, so we store it as the hash, the apache-moule needs
+		 */
+		$hash = md5($this->dataRecord["username"] . ':' . $this->dataRecord["dir"] . ':' . $this->dataRecord["password"]);
+		$this->dataRecord["password"] = $hash;
+		
+		$sql = "UPDATE webdav_user SET server_id = ?, sys_groupid = ?, password = ? WHERE webdav_user_id = ?";
+		$app->db->query($sql, $server_id, $sys_groupid, $this->dataRecord["password"], $this->id);
 	}
 
 	function onBeforeUpdate() {
@@ -168,20 +177,11 @@
 		 * we can not change the username and the dir, so get the "old" - data from the db
 		 * and set it
 		*/
-		$data = $app->db->queryOneRecord("SELECT * FROM webdav_user WHERE webdav_user_id = ".$app->functions->intval($this->id));
+		$data = $app->db->queryOneRecord("SELECT * FROM webdav_user WHERE webdav_user_id = ?", $this->id);
 		$this->dataRecord["username"] = $data['username'];
 		$this->dataRecord["dir"]      = $data['dir'];
 		$this->dataRecord['username_prefix'] = $data['username_prefix'];
-		$passwordOld = $data['password'];
-
-		/*
-		 * We shall not save the pwd in plaintext, so we store it as the hash, the apache-moule
-		 * needs (only if the pwd is changed)
-		 */
-		if ((isset($this->dataRecord["password"])) && ($this->dataRecord["password"] != '') && ($this->dataRecord["password"] != $passwordOld)) {
-			$hash = md5($this->dataRecord["username"] . ':' . $this->dataRecord["dir"] . ':' . $this->dataRecord["password"]);
-			$this->dataRecord["password"] = $hash;
-		}
+		$this->dataRecord['passwordOld'] = $data['password'];
 
 		parent::onBeforeUpdate();
 	}
@@ -191,15 +191,26 @@
 
 		//* When the site of the webdav user has been changed
 		if(isset($this->dataRecord['parent_domain_id']) && $this->oldDataRecord['parent_domain_id'] != $this->dataRecord['parent_domain_id']) {
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->dataRecord["parent_domain_id"]);
 			$server_id = $app->functions->intval($web["server_id"]);
 
 			// The webdav user shall be owned by the same group then the website
 			$sys_groupid = $app->functions->intval($web['sys_groupid']);
 
-			$sql = "UPDATE webdav_user SET server_id = $server_id, sys_groupid = '$sys_groupid' WHERE webdav_user_id = ".$this->id;
-			$app->db->query($sql);
+			$sql = "UPDATE webdav_user SET server_id = ?, sys_groupid = ? WHERE webdav_user_id = ?";
+			$app->db->query($sql, $server_id, $sys_groupid, $this->id);
 		}
+		
+		/*
+		 * We shall not save the pwd in plaintext, so we store it as the hash, the apache-moule
+		 * needs (only if the pwd is changed)
+		 */
+		if ((isset($this->dataRecord["password"])) && ($this->dataRecord["password"] != '') && ($this->dataRecord["password"] != $this->dataRecord['passwordOld'])) {
+			$hash = md5($this->dataRecord["username"] . ':' . $this->dataRecord["dir"] . ':' . $this->dataRecord["password"]);
+			$this->dataRecord["password"] = $hash;
+			$app->db->query("UPDATE webdav_user SET password = ? WHERE webdav_user_id = ?", $this->dataRecord["password"], $this->id);
+		}
+		
 	}
 
 }
diff --git a/interface/web/themes/blue/css/styles.css b/interface/web/themes/blue/css/styles.css
deleted file mode 100644
index 2843c9f..0000000
--- a/interface/web/themes/blue/css/styles.css
+++ /dev/null
@@ -1,1876 +0,0 @@
-@charset "UTF-8";
-/* 
-    Document   : styles.css
-    Created on : 06.07.2012, 12:21:59
-    Author     : Christian Foellmann (foe-services.de)
-    Description:
-        Basis was css-code from the "ISPConfig 3: default theme" which was based on
-        "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework 3.0.6
-        by Copyright 2005-2008, Dirk Jesse (http://www.yaml.de)
-*/
-
-/* overall
--------------------------------------------------------------- */
-* {
-    margin: 0;
-    padding: 0;
-}
-html * { font-size: 100.01% }
-body {
-    font-family: "Trebuchet MS", sans-serif;
-    font-size: 75.00%; 
-    color: #444;
-    background: url("../../default/images/screen_bg.png") repeat-x top left fixed #EEEEEE;
-    padding: 10px 0;
-}
-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 }
-a {
-    color: #444;
-    text-decoration:none;
-}
-a:focus,
-a:hover,
-a:active {
-    color:#182E7A;
-    text-decoration:underline;
-}
-hr {
-    color: #fff;
-    background:transparent;
-    margin: 0 0 0.5em 0;
-    padding: 0 0 0.5em 0;
-    border:0;
-    border-bottom: 1px #eee solid;
-}
-textarea, pre, tt, code {
-    font-family: Consolas,"Lucida Console","Courier New",monospace;
-    font-size: 0.9em;	
-}
-
-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 */
-
-p { line-height: 1.5em; margin: 0 0 1em 0; }
-
-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;
-}
-
-header, #nav, #main, footer {
-    clear: both;
-}
-#page {
-    min-width: 980px;
-    max-width: 80%;
-    background: #fff;
-    text-align:left;
-    margin: 0 auto;
-    padding: 10px;
-}
-.skip, .hideme, .print {
-    height: 1px;
-    left: -1000em;
-    position: absolute;
-    top: -1000em;
-    width: 1px;
-}
-
-/* header
--------------------------------------------------------------- */
-header {
-    position: relative;
-    color: #faf0e6;
-    padding: 15px 2em 5px 20px;
-    background: url("../images/header_bg.png") repeat-x top left #6da1ed;
-}
-header h1 {
-    font-size:2.5em;
-    letter-spacing:-2px;
-    line-height:65%;
-    color: silver;
-}
-header span {
-    color: #333333;
-}
-
-/* header/topsubnav
--------------------------------------------------------------- */
-#topsubnav {
-    position:absolute;
-    top: 10px;
-    right: 10px;
-    text-align: right;
-}
-#topsubnav a { 
-    color: #6da0ed;
-    font-weight: normal;
-    background:transparent;
-    text-decoration:none;
-}
-#topsubnav a:focus, 
-#topsubnav a:hover,
-#topsubnav a:active {
-    text-decoration:underline;
-    background-color: transparent;
-}
-
-/* nav
--------------------------------------------------------------- */
-#topNav ul {
-    list-style: none;
-    padding: 0 0 0 20px;
-    margin: 0;
-    background: #6da1ed
-}
-
-#topNav ul li {
-    display: inline;
-    margin: 0 2px 0 0;
-}
-
-#topNav a {
-    background: url("../icons/x32_sprite.png") no-repeat #6DA1ED;
-    border-top-left-radius:5px;
-    border-top-right-radius:5px;
-    color:black;
-    display:inline-block;
-    height:20px;
-    padding-top:37px;
-    text-align:center;
-    text-decoration:none;
-    min-width:78px;
-}
-
-#topNav a:hover {
-    background-color: #eeeeee;
-    color: #000000;
-}
-
-#topNav #topNav_current a {
-    font-weight: bold;
-    color: black;
-    background-color: #ffffff;
-}
-.topnav-tools { background-position: 22px -10px !important; }
-.topnav-admin { background-position: 22px -74px !important; }
-.topnav-sites { background-position: 22px -523px !important; }
-.topnav-monitor { background-position: 22px -585px !important; }
-.topnav- { background-position: 22px -650px !important; }
-.topnav-help { background-position: 22px -715px !important; }
-.topnav-mail { background-position: 22px -780px !important; }
-.topnav-mailuser { background-position: 22px -780px !important; }
-.topnav-vm { background-position: 22px -842px !important; }
-.topnav-domain { background-position: 22px -905px !important; }
-.topnav-dns { background-position: 22px -970px !important; }
-.topnav-dashboard { background-position: 22px -1035px !important; }
-.topnav-client { background-position: 22px -1098px !important; }
-.topnav-billing { background-position: 22px -1162px !important; }
-#topNav a span {
-            padding: 0 3px;
-        }
-/* main
--------------------------------------------------------------- */
-#main { 
-    background: #fff;
-    padding: 1em 0;
-}
-
-/* main/sideNav + submenu
--------------------------------------------------------------- */
-#sideNav { 
-    width: 200px; 
-    float:left;
-    padding: 0 10px 0 0; 
-}
-
-#submenu {
-    width: 100%;
-    overflow: hidden;
-    margin: 0px;
-    list-style-type: none;
-    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;
-    font-size:0.9em;
-}
-
-#submenu a,
-#submenu strong {
-    display:block;
-    width: 90%;
-    padding: 2px 0px 2px 10%;
-    text-decoration: none;
-    background-color:#fff;
-    color: #444;
-    border-bottom: 1px #eee solid;
-}
-
-/* Menu Title */
-#submenu li.title {
-    width: 100%;
-    padding: 0px;
-    font-weight: bold;
-    color: #444;
-    background-color: #fff;
-    border-top: 2px #888 solid;
-    font-size: 1.1em;
-}
-
-#submenu li.title a {
-    background-color: #444;
-    color: #fff;
-}
-#submenu li.title a:hover {
-    color: white;
-}
-
-#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:#444;
-    color: #fff;
-}
-
-/* Form-Elements in the Menu*/
-#submenu * select#server_id {
-    margin: 3px 10%;
-    padding: 1px;
-    width: 80%;
-}
-
-/* main/content
--------------------------------------------------------------- */
-#content { 
-    margin-left: 200px; 
-    margin-right: 0;
-    padding: 0px 10px 10px 20px;
-    border-left: 1px #ddd solid;
-}
-
-/* footer
--------------------------------------------------------------- */
-
-footer { 
-    color:#666; 
-    background: #f9f9f9;
-    padding: 10px 20px;
-    border-top: 5px #efefef solid;
-    font-size: 0.8em;
-    text-align: center;
-}
-footer a {
-    color: #999;
-    background:transparent;
-    font-weight: bold;
-}
-footer a:hover, footer a:active {
-    color: #4D87C7; 
-    background-color: transparent; 
-    text-decoration:underline;
-}
-
-/* Set a background-color, no system backgorund used anymore */
-select, input, textarea {
-    background: #FFFFFF;
-    border: 1px solid #DFDFDF;
-    padding: 1px;
-    outline:none;
-}
-
-table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
-table.full { width: 100%; }
-table.fixed { table-layout:fixed }
-
-table.list td {
-    max-width: 350px;
-    min-width: 32px;
-    white-space: nowrap;
-    overflow:hidden;
-    text-overflow: ellipsis;
-    -o-text-overflow: ellipsis;
-    -icab-text-overflow: ellipsis;
-    -khtml-text-overflow: ellipsis;
-    -moz-text-overflow: ellipsis;
-    -webkit-text-overflow: ellipsis;
-}
-th,
-td {
-    padding: 0.5em;
-    text-align:left;
-}
-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;
-}
-table.list th[class$="_pid"],
-table.list td[class$="_pid"],
-table.list th[class$="_active"],
-table.list td[class$="_active"],
-table.list th.tbl_col_autoresponder,
-table.list td.tbl_col_autoresponder,
-table.list th.tbl_col_postfix,
-table.list td.tbl_col_postfix,
-table.list th.tbl_col_disablesmtp,
-table.list td.tbl_col_disablesmtp,
-table.list th.tbl_col_disableimap,
-table.list td.tbl_col_disableimap,
-table.list th.tbl_col_disablepop3,
-table.list td.tbl_col_disablepop3 {
-    width: 70px;
-    text-align: center;
-}
-table.list .tbl_col_buttons,
-table.list .tbl_col_limit {
-    width: 150px;
-}
-.tbl_col_client_pid input {
-    width: 50px;
-}
-.pnl_listarea th[class^="tbl_col"] { cursor:pointer; }
-.pnl_listarea th[class^="tbl_col"]:hover { background-position:0 -15px!important; }
-.pnl_listarea th.tbl_col_nosort { cursor:default; }
-.pnl_listarea th.tbl_col_nosort:hover { background-position:0 0!important; }
-
-.pageForm_description { font-size: 12px; }
-
-/* Tab-Box */
-.tabbox_tabs { border-bottom: 1px solid #d3d3d3; }
-.tabbox_tabs ul {
-    list-style: none;
-    padding: 0;
-    margin: 0;
-}
-.tabbox_tabs li {
-    display: inline;
-    margin: 0 2px 0 0;
-}
-.tabbox_tabs a {
-    padding: 0 1em;
-    text-decoration: none;
-    color: black;
-    background: #d3d3d3;
-    border: 1px solid #d3d3d3;
-}
-.tabbox_tabs a:hover {
-    background: #fc0;
-    color: #540;
-}
-.tabbox_tabs .active a {
-    font-weight: bold;
-    color: #ff6600;
-    background: #ffffff;
-}
-.pnl_toolsarea fieldset, .pnl_listarea fieldset, .pnl_formsarea fieldset {
-    border-top: 1px solid #949494;
-    margin: 20px 0;
-}
-.pnl_toolsarea fieldset legend , .pnl_listarea fieldset legend {
-    font-weight: bold;
-    color: #6299c5;
-}
-.pnl_formarea fieldset {
-    font-weight: bold;
-}
-/* hide line and legend when inside tabbed content */
-#tabbox_content * .pnl_toolsarea fieldset, #tabbox_content * .pnl_listarea fieldset, #tabbox_content * .pnl_formsarea fieldset { border: none !important; }
-#tabbox_content * .pnl_toolsarea fieldset legend, #tabbox_content * .pnl_listarea fieldset legend, #tabbox_content * .pnl_formsarea fieldset legend { display: none !important; }
-.codeview {
-    margin:20px 0;
-    padding:2px;
-    border: 1px solid #ffcc00;
-    background: #fffaea;
-    font-family: Consolas, "Lucida Console", "Courier New", monospace;
-    font-size: 0.9em;
-}
-/* Lists */
-table.list {
-    width: 100%;
-    border: 1px solid #d3d3d3 !important;
-}
-table.list thead th { font-size: 10px; }
-table.list tbody { border: 1px solid #d3d3d3 !important; }
-table.list tfoot td { text-align: center;  background: #444 url("../images/lists_tfoot_bg.png") repeat-x bottom left;  padding: 24px 8px 8px 8px; }
-table.list .tbl_paging img { vertical-align: top; }
-table.list .tbl_row_even { background: #fcfcfc; }
-table.list .tbl_row_uneven { background: #c2d2ea; }
-table.list tr:hover { background: #cffaaf; }
-table.list td { word-wrap:break-word;white-space:pre-wrap; }
-table.list td.tbl_col_buttons { word-wrap:normal;white-space:normal;overflow:visible; }
-
-/* Password Strength */
-#passBar {
-    width: 101px; height: 10px;
-    background: url("../../default/images/meter_bg.gif") repeat-x bottom left;
-    margin: 2px 0;
-    float: left;
-}
-#passText {
-    padding: 0;
-    float: left;
-}
-
-/* Systemmonitor */
-.systemmonitor-server,
-.systemmonitor-ve,
-.systemmonitor-state {
-    margin: 10px 5px;
-    font-family: Consolas, "Lucida Console", "Courier New", monospace;
-    font-size: 0.9em;
-    float: left;
-    width: 100%;
-}
-.systemmonitor-server:hover,
-.systemmonitor-vm:hover { background-color: #FFFACD; }
-.state-no_state,
-.state-no_state-ve {
-    border-top: 4px solid #95A19F;
-    background-color: #f8f8ff;
-}
-.state-unknown,
-.state-unknown-ve {
-    border-top: 4px solid #30302e;
-    background-color: #cecfc5;
-}
-.state-ok,
-.state-ok-ve {
-    border-top: 4px solid #23fb00;
-    background-color: #adffa2;
-}
-.state-info,
-.state-info-ve {
-    border-top: 4px solid #183e99;
-    background-color: #d4e2ff;
-}
-.state-warning,
-.state-warning-ve {
-    border-top: 4px solid #ffa800;
-    background-color: #ffda93;
-}
-.state-critical,
-.state-critical-ve {
-    border-top: 4px solid #ff0000;
-    background-color: #ffb9b9;
-}
-.state-error,
-.state-error-ve {
-    border-top: 4px solid #ff0000;
-    background-color: #ff7f7f;
-}       
-div.icoDevice {
-    float: left;
-    width: 64px;
-    height: 64px;
-    margin: 5px;
-    background: url("../../default/icons/device_sprite.png") no-repeat transparent;
-}
-.systemmonitor-server div.icoDevice { background-position: 0 0; }
-.systemmonitor-ve div.icoDevice { background-position: -64px 0; }
-.systemmonitor-network div.icoDevice { background-position: -128px 0; }
-div.statusDevice,
-div.statusMsg { float: left; }
-div.statusMsg p { 
-    float: left;
-    padding: 5px;
-}
-.systemmonitor-state .status {
-    margin: 5px;
-}
-.status {
-    float: right;
-    width: 32px;
-    height: 32px;
-    background: url("../icons/x32_sprite.png") no-repeat transparent;
-}
-div.status {
-    float: left !important;
-}
-.state-warning .status,
-.state-warning-ve .status { background-position: 0 -143px; }
-.state-no_state .status,
-.state-no_state-ve .status,
-.state-unknown .status,
-.state-unknown-ve .status { background-position: 0 -207px; }
-.state-ok .status,
-.state-ok-ve .status { background-position: 0 -270px; }
-.state-info .status,
-.state-info-ve .status { background-position: 0 -336px; }
-.state-error .status,
-.state-error-ve .status { background-position: 0 -400px; }
-.state-critical .status,
-.state-critical-ve .status { background-position: 0 -463px; }
-
-/* Usage unknown  
-.systemmonitor-content table {
-    border: none;
-    margin-top: 10px;
-}
-
-.systemmonitor-content * .online {
-    border: 1px solid #ffffff;
-    background-color: #E3FFB8;
-    color: #000000;
-    padding:0px 5px;
-}
-.systemmonitor-content * .offline {
-    border: 1px solid #ffffff;
-    background-color: #d12f19; 
-    color:#ffffff;
-    padding:0px 5px;
-}*/
-
-/* Dashboard */
-.dashboard-modules {
-    float:left;
-    width:60px;
-    height: 60px;
-    border:1px dotted #888888;
-    border-radius:5px;
-    background-color: #cccccc;
-    margin:10px;
-    background-position: center 5px;
-    background-repeat: no-repeat;
-    text-align: center;
-}
-.dashboard-modules a, 
-.dashboard-modules a:hover {
-    background: url("../icons/x32_sprite.png") no-repeat transparent;
-    color:Black;
-    display:block;
-    font-weight:bold;
-    height:30px;
-    padding-top:42px;
-    width:60px;
-    text-decoration: none;
-}
-.dashboard-modules.tools a { background-position: 12px -9px; }
-.dashboard-modules.admin a { background-position: 12px -73px; }
-.dashboard-modules.sites a { background-position: 12px -520px; }
-.dashboard-modules.monitor a { background-position: 13px -585px; }
-.dashboard-modules.help a { background-position: 13px -716px; }
-.dashboard-modules.mail a { background-position: 12px -776px; }
-.dashboard-modules.vm a { background-position: 14px -842px; }
-.dashboard-modules.domain a { background-position: 12px -905px; }
-.dashboard-modules.dns a { background-position: 12px -970px; }
-.dashboard-modules.client a { background-position: 13px -1096px; }
-.dashboard-modules.billing a { background-position: 14px -1162px; }
-
-.panel_dashboard h2 { font-size:20px; }
-
-/* Image-Replacement */
-.swap { background-repeat:no-repeat; }
-.swap span { display:none; height:16px; } 
-#ir-HeaderLogo {
-    background-image: url("../../default/images/header_logo.png");
-    height:32px;
-    margin:0 0 0.2em;
-} 
-div#ir-Yes,
-div#ir-No {
-    text-align: center;
-    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
-}
-#ir-Yes {
-    background-position: center -342px !important;
-    height: 16px;
-}
-#ir-No {
-    background-position: center -362px !important;
-    height: 16px;
-}
-.swap {
-    background-repeat: no-repeat;
-}
-.swap span {
-    display: none;
-    height: 16px;
-}
-/* BUTTONS */
-a.button,
-.button,
-.buttons button {
-    display: inline-block;
-    margin: 0 2px;
-    padding: 2px 5px;
-    color: #525252;
-    text-shadow: 0px 1px 1px #fff;
-    border: 1px solid #c6c6c6;
-    border-radius: 4px;
-    background-color: #f7f7f7;
-    box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    -o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    -webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    -moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    text-decoration: none;
-}
-a.button:focus,
-input.button:focus,
-.buttons button:focus {
-    border-color: #4fadd5;
-    box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    outline: none;
-}
-.buttons button[type]{
-    padding:5px 10px 5px 7px; /* Firefox */
-    line-height:17px; /* Safari */
-    white-space: nowrap;
-}
-*:first-child+html button[type]{
-    padding:4px 10px 3px 7px; /* IE7 */
-}
-.buttons button img,
-.buttons a img {
-    margin:0 3px -3px 0 !important;
-    padding:0;
-    border:none;
-    width:16px;
-    height:16px;
-}
-.topbuttons {
-    margin-bottom: 10px;
-}
-/* BUTTONS STANDARD */
-button:hover,
-.buttons a:hover {
-    background-color:#dff4ff;
-    border:1px solid #c2e1ef;
-    color:#336699;
-}
-.buttons a:active {
-    background-color:#6299c5;
-    border:1px solid #6299c5;
-    color:#fff;
-}
-
-/* BUTTONS POSITIVE */
-button.positive,
-.buttons a.positive { color:#529214; }
-.buttons a.positive:hover,
-button.positive:hover {
-    background-color:#E6EFC2;
-    border:1px solid #C6D880;
-    color:#529214;
-}
-.buttons a.positive:active {
-    background-color:#529214;
-    border:1px solid #529214;
-    color:#fff;
-}
-
-/* BUTTONS NEGATIVE */
-.buttons a.negative,
-button.negative {
-    color:#d12f19;
-}
-.buttons a.negative:hover,
-button.negative:hover {
-    background-color:#fbe3e4;
-    border:1px solid #fbc2c4;
-    color:#d12f19;
-}
-.buttons a.negative:active {
-    background-color:#d12f19;
-    border:1px solid #d12f19;
-    color:#fff;
-}
-
-/* Button with icon and text */
-.iconstxt { background: url("../../default/icons/button_sprite.png") no-repeat transparent; }
-.iconstxt span { padding-left: 20px; font-weight: bold; }
-.iconstxt.icoPositive { background-position: 6px -130px; }
-.iconstxt.icoNegative { background-position: 6px -98px; }
-.iconstxt.icoAdd { background-position: 6px -66px; }
-.iconstxt.icoKey { background-position: 6px -1px; }
-.iconstxt.icoDelete { background-position: 6px -34px; }
-.iconstxt.icoDownload { background-position: 6px -1px; }
-.iconstxt.icoRestore { background-position: 6px -1px; }
-
-/* Button with icon and without text */
-.icons16 { position: relative; }
-.icons16>span {
-    opacity: 0;
-    visibility: hidden;
-    -webkit-transition: opacity 1s linear;
-    -moz-transition: opacity 1s linear;
-    -o-transition: opacity 1s linear;
-    -ms-transition: opacity 1s linear;
-    transition: opacity 1s linear;
-    position: absolute;
-    right: 23px;
-    top: -1px;
-    padding: 1px 2px;
-    border: 1px solid rgb(155,155,11);
-    background: rgb(255,255,111);
-    white-space: nowrap;
-}
-.icons16:hover>span {
-    opacity: 1.0;
-    visibility: visible;
-}
-a.icons16 {
-    height: 18px;
-    width: 18px;
-    padding: 0;
-    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
-}
-button.icons16 {
-    height: 20px;
-    width: 20px;
-    padding: 0;
-    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
-}
-.icons16.icoEdit { background-position: -1px -1px; }
-.icons16.icoLoginAs { background-position: -1px -21px; }
-.icons16.icoPDF { background-position: -1px -61px; }
-.icons16.icoDelete { background-position: -1px -81px; }
-.icons16.icoWebmailer { background-position: -1px -101px; }
-.icons16.icoFilter { background-position: -1px -161px; }
-.icons16.icoDbAdmin { background-position: -1px -221px; }
-.icons16.icoAction { background-position: -1px -241px; }
-.icons16.icoLink { background-position: -1px -422px; float: right; }
-
-div.group-icon {
-    float: left;
-    padding: 2px 0;
-}
-.group-admin,
-.group-user {
-    height: 20px;
-    width: 20px;
-    padding: 0;
-    float: left;
-    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
-}
-.group-admin { background-position: 0 -380px; }
-.group-user { background-position: 0 -400px; }
-
-span.marked { color: #cc0000; }
-span.small { font-size: 0.9em; }
-
-#ajaxloader {
-    position: absolute;
-    width: 325px;
-    height: 150px;
-    background: #ffffff url('../images/ajax-loader.gif') no-repeat center center;
-    border: solid 2px #e1e1e1;
-    border-radius: 10px;
-    /*background: rgba(255, 255, 255, 0.85);*/
-    padding: 20px;
-    text-align:center;
-    z-index: 100;
-}
-.blockLabel.email_at {
-    width: 20px !important;
-    margin: 1.6em 0.3em 0 0 !important;
-}
-.textDisplay { display: block; }
-
-/* Form Length Classes */
-.textInput.formLengthBool { width: 25px !important; }
-.selectInput.formLengthBool { width: 60px !important; }
-.textInput.formLengthLimit { width: 50px !important; }
-.selectInput.formLengthLimit { width: 85px !important; }
-.formLengthDate { width: 75px !important; }
-.formLengthIPv4 { width: 125px !important; }
-.formLengthIPv6 { }
-.formLengthEmailUser { width: 30% !important; }
-.formLengthEmailDomain { width: 30% !important; }
-.formLengthHalf { width: 15% !important; }
-.formLengthDouble { width: 50% !important; }
-
-/* Individual Form Lengths */
-.textInput#username, 
-.textInput#password,
-.textInput#passwort,
-.textInput#source_password { width: 100px; }
-.selectInput#language {	width: 75px; }
-.selectInput#client_group_id, .selectInput#default_group { width: 125px; }
-input#refresh, input#retry, input#expire, input#minimum, input#ttl { width: 50px !important; }
-
-/* --- */
-
-a[href $="#logout"] {
-    padding-right: 20px;
-    background: url("../../default/icons/x16_sprite.png") no-repeat right -143px transparent !important;
-}
-
-/* Select Menu with Images */
-select.withicons option {
-    background-repeat:no-repeat;
-    background-position: 1px;
-    padding-left:24px;
-}	
-div[class^=country-] {
-    background-image: url("../../default/icons/flags_sprite.png");
-    background-repeat: no-repeat;
-    height: 20px;
-    width: 26px;
-}
-li[class^=country-] {
-    background-image: url("../../default/icons/flags_sprite.png");
-    background-repeat: no-repeat;
-    text-indent: 24px;
-}
-li[class^=country-] a.ui-state-hover { background: transparent; }
-div[class^=country-] span {
-    display: none;
-}
-select.flags option {
-    background-image: url("../../default/icons/flags_sprite.png");
-    background-repeat: no-repeat;
-    padding: 1px 0 1px 30px;
-}
-select.flags option[value=EL] {background-position:0 -1475px}
-select.flags option[value=AD], select.flags option[value=ad], .country-AD {background-position:0 -1px}
-select.flags option[value=AE], select.flags option[value=ae], .country-AE {background-position:0 -23px}
-select.flags option[value=AF], select.flags option[value=af], .country-AF {background-position:0 -45px}
-select.flags option[value=AG], select.flags option[value=ag], .country-AG {background-position:0 -67px}
-select.flags option[value=AI], select.flags option[value=ai], .country-AI {background-position:0 -89px}
-select.flags option[value=AL], select.flags option[value=al], .country-AL {background-position:0 -111px}
-select.flags option[value=AM], select.flags option[value=am], .country-AM {background-position:0 -133px}
-select.flags option[value=AN], select.flags option[value=an], .country-AN {background-position:0 -155px}
-select.flags option[value=AO], select.flags option[value=ao], .country-AO {background-position:0 -177px}
-select.flags option[value=AQ], select.flags option[value=aq], .country-AQ {background-position:0 -199px}
-select.flags option[value=AR], select.flags option[value=ar], .country-AR {background-position:0 -221px}
-select.flags option[value=AS], select.flags option[value=as], .country-AS {background-position:0 -243px}
-select.flags option[value=AT], select.flags option[value=at], .country-AT {background-position:0 -265px}
-select.flags option[value=AU], select.flags option[value=au], .country-AU {background-position:0 -287px}
-select.flags option[value=AW], select.flags option[value=aw], .country-AW {background-position:0 -309px}
-select.flags option[value=AX], select.flags option[value=ax], .country-AX {background-position:0 -331px}
-select.flags option[value=AZ], select.flags option[value=az], .country-AZ {background-position:0 -353px}
-select.flags option[value=BA], select.flags option[value=ba], .country-BA {background-position:0 -375px}
-select.flags option[value=BB], select.flags option[value=bb], .country-BB {background-position:0 -397px}
-select.flags option[value=BD], select.flags option[value=bd], .country-BD {background-position:0 -419px}
-select.flags option[value=BE], select.flags option[value=be], .country-BE {background-position:0 -441px}
-select.flags option[value=BF], select.flags option[value=bf], .country-BF {background-position:0 -463px}
-select.flags option[value=BG], select.flags option[value=bg], .country-BG {background-position:0 -485px}
-select.flags option[value=BH], select.flags option[value=bh], .country-BH {background-position:0 -507px}
-select.flags option[value=BI], select.flags option[value=bi], .country-BI {background-position:0 -529px}
-select.flags option[value=BJ], select.flags option[value=bj], .country-BJ {background-position:0 -551px}
-select.flags option[value=BM], select.flags option[value=bm], .country-BM {background-position:0 -573px}
-select.flags option[value=BN], select.flags option[value=bn], .country-BN {background-position:0 -595px}
-select.flags option[value=BO], select.flags option[value=bo], .country-BO {background-position:0 -617px}
-select.flags option[value=BR], select.flags option[value=br], .country-BR {background-position:0 -639px}
-select.flags option[value=BS], select.flags option[value=bs], .country-BS {background-position:0 -661px}
-select.flags option[value=BT], select.flags option[value=bt], .country-BT {background-position:0 -683px}
-select.flags option[value=BV], select.flags option[value=bv], .country-BV {background-position:0 -705px}
-select.flags option[value=BW], select.flags option[value=bw], .country-BW {background-position:0 -727px}
-select.flags option[value=BY], select.flags option[value=by], .country-BY {background-position:0 -749px}
-select.flags option[value=BZ], select.flags option[value=bz], .country-BZ {background-position:0 -771px}
-select.flags option[value=CA], select.flags option[value=ca], .country-CA {background-position:0 -793px}
-select.flags option[value=CC], select.flags option[value=cc], .country-CC {background-position:0 -837px}
-select.flags option[value=CD], select.flags option[value=cd], .country-CD {background-position:0 -859px}
-select.flags option[value=CF], select.flags option[value=cf], .country-CF {background-position:0 -881px}
-select.flags option[value=CG], select.flags option[value=cg], .country-CG {background-position:0 -903px}
-select.flags option[value=CH], select.flags option[value=ch], .country-CH {background-position:0 -925px}
-select.flags option[value=CI], select.flags option[value=ci], .country-CI {background-position:0 -947px}
-select.flags option[value=CK], select.flags option[value=ck], .country-CK {background-position:0 -969px}
-select.flags option[value=CL], select.flags option[value=cl], .country-CL {background-position:0 -991px}
-select.flags option[value=CM], select.flags option[value=cm], .country-CM {background-position:0 -1013px}
-select.flags option[value=CN], select.flags option[value=cn], .country-CN {background-position:0 -1035px}
-select.flags option[value=CO], select.flags option[value=co], .country-CO {background-position:0 -1057px}
-select.flags option[value=CR], select.flags option[value=cr], .country-CR {background-position:0 -1079px}
-select.flags option[value=CS], select.flags option[value=cs], .country-CS {background-position:0 -1101px}
-select.flags option[value=CU], select.flags option[value=cu], .country-CU {background-position:0 -1123px}
-select.flags option[value=CV], select.flags option[value=cv], .country-CV {background-position:0 -1145px}
-select.flags option[value=CX], select.flags option[value=cx], .country-CX {background-position:0 -1167px}
-select.flags option[value=CY], select.flags option[value=cy], .country-CY {background-position:0 -1189px}
-select.flags option[value=CZ], select.flags option[value=cz], .country-CZ {background-position:0 -1211px}
-select.flags option[value=DE], select.flags option[value=de], .country-DE {background-position:0 -1233px}
-select.flags option[value=DJ], select.flags option[value=dj], .country-DJ {background-position:0 -1255px}
-select.flags option[value=DK], select.flags option[value=dk], .country-DK {background-position:0 -1277px}
-select.flags option[value=DM], select.flags option[value=dm], .country-DM {background-position:0 -1299px}
-select.flags option[value=DO], select.flags option[value=do], .country-DO {background-position:0 -1321px}
-select.flags option[value=DZ], select.flags option[value=dz], .country-DZ {background-position:0 -1343px}
-select.flags option[value=EC], select.flags option[value=ec], .country-EC {background-position:0 -1365px}
-select.flags option[value=EE], select.flags option[value=ee], .country-EE {background-position:0 -1387px}
-select.flags option[value=EG], select.flags option[value=eg], .country-EG {background-position:0 -1409px}
-select.flags option[value=EH], select.flags option[value=eh], .country-EH {background-position:0 -1431px}
-select.flags option[value=ER], select.flags option[value=er], .country-ER {background-position:0 -1475px}
-select.flags option[value=ES], select.flags option[value=es], .country-ES {background-position:0 -1497px}
-select.flags option[value=ET], select.flags option[value=ET], select.flags option[value=et], .country-ET {background-position:0 -1519px}
-select.flags option[value=FI], select.flags option[value=fi], .country-FI {background-position:0 -1585px}
-select.flags option[value=FJ], select.flags option[value=fj], .country-FJ {background-position:0 -1607px}
-select.flags option[value=FK], select.flags option[value=fk], .country-FK {background-position:0 -1629px}
-select.flags option[value=FM], select.flags option[value=fm], .country-FM {background-position:0 -1651px}
-select.flags option[value=FO], select.flags option[value=fo], .country-FO {background-position:0 -1673px}
-select.flags option[value=FR], select.flags option[value=fr], .country-FR {background-position:0 -1695px}
-select.flags option[value=GA], select.flags option[value=ga], .country-GA {background-position:0 -1717px}
-select.flags option[value=GB], select.flags option[value=en], select.flags option[value=gb], .country-GB, .country-EN {background-position:0 -1739px}
-select.flags option[value=GD], select.flags option[value=gd], .country-GD {background-position:0 -1761px}
-select.flags option[value=GE], select.flags option[value=ge], .country-GE {background-position:0 -1783px}
-select.flags option[value=GF], select.flags option[value=gf], .country-GF {background-position:0 -1805px}
-select.flags option[value=GH], select.flags option[value=gh], .country-GH {background-position:0 -1827px}
-select.flags option[value=GI], select.flags option[value=gi], .country-GI {background-position:0 -1849px}
-select.flags option[value=GL], select.flags option[value=gl], .country-GL {background-position:0 -1871px}
-select.flags option[value=GM], select.flags option[value=gm], .country-GM {background-position:0 -1893px}
-select.flags option[value=GN], select.flags option[value=gn], .country-GN {background-position:0 -1915px}
-select.flags option[value=GP], select.flags option[value=gp], .country-GP {background-position:0 -1937px}
-select.flags option[value=GQ], select.flags option[value=gq], .country-GQ {background-position:0 -1959px}
-select.flags option[value=GR], select.flags option[value=el], select.flags option[value=gr], .country-GR, .country-EL {background-position:0 -1981px}
-select.flags option[value=GS], select.flags option[value=gs], .country-GS {background-position:0 -2003px}
-select.flags option[value=GT], select.flags option[value=gt], .country-GT {background-position:0 -2025px}
-select.flags option[value=GU], select.flags option[value=gu], .country-GU {background-position:0 -2047px}
-select.flags option[value=GW], select.flags option[value=gw], .country-GW {background-position:0 -2069px}
-select.flags option[value=GY], select.flags option[value=gy], .country-GY {background-position:0 -2091px}
-select.flags option[value=HK], select.flags option[value=hk], .country-HK {background-position:0 -2113px}
-select.flags option[value=HM], select.flags option[value=hm], .country-HM {background-position:0 -2135px}
-select.flags option[value=HN], select.flags option[value=hn], .country-HN {background-position:0 -2157px}
-select.flags option[value=HR], select.flags option[value=hr], .country-HR {background-position:0 -2179px}
-select.flags option[value=HT], select.flags option[value=ht], .country-HT {background-position:0 -2201px}
-select.flags option[value=HU], select.flags option[value=hu], .country-HU {background-position:0 -2223px}
-select.flags option[value=ID], select.flags option[value=id], .country-ID {background-position:0 -2245px}
-select.flags option[value=IE], select.flags option[value=ie], .country-IE {background-position:0 -2267px}
-select.flags option[value=IL], select.flags option[value=il], .country-IL {background-position:0 -2289px}
-select.flags option[value=IN], select.flags option[value=in], .country-IN {background-position:0 -2311px}
-select.flags option[value=IO], select.flags option[value=io], .country-IO {background-position:0 -2333px}
-select.flags option[value=IQ], select.flags option[value=iq], .country-IQ {background-position:0 -2355px}
-select.flags option[value=IR], select.flags option[value=ir], .country-IR {background-position:0 -2377px}
-select.flags option[value=IS], select.flags option[value=is], .country-IS {background-position:0 -2399px}
-select.flags option[value=IT], select.flags option[value=it], .country-IT {background-position:0 -2421px}
-select.flags option[value=JM], select.flags option[value=jm], .country-JM {background-position:0 -2443px}
-select.flags option[value=JO], select.flags option[value=jo], .country-JO {background-position:0 -2465px}
-select.flags option[value=JP], select.flags option[value=ja], select.flags option[value=jp], .country-JP, .country-JA {background-position:0 -2487px}
-select.flags option[value=KE], select.flags option[value=ke], .country-KE {background-position:0 -2509px}
-select.flags option[value=KG], select.flags option[value=kg], .country-KG {background-position:0 -2531px}
-select.flags option[value=KH], select.flags option[value=kh], .country-KH {background-position:0 -2553px}
-select.flags option[value=KI], select.flags option[value=ki], .country-KI {background-position:0 -2575px}
-select.flags option[value=KM], select.flags option[value=km], .country-KM {background-position:0 -2597px}
-select.flags option[value=KN], select.flags option[value=kn], .country-KN {background-position:0 -2619px}
-select.flags option[value=KP], select.flags option[value=kp], .country-KP {background-position:0 -2641px}
-select.flags option[value=KR], select.flags option[value=kr], .country-KR {background-position:0 -2663px}
-select.flags option[value=KW], select.flags option[value=kw], .country-KW {background-position:0 -2685px}
-select.flags option[value=KY], select.flags option[value=ky], .country-KY {background-position:0 -2707px}
-select.flags option[value=KZ], select.flags option[value=kz], .country-KZ {background-position:0 -2729px}
-select.flags option[value=LA], select.flags option[value=la], .country-LA {background-position:0 -2751px}
-select.flags option[value=LB], select.flags option[value=lb], .country-LB {background-position:0 -2773px}
-select.flags option[value=LC], select.flags option[value=lc], .country-LC {background-position:0 -2795px}
-select.flags option[value=LI], select.flags option[value=li], .country-LI {background-position:0 -2817px}
-select.flags option[value=LK], select.flags option[value=lk], .country-LK {background-position:0 -2839px}
-select.flags option[value=LR], select.flags option[value=lr], .country-LR {background-position:0 -2861px}
-select.flags option[value=LS], select.flags option[value=ls], .country-LS {background-position:0 -2883px}
-select.flags option[value=LT], select.flags option[value=lt], .country-LT {background-position:0 -2905px}
-select.flags option[value=LU], select.flags option[value=lu], .country-LU {background-position:0 -2927px}
-select.flags option[value=LV], select.flags option[value=lv], .country-LV {background-position:0 -2949px}
-select.flags option[value=LY], select.flags option[value=ly], .country-LY {background-position:0 -2971px}
-select.flags option[value=MA], select.flags option[value=ma], .country-MA {background-position:0 -2993px}
-select.flags option[value=MC], select.flags option[value=mc], .country-MC {background-position:0 -3015px}
-select.flags option[value=MD], select.flags option[value=md], .country-MD {background-position:0 -3037px}
-select.flags option[value=ME], select.flags option[value=me], .country-ME {background-position:0 -3059px}
-select.flags option[value=MG], select.flags option[value=mg], .country-MG {background-position:0 -3081px}
-select.flags option[value=MH], select.flags option[value=mh], .country-MH {background-position:0 -3103px}
-select.flags option[value=MK], select.flags option[value=mk], .country-MK {background-position:0 -3125px}
-select.flags option[value=ML], select.flags option[value=ml], .country-ML {background-position:0 -3147px}
-select.flags option[value=MM], select.flags option[value=mm], .country-MM {background-position:0 -3169px}
-select.flags option[value=MN], select.flags option[value=mn], .country-MN {background-position:0 -3191px}
-select.flags option[value=MO], select.flags option[value=mo], .country-MO {background-position:0 -3213px}
-select.flags option[value=MP], select.flags option[value=mp], .country-MP {background-position:0 -3235px}
-select.flags option[value=MQ], select.flags option[value=mq], .country-MQ {background-position:0 -3257px}
-select.flags option[value=MR], select.flags option[value=mr], .country-MR {background-position:0 -3279px}
-select.flags option[value=MS], select.flags option[value=ms], .country-MS {background-position:0 -3301px}
-select.flags option[value=MT], select.flags option[value=mt], .country-MT {background-position:0 -3323px}
-select.flags option[value=MU], select.flags option[value=mu], .country-MU {background-position:0 -3345px}
-select.flags option[value=MV], select.flags option[value=mv], .country-MV {background-position:0 -3367px}
-select.flags option[value=MW], select.flags option[value=mw], .country-MW {background-position:0 -3389px}
-select.flags option[value=MX], select.flags option[value=mx], .country-MX {background-position:0 -3411px}
-select.flags option[value=MY], select.flags option[value=my], .country-MY {background-position:0 -3433px}
-select.flags option[value=MZ], select.flags option[value=mz], .country-MZ {background-position:0 -3455px}
-select.flags option[value=NA], select.flags option[value=na], .country-NA {background-position:0 -3477px}
-select.flags option[value=NC], select.flags option[value=nc], .country-NC {background-position:0 -3499px}
-select.flags option[value=NE], select.flags option[value=ne], .country-NE {background-position:0 -3521px}
-select.flags option[value=NF], select.flags option[value=nf], .country-NF {background-position:0 -3543px}
-select.flags option[value=NG], select.flags option[value=ng], .country-NG {background-position:0 -3565px}
-select.flags option[value=NI], select.flags option[value=ni], .country-NI {background-position:0 -3587px}
-select.flags option[value=NL], select.flags option[value=nl], .country-NL {background-position:0 -3609px}
-select.flags option[value=NO], select.flags option[value=no], .country-NO {background-position:0 -3631px}
-select.flags option[value=NP], select.flags option[value=np], .country-NP {background-position:0 -3653px}
-select.flags option[value=NR], select.flags option[value=nr], .country-NR {background-position:0 -3675px}
-select.flags option[value=NU], select.flags option[value=nu], .country-NU {background-position:0 -3697px}
-select.flags option[value=NZ], select.flags option[value=nz], .country-NZ {background-position:0 -3719px}
-select.flags option[value=OM], select.flags option[value=om], .country-OM {background-position:0 -3741px}
-select.flags option[value=PA], select.flags option[value=pa], .country-PA {background-position:0 -3763px}
-select.flags option[value=PE], select.flags option[value=pe], .country-PE {background-position:0 -3785px}
-select.flags option[value=PF], select.flags option[value=pf], .country-PF {background-position:0 -3807px}
-select.flags option[value=PG], select.flags option[value=pg], .country-PG {background-position:0 -3829px}
-select.flags option[value=PH], select.flags option[value=ph], .country-PH {background-position:0 -3851px}
-select.flags option[value=PK], select.flags option[value=pk], .country-PK {background-position:0 -3873px}
-select.flags option[value=PL], select.flags option[value=pl], .country-PL {background-position:0 -3895px}
-select.flags option[value=PM], select.flags option[value=pm], .country-PM {background-position:0 -3917px}
-select.flags option[value=PN], select.flags option[value=pn], .country-PN {background-position:0 -3939px}
-select.flags option[value=PR], select.flags option[value=pr], .country-PR {background-position:0 -3961px}
-select.flags option[value=PS], select.flags option[value=ps], .country-PS {background-position:0 -3983px}
-select.flags option[value=PT], select.flags option[value=pt], .country-PT {background-position:0 -4005px}
-select.flags option[value=PW], select.flags option[value=pw], .country-PW {background-position:0 -4027px}
-select.flags option[value=PY], select.flags option[value=py], .country-PY {background-position:0 -4049px}
-select.flags option[value=QA], select.flags option[value=qa], .country-QA {background-position:0 -4071px}
-select.flags option[value=RE], select.flags option[value=re], .country-RE {background-position:0 -4093px}
-select.flags option[value=RO], select.flags option[value=ro], .country-RO {background-position:0 -4115px}
-select.flags option[value=RS], select.flags option[value=rs], .country-RS {background-position:0 -4137px}
-select.flags option[value=RU], select.flags option[value=ru], .country-RU {background-position:0 -4159px}
-select.flags option[value=RW], select.flags option[value=rw], .country-RW {background-position:0 -4181px}
-select.flags option[value=SA], select.flags option[value=sa], .country-SA {background-position:0 -4203px}
-select.flags option[value=SB], select.flags option[value=sb], .country-SB {background-position:0 -4225px}
-select.flags option[value=SC], select.flags option[value=sc], .country-SC {background-position:0 -4247px}
-select.flags option[value=SD], select.flags option[value=sd], .country-SD {background-position:0 -4291px}
-select.flags option[value=SE], select.flags option[value=se], .country-SE {background-position:0 -4313px}
-select.flags option[value=SG], select.flags option[value=sg], .country-SG {background-position:0 -4335px}
-select.flags option[value=SH], select.flags option[value=sh], .country-SH {background-position:0 -4357px}
-select.flags option[value=SI], select.flags option[value=si], .country-SI {background-position:0 -4379px}
-select.flags option[value=SJ], select.flags option[value=sj], .country-SJ {background-position:0 -4401px}
-select.flags option[value=SK], select.flags option[value=sk], .country-SK {background-position:0 -4423px}
-select.flags option[value=SL], select.flags option[value=sl], .country-SL {background-position:0 -4445px}
-select.flags option[value=SM], select.flags option[value=sm], .country-SM {background-position:0 -4467px}
-select.flags option[value=SN], select.flags option[value=sn], .country-SN {background-position:0 -4489px}
-select.flags option[value=SO], select.flags option[value=so], .country-SO {background-position:0 -4511px}
-select.flags option[value=SR], select.flags option[value=sr], .country-SR {background-position:0 -4533px}
-select.flags option[value=ST], select.flags option[value=st], .country-ST {background-position:0 -4555px}
-select.flags option[value=SV], select.flags option[value=sv], .country-SV {background-position:0 -4577px}
-select.flags option[value=SY], select.flags option[value=sy], .country-SY {background-position:0 -4599px}
-select.flags option[value=SZ], select.flags option[value=sz], .country-SZ {background-position:0 -4621px}
-select.flags option[value=TC], select.flags option[value=tc], .country-TC {background-position:0 -4643px}
-select.flags option[value=TD], select.flags option[value=td], .country-TD {background-position:0 -4665px}
-select.flags option[value=TF], select.flags option[value=tf], .country-TF {background-position:0 -4687px}
-select.flags option[value=TG], select.flags option[value=tg], .country-TG {background-position:0 -4709px}
-select.flags option[value=TH], select.flags option[value=th], .country-TH {background-position:0 -4731px}
-select.flags option[value=TJ], select.flags option[value=tj], .country-TJ {background-position:0 -4753px}
-select.flags option[value=TK], select.flags option[value=tk], .country-TK {background-position:0 -4775px}
-select.flags option[value=TL], select.flags option[value=tl], .country-TL {background-position:0 -4797px}
-select.flags option[value=TM], select.flags option[value=tm], .country-TM {background-position:0 -4819px}
-select.flags option[value=TN], select.flags option[value=tn], .country-TN {background-position:0 -4841px}
-select.flags option[value=TO], select.flags option[value=to], .country-TO {background-position:0 -4863px}
-select.flags option[value=TR], select.flags option[value=tr], .country-TR {background-position:0 -4885px}
-select.flags option[value=TT], select.flags option[value=tt], .country-TT {background-position:0 -4907px}
-select.flags option[value=TV], select.flags option[value=tv], .country-TV {background-position:0 -4929px}
-select.flags option[value=TW], select.flags option[value=tw], .country-TW {background-position:0 -4951px}
-select.flags option[value=TZ], select.flags option[value=tz], .country-TZ {background-position:0 -4973px}
-select.flags option[value=UA], select.flags option[value=ua], .country-UA {background-position:0 -4995px}
-select.flags option[value=UG], select.flags option[value=ug], .country-UG {background-position:0 -5017px}
-select.flags option[value=UM], select.flags option[value=um], .country-UM {background-position:0 -5039px}
-select.flags option[value=US], select.flags option[value=us], .country-US {background-position:0 -5061px}
-select.flags option[value=UY], select.flags option[value=uy], .country-UY {background-position:0 -5083px}
-select.flags option[value=UZ], select.flags option[value=uz], .country-UZ {background-position:0 -5105px}
-select.flags option[value=VA], select.flags option[value=va], .country-VA {background-position:0 -5127px}
-select.flags option[value=VC], select.flags option[value=vc], .country-VC {background-position:0 -5149px}
-select.flags option[value=VE], select.flags option[value=ve], .country-VE {background-position:0 -5171px}
-select.flags option[value=VG], select.flags option[value=vg], .country-VG {background-position:0 -5193px}
-select.flags option[value=VI], select.flags option[value=vi], .country-VI {background-position:0 -5215px}
-select.flags option[value=VN], select.flags option[value=vn], .country-VN {background-position:0 -5237px}
-select.flags option[value=VU], select.flags option[value=vu], .country-VU {background-position:0 -5259px}
-select.flags option[value=WF], select.flags option[value=wf], .country-WF {background-position:0 -5303px}
-select.flags option[value=WS], select.flags option[value=ws], .country-WS {background-position:0 -5325px}
-select.flags option[value=YE], select.flags option[value=ye], .country-YE {background-position:0 -5347px}
-select.flags option[value=YT], select.flags option[value=yt], .country-YT {background-position:0 -5369px}
-select.flags option[value=ZA], select.flags option[value=za], .country-ZA {background-position:0 -5391px}
-select.flags option[value=ZM], select.flags option[value=zm], .country-ZM {background-position:0 -5413px}
-select.flags option[value=ZW], select.flags option[value=zw], .country-ZW {background-position:0 -5435px}
-
-.panel_login {
-    max-width: 80%;
-    min-width: 680px;
-}
-div.subsectiontoggle {
-    border:1px solid #ccc;
-    font-weight:bold;
-    font-size:14px;
-    padding-top:10px;
-    padding-bottom:0;
-    margin-top:5px;
-    text-indent:15px;
-    cursor:pointer;
-    margin-bottom:10px;
-    background-color:#f4f4f4;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-}
-div.subsectiontoggle span {
-    display:inline-block;
-    margin-bottom:-3px;
-    margin-right:10px;
-    width:16px;
-    height:16px;
-    background: url("../../default/icons/button_sprite.png") 0 -72px no-repeat transparent;
-}
-div.subsectiontoggle span.showing{
-    background-position: 0 -40px;
-}
-div.subsectiontoggle em {
-    display:block;
-    position:relative;
-    left:425px;
-    top:-13px;
-    margin-bottom:-3px;
-    width:13px;
-    height:13px;
-    background:url("../../default/images/chevron.png") top left no-repeat;
-    -webkit-transform:none;
-    -moz-transform:none;
-    -khtml-transform:none;
-    -o-transform:none;
-    -ms-transform:none;
-    transform:none;
-    -webkit-transition-duration: .2s;
-    -moz-transition-duration: .2s;
-    -khtml-transition-duration: .2s;
-    -o-transition-duration: .2s;
-    -ms-transition-duration: .2s;
-    transition-duration: .2s;
-    -webkit-transition-property: -webkit-transform;
-    -moz-transition-property: -moz-transform;
-    -khtml-transition-property: -khtml-transform;
-    -o-transition-property: -o-transform;
-    -ms-transition-property: -ms-transform;
-    transition-property: transform;
-}
-div.subsectiontoggle em.showing {
-    display:block;
-    position:relative;
-    left:425px;
-    top:-13px;
-    background:url("../../default/images/chevron.png") top left no-repeat;
-    width:13px;
-    height:13px;
-    -webkit-transform:rotate(90deg);
-    -moz-transform:rotate(90deg);
-    -khtml-transform:rotate(90deg);
-    -o-transform:rotate(90deg);
-    -ms-transform:rotate(90deg);
-    transform:rotate(90deg);
-}
-div.subsectiontoggle:hover em {
-    -webkit-transform:rotate(90deg);
-    -moz-transform:rotate(90deg);
-    -khtml-transform:rotate(90deg);
-    -o-transform:rotate(90deg);
-    -ms-transform:rotate(90deg);
-    transform:rotate(90deg);
-}
-
-
-div.gs-container {
-    margin-top:10px;
-}
-div.gs-container * {
-    margin: 0;
-    padding: 0;
-    background-position: 0 0;
-    text-decoration: none;
-    font-size: 1em;
-}
-div.gs-container input {
-    background: url("../../default/icons/x16_sprite.png") no-repeat 2px -119px #FFFFFF;
-    height:20px;
-    border:1px solid #444;
-    padding:0 22px 2px;
-    color:#444;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-}
-input.gs-loading {
-    background-image: url("../../default/images/loading.gif");
-    background-repeat: no-repeat;
-    background-position: center right;
-}
-ul.gs-resultbox {
-    margin: 0 !important;
-    padding: 0 !important;
-    width: 300px;
-    z-index: 999999;
-    border: 1px solid #777;
-    font-size: 11px;
-    background: #fff;
-    -moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -o-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    box-shadow: 2px 2px 5px 0 #c5c5c5;
-    list-style: none;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-    max-height:500px;
-    overflow:auto;
-}
-ul.gs-resultbox li {
-    float: left;
-    width: 100%;
-    clear: both;
-    cursor: pointer;
-}
-ul.gs-resultbox li.gs-cheader {
-    height: 13px;
-    overflow: hidden;
-    padding: 5px 0;
-    color: #fff;
-    background: #6ea6d1;
-    cursor:default;
-    padding-bottom:10px;
-}
-ul.gs-resultbox li.gs-cheader p.gs-cheader-title {
-    margin: 0 !important;
-    padding: 0 0 0 10px !important;
-    float: left;
-    font-size: 12px;
-    font-weight: bold;
-}
-ul.gs-resultbox li.gs-cheader p.gs-cheader-limit {
-    margin: 0 !important;
-    padding: 0 10px 0 0 !important;
-    float: right;
-    font-size: 11px;
-    font-weight: normal;
-}
-ul.gs-resultbox li.gs-cdata {
-    margin: 0 !important;
-    padding: 0 !important;
-    border-bottom: 1px solid #c5c5c5;
-}
-ul.gs-resultbox li.gs-cdata:last-child {
-    border-bottom: none;
-}
-ul.gs-resultbox li.gs-cdata:hover {
-    background: #eaf4fd;
-}
-ul.gs-resultbox li.gs-cdata a {
-    display: block;
-    padding: 5px 10px;
-    text-decoration: none !important;
-    background: #fff;
-}
-ul.gs-resultbox li.gs-cdata a:hover {
-    background: #cde0ff;
-}
-ul.gs-resultbox li.gs-cdata img {
-    margin-right: 12px;
-}
-ul.gs-resultbox li.gs-cdata p {
-    margin: 0 !important;
-    padding: 0 !important;
-    color: #444;
-    font-size: 10px;
-    min-height:30px;
-}
-ul.gs-resultbox li.gs-cdata p span.gs-cdata-title {
-    display: inline !important;
-    margin: 0 !important;
-    padding: 0 !important;
-    font-size: 11px;
-    font-weight: bold;
-    color: #000;
-}
-ul.gs-resultbox li:first-child {
-    -moz-border-radius:5px 5px 0 0;
-    -webkit-border-radius:5px 5px 0 0;
-    -khtml-border-radius:5px 5px 0 0;
-    -o-border-radius:5px 5px 0 0;
-    -ms-border-radius:5px 5px 0 0;
-    border-radius:5px 5px 0 0;
-}
-ul.gs-resultbox li:last-child {
-    -moz-border-radius:0 0 5px 5px;
-    -webkit-border-radius:0 0 5px 5px;
-    -khtml-border-radius:0 0 5px 5px;
-    -o-border-radius:0 0 5px 5px;
-    -ms-border-radius:0 0 5px 5px;
-    border-radius:0 0 5px 5px;
-}
-
-div.df-container {
-}
-div.df-container * {
-    margin: 0;
-    padding: 0;
-    background-position: 0 0;
-    text-decoration: none;
-    font-size: 1em;
-}
-div.df-container input {
-}
-input.df-loading {
-    background-image: url("../../default/images/loading.gif");
-    background-repeat: no-repeat;
-    background-position: center right;
-}
-ul.df-resultbox {
-    margin: 0 !important;
-    padding: 0 !important;
-    min-width: 250px;
-    max-width: 500px;
-    z-index: 999999;
-    border: 1px solid #777;
-    font-size: 11px;
-    background: #fff;
-    -moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -o-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    box-shadow: 2px 2px 5px 0 #c5c5c5;
-    list-style: none;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-}
-ul.df-resultbox li {
-    float: left;
-    width: 100%;
-    clear: both;
-    cursor: pointer;
-}
-ul.df-resultbox li.df-cheader {
-    height: 13px;
-    overflow: hidden;
-    padding: 5px 0;
-    color: #fff;
-    background: #6ea6d1;
-    cursor:default;
-    padding-bottom:10px;
-}
-ul.df-resultbox li.df-cheader p.df-cheader-title {
-    margin: 0 !important;
-    padding: 0 0 0 10px !important;
-    float: left;
-    font-size: 12px;
-    font-weight: bold;
-}
-ul.df-resultbox li.df-cheader p.df-cheader-limit {
-    margin: 0 !important;
-    padding: 0 10px 0 0 !important;
-    float: right;
-    font-size: 11px;
-    font-weight: normal;
-}
-ul.df-resultbox li.df-cdata {
-    margin: 0 !important;
-    padding: 0 !important;
-    border-bottom: 1px solid #c5c5c5;
-}
-ul.df-resultbox li.df-cdata:last-child {
-    border-bottom: none;
-}
-ul.df-resultbox li.df-cdata:hover {
-    background: #eaf4fd;
-}
-ul.df-resultbox li.df-cdata a {
-    display: block;
-    padding: 5px 10px;
-    text-decoration: none !important;
-    background: #fff;
-}
-ul.df-resultbox li.df-cdata a:hover {
-    background: #cde0ff;
-}
-ul.df-resultbox li.df-cdata img {
-    margin-right: 12px;
-}
-ul.df-resultbox li.df-cdata p {
-    margin: 0 !important;
-    padding: 0 !important;
-    color: #444;
-    font-size: 10px;
-    min-height:30px;
-}
-ul.df-resultbox li.df-cdata p span.df-cdata-title {
-    display: inline !important;
-    margin: 0 !important;
-    padding: 0 !important;
-    font-size: 11px;
-    font-weight: bold;
-    color: #000;
-}
-ul.df-resultbox li:first-child {
-    -moz-border-radius:5px 5px 0 0;
-    -webkit-border-radius:5px 5px 0 0;
-    -khtml-border-radius:5px 5px 0 0;
-    -o-border-radius:5px 5px 0 0;
-    -ms-border-radius:5px 5px 0 0;
-    border-radius:5px 5px 0 0;
-}
-ul.df-resultbox li:last-child {
-    -moz-border-radius:0 0 5px 5px;
-    -webkit-border-radius:0 0 5px 5px;
-    -khtml-border-radius:0 0 5px 5px;
-    -o-border-radius:0 0 5px 5px;
-    -ms-border-radius:0 0 5px 5px;
-    border-radius:0 0 5px 5px;
-}
-
-span.icons16-empty {
-    float:left;
-    display:block;
-    height:20px;
-    width:20px;
-    margin:0 7px 0 0;
-}
-
-.ttip {
-    width:16px;
-    height:16px;
-    cursor:pointer;
-    background: url("../../default/icons/x16_sprite.png") no-repeat -2px -42px transparent;
-    float:right;
-    display:inline;
-    position:relative;
-    right:-2px;
-    top:-2px;
-}
-
-p.prefix {
-    float: left;
-    margin: 0;
-    text-align: right;
-}
-p.label {
-    float: left;
-    margin: 5px 15px 0 0;
-}
-p.value {
-    float:left;
-    margin: 0 0 0 2px;
-}
-
-/* content_ispc
--------------------------------------------------------------- */
-.tipsy {
-    font-size: 10px;
-    position: absolute;
-    padding: 5px;
-    z-index: 100000;
-}
-.tipsy-inner {
-    background-color: #000;
-    color: #FFF;
-    max-width: 350px;
-    padding: 5px 8px 4px 8px;
-    text-align: left;
-}
-
-/* Rounded corners */
-.tipsy-inner {
-    border-radius: 5px;
-    -moz-border-radius: 5px;
-    -webkit-border-radius: 5px;
-}
-
-/* Uncomment for shadow */
-/*.tipsy-inner { box-shadow: 0 0 5px #000000; -webkit-box-shadow: 0 0 5px #000000; -moz-box-shadow: 0 0 5px #000000; }*/
-
-.tipsy-arrow {
-    position: absolute;
-    width: 0;
-    height: 0;
-    line-height: 0;
-    border: 5px dashed #000;
-}
-/* Rules to colour arrows */
-.tipsy-arrow-n { border-bottom-color: #000; }
-.tipsy-arrow-s { border-top-color: #000; }
-.tipsy-arrow-e { border-left-color: #000; }
-.tipsy-arrow-w { border-right-color: #000; }
-
-.tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -5px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; }
-.tipsy-nw .tipsy-arrow { top: 0; left: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
-.tipsy-ne .tipsy-arrow { top: 0; right: 10px; border-bottom-style: solid; border-top: none;  border-left-color: transparent; border-right-color: transparent;}
-.tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-style: solid; border-bottom: none;  border-left-color: transparent; border-right-color: transparent; }
-.tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; border-top-style: solid; border-bottom: none;  border-left-color: transparent; border-right-color: transparent; }
-.tipsy-se .tipsy-arrow { bottom: 0; right: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
-.tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -5px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; }
-.tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -5px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; }
-
-/* uni-form-generic
--------------------------------------------------------------- */
-
-/* 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{}
-
-/* uni-form
--------------------------------------------------------------- */
-
-/* Keep in mind that wherever you see "Required property" it means that the property must exist */
-
-/* ------------------------------------------------------------------------------ */
-
-/* Generals */
-.uniForm fieldset{}
-.uniForm fieldset legend{ color: #333; font-weight: bold; font-size: 100%; margin: 0; padding: 1.5em 1.5em 1.5em 0; }
-
-/* This is the main unit that contains our form elements */
-.uniForm .ctrlHolder{ padding: 3px; border-bottom: 1px dotted #dfdfdf; }
-
-.uniForm .buttonHolder{ 
-    text-align: left; 
-    background: #CEDEEF url("../../default/images/buttonHolder_bg.gif") no-repeat right;
-    margin: 3em 0 1em;
-    padding: 8px;
-}
-.uniForm .resetButton{ float: left; }
-.uniForm .primaryAction{ font-weight: bold; }
-
-/* This class gets added to div.ctrlHolder to highlight the row */
-.uniForm .focused{ background: #fffcdf; }
-
-/* .inlineLabel is used for inputs within labels - checkboxes and radio buttons */
-.uniForm .inlineLabel input,
-.uniForm .inlineLabels .inlineLabel input,
-.uniForm .blockLabels .inlineLabel input{ float: left; margin: 0 .4em 0 0; }
-.uniForm .inlineLabel span{ float: left; width: 90%; }
-
-/* ------------------------------------------------------------------------------ */
-
-/* .blockLabels (default style, will be applied even if you don"t class the parent element) */
-.uniForm .blockLabels .ctrlHolder{}
-
-.uniForm label,
-.uniForm .blockLabels label,
-.uniForm .blockLabels .label{ margin: 0 0 .5em 0; }
-
-.uniForm .textInput,
-.uniForm .blockLabels .textInput,
-.uniForm .blockLabels .fileUpload{ width: 43%; /* <- Required property */ }
-
-.uniForm .selectInput,
-.uniForm select,
-.uniForm .blockLabels .selectInput,
-.uniForm .blockLabels select{ width: 43.5%; /* <- Required property */ }
-.uniForm textarea,
-.uniForm .blockLabels textarea{ width: 43%; /* <- Required property */ height: 12em; }
-
-.uniForm .formHint,
-.uniForm .blockLabels .formHint{ width: 55%; /* <- Required property */ font-size: .9em; color: #777; position: relative; top: -.5em; }
-
-.uniForm .multiField,
-.uniForm .blockLabels .multiField{ width: 43%; }
-.uniForm .multiField .inlineLabel,
-.uniForm .blockLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
-.uniForm .multiField .blockLabel,
-.uniForm .blockLabels .multiField .blockLabel{ width: 30%; margin: 0 10px 0 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: .3em 0 0 0; }
-
-/* ------------------------------------------------------------------------------ */
-
-/* .inlineLabels */
-.uniForm .inlineLabels .ctrlHolder{}
-
-.uniForm .inlineLabels label,
-.uniForm .inlineLabels .label{ width: 20%; /* <- Required property */ margin: .3em 2% 0 0; /* <- Required property */ }
-
-.uniForm .inlineLabels .textInput,
-.uniForm .inlineLabels .fileUpload{ width: 35%; /* <- Required property */ }
-
-.uniForm .inlineLabels .selectInput,
-.uniForm .inlineLabels select{ width: 35%; /* <- Required property */ }
-
-.uniForm .inlineLabels textarea{  width: 35%; /* <- Required property */ height: 12em; }
-
-.uniForm .inlineLabels .formHint{ margin-top: 0; margin-left: 22%; font-size: .9em; color: #777; position: static; }
-
-.uniForm .inlineLabels .multiField{ width: 60%; /* <- Required property */ margin: 0 0 .3em 0; }
-.uniForm .inlineLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
-.uniForm .inlineLabels .multiField .blockLabel{ float: left; width: 26%; margin: 0 3% 0 0; }
-.uniForm .inlineLabels .multiField .blockLabel .textInput,
-.uniForm .inlineLabels .multiField .blockLabel .selectInput,
-.uniForm .inlineLabels .multiField .blockLabel select{ width: 100%; margin: .3em 0 0 0; }
-
-/* Focus pseudoclasses */
-.uniForm .ctrlHolder .textInput:focus{ outline: none; /* Get rid of the "glow" effect in WebKit, optional */ }
-.uniForm .ctrlHolder textarea:focus{ outline: none; /* Get rid of the "glow" effect in WebKit, optional */ }
-.uniForm div.focused .formHint{ color: #333; }
-
-/* Columns (they are floated left by default) */
-.uniForm .col{ width: 37.9%; /* <- Required property */ margin: 0 2% 20px 0; }
-/* Use .first and .last classes to control the layout/spacing of your columns */
-.uniForm .col.first{ width: 39%; /* <- Required property */ float: left; clear: none; }
-.uniForm .col.last{ width: 39%; /* <- Required property */ float: right; clear: none; margin-right: 0; }
-
-/* Messages */
-.uniForm #errorMsg, .confirmpassworderror{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
-.uniForm .error{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; }
-
-.uniForm #errorMsg dt, .uniForm #errorMsg h3{ margin: 0 0 .5em 0; font-size: 100%; line-height: 100%; font-weight: bold; }
-.uniForm #errorMsg dd{ margin: 0; padding: 0; }
-.uniForm #errorMsg ol{ margin: 0; padding: 0; list-style:none;}
-.uniForm #errorMsg ol li{ margin: 0; padding: 2px; list-style-position: inside; border-bottom: 1px dotted #df7d7d; position: relative; }
-.uniForm .errorField{ color: #af4c4c; margin: 0 0 6px 0; padding: 4px; background: #ffbfbf; }
-
-.uniForm #OKMsg, .confirmpasswordok{ background: #C8FFBF; border: 1px solid #A2EF95; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
-.uniForm #OKMsg p{ margin: 0; }
-
-/* ------------------------------------------------------------------------------ */
-
-/* This is the main unit that contains our form elements */
-
-.uniForm .textInput, .uniForm .selectInput, .uniForm textarea {
-    background:#FFFFFF none repeat scroll 0 0;
-    color: #000000;
-    border: 1px solid #DFDFDF;
-    padding: 1px;
-}
-
-/* jquery-ui-custom
--------------------------------------------------------------- */
-.ui-datepicker-calendar thead tr th {
-    background-image:none;
-    background-color:#FFFFFF;
-    color:#000000;
-}
-.ui-widget { font-family: "Trebuchet MS", Arial, sans-serif; font-size: 100%; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: "Trebuchet MS", Arial, sans-serif; font-size: 100%; }
-ul.ui-autocomplete { max-height: 250px; overflow-y: auto; min-width: 85px;}
-.ui-combobox { position: relative; display: inline-block; margin-right: 17px; }
-.ui-combobox-toggle { position: absolute !important; top: 0; bottom: 0; margin-left: -1px; padding: 1px !important; background: none repeat scroll 0 0 #FFFFFF !important; border: 1px solid #DFDFDF !important;}
-.ui-combobox-input { background: none repeat scroll 0 0 #FFFFFF !important; border: 1px solid #DFDFDF !important; padding: 1px; font-weight: normal !important; }
-.panel_install_package .ui-combobox { float: left; }
-.clear-float { clear: both; }
-
-a.link-page, span.page-spacer {
-    display: inline-block;
-    text-align: center;
-    padding: 2px;
-    line-height: 16px;
-    text-decoration: none !important;
-    color: #fff;
-    min-width: 16px;
-}
-a.link-page {
-    border: 1px solid #444;
-    margin: 0 5px;
-}
-
-a.link-page:hover {
-    background-color: #444;
-    color: #e8ff25;
-}
-
-span.page-spacer {
-    margin: 0 -5px;
-}
-
-a.link-page.current-page {
-    background-color: #444;
-    color: #e8ff25;
-    font-weight: bold;
-}
-
-.command {
-    padding: 1em;
-    border: 1px dashed #2f6fab;
-    color: black;
-    background-color: #f9f9f9;
-    line-height: 1.1em;
-    font-family: Courier New, Courier, mono;
-    font-size: 12px;
-    font-style: italic;
-}
-.system {
-    color: black;
-    font-family: Courier New, Courier, mono;
-    font-size: 12px;
-    font-style: italic;
-}
-.highlight {
-    color: #FF0000;
-    font-family: Georgia, "Times New Roman", Times, serif;
-    font-size: 12px;
-    text-decoration: underline;
-}
\ No newline at end of file
diff --git a/interface/web/themes/blue/icons/x32_sprite.png b/interface/web/themes/blue/icons/x32_sprite.png
deleted file mode 100644
index b1ef1b8..0000000
--- a/interface/web/themes/blue/icons/x32_sprite.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/blue/images/ajax-loader.gif b/interface/web/themes/blue/images/ajax-loader.gif
deleted file mode 100644
index 715f6a9..0000000
--- a/interface/web/themes/blue/images/ajax-loader.gif
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/blue/images/header_bg.png b/interface/web/themes/blue/images/header_bg.png
deleted file mode 100644
index ec0265f..0000000
--- a/interface/web/themes/blue/images/header_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/blue/images/lists_tfoot_bg.png b/interface/web/themes/blue/images/lists_tfoot_bg.png
deleted file mode 100644
index 61f3334..0000000
--- a/interface/web/themes/blue/images/lists_tfoot_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/blue/images/lists_thead_bg.png b/interface/web/themes/blue/images/lists_thead_bg.png
deleted file mode 100644
index 6813b53..0000000
--- a/interface/web/themes/blue/images/lists_thead_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/blue/ispconfig_version b/interface/web/themes/blue/ispconfig_version
deleted file mode 100644
index e46f818..0000000
--- a/interface/web/themes/blue/ispconfig_version
+++ /dev/null
@@ -1 +0,0 @@
-3.1dev
diff --git a/interface/web/themes/blue/templates/main.tpl.htm b/interface/web/themes/blue/templates/main.tpl.htm
deleted file mode 100644
index 0007256..0000000
--- a/interface/web/themes/blue/templates/main.tpl.htm
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE html>
-<html dir="ltr" lang="en-US">      
-    <head>
-        <!--Possible? Vars in lang= ?-->
-        <meta charset="<tmpl_var name="html_content_encoding">" />
-        <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
-        <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-        <link href="themes/blue/css/styles.css" rel="stylesheet" media="screen" type="text/css" />
-        <link href="themes/default/css/print.css" rel="stylesheet" media="print" type="text/css" />
-        <!--[if IE 9]><link href="themes/default/css/iehacks.css" rel="stylesheet" type="text/css" /><![endif]-->
-        <!--[if lte IE 8]><script type="text/javascript" src="themes/default/js/html5shiv.js"></script><![endif]-->
-        <!--[if lte IE 7]><link href="themes/default/css/iehacks.css" rel="stylesheet" type="text/css" /><![endif]-->
-        <link href="themes/default/css/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" />
-        <link rel="shortcut icon" href="/themes/default/images/favicon.ico" />
-        <script type="text/javascript" src="js/jquery-1.6.3.min.js"></script>
-        <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
-        <script type="text/javascript" src="js/scrigo.js.php"></script>
-        <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
-        <script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
-        <script type="text/javascript" src="js/jquery.tipsy.js"></script>
-        <script language="JavaScript" type="text/javascript">
-            jQuery(document).ready(function() {
-                loadInitContent();
-				
-				$('form').not('#dummy_login_form').attr('autocomplete','off');
-                
-                $("#pageForm").submit(function(e){
-                    //Prevent form submit: e.preventDefault() in lists
-                    if ($(".panel #Filter").length > 0) {
-                        e.preventDefault();
-                    }
-                });
-                
-                jQuery('.subsectiontoggle').live("click", function(){
-                    jQuery(this).children().toggleClass('showing').end().next().slideToggle();
-                });
-                
-                jQuery('#globalsearch').ispconfigSearch({
-                    dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
-                    resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-                    noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-                    noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-                    searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">'
-                });
-                
-                jQuery('.ttip').tipsy({live: true, gravity: 'ne', html: true});
-                
-                tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled>';
-                tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled>';
-                tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
-                tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
-				
-				// Store password in browser; works in Firefox, but not Chrome
-				$('#username').live("blur", function(){
-					if($('#username').val() == '') {
-						return true;
-					}
-					if($('#dummy_username').val() == '' || $('#dummy_username').val() != $(this).val()){
-						$('#dummy_login').show();
-						$('#dummy_username').attr('value', $(this).val()).trigger('focus').trigger('blur');
-						$('#dummy_login').hide();
-					}
-					if($('#dummy_username').val() == $(this).val() && $(this).val() != ''){
-						$('#passwort').val($('#dummy_passwort').val());
-					} else {
-						$('#passwort').val('');
-					}
-					$('#passwort').focus();
-				});
-				
-				$('#username').live("keyup", function(){
-					$('#dummy_username').val('');
-					$('#dummy_passwort').val('');
-					$('#passwort').val('');
-				});
-				
-            });
-            
-            
-            jQuery(document).bind("change", function(event) {
-                var elName = event.target.localName;
-                if (jQuery(".panel #Filter").length > 0 && elName == 'select') {
-                    event.preventDefault();
-                    jQuery(".panel #Filter").trigger('click');
-                }
-                if(elName == 'select' || elName == 'input' || elName == 'textarea') {
-                    if(jQuery(event.target).hasClass('no-page-form-change') == false) {
-                        // set marker that something was changed
-                        pageFormChanged = true;
-                    }
-                }
-            });
-            
-            jQuery(document).bind("keypress", function(event) {
-                //Use jQuery submit with keypress Enter in panel filterbar
-                if (event.which == '13' && jQuery(".panel #Filter").length > 0 && jQuery(event.target).hasClass('ui-autocomplete-input') == false ) {
-                    event.preventDefault();
-                    jQuery(".panel #Filter").trigger('click');
-                }
-                //Use jQuery submit with keypress Enter in forms
-                if (event.which == '13' && jQuery(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && jQuery(event.target).is(':input')) {
-                    event.preventDefault();
-                    jQuery(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
-                }
-            });
-            
-            jQuery(document).delegate('.pnl_listarea th', 'click', function(event) {
-                if(jQuery(this).attr('class').length > 0 && jQuery(".panel #Filter").length > 0 && jQuery(this).hasClass('tbl_col_buttons') == false && jQuery(this).hasClass('tbl_col_limit') == false && jQuery(this).hasClass('tbl_col_nosort') == false) {
-                  event.preventDefault();
-                  var clickevent = jQuery('#Filter').attr('onclick');
-                  var element = jQuery(this).attr('class');
-                  if(typeof clickevent == 'string') {
-                      jQuery('#Filter').attr('onclick', clickevent.replace(".php')", ".php?orderby=" + element + "')"));
-                  }
-                  jQuery(".panel #Filter").trigger('click');
-                  
-                  jQuery("#pageForm").ajaxComplete(function() {
-                      if(jQuery("th."+element).css("background-position") == '0px -15px') {
-                        if(jQuery("th."+element).css("text-align") == "right") {
-                          jQuery("th."+element).css("text-align","left");
-                        } else {
-                          jQuery("th."+element).css("text-align","right");
-                        }
-                      } else {
-                        jQuery(".pnl_listarea th").css("text-align","");
-                      }
-                      jQuery(".pnl_listarea th").css("background-position","0 0");
-                      jQuery("th."+element).css("background-position","0 -15px");
-                  });
-                }
-            });
-            
-        </script>
-    </head>
-    <body>
-        <div id="page">
-            <!-- begin: header -->
-            <header>
-                <nav id="topsubnav">
-                    <!-- start: skip link navigation -->
-                    <a class="skip" href="#navigation" title="skip link">Skip to the navigation</a><span class="hideme">.</span>
-                    <a class="skip" href="#content" title="skip link">Skip to the content</a><span class="hideme">.</span>
-                    <!-- end: skip link navigation -->
-                    <tmpl_if name="cpuser">
-                        <a href="#logout" onclick="loadContent('login/logout.php');"><tmpl_var format="strtoupper" name="logout_txt"> <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>-->
-                        <tmpl_if name='usertype' op='==' value='normaluser'><input type="text" id="globalsearch" size="25" value="" /></tmpl_if>
-                    </tmpl_if>
-                </nav>
-                <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
-                <span>hosting control panel</span>
-            </header>
-            <!-- end: header -->
-            <a id="navigation" name="navigation"></a><!-- skiplink anchor: navigation -->
-            <!-- begin: main navigation #nav -->
-            <nav id="topNav">&nbsp;</nav>
-            <!-- end: main navigation -->
-
-            <!-- begin: main content area #main -->
-            <section id="main" name="content">
-                <nav id="sideNav" class="clearfix">&nbsp;</nav>
-                <!-- begin: #content -->
-                <section id="content">
-                    <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
-						<input type="text" style="display:none" /><input type="password" style="display:none"/>
-                        <div id="pageContent"><!-- AJAX CONTENT --></div>
-                    </form>
-                    <div id="ie_clearing">&nbsp;</div>
-                    <!-- End: IE Column Clearing -->
-                </section>
-                <!-- end: #content -->
-            </section>
-            <!-- end: #main -->
-            <!-- begin: footer -->
-            <footer>
-                Powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
-            </footer><!-- end: footer -->
-        </div>
-		
-<div id="dummy_login" style="display:none;position:absolute;top:-1000px;left:-1000px;">
-<form action="" method="post" target="dummy_login" id="dummy_login_form">
-<input name="username" id="dummy_username" type="text" autocomplete="on" value="" />
-<input name="passwort" id="dummy_passwort" type="password" autocomplete="on" value="" />
-<input type="submit" value="Login" id="dummy_submit"/>
-</form>
-<iframe id="dummy_iframe" src="dummy_login.html" name="dummy_login" style="display:none;"></iframe>
-</div>
-    </body>
-</html>
diff --git a/interface/web/themes/default/CHANGELOG b/interface/web/themes/default/CHANGELOG
deleted file mode 100644
index 4549642..0000000
--- a/interface/web/themes/default/CHANGELOG
+++ /dev/null
@@ -1,32 +0,0 @@
-CHANGELOG
-default -> default-v2
-source: default $3241 07/06/2012 @ 12:00 UTC+2
-resources @ https://github.com/foe-services/ispc-resources
-
-- changed doctype to <!DOCTYPE html> (HTML5)
-- rm yaml/*
-- rm css/patches/*
-- cp yaml/patches/iehacks.css css/*
-- rm <!--[if lte ie 6]> from templates/main.tpl.htm
-- rm IE6 support from css/iehacks.css
-- mv css/nav/* into css/style.css
-- mv css/print/* into css/print.css
-- add css/print.css to templates/main.tpl.htm
-- rm css/print/*
-- rm css/nav/*
-- rm css projection-type support
-- mv css/screen/redmond/* css/*
-- rm css/screen/*
-- mv css media-recognition from css-files to <head>-link tag
-- change most div-containers to new html5 tags in main.tpl.htm
-- rm dom elements from main.tpl.htm
-- add html5shiv.js (https://github.com/aFarkas/html5shiv) for better HTML5-compatibility
-- reduction of dom elements
-- reduction of css rules
-- removed all single icons
-    - all icons separate:  https://github.com/downloads/foe-services/ispc-larry/ispc-default_separate.zip
-    - all used icons as layers and sprite as .psd: https://github.com/downloads/foe-services/ispc-larry/ispc-default_psd.zip
-- added sprites for (nearly) all used icons where suitable
-- added flags for country text in lists
-- added some list column widths
-- limited height (500px) for the globalsearch results
\ No newline at end of file
diff --git a/interface/web/themes/default/LICENSE b/interface/web/themes/default/LICENSE
deleted file mode 100644
index 1cb4a13..0000000
--- a/interface/web/themes/default/LICENSE
+++ /dev/null
@@ -1,9 +0,0 @@
-Default 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
-
-Major restructuring by Christian Foellmann (Foe-Services.de)
-resulting in default-v2 theme for ISPConfig 3.x
\ No newline at end of file
diff --git a/interface/web/themes/default/TODO b/interface/web/themes/default/TODO
deleted file mode 100644
index 177a863..0000000
--- a/interface/web/themes/default/TODO
+++ /dev/null
@@ -1,8 +0,0 @@
-TODO
-- css/print.css is useless in current state
-- css/iehacks.css is useless in current state
-- some more icons need to be changed into sprites
-
-- <html dir="ltr" lang="en-US"> set lang variable with data from the user data or config data
-
-- Lists of servers in monitor module break in IE7 + IE8
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/fonts/ispconfig.eot b/interface/web/themes/default/assets/fonts/ispconfig.eot
new file mode 100644
index 0000000..a6af458
--- /dev/null
+++ b/interface/web/themes/default/assets/fonts/ispconfig.eot
Binary files differ
diff --git a/interface/web/themes/default/assets/fonts/ispconfig.svg b/interface/web/themes/default/assets/fonts/ispconfig.svg
new file mode 100644
index 0000000..0ee8980
--- /dev/null
+++ b/interface/web/themes/default/assets/fonts/ispconfig.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="ispconfig" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
+<glyph unicode="&#xe600;" d="M870.002 657.426h-0.011c0-0.072 0.007-0.144 0.007-0.217 0.029 19.966-11.35 38.043-31.219 49.588l-274.318 159.417c-14.32 8.319-32.649 12.904-51.611 12.904-18.926 0-37.259-4.566-51.615-12.857l-276.106-159.413c-20.009-11.549-31.504-29.658-31.529-49.675 0-0.083 0.007-0.166 0.007-0.246 0 0.007 0 0.014 0 0.022h-0.011v-0.025l0.397-89.307c0.058-19.883 11.441-37.876 31.226-49.371l274.314-159.417c14.32-8.323 32.646-12.904 51.607-12.904 18.926 0 37.259 4.566 51.615 12.857l276.11 159.413c20.096 11.596 31.591 29.785 31.533 49.899l-0.397 89.332zM207.585 668.194l276.106 159.413c7.528 4.346 18.156 6.838 29.163 6.838 10.996 0 21.584-2.485 29.048-6.824l274.314-159.413c2.673-1.553 8.89-5.704 8.883-10.7-0.007-5.068-6.351-9.277-9.078-10.852l-276.113-159.41c-7.528-4.349-18.153-6.842-29.163-6.842-10.996 0-21.584 2.489-29.044 6.824l-274.314 159.413c-2.673 1.553-8.887 5.704-8.879 10.704 0.007 5.065 6.347 9.273 9.078 10.848zM806.874 549.081l-47.894-27.65c-10.216-5.899-18.51-1.174-18.546 10.566-0.033 11.74 8.207 26.042 18.427 31.941l47.894 27.65c10.191 5.885 18.51 1.145 18.543-10.595 0.036-11.74-8.226-26.031-18.423-31.912zM868.835 507.737c-3.248-15.862-13.839-29.904-30.363-39.441l-276.11-159.413c-14.359-8.291-32.693-12.853-51.618-12.853-18.962 0-37.288 4.581-51.607 12.9l-274.314 159.417c-16.411 9.537-26.909 23.557-30.092 39.39h-1.105l0.368-129.929c0.058-19.883 11.441-37.88 31.226-49.375l274.314-159.413c14.32-8.319 32.646-12.904 51.607-12.904 18.926 0 37.259 4.57 51.615 12.86l276.11 159.41c20.096 11.6 31.591 29.788 31.533 49.899l-0.368 129.455h-1.196zM806.874 359.475l-47.894-27.646c-10.216-5.903-18.51-1.174-18.546 10.566-0.033 11.74 8.207 26.042 18.427 31.941l47.894 27.65c10.191 5.885 18.51 1.142 18.543-10.599 0.036-11.74-8.226-26.028-18.423-31.912z" />
+<glyph unicode="&#xe601;" d="M870.002 708h-0.011c0-0.072 0.007-0.144 0.007-0.217 0.029 19.966-11.35 38.043-31.219 49.588l-274.318 159.417c-14.32 8.319-32.649 12.904-51.611 12.904-18.926 0-37.259-4.566-51.615-12.857l-276.106-159.413c-20.009-11.549-31.504-29.658-31.529-49.675 0-0.083 0.007-0.166 0.007-0.246 0 0.007 0 0.014 0 0.022h-0.011v-0.025l0.397-139.881c0.058-19.883 11.441-37.876 31.226-49.371l274.314-159.417c14.32-8.323 32.646-12.904 51.607-12.904 18.926 0 37.259 4.566 51.615 12.857l276.11 159.413c20.096 11.596 31.591 29.785 31.533 49.899l-0.397 139.906zM207.585 718.769l276.106 159.413c7.528 4.346 18.156 6.838 29.163 6.838 10.996 0 21.584-2.485 29.048-6.824l274.314-159.413c2.673-1.553 8.89-5.704 8.883-10.7-0.007-5.068-6.351-9.277-9.078-10.852l-276.113-159.41c-7.528-4.349-18.153-6.842-29.163-6.842-10.996 0-21.584 2.489-29.044 6.824l-274.314 159.413c-2.673 1.553-8.887 5.704-8.879 10.704 0.007 5.065 6.347 9.273 9.078 10.848zM806.874 549.081l-47.894-27.65c-10.216-5.899-18.51-1.174-18.546 10.566-0.033 11.74 8.207 26.042 18.427 31.941l47.894 27.65c10.191 5.885 18.51 1.145 18.543-10.595 0.036-11.74-8.226-26.031-18.423-31.912zM868.835 507.737c-3.248-15.862-13.839-29.904-30.363-39.441l-276.11-159.413c-14.359-8.291-32.693-12.853-51.618-12.853-18.962 0-37.288 4.581-51.607 12.9l-274.314 159.417c-16.411 9.537-26.909 23.557-30.092 39.39h-1.105l0.368-129.929c0.058-19.883 11.441-37.88 31.226-49.375l274.314-159.413c14.32-8.319 32.646-12.904 51.607-12.904 18.926 0 37.259 4.57 51.615 12.86l276.11 159.41c20.096 11.6 31.591 29.788 31.533 49.899l-0.368 129.455h-1.196zM806.874 359.475l-47.894-27.646c-10.216-5.903-18.51-1.174-18.546 10.566-0.033 11.74 8.207 26.042 18.427 31.941l47.894 27.65c10.191 5.885 18.51 1.142 18.543-10.599 0.036-11.74-8.226-26.028-18.423-31.912zM868.835 317.932c-3.248-15.866-13.839-29.904-30.363-39.441l-276.11-159.413c-14.359-8.291-32.693-12.857-51.618-12.857-18.962 0-37.288 4.584-51.607 12.9l-274.314 159.417c-16.411 9.537-26.909 23.557-30.092 39.39h-1.105l0.368-129.929c0.058-19.886 11.441-37.88 31.226-49.378l274.314-159.413c14.32-8.319 32.646-12.9 51.607-12.9 18.926 0 37.259 4.566 51.615 12.857l276.11 159.41c20.096 11.6 31.591 29.788 31.533 49.899l-0.368 129.455h-1.196zM806.874 169.671l-47.894-27.65c-10.216-5.899-18.51-1.174-18.546 10.566-0.033 11.74 8.207 26.042 18.427 31.941l47.894 27.65c10.191 5.885 18.51 1.145 18.543-10.595 0.036-11.74-8.226-26.028-18.423-31.912z" />
+<glyph unicode="&#xe602;" d="M487.7 322.627l-0.050 0.055-0.050 0.057c-7.086 8.232-10.633 19.694-11.166 36.524-11.119 0.523-22.685 2.996-30.735 12.399l-0.057 0.066-0.055 0.066c-10.811 12.798-17.088 20.39-17.35 20.706l-0.050 0.060-0.047 0.060c-5.141 6.295-10.407 16.507-12.375 29.049l-177.599-177.609c-26.806-26.773-26.806-70.176 0-96.903 26.763-26.806 70.139-26.806 96.903 0l163.292 163.275c-3.521 4.014-7.067 8.069-10.661 12.194zM291.744 169.503c-11.467-4.292-24.318 1.518-28.619 13.112-4.359 11.485 1.526 24.278 13.062 28.637 11.534 4.351 24.318-1.516 28.61-13.060 4.369-11.546-1.518-24.345-13.053-28.689zM893.102 705.806l-77.82-77.829-75.948 20.38-20.346 75.89 77.819 77.829c-49.555 15.102-105.613 3.070-144.832-36.139-17.564-17.574-28.39-37.261-33.316-57.769-6.222-23.45-3.768-50.452 6.771-76.809l-83.823-83.829c12.119-1.879 21.019-6.707 25.801-9.909 0.062-0.041 0.126-0.084 0.188-0.124 0.313-0.212 0.602-0.41 0.877-0.606 0.123-0.087 0.242-0.168 0.355-0.252 0.217-0.156 0.424-0.306 0.614-0.447 0.162-0.118 0.298-0.222 0.437-0.328 0.124-0.096 0.259-0.195 0.367-0.281 0.238-0.187 0.444-0.352 0.612-0.488 0.321-0.264 8.045-6.618 20.76-17.395 9.155-7.73 12.022-18.913 12.599-30.86 16.746-0.554 28.075-4.075 36.331-11.206l0.074-0.064c2.637-2.296 5.239-4.567 7.826-6.829 1.47-1.285 2.936-2.567 4.393-3.844l69.524 69.518c26.056-10.388 52.788-12.919 76.067-6.973 20.785 4.857 40.743 15.759 58.554 33.543 39.175 39.2 51.201 95.258 36.116 144.823zM623.139 455.476c-9.751 8.424-47.058 3.215-47.058 3.215s4.546 33.452-1.647 38.66c-12.728 10.789-20.486 17.165-20.486 17.165s-27.31 22.724-62.735-12.702l-189.994 189.888c-10.496 10.523-1.417 53.32-1.417 53.32l-114.806 72.665-40.619-40.646 72.664-114.835c0 0 42.826 9.079 53.347-1.39l190.181-190.206c-33.978-33.978-11.798-61.141-11.798-61.141s6.324-7.653 17.165-20.488c5.208-6.083 38.66-1.646 38.66-1.646s-5.208-37.466 3.189-47.218c70.867-81.363 184.034-205.504 215.894-205.504 23.704 0 45.268 10.938 69.9 35.306 24.577 24.366 35.118 46.223 35.118 69.659 0.027 31.939-124.141 145.054-205.557 215.894z" />
+<glyph unicode="&#xe603;" d="M892.551 496.835c-1.456 10.841-11.585 20.197-22.498 20.797l-48.273 2.637c-10.913 0.596-22.672 9.573-26.129 19.944l-17.835 43.165c-4.917 9.768-2.962 24.413 4.324 32.544l32.241 35.984c7.301 8.15 7.521 21.667 0.517 30.052l-68.929 68.936c-8.392 7.015-21.924 6.781-30.074-0.509l-35.962-32.241c-8.128-7.308-22.798-9.248-32.544-4.31l-43.183 17.824c-10.353 3.457-19.334 15.216-19.937 26.125l-2.633 48.262c-0.603 10.92-9.949 21.050-20.797 22.513 0 0-25.435 3.443-48.869 3.443-23.394 0-48.829-3.443-48.829-3.443-10.841-1.47-20.194-11.6-20.79-22.513l-2.644-48.262c-0.592-10.917-9.573-22.668-19.952-26.125l-43.151-17.824c-9.768-4.938-24.42-2.991-32.544 4.31l-35.987 32.241c-8.15 7.29-21.657 7.525-30.048 0.509l-68.933-68.936c-7.015-8.392-6.781-21.909 0.517-30.052l32.241-35.984c7.297-8.142 9.244-22.784 4.31-32.544l-17.824-43.165c-3.457-10.371-15.223-19.348-26.125-19.944l-48.259-2.637c-10.917-0.6-21.046-9.949-22.516-20.797 0 0-3.435-25.446-3.435-48.833 0-23.391 3.443-48.811 3.443-48.811 1.47-10.863 11.6-20.197 22.516-20.797l48.251-2.652c10.92-0.589 22.668-9.584 26.132-19.941l17.817-43.154c4.935-9.761 2.98-24.42-4.31-32.563l-32.241-35.965c-7.297-8.153-7.532-21.675-0.517-30.077l68.94-68.933c8.392-7.012 21.906-6.777 30.048 0.513l35.98 32.245c8.142 7.294 22.784 9.248 32.544 4.324l43.151-17.835c10.379-3.45 19.359-15.219 19.944-26.147l2.644-48.248c0.592-10.91 9.949-21.053 20.79-22.524 0 0 25.435-3.435 48.837-3.435 23.434 0 48.884 3.435 48.884 3.435 10.834 1.47 20.179 11.618 20.782 22.524l2.633 48.248c0.603 10.92 9.58 22.69 19.952 26.147l43.151 17.835c9.761 4.92 24.416 2.966 32.559-4.324l35.962-32.245c8.15-7.297 21.675-7.539 30.059-0.524l68.943 68.943c7.005 8.395 6.773 21.924-0.517 30.077l-32.241 35.965c-7.29 8.142-9.244 22.802-4.324 32.563l17.835 43.154c3.45 10.353 15.219 19.348 26.129 19.941l48.273 2.652c10.913 0.6 21.057 9.941 22.498 20.797 0 0 3.45 25.421 3.45 48.811 0.004 23.387-3.446 48.833-3.446 48.833zM511.977 350.488c-53.858 0-97.518 43.689-97.518 97.518 0 53.854 43.66 97.518 97.518 97.518 53.89 0 97.572-43.664 97.572-97.518-0.011-53.829-43.689-97.518-97.572-97.518z" />
+<glyph unicode="&#xe604;" d="M745.567 453.638h-315.742c-3.746 0-6.78-3.034-6.78-6.78v-27.034c0-3.742 3.034-6.78 6.78-6.78h315.742c3.746 0 6.78 3.038 6.78 6.78v27.034c0 3.746-3.034 6.78-6.78 6.78zM744.73 535.948h-315.742c-3.746 0-6.78-3.034-6.78-6.78v-27.034c0-3.746 3.034-6.78 6.78-6.78h315.742c3.742 0 6.78 3.034 6.78 6.78v27.034c0 3.746-3.038 6.78-6.78 6.78zM744.73 292.098h-497.459c-3.742 0-6.78-3.034-6.78-6.78v-27.034c0-3.746 3.038-6.78 6.78-6.78h497.459c3.742 0 6.78 3.034 6.78 6.78v27.034c0 3.749-3.038 6.78-6.78 6.78zM744.73 210.629h-497.459c-3.742 0-6.78-3.034-6.78-6.78v-27.034c0-3.746 3.038-6.78 6.78-6.78h497.459c3.742 0 6.78 3.034 6.78 6.78v27.034c0 3.749-3.038 6.78-6.78 6.78zM247.27 413.885h128.050c3.746 0 6.78 3.034 6.78 6.78v108.503c0 3.746-3.034 6.78-6.78 6.78h-128.050c-3.746 0-6.78-3.034-6.78-6.78v-108.499c0-3.749 3.034-6.783 6.78-6.783zM744.73 373.291h-497.459c-3.742 0-6.78-3.034-6.78-6.78v-27.034c0-3.746 3.038-6.78 6.78-6.78h497.459c3.742 0 6.78 3.034 6.78 6.78v27.034c0 3.746-3.038 6.78-6.78 6.78zM247.27 596.558h497.459c3.742 0 6.78 3.034 6.78 6.78v67.346c0 3.746-3.038 6.78-6.78 6.78h-497.459c-3.746 0-6.78-3.034-6.78-6.78v-67.346c0-3.746 3.034-6.78 6.78-6.78zM794.565 867.075h-597.131c-36.42 0-66.054-29.633-66.054-66.054v-674.041c0-36.424 29.633-66.054 66.054-66.054h597.131c36.42 0 66.054 29.63 66.054 66.054v674.041c0 36.42-29.633 66.054-66.054 66.054zM699.562 825.935c14.198 0 25.708-11.51 25.708-25.708 0-14.202-11.51-25.712-25.708-25.712s-25.712 11.51-25.712 25.712c0 14.198 11.517 25.708 25.712 25.708zM806.465 126.98c0-6.566-5.34-11.9-11.9-11.9h-597.131c-6.56 0-11.9 5.332-11.9 11.9v605.445h620.93v-605.445zM780.753 774.515c-14.198 0-25.712 11.51-25.712 25.712 0 14.198 11.514 25.708 25.712 25.708s25.712-11.51 25.712-25.708c0-14.202-11.514-25.712-25.712-25.712z" />
+<glyph unicode="&#xe605;" d="M641.851 941.938h-259.702c-32.602 0-59.125-26.523-59.125-59.125v-776.19c0-32.599 26.523-59.121 59.121-59.121h45.448v-93.439h168.806v93.439h45.448c32.599 0 59.118 26.523 59.118 59.121v776.19c0.004 32.602-26.515 59.125-59.114 59.125zM420.434 846.736c24.456 24.456 56.975 37.927 91.564 37.927s67.108-13.471 91.564-37.927c44.155-44.155 50.527-113.499 15.158-164.886-5.256-7.633-13.727-11.737-22.343-11.737-5.299 0-10.646 1.55-15.338 4.783-12.326 8.482-15.44 25.348-6.958 37.674 20.551 29.864 16.838 70.172-8.832 95.849-14.226 14.222-33.137 22.058-53.251 22.058s-39.025-7.832-53.251-22.058c-25.674-25.674-29.387-65.985-8.836-95.849 8.482-12.326 5.368-29.196-6.958-37.674-12.318-8.496-29.192-5.372-37.678 6.954-35.369 51.391-28.99 120.728 15.158 164.886zM618.72 156.651c-5.256-7.637-13.727-11.737-22.343-11.737-5.299 0-10.646 1.546-15.338 4.779-12.326 8.482-15.44 25.348-6.958 37.678 20.551 29.864 16.838 70.168-8.832 95.849-29.358 29.351-77.136 29.358-106.502-0.004-25.674-25.674-29.387-65.985-8.836-95.845 8.482-12.329 5.368-29.199-6.958-37.678-12.318-8.496-29.192-5.368-37.678 6.958-35.369 51.391-28.993 120.731 15.158 164.886 50.491 50.484 132.645 50.48 183.129 0 44.155-44.155 50.527-113.499 15.158-164.886zM618.72 419.25c-5.256-7.633-13.727-11.737-22.343-11.737-5.299 0-10.646 1.55-15.338 4.779-12.326 8.486-15.44 25.352-6.958 37.678 20.555 29.864 16.838 70.175-8.832 95.845-14.226 14.229-33.137 22.061-53.251 22.061s-39.025-7.832-53.251-22.058c-25.674-25.674-29.391-65.985-8.836-95.849 8.482-12.326 5.368-29.196-6.958-37.678-12.318-8.496-29.192-5.368-37.678 6.958-35.369 51.391-28.997 120.735 15.158 164.886 24.456 24.456 56.975 37.927 91.564 37.927s67.108-13.471 91.564-37.931c44.158-44.155 50.527-113.496 15.158-164.883z" />
+<glyph unicode="&#xe606;" d="M821.185 500.876l-291.231 225.083c-5.286 4.086-11.617 6.129-17.95 6.129-6.331 0-12.663-2.044-17.95-6.129l-291.231-225.083c-7.192-5.558-11.403-14.134-11.403-23.227v-357.378c0-16.211 13.142-29.354 29.354-29.354h121.352v223.318c0 16.211 13.142 29.354 29.354 29.354h140.523c16.212 0 29.354-13.143 29.354-29.354v-223.316h261.877c16.211 0 29.353 13.143 29.353 29.354l0.002 356.663v0.715c0 9.091-4.213 17.667-11.401 23.226zM920.754 503.798l-372.655 288.013c-18.015 17.844-46.897 20.041-67.511 4.109l-377.338-291.636c-22.449-17.348-26.582-49.611-9.233-72.059 10.122-13.096 25.319-19.957 40.683-19.957 10.97 0 22.026 3.499 31.377 10.727l345.609 267.112 346.241-267.602c9.351-7.229 20.406-10.725 31.378-10.725 15.361 0 30.56 6.862 40.683 19.957 17.348 22.449 13.216 54.71-9.231 72.060z" />
+<glyph unicode="&#xe607;" d="M864.796 625.864c-19.994 47.276-48.62 89.736-85.082 126.195-36.458 36.46-78.917 65.085-126.195 85.082-48.952 20.705-100.946 31.203-154.54 31.203s-105.59-10.498-154.54-31.203c-47.277-19.996-89.736-48.621-126.195-85.082-36.46-36.458-65.085-78.917-85.082-126.195-19.759-46.715-30.2-96.205-31.115-147.209h-0.089v-7.276c0-0.019-0.002-0.036-0.002-0.056v-7.332h0.092c0.915-51.003 11.354-100.493 31.113-147.209 19.047-45.030 45.941-85.682 79.957-120.947l-0.061-0.062 5.175-5.175c0.003-0.003 0.007-0.005 0.009-0.009l5.185-5.185 0.061 0.062c35.269-34.020 75.916-60.911 120.952-79.959 48.95-20.705 100.946-31.203 154.54-31.203s105.59 10.499 154.54 31.201c47.277 19.997 89.736 48.621 126.195 85.082 36.461 36.46 65.087 78.919 85.082 126.197 20.707 48.952 31.203 100.946 31.203 154.54 0.002 53.593-10.496 105.587-31.203 154.538zM748.61 720.951v0l-85.931-85.929c-43.726 43.726-101.863 67.806-163.699 67.806v121.525c47.676 0 93.903-9.327 137.404-27.727 42.035-17.778 79.79-43.238 112.226-75.673zM631.573 338.732l-0.275-0.275c-35.386-35.244-82.359-54.647-132.318-54.647-50.086 0-97.176 19.507-132.59 54.922-35.417 35.415-54.922 82.504-54.922 132.59 0 50.077 19.497 97.157 54.902 132.572l0.019 0.019c35.417 35.417 82.506 54.922 132.593 54.922s97.174-19.505 132.59-54.922c35.415-35.415 54.922-82.504 54.922-132.59s-19.507-97.174-54.92-132.59zM145.951 473.29l0.081 4.576c0.815 45.388 10.116 89.416 27.647 130.862 17.778 42.035 43.238 79.791 75.671 112.226l85.931-85.931c-0.007-0.009-0.015-0.015-0.024-0.024-43.711-43.724-67.783-101.851-67.782-163.674l-121.525 0.056v1.912zM361.576 146.021c-39.977 16.909-76.161 40.831-107.547 71.105l-2.879 2.769-1.3 1.301-0.484 0.514 85.916 85.914c43.726-43.724 101.861-67.804 163.699-67.804v-121.525c-47.676 0-93.906 9.327-137.404 27.727zM824.282 333.92c-17.778-42.037-43.238-79.794-75.673-112.228l-85.929 85.931c43.726 43.726 67.806 101.863 67.806 163.699h121.525c0-47.674-9.327-93.903-27.727-137.403z" />
+<glyph unicode="&#xe608;" d="M512.003 880.726l-383.463-301.891v-479.328h766.925v479.328l-383.463 301.891zM512.003 820.466l335.668-264.262-220.568-173.094c-0.292-0.147-0.58-0.292-0.876-0.451-4.764-2.705-10.484-5.404-17.149-8.102-6.671-2.699-14.293-5.122-22.87-7.265-2.934-0.735-5.993-1.417-9.16-2.056l-65.044 51.045-56.295-44.182c-15.928 6.341-29.88 15.177-41.852 26.521-13.578 12.863-24.221 28.902-31.922 48.119-7.704 19.217-11.555 41.528-11.555 66.939 0 20.167 3.455 39.107 10.364 56.817 6.907 17.706 16.555 33.191 28.943 46.453 12.387 13.259 27.157 23.702 44.307 31.326s35.971 11.436 56.458 11.436c18.738 0 35.772-2.621 51.099-7.863 15.322-5.241 28.426-12.946 39.308-23.107 10.876-10.166 19.254-22.75 25.131-37.757 5.874-15.006 8.813-32.361 8.813-52.052 0-11.436-1.077-21.998-3.215-31.683-2.146-9.689-5.046-18.104-8.695-25.25-3.656-7.147-7.982-12.746-12.984-16.795s-10.362-6.075-16.081-6.075c-6.038 0-10.839 1.509-14.411 4.527-3.575 3.015-5.361 8.495-5.361 16.437 0 5.557 1.191 13.020 3.574 22.393l23.347 90.283c-4.609 1.907-9.092 3.611-13.459 5.122-4.37 1.509-9.015 2.739-13.938 3.692-4.926 0.953-10.243 1.708-15.963 2.264-5.716 0.554-12.069 0.832-19.058 0.832-14.769 0-28.228-1.666-40.375-5.001-12.15-3.336-22.988-7.825-32.517-13.46-9.529-5.637-17.83-12.309-24.895-20.008-7.068-7.706-12.903-15.884-17.508-24.537-4.609-8.658-8.062-17.669-10.362-27.039-2.303-9.372-3.455-18.58-3.455-27.633 0-10.327 1.311-19.853 3.931-28.586 2.62-8.735 6.551-16.281 11.793-22.631 5.241-6.354 11.75-11.316 19.534-14.888 7.778-3.575 16.831-5.359 27.157-5.359 11.911 0 23.025 2.219 33.351 6.671 10.321 4.442 20.248 11.911 29.775 22.392 2.063-5.4 4.805-9.966 8.218-13.698s7.227-6.751 11.436-9.050c4.206-2.303 8.695-3.97 13.459-5.002 4.764-1.033 9.686-1.548 14.769-1.548 15.086 0 29.023 3.253 41.81 9.766 12.785 6.51 23.822 15.366 33.112 26.562s16.517 24.298 21.679 39.306c5.159 15.006 7.741 31.006 7.741 48.003 0 16.831-2.223 32.672-6.671 47.524-4.449 14.847-10.641 28.427-18.583 40.735s-17.431 23.303-28.467 32.993c-11.041 9.686-23.107 17.867-36.207 24.537-13.105 6.671-27.003 11.75-41.69 15.247-14.693 3.49-29.74 5.241-45.141 5.241-18.424 0-35.971-2.385-52.648-7.147-16.675-4.764-32.159-11.476-46.453-20.129-14.293-8.658-27.239-18.938-38.831-30.85-11.593-11.911-21.518-24.934-29.775-39.069-8.26-14.138-14.614-29.223-19.061-45.261-4.447-16.042-6.671-32.398-6.671-49.075 0-28.862 4.599-55.087 13.774-78.684l-154.454 121.211 335.66 264.26zM848.121 496.371v-343.147l-219.087 171.212 219.087 171.934zM175.889 496.371l219.090-171.934-219.090-171.212v343.147zM537.609 559.654l-16.677-65.035c-1.59-6.354-3.614-11.671-6.075-15.96-2.465-4.288-5.205-7.741-8.218-10.362-3.016-2.62-6.234-4.49-9.649-5.596-3.415-1.115-6.869-1.67-10.362-1.67-6.513 0-11.553 2.301-15.126 6.909-3.574 4.604-5.359 11.59-5.359 20.963 0 9.686 1.625 18.858 4.883 27.516 3.253 8.654 7.624 16.234 13.101 22.75 5.48 6.51 11.871 11.673 19.178 15.484 7.302 3.812 14.926 5.716 22.869 5.716 3.814 0 7.624-0.237 11.436-0.714zM244.631 146.853l267.373 209.239 266.623-209.239h-533.997z" />
+<glyph unicode="&#xe609;" d="M353.033 380.651l96.282 158.012c-21.722 7.991-41.402 20.024-58.558 35.803l-102.145-167.635c23.156-4.378 44.801-13.171 64.421-26.179zM797.338 368.416c-74.525 0-135.156-60.631-135.156-135.156 0-74.521 60.631-135.152 135.156-135.152s135.156 60.631 135.156 135.152c0 74.525-60.631 135.156-135.156 135.156zM489.648 694.822l196.322-322.186c17.199 13.778 36.475 24.102 57.412 30.742l-130.2 213.672 1.618 1.98c19.691 24.055 30.536 54.414 30.536 85.485 0 74.525-60.624 135.152-135.152 135.152-74.525 0-135.156-60.628-135.156-135.152s60.631-135.156 135.156-135.156c7.42 0 14.84 0.607 22.119 1.803l-62.062 101.853c-9.678 15.88-5.509 36.923 9.493 47.905l7.254 5.314-1.564-8.858c-1.376-7.814 0.123-15.819 4.223-22.552zM623.301 273.001h-238.453l-0.816 2.485c-18.264 55.588-69.85 92.934-128.361 92.934-74.521 0-135.152-60.628-135.152-135.152s60.631-135.156 135.152-135.156c54.562 0 104.096 33.31 124.886 83.411h-124.882c-19.919 0-36.124 16.205-36.124 36.124 0 2.149 0.213 4.386 0.632 6.647l1.9 10.191 4.848-9.161c5.657-10.696 16.671-17.343 28.744-17.343h364.986c-1.214 8.464-1.824 16.946-1.824 25.287 0 13.395 1.499 26.739 4.465 39.733z" />
+<glyph unicode="&#xe60a;" d="M620.371 795.872c-91.229 0-165.186-73.957-165.186-165.186v-69.937c0.007-91.229 73.961-211.794 165.186-211.794s165.179 120.565 165.186 211.794v69.94c0 91.229-73.957 165.182-165.186 165.182zM867.401 356.867c-20.074 16.44-49.881 27.939-92.988 35.178-42.211-58.063-96.86-90.051-154.042-90.051-57.185 0-111.834 31.985-154.042 90.051-43.111-7.239-72.917-18.741-92.991-35.178-37.118-30.399-44.382-82.577-44.382-162.433 0-37.378 45.155-61.841 83.039-75.789 53.786-19.807 129.737-31.165 208.376-31.165 78.643 0 154.587 11.358 208.38 31.165 37.876 13.948 83.032 38.415 83.032 75.789 0 79.857-7.257 132.035-44.382 162.433zM408.321 556.863c-5.137-19.388-14.392-39.433-26.378-56.090-17.979-24.987-39.040-39.321-57.777-39.321-18.734 0-39.795 14.334-57.777 39.321-18.759 26.075-30.879 60.461-30.883 87.605v57.423c0 48.887 39.773 88.66 88.66 88.66 42.583 0 78.242-30.178 86.731-70.269 3.616 22.683 10.863 44.155 21.086 63.853-24.781 32.436-63.843 53.377-107.817 53.377-74.9 0-135.622-60.718-135.622-135.622v-57.423c0.004-28.809 9.013-61.166 24.33-90.101-112.585-16.097-130.015-65.447-130.015-170.829 0-58.973 94.393-91.868 199.735-98.71 0.726 19.327 2.204 37.298 4.779 53.963-37.172 2.323-71.606 8.099-99.461 16.856-37.439 11.769-49.44 24.821-50.867 28.058 0.014 65.941 8.323 86.269 20.797 96.485 14.854 12.163 45.383 20.013 92.565 23.719 21.238-20.226 46.554-33.325 73.759-33.325 27.231 0 52.565 13.12 73.806 33.368 14.258-1.105 26.934-2.608 38.18-4.476-17.257 36.981-27.173 76.764-27.83 113.478z" />
+<glyph unicode="&#xe60b;" d="M470.555 327.954c-34.783-34.732-80.777-53.799-129.905-53.799-49.019 0-95.224 19.065-129.743 53.799-71.748 71.59-71.748 187.951 0 259.54 34.521 34.783 80.777 53.799 129.743 53.799 49.127 0 95.118-19.013 129.905-53.799 34.732-34.521 53.799-80.724 53.799-129.798 0-49.019-19.013-95.118-53.799-129.743zM565.301 335.179c20.342 37.175 31.227 78.972 31.227 122.521 0 68.348-26.604 132.558-74.99 180.836-48.276 48.328-112.483 74.882-180.887 74.882-68.244 0-132.507-26.554-180.887-74.882-99.737-99.631-99.737-261.982 0-361.723 48.384-48.223 112.643-74.776 180.887-74.776 43.604 0 85.347 10.886 122.572 31.227l136.063-135.905c14.071-14.125 32.501-21.135 50.987-21.135s36.909 7.064 50.987 21.135c28.2 28.095 28.2 73.876 0 101.971l-135.959 135.851z" horiz-adv-x="724" />
+<glyph unicode="&#xe60c;" d="M587.69 266.12c-6.541 6.541-15.17 10.127-24.344 10.127s-17.848-3.59-24.344-10.127c-13.442-13.399-13.442-35.29 0-48.73l29.114-29.114c6.541-6.541 15.17-10.080 24.387-10.080 9.176 0 17.848 3.546 24.344 10.127 13.442 13.399 13.442 35.243 0 48.686l-29.159 29.114zM164.273 592.121c6.541-6.541 15.17-10.127 24.387-10.127 9.176 0 17.893 3.59 24.344 10.080 6.541 6.497 10.080 15.125 10.080 24.344 0 9.221-3.546 17.893-10.080 24.387l-29.114 29.114c-6.541 6.497-15.17 10.080-24.387 10.080-9.176 0-17.848-3.59-24.344-10.080-13.442-13.442-13.442-35.29 0-48.73l29.114-29.069zM563.164 582.127c9.176 0 17.848 3.59 24.344 10.080l29.159 29.114c13.442 13.399 13.442 35.29 0 48.73-6.541 6.497-15.17 10.080-24.344 10.080-9.221 0-17.893-3.59-24.387-10.080l-29.114-29.114c-13.442-13.442-13.442-35.29 0-48.73 6.497-6.541 15.17-10.080 24.344-10.080zM151.145 429.029c0 18.982-15.442 34.424-34.471 34.424h-46.824c-18.982 0-34.471-15.442-34.471-34.424s15.487-34.471 34.471-34.471h46.824c19.030 0 34.471 15.487 34.471 34.471zM682.068 463.455h-46.824c-19.030 0-34.471-15.487-34.471-34.471s15.442-34.471 34.471-34.471h46.824c19.030 0 34.471 15.442 34.471 34.471s-15.442 34.471-34.471 34.471zM376.138 653.891c19.030 0 34.471 15.442 34.471 34.471v46.872c0 18.982-15.442 34.471-34.471 34.471-18.982 0-34.471-15.442-34.471-34.471v-46.872c0-18.982 15.487-34.471 34.471-34.471zM376.138 204.309c-18.982 0-34.471-15.487-34.471-34.519v-46.824c0-18.982 15.487-34.471 34.471-34.471 19.030 0 34.471 15.487 34.471 34.471v46.824c0 19.030-15.442 34.519-34.471 34.519zM496.857 549.748c-33.111 33.111-76.439 49.64-119.812 49.64s-86.748-16.532-119.812-49.64c-46.551-46.506-60.357-113.405-41.419-171.995l-77.799-77.754c-9.221-9.267-12.49-22.937-8.446-35.336l13.943-42.465c3.406-10.443 11.625-18.711 22.117-22.117l42.42-13.899c3.546-1.133 7.173-1.727 10.764-1.727 9.083 0 17.939 3.546 24.529 10.217l76.029 75.937c18.53-6.678 38.060-10.080 57.632-10.080 43.327 0 86.7 16.532 119.812 49.64 66.216 66.126 66.264 173.447 0.043 239.575zM455.073 351.911c-20.845-20.845-48.552-32.292-78.024-32.292s-57.182 11.444-78.024 32.292c-20.845 20.845-32.337 48.552-32.337 78.024 0 29.475 11.49 57.182 32.337 78.024 20.845 20.845 48.506 32.337 78.024 32.337 29.43 0 57.182-11.49 78.024-32.337 20.845-20.799 32.337-48.506 32.337-77.98 0-29.524-11.49-57.225-32.337-78.075z" horiz-adv-x="724" />
+<glyph unicode="&#xe60d;" d="M323.782 794.856c-6.136-0.123-12.156-2.295-17.357-5.785s-9.26-6.831-12.398-10.745c-3.138-3.915-6.095-9.551-9.092-15.704-2.998-6.154-5.393-11.346-7.439-16.532-2.046-5.184-4.758-10.695-7.439-16.532s-4.917-11.104-7.439-14.879c-1.905-2.503-4.81-5.81-8.266-9.919s-6.061-7.607-8.266-10.745c-2.205-3.138-4.325-5.745-4.96-8.266-0.635-2.838 0.384-6.895 1.653-12.398 1.27-5.502 1.144-9.877 0.827-12.398-1.253-11.955-4.992-27.035-12.398-45.46-7.405-18.426-14.686-31.493-20.664-39.674-1.253-1.569-4.241-5.226-9.919-10.745-5.678-5.518-9.493-10.787-10.745-14.879-1.269-1.587-1.111-5.994 0-13.225s1.144-12.039 0.827-14.879c-1.253-10.703-4.96-24.521-11.572-42.153-6.613-17.632-13.225-32.47-19.836-43.808-0.951-1.887-3.858-5.385-8.266-10.745s-6.487-9.769-7.439-13.225c-0.635-2.523-0.794-6.929 0-13.225 0.794-6.295 0.951-10.895 0-14.051-2.522-11.972-7.948-26.142-14.879-42.981-6.929-16.839-13.417-31.834-20.664-43.808-1.887-3.156-4.95-6.496-8.266-10.745s-5.551-8.416-7.439-11.572c-1.887-3.156-3.498-6.464-4.133-9.919-0.317-1.887 0.384-4.844 1.653-9.092 1.269-4.249 1.97-7.397 1.653-9.919-0.3-4.408-1.527-10.11-2.479-17.357-0.951-7.249-0.827-11.971-0.827-13.225-6.929-18.902-6.738-38.423 0.827-59.51 8.817-24.562 24.596-45.152 47.113-61.99 22.518-16.839 46.011-25.623 70.258-25.623h435.592c20.472 0 39.75 6.963 57.859 20.664s30.391 30.265 36.369 50.42l129.769 428.154c6.929 22.677 4.325 43.215-8.266 61.166h-0.827c-6.613 8.817-15.303 15.112-27.276 19.836 0.635-11.020-0.276-19.519-2.479-26.45l-68.604-224.823c12.385-7.456 24.879-14.904 37.195-22.317-12.683-24.711-35.089-43.475-61.991-59.51l-48.767-159.525c-2.522-8.183-8.032-14.953-16.532-19.836s-17.315-7.439-26.45-7.439h-435.592c-37.771 0-60.214 11.020-67.778 33.062-3.139 8.5-3.455 15.621 0 20.664 3.475 4.726 9.685 6.613 18.184 6.613h197.547c-47.549 28.634-95.012 57.576-142.167 85.962 57.532 112.156 300.38 110.971 368.643 216.556h-254.578c-4.408 0-8.032 1.962-9.919 4.96s-2.079 5.829-0.827 9.919l9.919 30.583c1.269 4.090 4.333 7.747 8.266 10.745s7.482 4.133 11.572 4.133h287.64c4.408 0 7.205-1.134 9.092-4.133s2.079-6.653 0.827-10.745l-9.919-30.583c-1.27-4.090-3.507-6.921-7.439-9.919s-8.307-4.96-12.398-4.96h-10.745c34.813-20.957 69.914-41.711 104.972-62.818l84.309 277.721c6.948 23.293 3.515 43.532-9.092 61.166s-30.432 26.45-53.726 26.45h-359.55c-4.090 0-11.998-1.294-23.97-4.133l0.827 0.827c-8.817 1.85-16.18 3.428-22.317 3.306zM384.946 674.181h286.813c4.408 0 7.205-1.962 9.092-4.96s2.905-6.653 1.653-10.745l-9.919-29.755c-1.27-4.090-4.333-7.747-8.266-10.745s-7.482-4.96-11.572-4.96h-287.64c-4.408 0-7.205 1.962-9.092 4.96s-2.079 6.653-0.827 10.745l9.919 29.755c1.27 4.090 3.507 7.747 7.439 10.745s8.307 4.96 12.398 4.96zM662.668 282.393c-73.889-28.296-158.529-50.063-209.118-92.573h114.065c29.289 0 49.159 5.669 60.339 16.532s22.551 35.267 33.89 72.737l0.827 3.306zM576.707 526.226c-7.484-1.103-13.716-3.425-19.011-6.613-4.731-2.849-8.701-6.804-10.745-10.745-9.443-18.44-25.433-34.23-49.593-48.767-32.269-19.419-74.559-34.040-119.025-49.593-47.195-16.47-95.592-33.807-135.554-57.859-33.958-20.473-57.534-42.994-71.084-69.43-4.565-8.925-0.178-19.020 10.745-25.623l208.29-125.635c10.339-6.227 25.479-8.722 39.674-6.613 7.484 1.13 13.716 3.425 19.011 6.613 4.731 2.849 8.701 6.778 10.745 10.745 9.464 18.44 25.411 34.23 49.593 48.767 32.249 19.419 74.518 34.054 119.025 49.593 47.154 16.494 95.614 33.807 135.554 57.859 33.958 20.447 57.513 42.993 71.084 69.429 4.545 8.913 0.157 19.057-10.745 25.623l-208.29 125.636c-10.339 6.227-25.479 8.722-39.674 6.613zM587.452 501.429c69.042-41.56 139.228-84.062 208.291-125.636-59.265-115.47-316.032-110.155-375.255-225.649-69.042 41.574-139.249 84.075-208.291 125.636 59.245 115.494 316.052 110.155 375.255 225.649zM577.92 339.615c-6.796 3.426-13.633 5.762-20.512 6.917-6.837 1.155-13.676 1.62-20.596 1.318-6.837-0.315-13.841-1.256-20.846-2.874-7.004-1.644-14.050-3.426-21.138-5.499-11.194 7.744-22.389 15.403-33.583 22.506 5.044 2.748 9.943 4.142 14.654 4.243 4.731 0.124 9.276-0.174 13.592-0.829 4.399-0.666 8.423-1.23 12.133-1.67 3.753-0.439 7.003 0.049 9.86 1.494 3.023 1.57 4.692 3.602 4.919 6.050 0.209 2.472-1.335 4.882-4.774 7.229-4.399 3.038-9.694 4.883-16.051 5.562-6.274 0.666-12.695 0.615-19.387-0.264-6.588-0.904-12.863-2.397-18.803-4.507s-10.715-4.268-14.259-6.377c-1.354 0.778-2.712 1.544-4.065 2.31-1.501 0.829-3.377 1.281-5.629 1.256-2.272 0-4.148-0.59-5.691-1.67-1.501-1.055-2.188-2.284-1.917-3.578 0.209-1.343 1.105-2.371 2.648-3.163 1.354-0.691 2.712-1.367 4.065-2.084-5.337-3.879-9.735-8.16-13.196-12.678-3.503-4.531-5.587-9.025-6.357-13.38-0.813-4.393-0.041-8.411 2.188-12.137 2.231-3.754 6.357-6.942 12.383-9.955 9.818-4.908 21.368-6.993 34.77-6.527 13.363 0.489 27.767 2.888 43.257 7.896 12.299-8.559 24.64-17.059 36.961-24.955-5.211-2.649-9.777-4.167-13.8-4.657-4.024-0.514-7.609-0.465-10.861 0.124-3.252 0.615-6.274 1.494-9.048 2.624-2.773 1.155-5.503 2.133-8.234 2.937-2.689 0.803-5.462 1.256-8.297 1.281s-5.858-0.803-9.192-2.523c-3.419-1.794-5.128-3.879-5.128-6.227 0-2.335 1.791-4.707 5.295-7.105 3.543-2.397 8.151-4.418 13.717-6.013 5.567-1.595 11.861-2.599 18.783-2.874 6.921-0.288 14.217 0.339 21.91 2.059 7.735 1.695 15.385 4.758 22.93 9.315 3.626-2.133 7.296-4.167 10.945-6.125 1.542-0.803 3.419-1.205 5.69-1.105 2.188 0.049 4.107 0.666 5.629 1.769 1.542 1.13 2.188 2.371 1.96 3.678-0.209 1.318-1.105 2.335-2.606 3.063-3.67 1.769-7.339 3.627-10.986 5.586 6.233 4.607 11.236 9.465 14.947 14.272 3.709 4.833 5.9 9.489 6.628 13.807 0.729 4.344-0.124 8.26-2.479 11.811-2.335 3.603-6.484 6.69-12.423 9.666zM461.369 331.105c-5.9-0.151-11.048 1.029-15.55 3.651-1.918 1.105-3.252 2.447-4.065 4.042-0.855 1.595-1.147 3.339-0.813 5.248 0.292 1.882 1.23 3.854 2.856 5.837 1.542 1.984 3.835 3.967 6.754 5.886 10.569-6.327 21.118-13.267 31.686-20.447-8.005-2.649-14.968-4.067-20.868-4.218zM559.701 305.974c-1.876-2.084-4.024-3.943-6.546-5.562-11.697 7.105-23.369 14.912-35.020 22.921 2.982 0.803 6.108 1.644 9.484 2.498s6.754 1.418 10.132 1.769c3.46 0.315 6.88 0.226 10.299-0.264 3.377-0.514 6.588-1.62 9.567-3.364 2.939-1.769 4.794-3.603 5.544-5.586 0.813-2.008 0.856-4.042 0.292-6.125-0.605-2.097-1.835-4.18-3.753-6.289zM476.921 248.234c4.107 1.997 10.152 1.896 13.925-0.414 4.086-2.447 4.086-6.452 0-8.9-0.334-0.201-0.687-0.339-1.063-0.514l0.041-0.024c-13.196-6.038-24.036-11.473-35.729-18.515-10.569-6.351-20.116-13.042-28.371-19.833l-13.319-10.983c-0.417-0.451-0.916-0.865-1.542-1.255-4.086-2.447-10.737-2.447-14.801 0-3.543 2.134-3.981 5.423-1.377 7.87l-0.041 0.024 14.259 11.725c8.901 7.331 19.136 14.511 30.456 21.327 11.779 7.116 24.494 13.47 37.524 19.494h0.043zM553.238 429.803c10.549 6.351 20.075 13.017 28.35 19.846l13.842 11.423c0.5 0.54 1.063 1.079 1.835 1.544 4.107 2.473 10.756 2.473 14.863 0 3.898-2.36 4.065-6.088 0.521-8.586l0.042-0.024-14.259-11.774c-8.921-7.331-19.137-14.485-30.457-21.302-11.779-7.091-24.475-13.469-37.501-19.494l-0.084 0.024c-4.148-2.297-10.589-2.247-14.571 0.174-4.107 2.472-4.107 6.502 0 8.974 0.729 0.465 1.585 0.791 2.439 1.079 12.259 5.636 24.077 11.547 34.981 18.113z" horiz-adv-x="960" />
+<glyph unicode="&#xe60e;" d="M153.324 96.598h131.775v131.775h-131.775v-131.775zM314.383 96.598h146.417v131.775h-146.417v-131.775zM153.324 257.658h131.775v146.417h-131.775v-146.417zM314.383 257.658h146.417v146.417h-146.417v-146.417zM153.324 433.358h131.775v131.775h-131.775v-131.775zM490.085 96.598h146.417v131.775h-146.417v-131.775zM314.383 433.358h146.417v131.775h-146.417v-131.775zM665.787 96.598h131.775v131.775h-131.775v-131.775zM490.085 257.658h146.417v146.417h-146.417v-146.417zM329.025 652.985v131.775q0 5.949-4.348 10.295t-10.295 4.348h-29.282q-5.949 0-10.295-4.348t-4.348-10.295v-131.775q0-5.949 4.348-10.295t10.295-4.348h29.282q5.949 0 10.295 4.348t4.348 10.295zM665.787 257.658h131.775v146.417h-131.775v-146.417zM490.085 433.358h146.417v131.775h-146.417v-131.775zM665.787 433.358h131.775v131.775h-131.775v-131.775zM680.427 652.985v131.775q0 5.949-4.348 10.295t-10.295 4.348h-29.282q-5.949 0-10.295-4.348t-4.348-10.295v-131.775q0-5.949 4.348-10.295t10.295-4.348h29.282q5.949 0 10.295 4.348t4.348 10.295zM856.13 682.269v-585.671q0-23.793-17.386-41.182t-41.182-17.386h-644.238q-23.792 0-41.181 17.386t-17.386 41.182v585.671q0 23.793 17.386 41.181t41.181 17.386h58.568v43.924q0 30.198 21.505 51.702t51.702 21.505h29.282q30.198 0 51.703-21.505t21.505-51.702v-43.924h175.702v43.924q0 30.198 21.505 51.702t51.703 21.505h29.282q30.198 0 51.702-21.505t21.505-51.702v-43.924h58.568q23.793 0 41.182-17.386t17.386-41.181z" horiz-adv-x="951" />
+<glyph unicode="&#xe60f;" d="M402.381 220.467l-41.472-41.165c-35.942-35.584-94.362-35.635-130.253 0-17.254 17.152-26.726 39.834-26.726 64.051s9.523 46.95 26.726 64.102l152.576 151.398c31.59 31.386 91.085 77.517 134.451 34.509 19.917-19.763 52.070-19.61 71.782 0.256 19.763 19.866 19.661 52.019-0.256 71.782-73.677 73.114-182.63 59.597-277.504-34.509l-152.576-151.398c-36.557-36.352-56.73-84.685-56.73-136.141 0-51.405 20.173-99.738 56.781-136.090 37.683-37.427 87.142-56.064 136.602-56.064s99.021 18.637 136.704 56.064l41.472 41.216c19.917 19.763 20.019 51.917 0.256 71.731-19.763 19.866-51.917 19.968-71.834 0.256zM864.819 808.499c-79.155 78.541-189.798 82.79-263.117 10.086l-51.661-51.251c-19.917-19.763-20.070-51.866-0.307-71.782 19.814-19.917 51.917-20.019 71.782-0.256l51.661 51.251c37.939 37.683 87.654 22.067 120.115-10.086 17.254-17.101 26.726-39.885 26.726-64.051 0-24.218-9.523-46.95-26.726-64.051l-162.816-161.485c-74.394-73.83-109.363-39.219-124.262-24.422-19.917 19.763-52.019 19.61-71.731-0.256-19.763-19.917-19.661-52.070 0.256-71.782 34.15-33.894 73.216-50.688 114.074-50.688 50.074 0 102.963 25.19 153.242 75.11l162.765 161.485c36.608 36.301 56.781 84.634 56.781 136.038s-20.173 99.789-56.781 136.141z" />
+<glyph unicode="&#xe610;" d="M627.866 329.318c0 0 361.421 260.762 321.331 559.258-0.922 6.554-3.072 10.854-5.734 13.773-2.816 2.714-7.014 4.966-13.466 5.888-291.686 40.909-546.509-328.909-546.509-328.909-221.082 26.522-205.005-17.613-305.869-259.84-19.302-46.182 11.981-62.106 46.285-49.101 34.304 12.902 110.029 41.523 110.029 41.523l132.557-135.629c0 0-27.955-77.466-40.602-112.538-12.646-35.174 2.867-67.174 48.026-47.462 236.749 103.27 279.859 86.835 253.952 313.037zM679.475 632.218c-30.618 31.334-30.618 82.125 0 113.459 30.618 31.283 80.23 31.283 110.848 0 30.669-31.283 30.669-82.125 0-113.459-30.566-31.386-80.23-31.386-110.848 0z" />
+<glyph unicode="&#xe611;" d="M870.4 921.6h-460.8c-56.32 0-101.376-46.080-101.376-102.4v-153.6h101.376v153.6h460.8v-716.8h-460.8v102.4h-101.376v-102.4c0-56.32 45.056-102.4 101.376-102.4h460.8c56.32 0 102.4 46.080 102.4 102.4v716.8c0 56.32-46.080 102.4-102.4 102.4zM512 235.52l204.8 199.68-204.8 199.68v-122.88h-460.8v-153.6h460.8v-122.88z" />
+<glyph unicode="&#xe612;" d="M856.422 315.392c-43.213-69.837-180.992-120.883-344.422-120.883-163.328 0-301.21 51.046-344.371 120.883-9.165 14.797-14.029 6.861-14.029-0.461 0-7.373 0-102.502 0-102.502 0-99.277 160.461-202.189 358.4-202.189s358.4 102.912 358.4 202.189c0 0 0 95.13 0 102.502 0 7.322-4.915 15.258-13.978 0.461zM856.934 577.28c-42.445-61.747-180.838-107.008-344.934-107.008s-302.49 45.261-344.934 107.008c-8.806 12.749-13.466 5.837-13.466 0.051s0-120.627 0-120.627c0-90.266 160.461-163.379 358.4-163.379s358.4 73.114 358.4 163.379c0 0 0 114.842 0 120.627s-4.71 12.698-13.466-0.051zM512 911.36c-197.939 0-358.4-60.314-358.4-134.758v-64.461c0-78.95 160.461-142.95 358.4-142.95s358.4 64 358.4 142.95v64.41c0 74.496-160.461 134.81-358.4 134.81z" />
+<glyph unicode="&#xe613;" d="M173.517 567.706l56.422-497.101c3.021-23.603 116.992-101.222 282.061-101.325 165.069 0.102 279.091 77.722 282.112 101.325l56.422 497.101c-86.221-48.23-215.091-71.066-338.534-71.066s-252.314 22.835-338.483 71.066zM674.15 874.906l-43.981 48.794c-16.947 24.115-35.379 28.621-71.27 28.621h-93.798c-35.84 0-54.272-4.506-71.27-28.621l-43.93-48.794c-131.584-22.989-227.021-83.968-227.021-128.922v-8.755c0-79.155 174.182-143.36 389.12-143.36s389.12 64.205 389.12 143.36v8.755c0 44.954-95.386 105.933-226.97 128.922zM617.933 760.883l-64.102 68.557h-83.661l-64.102-68.557h-87.040c0 0 95.334 113.664 108.083 129.075 9.728 11.776 19.712 16.282 32.614 16.282h104.602c12.902 0 22.835-4.506 32.614-16.282 12.698-15.411 108.083-129.075 108.083-129.075h-87.091z" />
+<glyph unicode="&#xe614;" d="M898.304 180.838l-193.485 193.485c29.184 47.974 45.978 104.192 45.978 164.454 0 174.899-151.603 326.502-326.554 326.502-174.899 0-316.723-141.824-316.723-316.723 0-174.95 151.552-326.554 326.502-326.554 58.163 0 112.64 15.77 159.488 43.162l194.509-194.56c19.098-19.046 49.92-19.046 68.915 0l48.282 48.23c18.995 19.046 12.083 43.008-6.912 62.003zM205.005 548.557c0 121.088 98.15 219.29 219.238 219.29 121.139 0 229.069-107.93 229.069-229.069s-98.15-219.29-219.29-219.29-229.018 107.93-229.018 229.069z" />
+<glyph unicode="&#xe615;" d="M847.923 796.774c-73.83 73.882-129.28 62.822-129.28 62.822l-554.291-554.291-51.712-243.866 243.866 51.712 554.24 554.24c0 0 11.11 55.45-62.822 129.382zM341.965 142.49l-83.098-17.92c-8.038 15.002-17.715 30.003-35.379 47.718-17.664 17.664-32.717 27.29-47.718 35.328l17.971 83.149 24.013 24.013c0 0 45.261-0.922 96.307-51.968 51.098-51.098 52.019-96.358 52.019-96.358l-24.115-23.962z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/fonts/ispconfig.ttf b/interface/web/themes/default/assets/fonts/ispconfig.ttf
new file mode 100644
index 0000000..cc359a9
--- /dev/null
+++ b/interface/web/themes/default/assets/fonts/ispconfig.ttf
Binary files differ
diff --git a/interface/web/themes/default/assets/fonts/ispconfig.woff b/interface/web/themes/default/assets/fonts/ispconfig.woff
new file mode 100644
index 0000000..2d6c559
--- /dev/null
+++ b/interface/web/themes/default/assets/fonts/ispconfig.woff
Binary files differ
diff --git a/interface/web/themes/default/icons/flags_sprite.png b/interface/web/themes/default/assets/images/flags_sprite.png
similarity index 100%
rename from interface/web/themes/default/icons/flags_sprite.png
rename to interface/web/themes/default/assets/images/flags_sprite.png
Binary files differ
diff --git a/interface/web/themes/default/assets/images/logo.png b/interface/web/themes/default/assets/images/logo.png
new file mode 100644
index 0000000..dd522cd
--- /dev/null
+++ b/interface/web/themes/default/assets/images/logo.png
Binary files differ
diff --git a/interface/web/themes/default/assets/images/logo@2x.png b/interface/web/themes/default/assets/images/logo@2x.png
new file mode 100644
index 0000000..10c0877
--- /dev/null
+++ b/interface/web/themes/default/assets/images/logo@2x.png
Binary files differ
diff --git a/interface/web/themes/default/assets/javascripts/bootstrap-datetimepicker.min.js b/interface/web/themes/default/assets/javascripts/bootstrap-datetimepicker.min.js
new file mode 100644
index 0000000..4b4a17c
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/bootstrap-datetimepicker.min.js
@@ -0,0 +1 @@
+!function(d){function g(){return new Date(Date.UTC.apply(Date,arguments))}function b(){var h=new Date();return g(h.getUTCFullYear(),h.getUTCMonth(),h.getUTCDate(),h.getUTCHours(),h.getUTCMinutes(),h.getUTCSeconds(),0)}var f=function(j,i){var l=this;this.element=d(j);this.container=i.container||"body";this.language=i.language||this.element.data("date-language")||"en";this.language=this.language in e?this.language:"en";this.isRTL=e[this.language].rtl||false;this.formatType=i.formatType||this.element.data("format-type")||"standard";this.format=c.parseFormat(i.format||this.element.data("date-format")||e[this.language].format||c.getDefaultFormat(this.formatType,"input"),this.formatType);this.isInline=false;this.isVisible=false;this.isInput=this.element.is("input");this.fontAwesome=i.fontAwesome||this.element.data("font-awesome")||false;this.bootcssVer=i.bootcssVer||(this.isInput?(this.element.is(".form-control")?3:2):(this.bootcssVer=this.element.is(".input-group")?3:2));this.component=this.element.is(".date")?(this.bootcssVer==3?this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o").parent():this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar .fa-calendar .fa-clock-o").parent()):false;this.componentReset=this.element.is(".date")?(this.bootcssVer==3?this.element.find(".input-group-addon .glyphicon-remove, .input-group-addon .fa-times").parent():this.element.find(".add-on .icon-remove, .add-on .fa-times").parent()):false;this.hasInput=this.component&&this.element.find("input").length;if(this.component&&this.component.length===0){this.component=false}this.linkField=i.linkField||this.element.data("link-field")||false;this.linkFormat=c.parseFormat(i.linkFormat||this.element.data("link-format")||c.getDefaultFormat(this.formatType,"link"),this.formatType);this.minuteStep=i.minuteStep||this.element.data("minute-step")||5;this.pickerPosition=i.pickerPosition||this.element.data("picker-position")||"bottom-right";this.showMeridian=i.showMeridian||this.element.data("show-meridian")||false;this.initialDate=i.initialDate||new Date();this.zIndex=i.zIndex||this.element.data("z-index")||undefined;this.icons={leftArrow:this.fontAwesome?"fa-arrow-left":(this.bootcssVer===3?"glyphicon-arrow-left":"icon-arrow-left"),rightArrow:this.fontAwesome?"fa-arrow-right":(this.bootcssVer===3?"glyphicon-arrow-right":"icon-arrow-right")};this.icontype=this.fontAwesome?"fa":"glyphicon";this._attachEvents();this.formatViewType="datetime";if("formatViewType" in i){this.formatViewType=i.formatViewType}else{if("formatViewType" in this.element.data()){this.formatViewType=this.element.data("formatViewType")}}this.minView=0;if("minView" in i){this.minView=i.minView}else{if("minView" in this.element.data()){this.minView=this.element.data("min-view")}}this.minView=c.convertViewMode(this.minView);this.maxView=c.modes.length-1;if("maxView" in i){this.maxView=i.maxView}else{if("maxView" in this.element.data()){this.maxView=this.element.data("max-view")}}this.maxView=c.convertViewMode(this.maxView);this.wheelViewModeNavigation=false;if("wheelViewModeNavigation" in i){this.wheelViewModeNavigation=i.wheelViewModeNavigation}else{if("wheelViewModeNavigation" in this.element.data()){this.wheelViewModeNavigation=this.element.data("view-mode-wheel-navigation")}}this.wheelViewModeNavigationInverseDirection=false;if("wheelViewModeNavigationInverseDirection" in i){this.wheelViewModeNavigationInverseDirection=i.wheelViewModeNavigationInverseDirection}else{if("wheelViewModeNavigationInverseDirection" in this.element.data()){this.wheelViewModeNavigationInverseDirection=this.element.data("view-mode-wheel-navigation-inverse-dir")}}this.wheelViewModeNavigationDelay=100;if("wheelViewModeNavigationDelay" in i){this.wheelViewModeNavigationDelay=i.wheelViewModeNavigationDelay}else{if("wheelViewModeNavigationDelay" in this.element.data()){this.wheelViewModeNavigationDelay=this.element.data("view-mode-wheel-navigation-delay")}}this.startViewMode=2;if("startView" in i){this.startViewMode=i.startView}else{if("startView" in this.element.data()){this.startViewMode=this.element.data("start-view")}}this.startViewMode=c.convertViewMode(this.startViewMode);this.viewMode=this.startViewMode;this.viewSelect=this.minView;if("viewSelect" in i){this.viewSelect=i.viewSelect}else{if("viewSelect" in this.element.data()){this.viewSelect=this.element.data("view-select")}}this.viewSelect=c.convertViewMode(this.viewSelect);this.forceParse=true;if("forceParse" in i){this.forceParse=i.forceParse}else{if("dateForceParse" in this.element.data()){this.forceParse=this.element.data("date-force-parse")}}var k=this.bootcssVer===3?c.templateV3:c.template;while(k.indexOf("{iconType}")!==-1){k=k.replace("{iconType}",this.icontype)}while(k.indexOf("{leftArrow}")!==-1){k=k.replace("{leftArrow}",this.icons.leftArrow)}while(k.indexOf("{rightArrow}")!==-1){k=k.replace("{rightArrow}",this.icons.rightArrow)}this.picker=d(k).appendTo(this.isInline?this.element:this.container).on({click:d.proxy(this.click,this),mousedown:d.proxy(this.mousedown,this)});if(this.wheelViewModeNavigation){if(d.fn.mousewheel){this.picker.on({mousewheel:d.proxy(this.mousewheel,this)})}else{console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option")}}if(this.isInline){this.picker.addClass("datetimepicker-inline")}else{this.picker.addClass("datetimepicker-dropdown-"+this.pickerPosition+" dropdown-menu")}if(this.isRTL){this.picker.addClass("datetimepicker-rtl");var h=this.bootcssVer===3?".prev span, .next span":".prev i, .next i";this.picker.find(h).toggleClass(this.icons.leftArrow+" "+this.icons.rightArrow)}d(document).on("mousedown",function(m){if(d(m.target).closest(".datetimepicker").length===0){l.hide()}});this.autoclose=false;if("autoclose" in i){this.autoclose=i.autoclose}else{if("dateAutoclose" in this.element.data()){this.autoclose=this.element.data("date-autoclose")}}this.keyboardNavigation=true;if("keyboardNavigation" in i){this.keyboardNavigation=i.keyboardNavigation}else{if("dateKeyboardNavigation" in this.element.data()){this.keyboardNavigation=this.element.data("date-keyboard-navigation")}}this.todayBtn=(i.todayBtn||this.element.data("date-today-btn")||false);this.todayHighlight=(i.todayHighlight||this.element.data("date-today-highlight")||false);this.weekStart=((i.weekStart||this.element.data("date-weekstart")||e[this.language].weekStart||0)%7);this.weekEnd=((this.weekStart+6)%7);this.startDate=-Infinity;this.endDate=Infinity;this.daysOfWeekDisabled=[];this.setStartDate(i.startDate||this.element.data("date-startdate"));this.setEndDate(i.endDate||this.element.data("date-enddate"));this.setDaysOfWeekDisabled(i.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled"));this.setMinutesDisabled(i.minutesDisabled||this.element.data("date-minute-disabled"));this.setHoursDisabled(i.hoursDisabled||this.element.data("date-hour-disabled"));this.fillDow();this.fillMonths();this.update();this.showMode();if(this.isInline){this.show()}};f.prototype={constructor:f,_events:[],_attachEvents:function(){this._detachEvents();if(this.isInput){this._events=[[this.element,{focus:d.proxy(this.show,this),keyup:d.proxy(this.update,this),keydown:d.proxy(this.keydown,this)}]]}else{if(this.component&&this.hasInput){this._events=[[this.element.find("input"),{focus:d.proxy(this.show,this),keyup:d.proxy(this.update,this),keydown:d.proxy(this.keydown,this)}],[this.component,{click:d.proxy(this.show,this)}]];if(this.componentReset){this._events.push([this.componentReset,{click:d.proxy(this.reset,this)}])}}else{if(this.element.is("div")){this.isInline=true}else{this._events=[[this.element,{click:d.proxy(this.show,this)}]]}}}for(var h=0,j,k;h<this._events.length;h++){j=this._events[h][0];k=this._events[h][1];j.on(k)}},_detachEvents:function(){for(var h=0,j,k;h<this._events.length;h++){j=this._events[h][0];k=this._events[h][1];j.off(k)}this._events=[]},show:function(h){this.picker.show();this.height=this.component?this.component.outerHeight():this.element.outerHeight();if(this.forceParse){this.update()}this.place();d(window).on("resize",d.proxy(this.place,this));if(h){h.stopPropagation();h.preventDefault()}this.isVisible=true;this.element.trigger({type:"show",date:this.date})},hide:function(h){if(!this.isVisible){return}if(this.isInline){return}this.picker.hide();d(window).off("resize",this.place);this.viewMode=this.startViewMode;this.showMode();if(!this.isInput){d(document).off("mousedown",this.hide)}if(this.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())){this.setValue()}this.isVisible=false;this.element.trigger({type:"hide",date:this.date})},remove:function(){this._detachEvents();this.picker.remove();delete this.picker;delete this.element.data().datetimepicker},getDate:function(){var h=this.getUTCDate();return new Date(h.getTime()+(h.getTimezoneOffset()*60000))},getUTCDate:function(){return this.date},setDate:function(h){this.setUTCDate(new Date(h.getTime()-(h.getTimezoneOffset()*60000)))},setUTCDate:function(h){if(h>=this.startDate&&h<=this.endDate){this.date=h;this.setValue();this.viewDate=this.date;this.fill()}else{this.element.trigger({type:"outOfRange",date:h,startDate:this.startDate,endDate:this.endDate})}},setFormat:function(i){this.format=c.parseFormat(i,this.formatType);var h;if(this.isInput){h=this.element}else{if(this.component){h=this.element.find("input")}}if(h&&h.val()){this.setValue()}},setValue:function(){var h=this.getFormattedDate();if(!this.isInput){if(this.component){this.element.find("input").val(h)}this.element.data("date",h)}else{this.element.val(h)}if(this.linkField){d("#"+this.linkField).val(this.getFormattedDate(this.linkFormat))}},getFormattedDate:function(h){if(h==undefined){h=this.format}return c.formatDate(this.date,h,this.language,this.formatType)},setStartDate:function(h){this.startDate=h||-Infinity;if(this.startDate!==-Infinity){this.startDate=c.parseDate(this.startDate,this.format,this.language,this.formatType)}this.update();this.updateNavArrows()},setEndDate:function(h){this.endDate=h||Infinity;if(this.endDate!==Infinity){this.endDate=c.parseDate(this.endDate,this.format,this.language,this.formatType)}this.update();this.updateNavArrows()},setDaysOfWeekDisabled:function(h){this.daysOfWeekDisabled=h||[];if(!d.isArray(this.daysOfWeekDisabled)){this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)}this.daysOfWeekDisabled=d.map(this.daysOfWeekDisabled,function(i){return parseInt(i,10)});this.update();this.updateNavArrows()},setMinutesDisabled:function(h){this.minutesDisabled=h||[];if(!d.isArray(this.minutesDisabled)){this.minutesDisabled=this.minutesDisabled.split(/,\s*/)}this.minutesDisabled=d.map(this.minutesDisabled,function(i){return parseInt(i,10)});this.update();this.updateNavArrows()},setHoursDisabled:function(h){this.hoursDisabled=h||[];if(!d.isArray(this.hoursDisabled)){this.hoursDisabled=this.hoursDisabled.split(/,\s*/)}this.hoursDisabled=d.map(this.hoursDisabled,function(i){return parseInt(i,10)});this.update();this.updateNavArrows()},place:function(){if(this.isInline){return}if(!this.zIndex){var h=0;d("div").each(function(){var m=parseInt(d(this).css("zIndex"),10);if(m>h){h=m}});this.zIndex=h+10}var l,k,j,i;if(this.container instanceof d){i=this.container.offset()}else{i=d(this.container).offset()}if(this.component){l=this.component.offset();j=l.left;if(this.pickerPosition=="bottom-left"||this.pickerPosition=="top-left"){j+=this.component.outerWidth()-this.picker.outerWidth()}}else{l=this.element.offset();j=l.left}if(j+220>document.body.clientWidth){j=document.body.clientWidth-220}if(this.pickerPosition=="top-left"||this.pickerPosition=="top-right"){k=l.top-this.picker.outerHeight()}else{k=l.top+this.height}k=k-i.top;j=j-i.left;if(this.container!="body"){k=k+document.body.scrollTop}this.picker.css({top:k,left:j,zIndex:this.zIndex})},update:function(){var h,i=false;if(arguments&&arguments.length&&(typeof arguments[0]==="string"||arguments[0] instanceof Date)){h=arguments[0];i=true}else{h=(this.isInput?this.element.val():this.element.find("input").val())||this.element.data("date")||this.initialDate;if(typeof h=="string"||h instanceof String){h=h.replace(/^\s+|\s+$/g,"")}}if(!h){h=new Date();i=false}this.date=c.parseDate(h,this.format,this.language,this.formatType);if(i){this.setValue()}if(this.date<this.startDate){this.viewDate=new Date(this.startDate)}else{if(this.date>this.endDate){this.viewDate=new Date(this.endDate)}else{this.viewDate=new Date(this.date)}}this.fill()},fillDow:function(){var h=this.weekStart,i="<tr>";while(h<this.weekStart+7){i+='<th class="dow">'+e[this.language].daysMin[(h++)%7]+"</th>"}i+="</tr>";this.picker.find(".datetimepicker-days thead").append(i)},fillMonths:function(){var j="",h=0;while(h<12){j+='<span class="month">'+e[this.language].monthsShort[h++]+"</span>"}this.picker.find(".datetimepicker-months td").html(j)},fill:function(){if(this.date==null||this.viewDate==null){return}var F=new Date(this.viewDate),s=F.getUTCFullYear(),G=F.getUTCMonth(),m=F.getUTCDate(),B=F.getUTCHours(),w=F.getUTCMinutes(),x=this.startDate!==-Infinity?this.startDate.getUTCFullYear():-Infinity,C=this.startDate!==-Infinity?this.startDate.getUTCMonth()+1:-Infinity,o=this.endDate!==Infinity?this.endDate.getUTCFullYear():Infinity,y=this.endDate!==Infinity?this.endDate.getUTCMonth()+1:Infinity,p=(new g(this.date.getUTCFullYear(),this.date.getUTCMonth(),this.date.getUTCDate())).valueOf(),E=new Date();this.picker.find(".datetimepicker-days thead th:eq(1)").text(e[this.language].months[G]+" "+s);if(this.formatViewType=="time"){var j=this.getFormattedDate();this.picker.find(".datetimepicker-hours thead th:eq(1)").text(j);this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(j)}else{this.picker.find(".datetimepicker-hours thead th:eq(1)").text(m+" "+e[this.language].months[G]+" "+s);this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(m+" "+e[this.language].months[G]+" "+s)}this.picker.find("tfoot th.today").text(e[this.language].today).toggle(this.todayBtn!==false);this.updateNavArrows();this.fillMonths();var I=g(s,G-1,28,0,0,0,0),A=c.getDaysInMonth(I.getUTCFullYear(),I.getUTCMonth());I.setUTCDate(A);I.setUTCDate(A-(I.getUTCDay()-this.weekStart+7)%7);var h=new Date(I);h.setUTCDate(h.getUTCDate()+42);h=h.valueOf();var q=[];var t;while(I.valueOf()<h){if(I.getUTCDay()==this.weekStart){q.push("<tr>")}t="";if(I.getUTCFullYear()<s||(I.getUTCFullYear()==s&&I.getUTCMonth()<G)){t+=" old"}else{if(I.getUTCFullYear()>s||(I.getUTCFullYear()==s&&I.getUTCMonth()>G)){t+=" new"}}if(this.todayHighlight&&I.getUTCFullYear()==E.getFullYear()&&I.getUTCMonth()==E.getMonth()&&I.getUTCDate()==E.getDate()){t+=" today"}if(I.valueOf()==p){t+=" active"}if((I.valueOf()+86400000)<=this.startDate||I.valueOf()>this.endDate||d.inArray(I.getUTCDay(),this.daysOfWeekDisabled)!==-1){t+=" disabled"}q.push('<td class="day'+t+'">'+I.getUTCDate()+"</td>");if(I.getUTCDay()==this.weekEnd){q.push("</tr>")}I.setUTCDate(I.getUTCDate()+1)}this.picker.find(".datetimepicker-days tbody").empty().append(q.join(""));q=[];var u="",D="",r="";var k=this.hoursDisabled||[];for(var z=0;z<24;z++){if(k.indexOf(z)!==-1){continue}var v=g(s,G,m,z);t="";if((v.valueOf()+3600000)<=this.startDate||v.valueOf()>this.endDate){t+=" disabled"}else{if(B==z){t+=" active"}}if(this.showMeridian&&e[this.language].meridiem.length==2){D=(z<12?e[this.language].meridiem[0]:e[this.language].meridiem[1]);if(D!=r){if(r!=""){q.push("</fieldset>")}q.push('<fieldset class="hour"><legend>'+D.toUpperCase()+"</legend>")}r=D;u=(z%12?z%12:12);q.push('<span class="hour'+t+" hour_"+(z<12?"am":"pm")+'">'+u+"</span>");if(z==23){q.push("</fieldset>")}}else{u=z+":00";q.push('<span class="hour'+t+'">'+u+"</span>")}}this.picker.find(".datetimepicker-hours td").html(q.join(""));q=[];u="",D="",r="";var l=this.minutesDisabled||[];for(var z=0;z<60;z+=this.minuteStep){if(l.indexOf(z)!==-1){continue}var v=g(s,G,m,B,z,0);t="";if(v.valueOf()<this.startDate||v.valueOf()>this.endDate){t+=" disabled"}else{if(Math.floor(w/this.minuteStep)==Math.floor(z/this.minuteStep)){t+=" active"}}if(this.showMeridian&&e[this.language].meridiem.length==2){D=(B<12?e[this.language].meridiem[0]:e[this.language].meridiem[1]);if(D!=r){if(r!=""){q.push("</fieldset>")}q.push('<fieldset class="minute"><legend>'+D.toUpperCase()+"</legend>")}r=D;u=(B%12?B%12:12);q.push('<span class="minute'+t+'">'+u+":"+(z<10?"0"+z:z)+"</span>");if(z==59){q.push("</fieldset>")}}else{u=z+":00";q.push('<span class="minute'+t+'">'+B+":"+(z<10?"0"+z:z)+"</span>")}}this.picker.find(".datetimepicker-minutes td").html(q.join(""));var J=this.date.getUTCFullYear();var n=this.picker.find(".datetimepicker-months").find("th:eq(1)").text(s).end().find("span").removeClass("active");if(J==s){n.eq(this.date.getUTCMonth()+2).addClass("active")}if(s<x||s>o){n.addClass("disabled")}if(s==x){n.slice(0,C+1).addClass("disabled")}if(s==o){n.slice(y).addClass("disabled")}q="";s=parseInt(s/10,10)*10;var H=this.picker.find(".datetimepicker-years").find("th:eq(1)").text(s+"-"+(s+9)).end().find("td");s-=1;for(var z=-1;z<11;z++){q+='<span class="year'+(z==-1||z==10?" old":"")+(J==s?" active":"")+(s<x||s>o?" disabled":"")+'">'+s+"</span>";s+=1}H.html(q);this.place()},updateNavArrows:function(){var l=new Date(this.viewDate),j=l.getUTCFullYear(),k=l.getUTCMonth(),i=l.getUTCDate(),h=l.getUTCHours();switch(this.viewMode){case 0:if(this.startDate!==-Infinity&&j<=this.startDate.getUTCFullYear()&&k<=this.startDate.getUTCMonth()&&i<=this.startDate.getUTCDate()&&h<=this.startDate.getUTCHours()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&j>=this.endDate.getUTCFullYear()&&k>=this.endDate.getUTCMonth()&&i>=this.endDate.getUTCDate()&&h>=this.endDate.getUTCHours()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 1:if(this.startDate!==-Infinity&&j<=this.startDate.getUTCFullYear()&&k<=this.startDate.getUTCMonth()&&i<=this.startDate.getUTCDate()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&j>=this.endDate.getUTCFullYear()&&k>=this.endDate.getUTCMonth()&&i>=this.endDate.getUTCDate()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 2:if(this.startDate!==-Infinity&&j<=this.startDate.getUTCFullYear()&&k<=this.startDate.getUTCMonth()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&j>=this.endDate.getUTCFullYear()&&k>=this.endDate.getUTCMonth()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 3:case 4:if(this.startDate!==-Infinity&&j<=this.startDate.getUTCFullYear()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&j>=this.endDate.getUTCFullYear()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break}},mousewheel:function(i){i.preventDefault();i.stopPropagation();if(this.wheelPause){return}this.wheelPause=true;var h=i.originalEvent;var k=h.wheelDelta;var j=k>0?1:(k===0)?0:-1;if(this.wheelViewModeNavigationInverseDirection){j=-j}this.showMode(j);setTimeout(d.proxy(function(){this.wheelPause=false},this),this.wheelViewModeNavigationDelay)},click:function(l){l.stopPropagation();l.preventDefault();var m=d(l.target).closest("span, td, th, legend");if(m.is("."+this.icontype)){m=d(m).parent().closest("span, td, th, legend")}if(m.length==1){if(m.is(".disabled")){this.element.trigger({type:"outOfRange",date:this.viewDate,startDate:this.startDate,endDate:this.endDate});return}switch(m[0].nodeName.toLowerCase()){case"th":switch(m[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var h=c.modes[this.viewMode].navStep*(m[0].className=="prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveHour(this.viewDate,h);break;case 1:this.viewDate=this.moveDate(this.viewDate,h);break;case 2:this.viewDate=this.moveMonth(this.viewDate,h);break;case 3:case 4:this.viewDate=this.moveYear(this.viewDate,h);break}this.fill();this.element.trigger({type:m[0].className+":"+this.convertViewModeText(this.viewMode),date:this.viewDate,startDate:this.startDate,endDate:this.endDate});break;case"today":var i=new Date();i=g(i.getFullYear(),i.getMonth(),i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds(),0);if(i<this.startDate){i=this.startDate}else{if(i>this.endDate){i=this.endDate}}this.viewMode=this.startViewMode;this.showMode(0);this._setDate(i);this.fill();if(this.autoclose){this.hide()}break}break;case"span":if(!m.is(".disabled")){var o=this.viewDate.getUTCFullYear(),n=this.viewDate.getUTCMonth(),p=this.viewDate.getUTCDate(),q=this.viewDate.getUTCHours(),j=this.viewDate.getUTCMinutes(),r=this.viewDate.getUTCSeconds();if(m.is(".month")){this.viewDate.setUTCDate(1);n=m.parent().find("span").index(m);p=this.viewDate.getUTCDate();this.viewDate.setUTCMonth(n);this.element.trigger({type:"changeMonth",date:this.viewDate});if(this.viewSelect>=3){this._setDate(g(o,n,p,q,j,r,0))}}else{if(m.is(".year")){this.viewDate.setUTCDate(1);o=parseInt(m.text(),10)||0;this.viewDate.setUTCFullYear(o);this.element.trigger({type:"changeYear",date:this.viewDate});if(this.viewSelect>=4){this._setDate(g(o,n,p,q,j,r,0))}}else{if(m.is(".hour")){q=parseInt(m.text(),10)||0;if(m.hasClass("hour_am")||m.hasClass("hour_pm")){if(q==12&&m.hasClass("hour_am")){q=0}else{if(q!=12&&m.hasClass("hour_pm")){q+=12}}}this.viewDate.setUTCHours(q);this.element.trigger({type:"changeHour",date:this.viewDate});if(this.viewSelect>=1){this._setDate(g(o,n,p,q,j,r,0))}}else{if(m.is(".minute")){j=parseInt(m.text().substr(m.text().indexOf(":")+1),10)||0;this.viewDate.setUTCMinutes(j);this.element.trigger({type:"changeMinute",date:this.viewDate});if(this.viewSelect>=0){this._setDate(g(o,n,p,q,j,r,0))}}}}}if(this.viewMode!=0){var k=this.viewMode;this.showMode(-1);this.fill();if(k==this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}}break;case"td":if(m.is(".day")&&!m.is(".disabled")){var p=parseInt(m.text(),10)||1;var o=this.viewDate.getUTCFullYear(),n=this.viewDate.getUTCMonth(),q=this.viewDate.getUTCHours(),j=this.viewDate.getUTCMinutes(),r=this.viewDate.getUTCSeconds();if(m.is(".old")){if(n===0){n=11;o-=1}else{n-=1}}else{if(m.is(".new")){if(n==11){n=0;o+=1}else{n+=1}}}this.viewDate.setUTCFullYear(o);this.viewDate.setUTCMonth(n,p);this.element.trigger({type:"changeDay",date:this.viewDate});if(this.viewSelect>=2){this._setDate(g(o,n,p,q,j,r,0))}}var k=this.viewMode;this.showMode(-1);this.fill();if(k==this.viewMode&&this.autoclose){this.hide()}break}}},_setDate:function(h,j){if(!j||j=="date"){this.date=h}if(!j||j=="view"){this.viewDate=h}this.fill();this.setValue();var i;if(this.isInput){i=this.element}else{if(this.component){i=this.element.find("input")}}if(i){i.change();if(this.autoclose&&(!j||j=="date")){}}this.element.trigger({type:"changeDate",date:this.date})},moveMinute:function(i,h){if(!h){return i}var j=new Date(i.valueOf());j.setUTCMinutes(j.getUTCMinutes()+(h*this.minuteStep));return j},moveHour:function(i,h){if(!h){return i}var j=new Date(i.valueOf());j.setUTCHours(j.getUTCHours()+h);return j},moveDate:function(i,h){if(!h){return i}var j=new Date(i.valueOf());j.setUTCDate(j.getUTCDate()+h);return j},moveMonth:function(h,j){if(!j){return h}var m=new Date(h.valueOf()),q=m.getUTCDate(),n=m.getUTCMonth(),l=Math.abs(j),p,o;j=j>0?1:-1;if(l==1){o=j==-1?function(){return m.getUTCMonth()==n}:function(){return m.getUTCMonth()!=p};p=n+j;m.setUTCMonth(p);if(p<0||p>11){p=(p+12)%12}}else{for(var k=0;k<l;k++){m=this.moveMonth(m,j)}p=m.getUTCMonth();m.setUTCDate(q);o=function(){return p!=m.getUTCMonth()}}while(o()){m.setUTCDate(--q);m.setUTCMonth(p)}return m},moveYear:function(i,h){return this.moveMonth(i,h*12)},dateWithinRange:function(h){return h>=this.startDate&&h<=this.endDate},keydown:function(l){if(this.picker.is(":not(:visible)")){if(l.keyCode==27){this.show()}return}var n=false,i,o,m,p,h;switch(l.keyCode){case 27:this.hide();l.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation){break}i=l.keyCode==37?-1:1;viewMode=this.viewMode;if(l.ctrlKey){viewMode+=2}else{if(l.shiftKey){viewMode+=1}}if(viewMode==4){p=this.moveYear(this.date,i);h=this.moveYear(this.viewDate,i)}else{if(viewMode==3){p=this.moveMonth(this.date,i);h=this.moveMonth(this.viewDate,i)}else{if(viewMode==2){p=this.moveDate(this.date,i);h=this.moveDate(this.viewDate,i)}else{if(viewMode==1){p=this.moveHour(this.date,i);h=this.moveHour(this.viewDate,i)}else{if(viewMode==0){p=this.moveMinute(this.date,i);h=this.moveMinute(this.viewDate,i)}}}}}if(this.dateWithinRange(p)){this.date=p;this.viewDate=h;this.setValue();this.update();l.preventDefault();n=true}break;case 38:case 40:if(!this.keyboardNavigation){break}i=l.keyCode==38?-1:1;viewMode=this.viewMode;if(l.ctrlKey){viewMode+=2}else{if(l.shiftKey){viewMode+=1}}if(viewMode==4){p=this.moveYear(this.date,i);h=this.moveYear(this.viewDate,i)}else{if(viewMode==3){p=this.moveMonth(this.date,i);h=this.moveMonth(this.viewDate,i)}else{if(viewMode==2){p=this.moveDate(this.date,i*7);h=this.moveDate(this.viewDate,i*7)}else{if(viewMode==1){if(this.showMeridian){p=this.moveHour(this.date,i*6);h=this.moveHour(this.viewDate,i*6)}else{p=this.moveHour(this.date,i*4);h=this.moveHour(this.viewDate,i*4)}}else{if(viewMode==0){p=this.moveMinute(this.date,i*4);h=this.moveMinute(this.viewDate,i*4)}}}}}if(this.dateWithinRange(p)){this.date=p;this.viewDate=h;this.setValue();this.update();l.preventDefault();n=true}break;case 13:if(this.viewMode!=0){var k=this.viewMode;this.showMode(-1);this.fill();if(k==this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}l.preventDefault();break;case 9:this.hide();break}if(n){var j;if(this.isInput){j=this.element}else{if(this.component){j=this.element.find("input")}}if(j){j.change()}this.element.trigger({type:"changeDate",date:this.date})}},showMode:function(h){if(h){var i=Math.max(0,Math.min(c.modes.length-1,this.viewMode+h));if(i>=this.minView&&i<=this.maxView){this.element.trigger({type:"changeMode",date:this.viewDate,oldViewMode:this.viewMode,newViewMode:i});this.viewMode=i}}this.picker.find(">div").hide().filter(".datetimepicker-"+c.modes[this.viewMode].clsName).css("display","block");this.updateNavArrows()},reset:function(h){this._setDate(null,"date")},convertViewModeText:function(h){switch(h){case 4:return"decade";case 3:return"year";case 2:return"month";case 1:return"day";case 0:return"hour"}}};var a=d.fn.datetimepicker;d.fn.datetimepicker=function(j){var h=Array.apply(null,arguments);h.shift();var i;this.each(function(){var m=d(this),l=m.data("datetimepicker"),k=typeof j=="object"&&j;if(!l){m.data("datetimepicker",(l=new f(this,d.extend({},d.fn.datetimepicker.defaults,k))))}if(typeof j=="string"&&typeof l[j]=="function"){i=l[j].apply(l,h);if(i!==undefined){return false}}});if(i!==undefined){return i}else{return this}};d.fn.datetimepicker.defaults={};d.fn.datetimepicker.Constructor=f;var e=d.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["am","pm"],suffix:["st","nd","rd","th"],today:"Today"}};var c={modes:[{clsName:"minutes",navFnc:"Hours",navStep:1},{clsName:"hours",navFnc:"Date",navStep:1},{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(h){return(((h%4===0)&&(h%100!==0))||(h%400===0))},getDaysInMonth:function(h,i){return[31,(c.isLeapYear(h)?29:28),31,30,31,30,31,31,30,31,30,31][i]},getDefaultFormat:function(h,i){if(h=="standard"){if(i=="input"){return"yyyy-mm-dd hh:ii"}else{return"yyyy-mm-dd hh:ii:ss"}}else{if(h=="php"){if(i=="input"){return"Y-m-d H:i"}else{return"Y-m-d H:i:s"}}else{throw new Error("Invalid format type.")}}},validParts:function(h){if(h=="standard"){return/hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g}else{if(h=="php"){return/[dDjlNwzFmMnStyYaABgGhHis]/g}else{throw new Error("Invalid format type.")}}},nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,parseFormat:function(k,i){var h=k.replace(this.validParts(i),"\0").split("\0"),j=k.match(this.validParts(i));if(!h||!h.length||!j||j.length==0){throw new Error("Invalid date format.")}return{separators:h,parts:j}},parseDate:function(m,v,p,t){if(m instanceof Date){var x=new Date(m.valueOf()-m.getTimezoneOffset()*60000);x.setMilliseconds(0);return x}if(/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(m)){v=this.parseFormat("yyyy-mm-dd",t)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(m)){v=this.parseFormat("yyyy-mm-dd hh:ii",t)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(m)){v=this.parseFormat("yyyy-mm-dd hh:ii:ss",t)}if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(m)){var y=/([-+]\d+)([dmwy])/,n=m.match(/([-+]\d+)([dmwy])/g),h,l;m=new Date();for(var o=0;o<n.length;o++){h=y.exec(n[o]);l=parseInt(h[1]);switch(h[2]){case"d":m.setUTCDate(m.getUTCDate()+l);break;case"m":m=f.prototype.moveMonth.call(f.prototype,m,l);break;case"w":m.setUTCDate(m.getUTCDate()+l*7);break;case"y":m=f.prototype.moveYear.call(f.prototype,m,l);break}}return g(m.getUTCFullYear(),m.getUTCMonth(),m.getUTCDate(),m.getUTCHours(),m.getUTCMinutes(),m.getUTCSeconds(),0)}var n=m&&m.toString().match(this.nonpunctuation)||[],m=new Date(0,0,0,0,0,0,0),r={},u=["hh","h","ii","i","ss","s","yyyy","yy","M","MM","m","mm","D","DD","d","dd","H","HH","p","P"],w={hh:function(s,i){return s.setUTCHours(i)},h:function(s,i){return s.setUTCHours(i)},HH:function(s,i){return s.setUTCHours(i==12?0:i)},H:function(s,i){return s.setUTCHours(i==12?0:i)},ii:function(s,i){return s.setUTCMinutes(i)},i:function(s,i){return s.setUTCMinutes(i)},ss:function(s,i){return s.setUTCSeconds(i)},s:function(s,i){return s.setUTCSeconds(i)},yyyy:function(s,i){return s.setUTCFullYear(i)},yy:function(s,i){return s.setUTCFullYear(2000+i)},m:function(s,i){i-=1;while(i<0){i+=12}i%=12;s.setUTCMonth(i);while(s.getUTCMonth()!=i){if(isNaN(s.getUTCMonth())){return s}else{s.setUTCDate(s.getUTCDate()-1)}}return s},d:function(s,i){return s.setUTCDate(i)},p:function(s,i){return s.setUTCHours(i==1?s.getUTCHours()+12:s.getUTCHours())}},k,q,h;w.M=w.MM=w.mm=w.m;w.dd=w.d;w.P=w.p;m=g(m.getFullYear(),m.getMonth(),m.getDate(),m.getHours(),m.getMinutes(),m.getSeconds());if(n.length==v.parts.length){for(var o=0,j=v.parts.length;o<j;o++){k=parseInt(n[o],10);h=v.parts[o];if(isNaN(k)){switch(h){case"MM":q=d(e[p].months).filter(function(){var i=this.slice(0,n[o].length),s=n[o].slice(0,i.length);return i==s});k=d.inArray(q[0],e[p].months)+1;break;case"M":q=d(e[p].monthsShort).filter(function(){var i=this.slice(0,n[o].length),s=n[o].slice(0,i.length);return i.toLowerCase()==s.toLowerCase()});k=d.inArray(q[0],e[p].monthsShort)+1;break;case"p":case"P":k=d.inArray(n[o].toLowerCase(),e[p].meridiem);break}}r[h]=k}for(var o=0,z;o<u.length;o++){z=u[o];if(z in r&&!isNaN(r[z])){w[z](m,r[z])}}}return m},formatDate:function(h,n,p,l){if(h==null){return""}var o;if(l=="standard"){o={yy:h.getUTCFullYear().toString().substring(2),yyyy:h.getUTCFullYear(),m:h.getUTCMonth()+1,M:e[p].monthsShort[h.getUTCMonth()],MM:e[p].months[h.getUTCMonth()],d:h.getUTCDate(),D:e[p].daysShort[h.getUTCDay()],DD:e[p].days[h.getUTCDay()],p:(e[p].meridiem.length==2?e[p].meridiem[h.getUTCHours()<12?0:1]:""),h:h.getUTCHours(),i:h.getUTCMinutes(),s:h.getUTCSeconds()};if(e[p].meridiem.length==2){o.H=(o.h%12==0?12:o.h%12)}else{o.H=o.h}o.HH=(o.H<10?"0":"")+o.H;o.P=o.p.toUpperCase();o.hh=(o.h<10?"0":"")+o.h;o.ii=(o.i<10?"0":"")+o.i;o.ss=(o.s<10?"0":"")+o.s;o.dd=(o.d<10?"0":"")+o.d;o.mm=(o.m<10?"0":"")+o.m}else{if(l=="php"){o={y:h.getUTCFullYear().toString().substring(2),Y:h.getUTCFullYear(),F:e[p].months[h.getUTCMonth()],M:e[p].monthsShort[h.getUTCMonth()],n:h.getUTCMonth()+1,t:c.getDaysInMonth(h.getUTCFullYear(),h.getUTCMonth()),j:h.getUTCDate(),l:e[p].days[h.getUTCDay()],D:e[p].daysShort[h.getUTCDay()],w:h.getUTCDay(),N:(h.getUTCDay()==0?7:h.getUTCDay()),S:(h.getUTCDate()%10<=e[p].suffix.length?e[p].suffix[h.getUTCDate()%10-1]:""),a:(e[p].meridiem.length==2?e[p].meridiem[h.getUTCHours()<12?0:1]:""),g:(h.getUTCHours()%12==0?12:h.getUTCHours()%12),G:h.getUTCHours(),i:h.getUTCMinutes(),s:h.getUTCSeconds()};o.m=(o.n<10?"0":"")+o.n;o.d=(o.j<10?"0":"")+o.j;o.A=o.a.toString().toUpperCase();o.h=(o.g<10?"0":"")+o.g;o.H=(o.G<10?"0":"")+o.G;o.i=(o.i<10?"0":"")+o.i;o.s=(o.s<10?"0":"")+o.s}else{throw new Error("Invalid format type.")}}var h=[],m=d.extend([],n.separators);for(var k=0,j=n.parts.length;k<j;k++){if(m.length){h.push(m.shift())}h.push(o[n.parts[k]])}if(m.length){h.push(m.shift())}return h.join("")},convertViewMode:function(h){switch(h){case 4:case"decade":h=4;break;case 3:case"year":h=3;break;case 2:case"month":h=2;break;case 1:case"day":h=1;break;case 0:case"hour":h=0;break}return h},headTemplate:'<thead><tr><th class="prev"><i class="{leftArrow}"/></th><th colspan="5" class="switch"></th><th class="next"><i class="{rightArrow}"/></th></tr></thead>',headTemplateV3:'<thead><tr><th class="prev"><span class="{iconType} {leftArrow}"></span> </th><th colspan="5" class="switch"></th><th class="next"><span class="{iconType} {rightArrow}"></span> </th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'};c.template='<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">'+c.headTemplate+c.contTemplate+c.footTemplate+'</table></div><div class="datetimepicker-hours"><table class=" table-condensed">'+c.headTemplate+c.contTemplate+c.footTemplate+'</table></div><div class="datetimepicker-days"><table class=" table-condensed">'+c.headTemplate+"<tbody></tbody>"+c.footTemplate+'</table></div><div class="datetimepicker-months"><table class="table-condensed">'+c.headTemplate+c.contTemplate+c.footTemplate+'</table></div><div class="datetimepicker-years"><table class="table-condensed">'+c.headTemplate+c.contTemplate+c.footTemplate+"</table></div></div>";c.templateV3='<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">'+c.headTemplateV3+c.contTemplate+c.footTemplate+'</table></div><div class="datetimepicker-hours"><table class=" table-condensed">'+c.headTemplateV3+c.contTemplate+c.footTemplate+'</table></div><div class="datetimepicker-days"><table class=" table-condensed">'+c.headTemplateV3+"<tbody></tbody>"+c.footTemplate+'</table></div><div class="datetimepicker-months"><table class="table-condensed">'+c.headTemplateV3+c.contTemplate+c.footTemplate+'</table></div><div class="datetimepicker-years"><table class="table-condensed">'+c.headTemplateV3+c.contTemplate+c.footTemplate+"</table></div></div>";d.fn.datetimepicker.DPGlobal=c;d.fn.datetimepicker.noConflict=function(){d.fn.datetimepicker=a;return this};d(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api",'[data-provide="datetimepicker"]',function(i){var h=d(this);if(h.data("datetimepicker")){return}i.preventDefault();h.datetimepicker("show")});d(function(){d('[data-provide="datetimepicker-inline"]').datetimepicker()})}(window.jQuery);
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/bootstrap.min.js b/interface/web/themes/default/assets/javascripts/bootstrap.min.js
new file mode 100644
index 0000000..63866bc
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.0",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus","focus"==b.type)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.0",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.0",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.checkScrollbar=function(){this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){if(document.body.clientWidth>=window.innerWidth)return 0;var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.0",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.0",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)
+}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
new file mode 100644
index 0000000..2db94df
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -0,0 +1,733 @@
+var ISPConfig = {
+	pageFormChanged: false,
+	tabChangeWarningTxt: '',
+	tabChangeDiscardTxt: '',
+	tabChangeWarning: false,
+	tabChangeDiscard: false,
+	requestsRunning: 0,
+	indicatorCompleted: false,
+	registeredHooks: new Array(),
+	new_tpl_add_id: 0,
+	
+	options: {
+		useLoadIndicator: false,
+		useComboBox: false,
+	},
+	
+	setOption: function(key, value) {
+		ISPConfig.options[key] = value;
+	},
+	
+	setOptions: function(opts) {
+		$.extend(ISPConfig.options, opts);
+	},
+	
+	reportError: function(request) {
+		/* Error reporting is disabled by default as some browsers like safari
+		   sometimes throw errors when a ajax request is delayed even if the
+		   ajax request worked. */
+
+		/*alert(request);*/
+	},
+	
+	registerHook: function(name, callback) {
+		if(!ISPConfig.registeredHooks[name]) ISPConfig.registeredHooks[name] = new Array();
+		var newindex = ISPConfig.registeredHooks[name].length;
+		ISPConfig.registeredHooks[name][newindex] = callback;
+	},
+	
+	callHook: function(name, params) {
+		if(!ISPConfig.registeredHooks[name]) return;
+		for(var i = 0; i < ISPConfig.registeredHooks[name].length; i++) {
+			var callback = ISPConfig.registeredHooks[name][i];
+			callback(name, params);
+		}
+	},
+	
+	resetFormChanged: function() {
+		ISPConfig.pageFormChanged = false;
+	},
+
+	showLoadIndicator: function() {
+		document.body.style.cursor = 'wait';
+		
+		if(ISPConfig.options.useLoadIndicator == true) {
+			ISPConfig.requestsRunning += 1;
+
+			if(ISPConfig.requestsRunning < 2) {
+				var indicator = $('#ajaxloader');
+				if(indicator.length < 1) {
+					indicator = $('<div id="ajaxloader" style="display: none;"></div>');
+					indicator.appendTo('body');
+				}
+				var parent = $('#content');
+				if(parent.length < 1) return;
+				ISPConfig.indicatorCompleted = false;
+
+				var atx = parent.offset().left + 150; //((parent.outerWidth(true) - indicator.outerWidth(true)) / 2);
+				var aty = parent.offset().top + 150;
+				indicator.css( {'left': atx, 'top': aty } ).fadeIn('fast', function() {
+					// check if loader should be hidden immediately
+					ISPConfig.indicatorCompleted = true;
+					if(ISPConfig.requestsRunning < 1) $(this).fadeOut('fast', function() { $(this).hide();});
+				});
+			}
+		}
+	},
+
+	hideLoadIndicator: function() {
+		document.body.style.cursor = '';
+
+		ISPConfig.requestsRunning -= 1;
+		if(ISPConfig.requestsRunning < 1) {
+			ISPConfig.requestsRunning = 0; // just for the case...
+			if(ISPConfig.indicatorCompleted == true) $('#ajaxloader').fadeOut('fast', function() { $('#ajaxloader').hide(); } );
+		}
+	},
+
+	onAfterSideNavLoaded: function() {
+		if(ISPConfig.options.useComboBox == true) {
+			$('#sidebar').find("select:not(.chosen-select)").select2({
+				placeholder: '',
+				width: 'element',
+				selectOnBlur: true,
+				allowClear: true,
+			});
+		}
+	},
+
+	onAfterContentLoad: function(url, data) {
+		if(!data) data = '';
+		else data = '&' + data;
+		
+		if(ISPConfig.options.useComboBox == true) {
+			$('#pageContent').find("select:not(.chosen-select)").select2({
+				placeholder: '',
+				width: 'element',
+				selectOnBlur: true,
+				allowClear: true,
+				formatResult: function(o) {
+					if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
+					else return o.text;
+				},
+				formatSelection: function(o) {
+					if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
+					else return o.text;
+				}
+			}).on('change', function(e) {
+				if ($("#pageForm .table #Filter").length > 0) {
+					$("#pageForm .table #Filter").trigger('click');
+				}
+			});
+		}
+		
+		$('input[data-input-element="date"]').datetimepicker({
+			'language': 'en', // TODO
+			'todayHighlight': true,
+			'todayBtn': 'linked',
+			'bootcssVer': 3,
+			'fontAwesome': true,
+			'autoclose': true,
+			'minView': 'month'
+		});
+		$('input[data-input-element="datetime"]').datetimepicker({
+			'language': 'en', // TODO
+			'todayHighlight': true,
+			'todayBtn': 'linked',
+			'bootcssVer': 3,
+			'fontAwesome': true,
+			'autoclose': true
+		});
+		
+		ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
+	},
+
+	/* THIS ONE SHOULD BE REMOVED AFTER CREATING THE STATIC LOGIN PAGE!!! */
+	submitLoginForm: function(formname) {
+		//* Validate form. TODO: username and password with strip();
+		var frm = document.getElementById(formname);
+		var userNameObj = frm.username;
+		if(userNameObj.value == ''){
+			userNameObj.focus();
+			return;
+		}
+		var passwordObj = frm.passwort;
+		if(passwordObj.value == ''){
+			passwordObj.focus();
+			return;
+		}
+
+		$('#dummy_username').val(userNameObj.value);
+		$('#dummy_passwort').val(passwordObj.value);
+		$('#dummy_login_form').submit();
+
+		var submitFormObj = $.ajax({
+			type: "POST",
+			url: "content.php",
+			data: $('#'+formname).serialize(),
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+					var parts = jqXHR.responseText.split(':');
+					ISPConfig.loadContent(parts[1]);
+				} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
+					// Go to the login page
+					document.location.href = 'index.php';
+				} else {
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad('content.php', $('#'+formname).serialize());
+					ISPConfig.pageFormChanged = false;
+				}
+				ISPConfig.loadMenus();
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful.110');
+			}
+		});
+	},
+
+	submitForm: function(formname, target, confirmation) {
+		var successMessage = arguments[3];
+		if(!confirmation) confirmation = false;
+		
+		if(!confirmation || window.confirm(confirmation)) {
+			var submitFormObj = $.ajax({
+				type: "POST",
+				url: target,
+				data: $('#'+formname).serialize(),
+				dataType: "html",
+				beforeSend: function() {
+					ISPConfig.showLoadIndicator();
+				},
+				success: function(data, textStatus, jqXHR) {
+					if(successMessage) alert(successMessage);
+					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+						var parts = jqXHR.responseText.split(':');
+						ISPConfig.loadContent(parts[1]);
+					} else {
+						$('#pageContent').html(jqXHR.responseText);
+						ISPConfig.onAfterContentLoad(target, $('#'+formname).serialize());
+						ISPConfig.pageFormChanged = false;
+					}
+					ISPConfig.hideLoadIndicator();
+				},
+				error: function(jqXHR, textStatus, errorThrown) {
+					ISPConfig.hideLoadIndicator();
+					var parts = jqXHR.responseText.split(':');
+					ISPConfig.reportError('Ajax Request was not successful. 111');
+				}
+			});
+		}
+	},
+
+	submitUploadForm: function(formname, target) {
+		var handleResponse = function(loadedFrame) {
+			var response, responseStr = loadedFrame.contentWindow.document.body.innerHTML;
+
+			try {
+				response = JSON.parse(responseStr);
+			} catch(e) {
+				response = responseStr;
+			}
+			var msg = '';
+			var okmsg = $('#OKMsg',response).html();
+			if(okmsg){
+				msg = '<div id="OKMsg">'+okmsg+'</div>';
+			}
+			var errormsg = $('#errorMsg',response).html();
+			if(errormsg){
+				msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
+			}
+			return msg;
+
+		};
+
+		var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
+		$('body').after('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
+		$('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
+		$('#'+frame_id).load(function() {
+			var msg = handleResponse(this);
+			$('#errorMsg').remove();
+			$('#OKMsg').remove();
+			$('input[name="id"]').before(msg);
+			$(this).remove();
+		  });
+	},
+
+	capp: function(module, redirect) {
+		var submitFormObj = $.ajax({
+			type: "GET",
+			url: "capp.php",
+			data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText != '') {
+					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+						var parts = jqXHR.responseText.split(':');
+						ISPConfig.loadContent(parts[1]);
+					} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
+						var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
+						document.location.href = newUrl;
+					} else {
+						//alert(jqXHR.responseText);
+					}
+				}
+				ISPConfig.loadMenus();
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful.'+module);
+			}
+		});
+	},
+	
+	loadContent: function(pagename) {
+		var params = arguments[1];
+		var pageContentObject2 = $.ajax({
+			type: "GET",
+			url: pagename,
+			data: (params ? params : null),
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+					var parts = jqXHR.responseText.split(':');
+					ISPConfig.loadContent(parts[1]);
+				} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
+					var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
+					document.location.href = newUrl;
+				} else {
+					//document.getElementById('pageContent').innerHTML = jqXHR.responseText;
+					//var reponse = $(jqXHR.responseText);
+					//var reponseScript = reponse.filter("script");
+					//$.each(reponseScript, function(idx, val) { eval(val.text); } );
+
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad(pagename, (params ? params : null));
+					ISPConfig.pageFormChanged = false;
+				}
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 113');
+			}
+		});
+	},
+
+	loadContentRefresh: function(pagename) {
+		if($('#refreshinterval').val() > 0) {
+			var pageContentObject2 = $.ajax({
+				type: "GET",
+				url: pagename,
+				data: "refresh="+document.getElementById('refreshinterval').value,
+				dataType: "html",
+				beforeSend: function() {
+					ISPConfig.showLoadIndicator();
+				},
+				success: function(data, textStatus, jqXHR) {
+					ISPConfig.hideLoadIndicator();
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad(pagename, "refresh="+document.getElementById('refreshinterval').value);
+					ISPConfig.pageFormChanged = false;
+				},
+				error: function() {
+					ISPConfig.hideLoadIndicator();
+					ISPConfig.reportError('Ajax Request was not successful.'+pagename);
+				}
+			});
+			setTimeout( "ISPConfig.loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000*60 );
+		}
+	},
+
+	loadInitContent: function() {
+		var pageContentObject = $.ajax({
+			type: "GET",
+			url: "content.php",
+			data: "s_mod=login&s_pg=index",
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+					var parts = jqXHR.responseText.split(":");
+					ISPConfig.loadContent(parts[1]);
+				} else {
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad('content.php', "s_mod=login&s_pg=index");
+					ISPConfig.pageFormChanged = false;
+				}
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 114');
+			}
+		});
+		
+		ISPConfig.loadMenus();
+		ISPConfig.keepalive();
+		setTimeout(function() {
+			try {
+				$('form#pageForm').find('input[name="username"]').focus();
+			} catch (e) {
+			
+			}
+		}, 1000);
+	},
+	
+	loadMenus: function() {
+		var sideNavObject = $.ajax({
+			type: "GET",
+			url: "nav.php",
+			data: "nav=side",
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				ISPConfig.hideLoadIndicator();
+				$('#sidebar').html(jqXHR.responseText);
+				ISPConfig.onAfterSideNavLoaded();
+				ISPConfig.loadPushyMenu();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 115');
+			}
+		});
+
+		var topNavObject = $.ajax({
+			type: "GET",
+			url: "nav.php",
+			data: "nav=top",
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				ISPConfig.hideLoadIndicator();
+				$('#topnav-container').html(jqXHR.responseText);
+				ISPConfig.loadPushyMenu();
+			},
+			error: function(o) {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 116');
+			}
+		});
+	},
+
+	changeTab: function(tab, target, force) {
+		if(ISPConfig.requestsRunning > 0) return false;
+	
+		document.pageForm.next_tab.value = tab;
+
+		var idel = $('form#pageForm').find('[name="id"]');
+		var id = null;
+		if(idel.length > 0) id = idel.val();
+		if(ISPConfig.tabChangeDiscard == 'y' && !force) {
+			if((idel.length < 1 || id) && (ISPConfig.pageFormChanged == false || window.confirm(ISPConfig.tabChangeDiscardTxt))) {
+				var next_tab = tab;
+				if(id) ISPConfig.loadContent(target, {'next_tab': next_tab, 'id': id});
+				else ISPConfig.loadContent(target, {'next_tab': next_tab});
+			} else {
+				return false;
+			}
+		} else {
+			if(id && ISPConfig.tabChangeWarning == 'y' && ISPConfig.pageFormChanged == true) {
+				if(window.confirm(ISPConfig.tabChangeWarningTxt)) {
+					ISPConfig.submitForm('pageForm', target);
+				} else {
+					var next_tab = tab;
+					if(id) ISPConfig.loadContent(target, {'next_tab': next_tab, 'id': id});
+					else ISPConfig.loadContent(target, {'next_tab': next_tab});
+				}
+			} else {
+				ISPConfig.submitForm('pageForm',target);
+			}
+		}
+	},
+
+	confirm_action: function(link, confirmation) {
+		if(window.confirm(confirmation)) {
+			ISPConfig.loadContent(link);
+		}
+	},
+
+	loadContentInto: function(elementid,pagename) {
+		var pageContentObject2 = $.ajax({
+			type: "GET",
+			url: pagename,
+			dataType: "html",
+			beforeSend: function() {
+			},
+			success: function(data, textStatus, jqXHR) {
+				$('#'+elementid).html(jqXHR.responseText);
+			},
+			error: function() {
+				ISPConfig.reportError('Ajax Request was not successful. 118');
+			}
+		});
+	},
+
+	loadOptionInto: function(elementid,pagename,callback) {
+		var pageContentObject2 = $.ajax({
+			type: "GET",
+			url: pagename,
+			dataType: "html",
+			beforeSend: function() {
+			},
+			success: function(data, textStatus, jqXHR) {
+				var teste = jqXHR.responseText;
+				var elemente = teste.split('#');
+				el=document.getElementById(elementid);
+				el.innerHTML='';
+				for (var i = 0; i < elemente.length; ++i){
+					var foo2 = document.createElement("option");
+					foo2.appendChild(document.createTextNode(elemente[i]));
+					foo2.value=elemente[i];
+					el.appendChild(foo2);
+				}
+				if (typeof(callback) != 'undefined') {
+					callback(elementid,pagename);
+				}
+			},
+			error: function() {
+				ISPConfig.reportError('Ajax Request was not successful. 119');
+			}
+		});
+	},
+	
+	keepalive: function() {
+		var pageContentObject3 = $.ajax({
+			type: "GET",
+			url: "keepalive.php",
+			dataType: "html",
+			success: function(data, textStatus, jqXHR) {
+				setTimeout( function() { ISPConfig.keepalive(); }, 1000000 );
+			},
+			error: function() {
+				ISPConfig.reportError('Session expired. Please login again.');
+			}
+		});
+	},
+	
+	addAdditionalTemplate: function(){
+		var tpl_add = $('#template_additional').val();
+		var addTemplate = $('#tpl_add_select').val().split('|',2);
+		var addTplId = addTemplate[0];
+		var addTplText = addTemplate[1];
+		if(addTplId > 0) {
+			var newVal = tpl_add.split('/');
+			ISPConfig.new_tpl_add_id += 1;
+			var delbtn = $('<a href="#"></a>').attr('class', 'button icons16 icoDelete').click(function(e) {
+				e.preventDefault();
+				ISPConfig.delAdditionalTemplate($(this).parent().attr('rel'));
+			});
+			newVal[newVal.length] = 'n' + ISPConfig.new_tpl_add_id + ':' + addTplId;
+			$('<li>' + addTplText + '</li>').attr('rel', 'n' + new_tpl_add_id).append(delbtn).appendTo('#template_additional_list ul');
+			$('#template_additional').val(newVal.join('/'));
+			alert('additional template ' + addTplText + ' added to customer');
+		} else {
+			alert('no additional template selcted');
+		}
+	},
+
+	delAdditionalTemplate: function(tpl_id) {
+		var tpl_add = $('#template_additional').val();
+		if(tpl_id) {
+			// new style
+			var $el = $('#template_additional_list ul').find('li[rel="' + tpl_id + '"]').eq(0); // only the first
+			var addTplText = $el.text();
+			$el.remove();
+
+			var oldVal = tpl_add.split('/');
+			var newVal = new Array();
+			for(var i = 0; i < oldVal.length; i++) {
+				var tmp = oldVal[i].split(':', 2);
+				if(tmp.length == 2 && tmp[0] == tpl_id) continue;
+				newVal[newVal.length] = oldVal[i];
+			}
+			$('#template_additional').val(newVal.join('/'));
+			alert('additional template ' + addTplText + ' deleted from customer');
+		} else if(tpl_add != '') {
+			// old style
+			var addTemplate = document.getElementById('tpl_add_select').value.split('|',2);
+			var addTplId = addTemplate[0];
+			var addTplText = addTemplate[1];
+
+			$('#template_additional_list ul').find('li:not([rel])').each(function() {
+				var text = $(this).text();
+				if(text == addTplText) {
+					$(this).remove();
+					return false;
+				}
+				return this;
+			});
+
+			var newVal = tpl_add;
+			var repl = new RegExp('(^|\/)' + addTplId + '(\/|$)');
+			newVal = newVal.replace(repl, '');
+			newVal = newVal.replace('//', '/');
+			$('#template_additional').val(newVal);
+			alert('additional template ' + addTplText + ' deleted from customer');
+	  } else {
+		alert('no additional template selcted');
+	  }
+	}
+};
+
+
+$(document).on("change", function(event) {
+	var elName = event.target.localName;
+	if ($("#pageForm .table #Filter").length > 0 && elName == 'select') {
+		event.preventDefault();
+		$("#pageForm .table #Filter").trigger('click');
+	}
+	if(elName == 'select' || elName == 'input' || elName == 'textarea') {
+		if($(event.target).hasClass('no-page-form-change') == false) {
+			// set marker that something was changed
+			ISPConfig.pageFormChanged = true;
+		}
+	}
+});
+
+$(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
+	//e.preventDefault();
+	var content_to_load = $(this).attr('data-load-content');
+	if(!content_to_load) return this;
+	
+	ISPConfig.loadContent(content_to_load);
+});
+
+$(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
+	//e.preventDefault();
+	var content_to_load = $(this).attr('data-capp');
+	if(!content_to_load) return this;
+	
+	ISPConfig.capp(content_to_load);
+});
+
+$(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) {
+	//e.preventDefault();
+	
+	var $el = $(this);
+	var act = $el.attr('data-form-action');
+	var form = $el.attr('data-submit-form');
+	
+	if($el.attr('data-form-upload') == 'true') ISPConfig.submitUploadForm(form, act);
+	else ISPConfig.submitForm(form, act);
+});
+
+$(document).bind("keypress", function(event) {
+	//Use $ submit with keypress Enter in panel filterbar
+	if (event.which == '13' && $("#pageForm .table #Filter").length > 0 && $(event.target).hasClass('ui-autocomplete-input') == false ) {
+		event.preventDefault();
+		$("#pageForm .table #Filter").trigger('click');
+	}
+	//Use $ submit with keypress Enter in forms
+	if (event.which == '13' && $(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
+		event.preventDefault();
+		$(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
+	}
+});
+
+$(document).on('click', 'th[data-column]', function(e) {
+	var $self = $(this);
+	var column = $self.attr('data-column');
+	if(!column) return this;
+	
+	if($("#pageForm .table #Filter").length > 0 && $self.attr('data-sortable') != 'false') {
+		var $el = $('#Filter');
+		var act = $el.attr('data-form-action');
+		var form = $el.attr('data-submit-form');
+		
+		var dir = $self.attr('data-ordered');
+		
+		var separator = '?';
+		if(act.indexOf("?") >= 0){
+			separator = '&';
+		}
+		act = act + separator + 'orderby=' + column;
+		ISPConfig.submitForm(form, act);
+		
+		$(document).ajaxComplete(function() {
+			var $self = $('#pageForm .table th[data-column="' + column + '"]');
+			$self.parent().children('th[data-column]').removeAttr('data-ordered');
+			if(dir && dir == 'asc') $self.attr('data-ordered', 'desc');
+			else $self.attr('data-ordered', 'asc');
+		});
+		
+	}
+});
+
+$(document).on("click", ".addPlaceholder", function(){
+	var placeholderText = $(this).text();
+	var template = $(this).siblings(':input');
+	template.insertAtCaret(placeholderText);
+});
+
+$(document).on("click", ".addPlaceholderContent", function(){
+	var placeholderContentText = $(this).find('.addPlaceholderContent').text();
+	var template2 = $(this).siblings(':input');
+	template2.insertAtCaret(placeholderContentText);
+});
+
+$(document).on('ready', function () {
+	$.fn.extend({
+		insertAtCaret: function(myValue){
+			return this.each(function(i) {
+				if (document.selection) {
+					//For browsers like Internet Explorer
+					this.focus();
+					sel = document.selection.createRange();
+					sel.text = myValue;
+					this.focus();
+				} else if (this.selectionStart || this.selectionStart == '0') {
+					//For browsers like Firefox and Webkit based
+					var startPos = this.selectionStart;
+					var endPos = this.selectionEnd;
+					var scrollTop = this.scrollTop;
+					this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
+					this.focus();
+					this.selectionStart = startPos + myValue.length;
+					this.selectionEnd = startPos + myValue.length;
+					this.scrollTop = scrollTop;
+				} else {
+					this.value += myValue;
+					this.focus();
+				}
+			})
+		}
+	});
+	
+	// Animierter Ladefortschritt
+	$('.progress .progress-bar').css('width', function () {
+		return $(this).attr('aria-valuenow') + '%';
+	});
+	
+	ISPConfig.loadInitContent();
+
+	$('#searchform').submit(function(e) {
+		e.preventDefault();
+	});
+	
+	$("#pageForm").submit(function(e){
+		//Prevent form submit: e.preventDefault() in lists
+		if ($("#pageForm .table #Filter").length > 0) {
+			e.preventDefault();
+		}
+	});
+});
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.min.js b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
new file mode 100644
index 0000000..d85f7c6
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
@@ -0,0 +1 @@
+var ISPConfig={pageFormChanged:false,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:false,tabChangeDiscard:false,requestsRunning:0,indicatorCompleted:false,registeredHooks:new Array(),new_tpl_add_id:0,options:{useLoadIndicator:false,useComboBox:false,},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(a){},registerHook:function(a,c){if(!ISPConfig.registeredHooks[a]){ISPConfig.registeredHooks[a]=new Array()}var b=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][b]=c},callHook:function(a,c){if(!ISPConfig.registeredHooks[a]){return}for(var b=0;b<ISPConfig.registeredHooks[a].length;b++){var d=ISPConfig.registeredHooks[a][b];d(a,c)}},resetFormChanged:function(){ISPConfig.pageFormChanged=false},showLoadIndicator:function(){document.body.style.cursor="wait";if(ISPConfig.options.useLoadIndicator==true){ISPConfig.requestsRunning+=1;if(ISPConfig.requestsRunning<2){var a=$("#ajaxloader");if(a.length<1){a=$('<div id="ajaxloader" style="display: none;"></div>');a.appendTo("body")}var b=$("#content");if(b.length<1){return}ISPConfig.indicatorCompleted=false;var d=b.offset().left+150;var c=b.offset().top+150;a.css({left:d,top:c}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=true;if(ISPConfig.requestsRunning<1){$(this).fadeOut("fast",function(){$(this).hide()})}})}}},hideLoadIndicator:function(){document.body.style.cursor="";ISPConfig.requestsRunning-=1;if(ISPConfig.requestsRunning<1){ISPConfig.requestsRunning=0;if(ISPConfig.indicatorCompleted==true){$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()})}}},onAfterSideNavLoaded:function(){if(ISPConfig.options.useComboBox==true){$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:true,allowClear:true,})}},onAfterContentLoad:function(a,b){if(!b){b=""}else{b="&"+b}if(ISPConfig.options.useComboBox==true){$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:true,allowClear:true,formatResult:function(c){if(c.id&&$(c.element).parent().hasClass("flags")){return'<span class="flags flag-'+c.id.toLowerCase()+'">'+c.text+"</span>"}else{return c.text}},formatSelection:function(c){if(c.id&&$(c.element).parent().hasClass("flags")){return'<span class="flags flag-'+c.id.toLowerCase()+'">'+c.text+"</span>"}else{return c.text}}}).on("change",function(c){if($("#pageForm .table #Filter").length>0){$("#pageForm .table #Filter").trigger("click")}})}$('input[data-input-element="date"]').datetimepicker({language:"en",todayHighlight:true,todayBtn:"linked",bootcssVer:3,fontAwesome:true,autoclose:true,minView:"month"});$('input[data-input-element="datetime"]').datetimepicker({language:"en",todayHighlight:true,todayBtn:"linked",bootcssVer:3,fontAwesome:true,autoclose:true});ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitLoginForm:function(d){var c=document.getElementById(d);var b=c.username;if(b.value==""){b.focus();return}var e=c.passwort;if(e.value==""){e.focus();return}$("#dummy_username").val(b.value);$("#dummy_passwort").val(e.value);$("#dummy_login_form").submit();var a=$.ajax({type:"POST",url:"content.php",data:$("#"+d).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(g,i,f){if(f.responseText.indexOf("HEADER_REDIRECT:")>-1){var h=f.responseText.split(":");ISPConfig.loadContent(h[1])}else{if(f.responseText.indexOf("LOGIN_REDIRECT:")>-1){document.location.href="index.php"}else{$("#pageContent").html(f.responseText);ISPConfig.onAfterContentLoad("content.php",$("#"+d).serialize());ISPConfig.pageFormChanged=false}}ISPConfig.loadMenus();ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful.110")}})},submitForm:function(d,e,c){var b=arguments[3];if(!c){c=false}if(!c||window.confirm(c)){var a=$.ajax({type:"POST",url:e,data:$("#"+d).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(g,i,f){if(b){alert(b)}if(f.responseText.indexOf("HEADER_REDIRECT:")>-1){var h=f.responseText.split(":");ISPConfig.loadContent(h[1])}else{$("#pageContent").html(f.responseText);ISPConfig.onAfterContentLoad(e,$("#"+d).serialize());ISPConfig.pageFormChanged=false}ISPConfig.hideLoadIndicator()},error:function(f,i,h){ISPConfig.hideLoadIndicator();var g=f.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(c,d){var b=function(l){var g,h=l.contentWindow.document.body.innerHTML;try{g=JSON.parse(h)}catch(i){g=h}var j="";var f=$("#OKMsg",g).html();if(f){j='<div id="OKMsg">'+f+"</div>"}var k=$("#errorMsg",g).html();if(k){j=j+'<div id="errorMsg">'+k+"</div>"}return j};var a="ajaxUploader-iframe-"+Math.round(new Date().getTime()/1000);$("body").after('<iframe width="0" height="0" style="display:none;" name="'+a+'" id="'+a+'"/>');$('input[type="file"]').closest("form").attr({target:a,action:d}).submit();$("#"+a).load(function(){var e=b(this);$("#errorMsg").remove();$("#OKMsg").remove();$('input[name="id"]').before(e);$(this).remove()})},capp:function(b,c){var a=$.ajax({type:"GET",url:"capp.php",data:"mod="+b+((c!=undefined)?"&redirect="+c:""),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(e,h,d){if(d.responseText!=""){if(d.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=d.responseText.split(":");ISPConfig.loadContent(g[1])}else{if(d.responseText.indexOf("URL_REDIRECT:")>-1){var f=d.responseText.substr(d.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=f}else{}}}ISPConfig.loadMenus();ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful."+b)}})},loadContent:function(b){var c=arguments[1];var a=$.ajax({type:"GET",url:b,data:(c?c:null),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(e,h,d){if(d.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=d.responseText.split(":");ISPConfig.loadContent(g[1])}else{if(d.responseText.indexOf("URL_REDIRECT:")>-1){var f=d.responseText.substr(d.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=f}else{$("#pageContent").html(d.responseText);ISPConfig.onAfterContentLoad(b,(c?c:null));ISPConfig.pageFormChanged=false}}ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 113")}})},loadContentRefresh:function(b){if($("#refreshinterval").val()>0){var a=$.ajax({type:"GET",url:b,data:"refresh="+document.getElementById("refreshinterval").value,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(d,e,c){ISPConfig.hideLoadIndicator();$("#pageContent").html(c.responseText);ISPConfig.onAfterContentLoad(b,"refresh="+document.getElementById("refreshinterval").value);ISPConfig.pageFormChanged=false},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful."+b)}});setTimeout("ISPConfig.loadContentRefresh('"+b+"&refresh="+document.getElementById("refreshinterval").value+"')",document.getElementById("refreshinterval").value*1000*60)}},loadInitContent:function(){var a=$.ajax({type:"GET",url:"content.php",data:"s_mod=login&s_pg=index",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,e,b){if(b.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=b.responseText.split(":");ISPConfig.loadContent(d[1])}else{$("#pageContent").html(b.responseText);ISPConfig.onAfterContentLoad("content.php","s_mod=login&s_pg=index");ISPConfig.pageFormChanged=false}ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 114")}});ISPConfig.loadMenus();ISPConfig.keepalive();setTimeout(function(){try{$("form#pageForm").find('input[name="username"]').focus()}catch(b){}},1000)},loadMenus:function(){var b=$.ajax({type:"GET",url:"nav.php",data:"nav=side",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(d,e,c){ISPConfig.hideLoadIndicator();$("#sidebar").html(c.responseText);ISPConfig.onAfterSideNavLoaded();ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 115")}});var a=$.ajax({type:"GET",url:"nav.php",data:"nav=top",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(d,e,c){ISPConfig.hideLoadIndicator();$("#topnav-container").html(c.responseText);ISPConfig.loadPushyMenu()},error:function(c){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 116")}})},changeTab:function(c,e,d){if(ISPConfig.requestsRunning>0){return false}document.pageForm.next_tab.value=c;var b=$("form#pageForm").find('[name="id"]');var f=null;if(b.length>0){f=b.val()}if(ISPConfig.tabChangeDiscard=="y"&&!d){if((b.length<1||f)&&(ISPConfig.pageFormChanged==false||window.confirm(ISPConfig.tabChangeDiscardTxt))){var a=c;if(f){ISPConfig.loadContent(e,{next_tab:a,id:f})}else{ISPConfig.loadContent(e,{next_tab:a})}}else{return false}}else{if(f&&ISPConfig.tabChangeWarning=="y"&&ISPConfig.pageFormChanged==true){if(window.confirm(ISPConfig.tabChangeWarningTxt)){ISPConfig.submitForm("pageForm",e)}else{var a=c;if(f){ISPConfig.loadContent(e,{next_tab:a,id:f})}else{ISPConfig.loadContent(e,{next_tab:a})}}}else{ISPConfig.submitForm("pageForm",e)}}},confirm_action:function(b,a){if(window.confirm(a)){ISPConfig.loadContent(b)}},loadContentInto:function(b,c){var a=$.ajax({type:"GET",url:c,dataType:"html",beforeSend:function(){},success:function(e,f,d){$("#"+b).html(d.responseText)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 118")}})},loadOptionInto:function(b,c,d){var a=$.ajax({type:"GET",url:c,dataType:"html",beforeSend:function(){},success:function(h,l,g){var j=g.responseText;var k=j.split("#");el=document.getElementById(b);el.innerHTML="";for(var f=0;f<k.length;++f){var e=document.createElement("option");e.appendChild(document.createTextNode(k[f]));e.value=k[f];el.appendChild(e)}if(typeof(d)!="undefined"){d(b,c)}},error:function(){ISPConfig.reportError("Ajax Request was not successful. 119")}})},keepalive:function(){var a=$.ajax({type:"GET",url:"keepalive.php",dataType:"html",success:function(c,d,b){setTimeout(function(){ISPConfig.keepalive()},1000000)},error:function(){ISPConfig.reportError("Session expired. Please login again.")}})},addAdditionalTemplate:function(){var e=$("#template_additional").val();var a=$("#tpl_add_select").val().split("|",2);var d=a[0];var f=a[1];if(d>0){var c=e.split("/");ISPConfig.new_tpl_add_id+=1;var b=$('<a href="#"></a>').attr("class","button icons16 icoDelete").click(function(g){g.preventDefault();ISPConfig.delAdditionalTemplate($(this).parent().attr("rel"))});c[c.length]="n"+ISPConfig.new_tpl_add_id+":"+d;$("<li>"+f+"</li>").attr("rel","n"+new_tpl_add_id).append(b).appendTo("#template_additional_list ul");$("#template_additional").val(c.join("/"));alert("additional template "+f+" added to customer")}else{alert("no additional template selcted")}},delAdditionalTemplate:function(d){var a=$("#template_additional").val();if(d){var l=$("#template_additional_list ul").find('li[rel="'+d+'"]').eq(0);var k=l.text();l.remove();var j=a.split("/");var b=new Array();for(var e=0;e<j.length;e++){var f=j[e].split(":",2);if(f.length==2&&f[0]==d){continue}b[b.length]=j[e]}$("#template_additional").val(b.join("/"));alert("additional template "+k+" deleted from customer")}else{if(a!=""){var c=document.getElementById("tpl_add_select").value.split("|",2);var h=c[0];var k=c[1];$("#template_additional_list ul").find("li:not([rel])").each(function(){var i=$(this).text();if(i==k){$(this).remove();return false}return this});var b=a;var g=new RegExp("(^|/)"+h+"(/|$)");b=b.replace(g,"");b=b.replace("//","/");$("#template_additional").val(b);alert("additional template "+k+" deleted from customer")}else{alert("no additional template selcted")}}}};$(document).on("change",function(a){var b=a.target.localName;if($("#pageForm .table #Filter").length>0&&b=="select"){a.preventDefault();$("#pageForm .table #Filter").trigger("click")}if(b=="select"||b=="input"||b=="textarea"){if($(a.target).hasClass("no-page-form-change")==false){ISPConfig.pageFormChanged=true}}});$(document).on("click","a[data-load-content],button[data-load-content]",function(b){var a=$(this).attr("data-load-content");if(!a){return this}ISPConfig.loadContent(a)});$(document).on("click","a[data-capp],button[data-capp]",function(b){var a=$(this).attr("data-capp");if(!a){return this}ISPConfig.capp(a)});$(document).on("click","a[data-submit-form],button[data-submit-form]",function(d){var b=$(this);var a=b.attr("data-form-action");var c=b.attr("data-submit-form");if(b.attr("data-form-upload")=="true"){ISPConfig.submitUploadForm(c,a)}else{ISPConfig.submitForm(c,a)}});$(document).bind("keypress",function(a){if(a.which=="13"&&$("#pageForm .table #Filter").length>0&&$(a.target).hasClass("ui-autocomplete-input")==false){a.preventDefault();$("#pageForm .table #Filter").trigger("click")}if(a.which=="13"&&$(".pnl_formsarea button.positive").length>0&&a.target.localName!="textarea"&&$(a.target).is(":input")){a.preventDefault();$(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger("click")}});$(document).on("click","th[data-column]",function(h){var i=$(this);var d=i.attr("data-column");if(!d){return this}if($("#pageForm .table #Filter").length>0&&i.attr("data-sortable")!="false"){var c=$("#Filter");var a=c.attr("data-form-action");var f=c.attr("data-submit-form");var b=i.attr("data-ordered");var g="?";if(a.indexOf("?")>=0){g="&"}a=a+g+"orderby="+d;ISPConfig.submitForm(f,a);$(document).ajaxComplete(function(){var e=$('#pageForm .table th[data-column="'+d+'"]');e.parent().children("th[data-column]").removeAttr("data-ordered");if(b&&b=="asc"){e.attr("data-ordered","desc")}else{e.attr("data-ordered","asc")}})}});$(document).on("click",".addPlaceholder",function(){var a=$(this).text();var b=$(this).siblings(":input");b.insertAtCaret(a)});$(document).on("click",".addPlaceholderContent",function(){var b=$(this).find(".addPlaceholderContent").text();var a=$(this).siblings(":input");a.insertAtCaret(b)});$(document).on("ready",function(){$.fn.extend({insertAtCaret:function(a){return this.each(function(d){if(document.selection){this.focus();sel=document.selection.createRange();sel.text=a;this.focus()}else{if(this.selectionStart||this.selectionStart=="0"){var c=this.selectionStart;var b=this.selectionEnd;var e=this.scrollTop;this.value=this.value.substring(0,c)+a+this.value.substring(b,this.value.length);this.focus();this.selectionStart=c+a.length;this.selectionEnd=c+a.length;this.scrollTop=e}else{this.value+=a;this.focus()}}})}});$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"});ISPConfig.loadInitContent();$("#searchform").submit(function(a){a.preventDefault()});$("#pageForm").submit(function(a){if($("#pageForm .table #Filter").length>0){a.preventDefault()}})});
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/jquery-2.1.0.min.js b/interface/web/themes/default/assets/javascripts/jquery-2.1.0.min.js
new file mode 100644
index 0000000..cbe6abe
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/jquery-2.1.0.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;
+while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?o.queue(this[0],a):void 0===b?this:this.each(function(){var c=o.queue(this,a,b);o._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&o.dequeue(this,a)})},dequeue:function(a){return this.each(function(){o.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=o.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===o.css(a,"display")||!o.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=m.createDocumentFragment(),b=a.appendChild(m.createElement("div"));b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||m,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[o.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new o.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=m),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&o.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return o.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=o.extend(new o.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?o.event.trigger(e,null,b):o.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},o.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},o.Event=function(a,b){return this instanceof o.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.getPreventDefault&&a.getPreventDefault()?Z:$):this.type=a,b&&o.extend(this,b),this.timeStamp=a&&a.timeStamp||o.now(),void(this[o.expando]=!0)):new o.Event(a,b)},o.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z,this.stopPropagation()}},o.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){o.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!o.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.focusinBubbles||o.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){o.event.simulate(b,a.target,o.event.fix(a),!0)};o.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),o.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return o().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=o.guid++)),this.each(function(){o.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,o(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){o.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){o.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?o.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||o.contains(a.ownerDocument,a)||(g=o.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",e=m.documentElement,f=m.createElement("div"),g=m.createElement("div");g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",f.appendChild(g);function h(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",e.appendChild(f);var d=a.getComputedStyle(g,null);b="1%"!==d.top,c="4px"===d.width,e.removeChild(f)}a.getComputedStyle&&o.extend(l,{pixelPosition:function(){return h(),b},boxSizingReliable:function(){return null==c&&h(),c},reliableMarginRight:function(){var b,c=g.appendChild(m.createElement("div"));return c.style.cssText=g.style.cssText=d,c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.innerHTML="",b}})}(),o.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:0,fontWeight:400},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=o.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=o.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=o.css(a,"border"+R[f]+"Width",!0,e))):(g+=o.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=o.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===o.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):f[g]||(e=S(d),(c&&"none"!==c||!e)&&L.set(d,"olddisplay",e?c:o.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}o.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=o.camelCase(b),i=a.style;return b=o.cssProps[h]||(o.cssProps[h]=Fb(i,h)),g=o.cssHooks[b]||o.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(o.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||o.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]="",i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=o.camelCase(b);return b=o.cssProps[h]||(o.cssProps[h]=Fb(a.style,h)),g=o.cssHooks[b]||o.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||o.isNumeric(f)?f||0:e):e}}),o.each(["height","width"],function(a,b){o.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&zb.test(o.css(a,"display"))?o.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===o.css(a,"boxSizing",!1,e),e):0)}}}),o.cssHooks.marginRight=yb(l.reliableMarginRight,function(a,b){return b?o.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),o.each({margin:"",padding:"",border:"Width"},function(a,b){o.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(o.cssHooks[a+b].set=Gb)}),o.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(o.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=o.css(a,b[g],!1,d);return f}return void 0!==c?o.style(a,b,c):o.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?o(this).show():o(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}o.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(o.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?o.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=o.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){o.fx.step[a.prop]?o.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[o.cssProps[a.prop]]||o.cssHooks[a.prop])?o.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},o.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},o.fx=Kb.prototype.init,o.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(o.cssNumber[a]?"":"px"),g=(o.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(o.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,o.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=o.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k=this,l={},m=a.style,n=a.nodeType&&S(a),p=L.get(a,"fxshow");c.queue||(h=o._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,k.always(function(){k.always(function(){h.unqueued--,o.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],j=o.css(a,"display"),"none"===j&&(j=tb(a.nodeName)),"inline"===j&&"none"===o.css(a,"float")&&(m.display="inline-block")),c.overflow&&(m.overflow="hidden",k.always(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(n?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;n=!0}l[d]=p&&p[d]||o.style(a,d)}if(!o.isEmptyObject(l)){p?"hidden"in p&&(n=p.hidden):p=L.access(a,"fxshow",{}),f&&(p.hidden=!n),n?o(a).show():k.done(function(){o(a).hide()}),k.done(function(){var b;L.remove(a,"fxshow");for(b in l)o.style(a,b,l[b])});for(d in l)g=Ub(n?p[d]:0,d,k),d in p||(p[d]=g.start,n&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=o.camelCase(c),e=b[d],f=a[c],o.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=o.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=o.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:o.extend({},b),opts:o.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=o.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return o.map(k,Ub,j),o.isFunction(j.opts.start)&&j.opts.start.call(a,j),o.fx.timer(o.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}o.Animation=o.extend(Xb,{tweener:function(a,b){o.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),o.speed=function(a,b,c){var d=a&&"object"==typeof a?o.extend({},a):{complete:c||!c&&b||o.isFunction(a)&&a,duration:a,easing:c&&b||b&&!o.isFunction(b)&&b};return d.duration=o.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in o.fx.speeds?o.fx.speeds[d.duration]:o.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){o.isFunction(d.old)&&d.old.call(this),d.queue&&o.dequeue(this,d.queue)},d},o.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=o.isEmptyObject(a),f=o.speed(b,c,d),g=function(){var b=Xb(this,o.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=o.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&o.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=o.timers,g=d?d.length:0;for(c.finish=!0,o.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),o.each(["toggle","show","hide"],function(a,b){var c=o.fn[b];o.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),o.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){o.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),o.timers=[],o.fx.tick=function(){var a,b=0,c=o.timers;for(Lb=o.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||o.fx.stop(),Lb=void 0},o.fx.timer=function(a){o.timers.push(a),a()?o.fx.start():o.timers.pop()},o.fx.interval=13,o.fx.start=function(){Mb||(Mb=setInterval(o.fx.tick,o.fx.interval))},o.fx.stop=function(){clearInterval(Mb),Mb=null},o.fx.speeds={slow:600,fast:200,_default:400},o.fn.delay=function(a,b){return a=o.fx?o.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=m.createElement("input"),b=m.createElement("select"),c=b.appendChild(m.createElement("option"));a.type="checkbox",l.checkOn=""!==a.value,l.optSelected=c.selected,b.disabled=!0,l.optDisabled=!c.disabled,a=m.createElement("input"),a.value="t",a.type="radio",l.radioValue="t"===a.value}();var Yb,Zb,$b=o.expr.attrHandle;o.fn.extend({attr:function(a,b){return J(this,o.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){o.removeAttr(this,a)})}}),o.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?o.prop(a,b,c):(1===f&&o.isXMLDoc(a)||(b=b.toLowerCase(),d=o.attrHooks[b]||(o.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=o.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void o.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=o.propFix[c]||c,o.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&o.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?o.removeAttr(a,c):a.setAttribute(c,c),c}},o.each(o.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||o.find.attr;$b[b]=function(a,b,d){var e,f;
+return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;o.fn.extend({prop:function(a,b){return J(this,o.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[o.propFix[a]||a]})}}),o.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!o.isXMLDoc(a),f&&(b=o.propFix[b]||b,e=o.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),l.optSelected||(o.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),o.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){o.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;o.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(o.isFunction(a))return this.each(function(b){o(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=o.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(o.isFunction(a))return this.each(function(b){o(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?o.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(o.isFunction(a)?function(c){o(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=o(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;o.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=o.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,o(this).val()):a,null==e?e="":"number"==typeof e?e+="":o.isArray(e)&&(e=o.map(e,function(a){return null==a?"":a+""})),b=o.valHooks[this.type]||o.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=o.valHooks[e.type]||o.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),o.extend({valHooks:{select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&o.nodeName(c.parentNode,"optgroup"))){if(b=o(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=o.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=o.inArray(o(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),o.each(["radio","checkbox"],function(){o.valHooks[this]={set:function(a,b){return o.isArray(b)?a.checked=o.inArray(o(a).val(),b)>=0:void 0}},l.checkOn||(o.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),o.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){o.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),o.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=o.now(),dc=/\?/;o.parseJSON=function(a){return JSON.parse(a+"")},o.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&o.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=m.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(o.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,o.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=o.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&o.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}o.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":o.parseJSON,"text xml":o.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,o.ajaxSettings),b):tc(o.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=o.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?o(l):o.event,n=o.Deferred(),p=o.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(n.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=o.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=o.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===o.active++&&o.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(o.lastModified[d]&&v.setRequestHeader("If-Modified-Since",o.lastModified[d]),o.etag[d]&&v.setRequestHeader("If-None-Match",o.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(o.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(o.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?n.resolveWith(l,[r,x,v]):n.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--o.active||o.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return o.get(a,b,c,"json")},getScript:function(a,b){return o.get(a,void 0,b,"script")}}),o.each(["get","post"],function(a,b){o[b]=function(a,c,d,e){return o.isFunction(c)&&(e=e||d,d=c,c=void 0),o.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),o.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){o.fn[b]=function(a){return this.on(b,a)}}),o._evalUrl=function(a){return o.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},o.fn.extend({wrapAll:function(a){var b;return o.isFunction(a)?this.each(function(b){o(this).wrapAll(a.call(this,b))}):(this[0]&&(b=o(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(o.isFunction(a)?function(b){o(this).wrapInner(a.call(this,b))}:function(){var b=o(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=o.isFunction(a);return this.each(function(c){o(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){o.nodeName(this,"body")||o(this).replaceWith(this.childNodes)}).end()}}),o.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},o.expr.filters.visible=function(a){return!o.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(o.isArray(b))o.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==o.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}o.param=function(a,b){var c,d=[],e=function(a,b){b=o.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=o.ajaxSettings&&o.ajaxSettings.traditional),o.isArray(a)||a.jquery&&!o.isPlainObject(a))o.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},o.fn.extend({serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=o.prop(this,"elements");return a?o.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!o(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=o(this).val();return null==c?null:o.isArray(c)?o.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),o.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=o.ajaxSettings.xhr();a.ActiveXObject&&o(a).on("unload",function(){for(var a in Dc)Dc[a]()}),l.cors=!!Fc&&"withCredentials"in Fc,l.ajax=Fc=!!Fc,o.ajaxTransport(function(a){var b;return l.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort"),f.send(a.hasContent&&a.data||null)},abort:function(){b&&b()}}:void 0}),o.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return o.globalEval(a),a}}}),o.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),o.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=o("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),m.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;o.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||o.expando+"_"+cc++;return this[a]=!0,a}}),o.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=o.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||o.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&o.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),o.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||m;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=o.buildFragment([a],b,e),e&&e.length&&o(e).remove(),o.merge([],d.childNodes))};var Ic=o.fn.load;o.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h),a=a.slice(0,h)),o.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&o.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?o("<div>").append(o.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},o.expr.filters.animated=function(a){return o.grep(o.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return o.isWindow(a)?a:9===a.nodeType&&a.defaultView}o.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=o.css(a,"position"),l=o(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=o.css(a,"top"),i=o.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),o.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},o.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){o.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,o.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===o.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),o.nodeName(a[0],"html")||(d=a.offset()),d.top+=o.css(a[0],"borderTopWidth",!0),d.left+=o.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-o.css(c,"marginTop",!0),left:b.left-d.left-o.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!o.nodeName(a,"html")&&"static"===o.css(a,"position"))a=a.offsetParent;return a||Jc})}}),o.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;o.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),o.each(["top","left"],function(a,b){o.cssHooks[b]=yb(l.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?o(a).position()[b]+"px":c):void 0})}),o.each({Height:"height",Width:"width"},function(a,b){o.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){o.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return o.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?o.css(b,c,g):o.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),o.fn.size=function(){return this.length},o.fn.andSelf=o.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return o});var Lc=a.jQuery,Mc=a.$;return o.noConflict=function(b){return a.$===o&&(a.$=Mc),b&&a.jQuery===o&&(a.jQuery=Lc),o},typeof b===U&&(a.jQuery=a.$=o),o});
diff --git a/interface/web/themes/default/assets/javascripts/modernizr.custom.js b/interface/web/themes/default/assets/javascripts/modernizr.custom.js
new file mode 100644
index 0000000..63cc6c2
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/modernizr.custom.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.7.1 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-csstransforms3d-shiv-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/modernizr.custom.min.js b/interface/web/themes/default/assets/javascripts/modernizr.custom.min.js
new file mode 100644
index 0000000..d47855d
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/modernizr.custom.min.js
@@ -0,0 +1 @@
+window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/pushy.min.js b/interface/web/themes/default/assets/javascripts/pushy.min.js
new file mode 100644
index 0000000..a8bbfd5
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/pushy.min.js
@@ -0,0 +1,4 @@
+/*! Pushy - v0.9.1 - 2013-9-16
+* Pushy is a responsive off-canvas navigation menu using CSS transforms & transitions.
+* https://github.com/christophery/pushy/
+* by Christopher Yee */$(function(){function h(){t.toggleClass(o);e.toggleClass(s);n.toggleClass(u);r.toggleClass(a)}function p(){t.addClass(o);e.animate({left:"0px"},l);n.animate({left:c},l);r.animate({left:c},l)}function d(){t.removeClass(o);e.animate({left:"-"+c},l);n.animate({left:"0px"},l);r.animate({left:"0px"},l)}var e=$(".pushy"),t=$("body"),n=$("#container"),r=$(".push"),i=$(".site-overlay"),s="pushy-left pushy-open",o="pushy-active",u="container-push",a="push-push",f=$(".menu-btn, .pushy a"),l=200,c=e.width()+"px";if(Modernizr.csstransforms3d){f.click(function(){h()});i.click(function(){h()})}else{e.css({left:"-"+c});n.css({"overflow-x":"hidden"});var v=!0;f.click(function(){if(v){p();v=!1}else{d();v=!0}});i.click(function(){if(v){p();v=!1}else{d();v=!0}})}});
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/responsive.js b/interface/web/themes/default/assets/javascripts/responsive.js
new file mode 100644
index 0000000..49d8814
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/responsive.js
@@ -0,0 +1,48 @@
+ISPConfig.loadPushyMenu = function() {
+  // Off-Canvas Menü
+  var $mainNavigation = $('#main-navigation');
+  var $subNavigation = $('#sidebar');
+  var $responsiveNavigation = $('nav.pushy');
+
+  $responsiveNavigation.html('');
+  
+  // Hauptnavigation
+  $('<ul />').appendTo($responsiveNavigation);
+
+  var $addto = false;
+  $($mainNavigation).find('a').each(function () {
+    var $item = $(this);
+    var $activeClass = $item.hasClass('active') ? ' class="active"' : '';
+    var isactive = $activeClass != '' ? true : false;
+    
+    var capp = $item.attr('data-capp');
+    if(capp) $activeClass += ' data-capp="' + capp + '"';
+	
+	capp = $item.attr('data-load-content');
+    if(capp) $activeClass += ' data-load-content="' + capp + '"';
+
+	var $newel = $('<li><a href="' + $item.attr('href') + '"' + $activeClass + '><i class="icon ' + $item.data('icon-class') + '"></i>' + $item.text() + '</a></li>');
+	if(isactive != '') $addto = $newel;
+    $responsiveNavigation.find('ul').append($newel);
+  });
+
+  // Subnavigation
+  if(!$addto) $addto = $responsiveNavigation;
+  $('<ul class="subnavi" />').appendTo($addto);
+
+  $($subNavigation).find('a').each(function () {
+    var $item = $(this);
+    
+    var addattr = '';
+	var capp = $item.attr('data-capp');
+    if(capp) addattr += ' data-capp="' + capp + '"';
+	
+	capp = $item.attr('data-load-content');
+    if(capp) addattr += ' data-load-content="' + capp + '"';
+
+	capp = $item.hasClass('subnav-header');
+	if(capp) addattr += ' class="subnav-header"';
+	
+    $responsiveNavigation.find('ul.subnavi').append($('<li><a href="' + $item.attr('href') + '"' + addattr + '>' + $item.text() + '</a></li>'));
+  });
+};
diff --git a/interface/web/themes/default/assets/javascripts/responsive.min.js b/interface/web/themes/default/assets/javascripts/responsive.min.js
new file mode 100644
index 0000000..999ed60
--- /dev/null
+++ b/interface/web/themes/default/assets/javascripts/responsive.min.js
@@ -0,0 +1 @@
+ISPConfig.loadPushyMenu=function(){var a=$("#main-navigation");var d=$("#sidebar");var b=$("nav.pushy");b.html("");$("<ul />").appendTo(b);var c=false;$(a).find("a").each(function(){var e=$(this);var i=e.hasClass("active")?' class="active"':"";var g=i!=""?true:false;var h=e.attr("data-capp");if(h){i+=' data-capp="'+h+'"'}h=e.attr("data-load-content");if(h){i+=' data-load-content="'+h+'"'}var f=$('<li><a href="'+e.attr("href")+'"'+i+'><i class="icon '+e.data("icon-class")+'"></i>'+e.text()+"</a></li>");if(g!=""){c=f}b.find("ul").append(f)});if(!c){c=b}$('<ul class="subnavi" />').appendTo(c);$(d).find("a").each(function(){var e=$(this);var f="";var g=e.attr("data-capp");if(g){f+=' data-capp="'+g+'"'}g=e.attr("data-load-content");if(g){f+=' data-load-content="'+g+'"'}g=e.hasClass("subnav-header");if(g){f+=' class="subnav-header"'}b.find("ul.subnavi").append($('<li><a href="'+e.attr("href")+'"'+f+">"+e.text()+"</a></li>"))})};
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/bootstrap-datetimepicker.min.css b/interface/web/themes/default/assets/stylesheets/bootstrap-datetimepicker.min.css
new file mode 100644
index 0000000..2cdb4b9
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/bootstrap-datetimepicker.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Datetimepicker for Bootstrap
+ *
+ * Copyright 2012 Stefan Petre
+ * Improvements by Andrew Rowls
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */.datetimepicker{padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datetimepicker-inline{width:220px}.datetimepicker.datetimepicker-rtl{direction:rtl}.datetimepicker.datetimepicker-rtl table tr td span{float:right}.datetimepicker-dropdown,.datetimepicker-dropdown-left{top:0;left:0}[class*=" datetimepicker-dropdown"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute}[class*=" datetimepicker-dropdown"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute}[class*=" datetimepicker-dropdown-top"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0}[class*=" datetimepicker-dropdown-top"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;border-bottom:0}.datetimepicker-dropdown-bottom-left:before{top:-7px;right:6px}.datetimepicker-dropdown-bottom-left:after{top:-6px;right:7px}.datetimepicker-dropdown-bottom-right:before{top:-7px;left:6px}.datetimepicker-dropdown-bottom-right:after{top:-6px;left:7px}.datetimepicker-dropdown-top-left:before{bottom:-7px;right:6px}.datetimepicker-dropdown-top-left:after{bottom:-6px;right:7px}.datetimepicker-dropdown-top-right:before{bottom:-7px;left:6px}.datetimepicker-dropdown-top-right:after{bottom:-6px;left:7px}.datetimepicker>div{display:none}.datetimepicker.minutes div.datetimepicker-minutes{display:block}.datetimepicker.hours div.datetimepicker-hours{display:block}.datetimepicker.days div.datetimepicker-days{display:block}.datetimepicker.months div.datetimepicker-months{display:block}.datetimepicker.years div.datetimepicker-years{display:block}.datetimepicker table{margin:0}.datetimepicker td,.datetimepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:0}.table-striped .datetimepicker table tr td,.table-striped .datetimepicker table tr th{background-color:transparent}.datetimepicker table tr td.minute:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.hour:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.day:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.old,.datetimepicker table tr td.new{color:#999}.datetimepicker table tr td.disabled,.datetimepicker table tr td.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td.today,.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(top,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',endColorstr='#fdf59a',GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today:hover:hover,.datetimepicker table tr td.today.disabled:hover,.datetimepicker table tr td.today.disabled:hover:hover,.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today:hover.disabled,.datetimepicker table tr td.today.disabled.disabled,.datetimepicker table tr td.today.disabled:hover.disabled,.datetimepicker table tr td.today[disabled],.datetimepicker table tr td.today:hover[disabled],.datetimepicker table tr td.today.disabled[disabled],.datetimepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active{background-color:#fbf069}.datetimepicker table tr td.active,.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active:hover:hover,.datetimepicker table tr td.active.disabled:hover,.datetimepicker table tr td.active.disabled:hover:hover,.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active:hover.disabled,.datetimepicker table tr td.active.disabled.disabled,.datetimepicker table tr td.active.disabled:hover.disabled,.datetimepicker table tr td.active[disabled],.datetimepicker table tr td.active:hover[disabled],.datetimepicker table tr td.active.disabled[disabled],.datetimepicker table tr td.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datetimepicker .datetimepicker-hours span{height:26px;line-height:26px}.datetimepicker .datetimepicker-hours table tr td span.hour_am,.datetimepicker .datetimepicker-hours table tr td span.hour_pm{width:14.6%}.datetimepicker .datetimepicker-hours fieldset legend,.datetimepicker .datetimepicker-minutes fieldset legend{margin-bottom:inherit;line-height:30px}.datetimepicker .datetimepicker-minutes span{height:26px;line-height:26px}.datetimepicker table tr td span:hover{background:#eee}.datetimepicker table tr td span.disabled,.datetimepicker table tr td span.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td span.active,.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active:hover:hover,.datetimepicker table tr td span.active.disabled:hover,.datetimepicker table tr td span.active.disabled:hover:hover,.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active:hover.disabled,.datetimepicker table tr td span.active.disabled.disabled,.datetimepicker table tr td span.active.disabled:hover.disabled,.datetimepicker table tr td span.active[disabled],.datetimepicker table tr td span.active:hover[disabled],.datetimepicker table tr td span.active.disabled[disabled],.datetimepicker table tr td span.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span.old{color:#999}.datetimepicker th.switch{width:145px}.datetimepicker th span.glyphicon{pointer-events:none}.datetimepicker thead tr:first-child th,.datetimepicker tfoot tr:first-child th{cursor:pointer}.datetimepicker thead tr:first-child th:hover,.datetimepicker tfoot tr:first-child th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i,.input-group.date .input-group-addon span{cursor:pointer;width:14px;height:14px}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/bootstrap.min.css b/interface/web/themes/default/assets/stylesheets/bootstrap.min.css
new file mode 100644
index 0000000..4af8905
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/bootstrap.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px;line-height:1.5 \0}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px;line-height:1.33 \0}_:-ms-fullscreen,:root input[type=date],_:-ms-fullscreen,:root input[type=time],_:-ms-fullscreen,:root input[type=datetime-local],_:-ms-fullscreen,:root input[type=month]{line-height:1.42857143}_:-ms-fullscreen.input-sm,:root input[type=date].input-sm,_:-ms-fullscreen.input-sm,:root input[type=time].input-sm,_:-ms-fullscreen.input-sm,:root input[type=datetime-local].input-sm,_:-ms-fullscreen.input-sm,:root input[type=month].input-sm{line-height:1.5}_:-ms-fullscreen.input-lg,:root input[type=date].input-lg,_:-ms-fullscreen.input-lg,:root input[type=time].input-lg,_:-ms-fullscreen.input-lg,:root input[type=datetime-local].input-lg,_:-ms-fullscreen.input-lg,:root input[type=month].input-lg{line-height:1.33}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/fonts.css b/interface/web/themes/default/assets/stylesheets/fonts.css
new file mode 100644
index 0000000..f631bda
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/fonts.css
@@ -0,0 +1,94 @@
+@font-face {
+	font-family: 'ispconfig';
+	src:url('../fonts/ispconfig.eot?-drlkxz');
+	src:url('../fonts/ispconfig.eot?#iefix-drlkxz') format('embedded-opentype'),
+		url('../fonts/ispconfig.woff?-drlkxz') format('woff'),
+		url('../fonts/ispconfig.ttf?-drlkxz') format('truetype'),
+		url('../fonts/ispconfig.svg?-drlkxz#ispconfig') format('svg');
+	font-weight: normal;
+	font-style: normal;
+}
+
+.icon {
+	font-family: 'ispconfig';
+	speak: none;
+	font-style: normal;
+	font-weight: normal;
+	font-variant: normal;
+	text-transform: none;
+	line-height: 1;
+
+	/* Better Font Rendering =========== */
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+}
+
+.icon:before {
+	vertical-align: middle;
+}
+.icon-calendar:before {
+	content: "\e60e";
+}
+.icon-billing:before {
+	content: "\e60d";
+}
+.icon-lens:before {
+	content: "\e60b";
+}
+.icon-bulb:before {
+	content: "\e60c";
+}
+.icon-vm2:before {
+	content: "\e600";
+}
+.icon-vm:before {
+	content: "\e601";
+}
+.icon-tools:before {
+	content: "\e602";
+}
+.icon-admin:before {
+	content: "\e603";
+}
+.icon-sites:before {
+	content: "\e604";
+}
+.icon-monitor:before {
+	content: "\e605";
+}
+.icon-dashboard:before {
+	content: "\e606";
+}
+.icon-help:before {
+	content: "\e607";
+}
+.icon-mail:before {
+	content: "\e608";
+}
+.icon-dns:before {
+	content: "\e609";
+}
+.icon-client:before {
+	content: "\e60a";
+}
+.icon-edit:before {
+	content: "\e615";
+}
+.icon-filter:before {
+	content: "\e614";
+}
+.icon-link:before {
+	content: "\e60f";
+}
+.icon-action:before {
+	content: "\e610";
+}
+.icon-dbadmin:before {
+	content: "\e612";
+}
+.icon-loginas:before {
+	content: "\e611";
+}
+.icon-delete:before {
+	content: "\e613";
+}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/fonts.min.css b/interface/web/themes/default/assets/stylesheets/fonts.min.css
new file mode 100644
index 0000000..9d1c9d0
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/fonts.min.css
@@ -0,0 +1 @@
+@font-face{font-family:'ispconfig';src:url('../fonts/ispconfig.eot?-drlkxz');src:url('../fonts/ispconfig.eot?#iefix-drlkxz') format('embedded-opentype'),url('../fonts/ispconfig.woff?-drlkxz') format('woff'),url('../fonts/ispconfig.ttf?-drlkxz') format('truetype'),url('../fonts/ispconfig.svg?-drlkxz#ispconfig') format('svg');font-weight:normal;font-style:normal}.icon{font-family:'ispconfig';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{vertical-align:middle}.icon-calendar:before{content:"\e60e"}.icon-billing:before{content:"\e60d"}.icon-lens:before{content:"\e60b"}.icon-bulb:before{content:"\e60c"}.icon-vm2:before{content:"\e600"}.icon-vm:before{content:"\e601"}.icon-tools:before{content:"\e602"}.icon-admin:before{content:"\e603"}.icon-sites:before{content:"\e604"}.icon-monitor:before{content:"\e605"}.icon-dashboard:before{content:"\e606"}.icon-help:before{content:"\e607"}.icon-mail:before{content:"\e608"}.icon-dns:before{content:"\e609"}.icon-client:before{content:"\e60a"}.icon-edit:before{content:"\e615"}.icon-filter:before{content:"\e614"}.icon-link:before{content:"\e60f"}.icon-action:before{content:"\e610"}.icon-dbadmin:before{content:"\e612"}.icon-loginas:before{content:"\e611"}.icon-delete:before{content:"\e613"}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
new file mode 100644
index 0000000..6d29d5e
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -0,0 +1,660 @@
+body {
+  overflow-y: scroll; }
+
+.left {
+  float: left; }
+
+.right {
+  float: right; }
+
+.clear:after {
+  content: "";
+  display: table;
+  clear: both; }
+
+.marginTop15 {
+  margin-top: 15px; }
+
+.paddingX5 {
+  padding-left: 5px !important;
+  padding-right: 5px !important; }
+
+.width65 {
+  width: 65px; }
+
+.form-group input[type='checkbox'] {
+  margin-top: 10px; }
+
+.control-label {
+  font-weight: normal; }
+  .control-label:after {
+    content: ":"; }
+
+.formbutton-default {
+  padding: 6px 30px;
+  border-bottom-style: solid;
+  border-bottom-width: 2px;
+  font-size: 12px;
+  font-weight: bold;
+  transition: all ease 500ms; }
+
+.formbutton-success,
+.formbutton-danger {
+  padding: 6px 30px;
+  border-style: solid;
+  border-width: 1px;
+  border-bottom-width: solid;
+  font-size: 12px;
+  font-weight: bold;
+  transition: all ease 500ms; }
+
+.formbutton-narrow {
+  padding: 6px 8px;
+  margin-left: 2px;
+  margin-right: 2px; }
+
+.formbutton-narrower {
+  padding: 4px 6px; }
+
+#main-wrapper {
+  margin: 0 auto;
+  width: 95%;
+  max-width: 1260px; }
+
+#logo {
+  float: left;
+  width: 200px;
+  height: 65px;
+  margin-top:10px;
+  /*background: url("../images/logo.png") no-repeat;*/ }
+  #logo a {
+    display: block;
+    width: 100%;
+    height: 100%; }
+
+#headerbar {
+  float: right; }
+
+#searchform {
+  float: right;
+  margin-top: 16px; }
+  #searchform > div {
+    position: relative;
+    display: table; }
+    #searchform > div > div {
+      display: table-cell;
+      padding-right: 8px;
+      vertical-align: top; }
+  #searchform .icon {
+    padding: 0 2px;
+    font-size: 16px; }
+
+#logout-button {
+  float: right;
+  margin-top: 16px;
+  margin-left: 25px;
+  border-bottom-style: solid;
+  border-bottom-width: 2px;
+  transition: all ease 500ms; }
+
+#main-navigation {
+  margin-top: 24px; }
+  #main-navigation a {
+    padding: 0 12px;
+    height: 70px;
+    border-bottom-style: solid;
+    botder-bottom-width: 2px;
+    transition: all ease 500ms; }
+  #main-navigation .icon {
+    font-size: 32px; }
+  #main-navigation .title {
+    margin-top: 2px;
+    font-weight: bold; }
+
+.btn-group-justified .btn {
+  border-right-width: 0; }
+  .btn-group-justified .btn:last-of-type {
+    border-right-width: 1px; }
+
+#content {
+  width: 78%; }
+
+#sidebar {
+  margin-top: 27px;
+  width: 18%;
+  border-style: solid;
+  border-width: 1px;
+  border-radius: 4px; }
+  #sidebar header {
+    margin: 1px;
+    padding: 0 10px;
+    height: 40px;
+    line-height: 40px;
+    font-weight: bold;
+    border-top-left-radius: 2px;
+    border-top-right-radius: 2px; }
+  #sidebar ul {
+    margin: 0;
+    padding: 0;
+    list-style: none; }
+  #sidebar li {
+    padding: 10px;
+    border-top-style: solid;
+    border-top-width: 1px;
+    font-size: 12px; }
+  #sidebar a {
+    text-decoration: none;
+    transition: color ease 500ms; }
+
+.page-header {
+  margin: 20px 0;
+  padding: 0; }
+
+.alert-notification a {
+  font-weight: bold;
+  text-decoration: none;
+  transition: color ease 500ms; }
+
+.alert-label, .alert-content {
+  display: inline-block;
+  vertical-align: top; }
+
+.alert-label {
+  width: 60px; }
+
+.modules {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+  .modules li {
+    float: left;
+    margin-right: 15px;
+    margin-bottom: 15px;
+    padding: 8px;
+    width: 200px;
+    border-radius: 4px;
+    border-style: solid;
+    border-width: 1px; }
+  .modules .icon {
+    float: left;
+    margin-right: 15px;
+    font-size: 50px; }
+  .modules .left {
+    margin-top: 5px; }
+  .modules .title {
+    margin-top: 6px;
+    margin-left: 20px;
+    font-size: 16px;
+    font-weight: bold; }
+  .modules .button {
+    margin-top: 10px;
+    width: 100%;
+    border-bottom-style: solid;
+    border-bottom-width: 2px;
+    font-size: 12px;
+    font-weight: bold;
+    transition: all ease 500ms; }
+  .modules a {
+    text-decoration: none; }
+
+.table-wrapper {
+  margin-bottom: 20px;
+  border-radius: 4px;
+  border-style: solid;
+  border-width: 1px; }
+
+.table {
+  table-layout: fixed;
+  margin-bottom: 1px; }
+  .table caption {
+    padding: 5px 10px;
+    text-align: left;
+    font-weight: bold;
+    font-size: 18px;
+    border-bottom-style: solid;
+    border-bottom-width: 1px; }
+  .table tbody tr {
+    border-top-style: solid;
+    border-top-width: 1px;
+    transition: background ease 500ms; }
+    .table tbody tr:last-child {
+      border-radius: 4px; }
+
+.tfooter {
+  margin-top: -1px;
+  height: 40px;
+  border-top-style: solid;
+  border-top-width: 1px; }
+
+.pagination {
+  margin: 10px 0; }
+
+.progress {
+  display: inline-block;
+  margin-bottom: 0;
+  width: 150px;
+  height: 10px; }
+
+p.fieldset-legend {
+  display: none; }
+
+.content-tab-wrapper {
+  border-style: solid;
+  border-width: 1px;
+  border-radius: 4px; }
+  .content-tab-wrapper .nav-tabs > li > a {
+    border-radius: 0;
+    border: none !important;
+    border-right-style: solid !important;
+    border-right-width: 1px !important;
+    outline: none;
+    font-weight: bold;
+    transition: background ease 500ms; }
+  .content-tab-wrapper .nav-tabs li:not(:first-child) a {
+    margin-left: -2px; }
+
+.tab-content {
+  padding: 25px 10px; }
+
+.input-group-btn .icon-calendar {
+  font-size: 18px; }
+
+thead.dark th {
+  height: 40px;
+  line-height: 40px;
+  font-weight: normal; }
+
+thead.dark th.small-col {
+  width: 14%; }
+
+thead.dark th.tiny-col {
+  width: 8%;
+  overflow: hidden;
+  text-overflow: ellipsis; }
+
+thead.dark th[data-column] {
+  cursor: pointer;
+}
+
+thead.dark th[data-column][data-ordered] {
+	font-weight: bold;
+	position: relative;
+}
+
+thead.dark th[data-column][data-ordered]:before {
+	content: "";
+	display: block;
+	position: absolute;
+	right: 5px;
+	top: 16px;
+	width: 0;
+	height: 0;
+	vertical-align: middle;
+	border-bottom: 5px solid #fff;
+	border-top: 5px solid transparent;
+	border-right: 5px solid transparent;
+	border-left: 6px solid transparent;
+	line-height: inherit;
+}
+
+thead.dark th[data-column][data-ordered="desc"]:before {
+	top: 21px;
+	border-bottom: 5px solid transparent;
+	border-top: 5px solid #fff;
+}
+
+thead.dark td input,
+thead.dark td select {
+  width: 100%; }
+
+#footer {
+  margin: 20px 0;
+  padding-top: 20px;
+  border-top-style: solid;
+  border-top-width: 1px;
+  text-align: center;
+  font-size: 10px; }
+
+.menu-btn {
+  display: none;
+  cursor: pointer; }
+
+.df-container,
+.gs-container {
+  position: relative; }
+
+.gs-container:after {
+  content: "";
+  display: table;
+  clear: both; }
+
+ul.df-resultbox,
+ul.gs-resultbox {
+	display: block;
+	position: absolute;
+	left: 0;
+	top: 100%;
+    margin: 0;
+    padding: 0 0 10px;
+    min-width: 250px;
+    max-width: 500px;
+    z-index: 999999;
+    background: #fff;
+    list-style: none;
+	box-shadow: 2px 2px 5px #c5c5c5;
+	border-radius: 5px; }
+
+ul.df-resultbox li,
+ul.gs-resultbox li {
+  float: none;
+  display: block;
+  cursor: pointer;
+  padding: 0 10px; }
+
+ul.gs-resultbox li {
+  padding: 3px 10px;
+  line-height: 1.1;
+  font-size: 0.9em; }
+
+ul.df-resultbox li:nth-child(even),
+ul.gs-resultbox li:nth-child(even) {
+	background: #f2f5f7; }
+
+ul.df-resultbox li.df-cheader,
+ul.gs-resultbox li.gs-cheader {
+  background: #fff;
+  padding-top: 10px;
+  margin-bottom: 10px;
+  }
+
+ul.df-resultbox li p,
+ul.gs-resultbox li p {
+  margin-bottom: 0;
+  color: inherit; }
+
+ul.df-resultbox li.df-cheader p.df-cheader-title,
+ul.gs-resultbox li.gs-cheader p.gs-cheader-title {
+  font-weight: bold;
+  margin-bottom: 0; }
+
+ul.df-resultbox li.df-cheader p.df-cheader-limit,
+ul.gs-resultbox li.gs-cheader p.gs-cheader-limit {
+  font-weight: normal; }
+
+ul.df-resultbox li.df-cdata img,
+ul.gs-resultbox li.gs-cdata img {
+  margin-right: 12px; }
+    
+ul.df-resultbox li.df-cdata p span.df-cdata-title,
+ul.gs-resultbox li.gs-cdata p span.gs-cdata-title {
+  font-weight: bold; }
+
+ul.gs-resultbox li.gs-cdata p span.gs-cdata-title {
+  display: block; }
+
+ul.df-resultbox li:first-child,
+ul.gs-resultbox li:first-child {
+  border-top-left-radius: 5px;
+  border-top-right-radius: 5px; }
+
+ul.df-resultbox li:last-child,
+ul.gs-resultbox li:last-child {
+  border-bottom-left-radius: 5px;
+  border-bottom-right-radius: 5px; }
+
+span.flags {
+    background-image: url("../images/flags_sprite.png");
+    background-repeat: no-repeat;
+    min-height: 20px;
+    padding-left: 27px;
+    vertical-align: middle;
+}
+span.flag-el {background-position:0 -1475px}
+span.flag-ad {background-position:0 -1px}
+span.flag-ae {background-position:0 -23px}
+span.flag-af {background-position:0 -45px}
+span.flag-ag {background-position:0 -67px}
+span.flag-ai {background-position:0 -89px}
+span.flag-al {background-position:0 -111px}
+span.flag-am {background-position:0 -133px}
+span.flag-an {background-position:0 -155px}
+span.flag-ao {background-position:0 -177px}
+span.flag-aq {background-position:0 -199px}
+span.flag-ar {background-position:0 -221px}
+span.flag-as {background-position:0 -243px}
+span.flag-at {background-position:0 -265px}
+span.flag-au {background-position:0 -287px}
+span.flag-aw {background-position:0 -309px}
+span.flag-ax {background-position:0 -331px}
+span.flag-az {background-position:0 -353px}
+span.flag-ba {background-position:0 -375px}
+span.flag-bb {background-position:0 -397px}
+span.flag-bd {background-position:0 -419px}
+span.flag-be {background-position:0 -441px}
+span.flag-bf {background-position:0 -463px}
+span.flag-bg {background-position:0 -485px}
+span.flag-bh {background-position:0 -507px}
+span.flag-bi {background-position:0 -529px}
+span.flag-bj {background-position:0 -551px}
+span.flag-bm {background-position:0 -573px}
+span.flag-bn {background-position:0 -595px}
+span.flag-bo {background-position:0 -617px}
+span.flag-br {background-position:0 -639px}
+span.flag-bs {background-position:0 -661px}
+span.flag-bt {background-position:0 -683px}
+span.flag-bv {background-position:0 -705px}
+span.flag-bw {background-position:0 -727px}
+span.flag-by {background-position:0 -749px}
+span.flag-bz {background-position:0 -771px}
+span.flag-ca {background-position:0 -793px}
+span.flag-cc {background-position:0 -837px}
+span.flag-cd {background-position:0 -859px}
+span.flag-cf {background-position:0 -881px}
+span.flag-cg {background-position:0 -903px}
+span.flag-ch {background-position:0 -925px}
+span.flag-ci {background-position:0 -947px}
+span.flag-ck {background-position:0 -969px}
+span.flag-cl {background-position:0 -991px}
+span.flag-cm {background-position:0 -1013px}
+span.flag-cn {background-position:0 -1035px}
+span.flag-co {background-position:0 -1057px}
+span.flag-cr {background-position:0 -1079px}
+span.flag-cs {background-position:0 -1101px}
+span.flag-cu {background-position:0 -1123px}
+span.flag-cv {background-position:0 -1145px}
+span.flag-cx {background-position:0 -1167px}
+span.flag-cy {background-position:0 -1189px}
+span.flag-cz {background-position:0 -1211px}
+span.flag-de {background-position:0 -1233px}
+span.flag-dj {background-position:0 -1255px}
+span.flag-dk {background-position:0 -1277px}
+span.flag-dm {background-position:0 -1299px}
+span.flag-do {background-position:0 -1321px}
+span.flag-dz {background-position:0 -1343px}
+span.flag-ec {background-position:0 -1365px}
+span.flag-ee {background-position:0 -1387px}
+span.flag-eg {background-position:0 -1409px}
+span.flag-eh {background-position:0 -1431px}
+/*span.flag-en {background-position:0 -1453px}*/
+span.flag-er {background-position:0 -1475px}
+span.flag-es {background-position:0 -1497px}
+span.flag-et {background-position:0 -1519px}
+span.flag-fi {background-position:0 -1585px}
+span.flag-fj {background-position:0 -1607px}
+span.flag-fk {background-position:0 -1629px}
+span.flag-fm {background-position:0 -1651px}
+span.flag-fo {background-position:0 -1673px}
+span.flag-fr {background-position:0 -1695px}
+span.flag-ga {background-position:0 -1717px}
+span.flag-gb, span.flag-en {background-position:0 -1739px}
+span.flag-gd {background-position:0 -1761px}
+span.flag-ge {background-position:0 -1783px}
+span.flag-gf {background-position:0 -1805px}
+span.flag-gh {background-position:0 -1827px}
+span.flag-gi {background-position:0 -1849px}
+span.flag-gl {background-position:0 -1871px}
+span.flag-gm {background-position:0 -1893px}
+span.flag-gn {background-position:0 -1915px}
+span.flag-gp {background-position:0 -1937px}
+span.flag-gq {background-position:0 -1959px}
+span.flag-gr {background-position:0 -1981px}
+span.flag-gs {background-position:0 -2003px}
+span.flag-gt {background-position:0 -2025px}
+span.flag-gu {background-position:0 -2047px}
+span.flag-gw {background-position:0 -2069px}
+span.flag-gy {background-position:0 -2091px}
+span.flag-hk {background-position:0 -2113px}
+span.flag-hm {background-position:0 -2135px}
+span.flag-hn {background-position:0 -2157px}
+span.flag-hr {background-position:0 -2179px}
+span.flag-ht {background-position:0 -2201px}
+span.flag-hu {background-position:0 -2223px}
+span.flag-id {background-position:0 -2245px}
+span.flag-ie {background-position:0 -2267px}
+span.flag-il {background-position:0 -2289px}
+span.flag-in {background-position:0 -2311px}
+span.flag-io {background-position:0 -2333px}
+span.flag-iq {background-position:0 -2355px}
+span.flag-ir {background-position:0 -2377px}
+span.flag-is {background-position:0 -2399px}
+span.flag-it {background-position:0 -2421px}
+span.flag-jm {background-position:0 -2443px}
+span.flag-jo {background-position:0 -2465px}
+span.flag-jp {background-position:0 -2487px}
+span.flag-ke {background-position:0 -2509px}
+span.flag-kg {background-position:0 -2531px}
+span.flag-kh {background-position:0 -2553px}
+span.flag-ki {background-position:0 -2575px}
+span.flag-km {background-position:0 -2597px}
+span.flag-kn {background-position:0 -2619px}
+span.flag-kp {background-position:0 -2641px}
+span.flag-kr {background-position:0 -2663px}
+span.flag-kw {background-position:0 -2685px}
+span.flag-ky {background-position:0 -2707px}
+span.flag-kz {background-position:0 -2729px}
+span.flag-la {background-position:0 -2751px}
+span.flag-lb {background-position:0 -2773px}
+span.flag-lc {background-position:0 -2795px}
+span.flag-li {background-position:0 -2817px}
+span.flag-lk {background-position:0 -2839px}
+span.flag-lr {background-position:0 -2861px}
+span.flag-ls {background-position:0 -2883px}
+span.flag-lt {background-position:0 -2905px}
+span.flag-lu {background-position:0 -2927px}
+span.flag-lv {background-position:0 -2949px}
+span.flag-ly {background-position:0 -2971px}
+span.flag-ma {background-position:0 -2993px}
+span.flag-mc {background-position:0 -3015px}
+span.flag-md {background-position:0 -3037px}
+span.flag-me {background-position:0 -3059px}
+span.flag-mg {background-position:0 -3081px}
+span.flag-mh {background-position:0 -3103px}
+span.flag-mk {background-position:0 -3125px}
+span.flag-ml {background-position:0 -3147px}
+span.flag-mm {background-position:0 -3169px}
+span.flag-mn {background-position:0 -3191px}
+span.flag-mo {background-position:0 -3213px}
+span.flag-mp {background-position:0 -3235px}
+span.flag-mq {background-position:0 -3257px}
+span.flag-mr {background-position:0 -3279px}
+span.flag-ms {background-position:0 -3301px}
+span.flag-mt {background-position:0 -3323px}
+span.flag-mu {background-position:0 -3345px}
+span.flag-mv {background-position:0 -3367px}
+span.flag-mw {background-position:0 -3389px}
+span.flag-mx {background-position:0 -3411px}
+span.flag-my {background-position:0 -3433px}
+span.flag-mz {background-position:0 -3455px}
+span.flag-na {background-position:0 -3477px}
+span.flag-nc {background-position:0 -3499px}
+span.flag-ne {background-position:0 -3521px}
+span.flag-nf {background-position:0 -3543px}
+span.flag-ng {background-position:0 -3565px}
+span.flag-ni {background-position:0 -3587px}
+span.flag-nl {background-position:0 -3609px}
+span.flag-no {background-position:0 -3631px}
+span.flag-np {background-position:0 -3653px}
+span.flag-nr {background-position:0 -3675px}
+span.flag-nu {background-position:0 -3697px}
+span.flag-nz {background-position:0 -3719px}
+span.flag-om {background-position:0 -3741px}
+span.flag-pa {background-position:0 -3763px}
+span.flag-pe {background-position:0 -3785px}
+span.flag-pf {background-position:0 -3807px}
+span.flag-pg {background-position:0 -3829px}
+span.flag-ph {background-position:0 -3851px}
+span.flag-pk {background-position:0 -3873px}
+span.flag-pl {background-position:0 -3895px}
+span.flag-pm {background-position:0 -3917px}
+span.flag-pn {background-position:0 -3939px}
+span.flag-pr {background-position:0 -3961px}
+span.flag-ps {background-position:0 -3983px}
+span.flag-pt {background-position:0 -4005px}
+span.flag-pw {background-position:0 -4027px}
+span.flag-py {background-position:0 -4049px}
+span.flag-qa {background-position:0 -4071px}
+span.flag-re {background-position:0 -4093px}
+span.flag-ro {background-position:0 -4115px}
+span.flag-rs {background-position:0 -4137px}
+span.flag-ru {background-position:0 -4159px}
+span.flag-rw {background-position:0 -4181px}
+span.flag-sa {background-position:0 -4203px}
+span.flag-sb {background-position:0 -4225px}
+span.flag-sc {background-position:0 -4247px}
+span.flag-sd {background-position:0 -4291px}
+span.flag-se {background-position:0 -4313px}
+span.flag-sg {background-position:0 -4335px}
+span.flag-sh {background-position:0 -4357px}
+span.flag-si {background-position:0 -4379px}
+span.flag-sj {background-position:0 -4401px}
+span.flag-sk {background-position:0 -4423px}
+span.flag-sl {background-position:0 -4445px}
+span.flag-sm {background-position:0 -4467px}
+span.flag-sn {background-position:0 -4489px}
+span.flag-so {background-position:0 -4511px}
+span.flag-sr {background-position:0 -4533px}
+span.flag-st {background-position:0 -4555px}
+span.flag-sv {background-position:0 -4577px}
+span.flag-sy {background-position:0 -4599px}
+span.flag-sz {background-position:0 -4621px}
+span.flag-tc {background-position:0 -4643px}
+span.flag-td {background-position:0 -4665px}
+span.flag-tf {background-position:0 -4687px}
+span.flag-tg {background-position:0 -4709px}
+span.flag-th {background-position:0 -4731px}
+span.flag-tj {background-position:0 -4753px}
+span.flag-tk {background-position:0 -4775px}
+span.flag-tl {background-position:0 -4797px}
+span.flag-tm {background-position:0 -4819px}
+span.flag-tn {background-position:0 -4841px}
+span.flag-to {background-position:0 -4863px}
+span.flag-tr {background-position:0 -4885px}
+span.flag-tt {background-position:0 -4907px}
+span.flag-tv {background-position:0 -4929px}
+span.flag-tw {background-position:0 -4951px}
+span.flag-tz {background-position:0 -4973px}
+span.flag-ua {background-position:0 -4995px}
+span.flag-ug {background-position:0 -5017px}
+span.flag-um {background-position:0 -5039px}
+span.flag-us {background-position:0 -5061px}
+span.flag-uy {background-position:0 -5083px}
+span.flag-uz {background-position:0 -5105px}
+span.flag-va {background-position:0 -5127px}
+span.flag-vc {background-position:0 -5149px}
+span.flag-ve {background-position:0 -5171px}
+span.flag-vg {background-position:0 -5193px}
+span.flag-vi {background-position:0 -5215px}
+span.flag-vn {background-position:0 -5237px}
+span.flag-vu {background-position:0 -5259px}
+span.flag-wf {background-position:0 -5303px}
+span.flag-ws {background-position:0 -5325px}
+span.flag-ye {background-position:0 -5347px}
+span.flag-yt {background-position:0 -5369px}
+span.flag-za {background-position:0 -5391px}
+span.flag-zm {background-position:0 -5413px}
+span.flag-zw {background-position:0 -5435px}
+
+@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
+  #logo {
+    background-image: url("../images/logo@2x.png");
+    background-size: 200px 65px; } }
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.min.css b/interface/web/themes/default/assets/stylesheets/ispconfig.min.css
new file mode 100644
index 0000000..4c333db
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.min.css
@@ -0,0 +1 @@
+body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;background:url("../images/logo.png") no-repeat}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.sass b/interface/web/themes/default/assets/stylesheets/ispconfig.sass
new file mode 100644
index 0000000..7a40a91
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.sass
@@ -0,0 +1,293 @@
+body
+  overflow-y: scroll
+
+.left
+  float: left
+
+.right
+  float: right
+
+.clear:after
+  content: ''
+  display: table
+  clear: both
+
+.marginTop15
+  margin-top: 15px
+
+.paddingX5
+  padding-left: 5px !important
+  padding-right: 5px !important
+
+.width65
+  width: 65px
+
+.form-group input[type='checkbox']
+  margin-top: 10px
+
+.control-label
+  font-weight: normal
+
+  &:after
+    content: ':'
+
+.formbutton-default
+  padding: 6px 30px
+  border-bottom-style: solid
+  border-bottom-width: 2px
+  font-size: 12px
+  font-weight: bold
+  transition: all ease 500ms
+
+.formbutton-success
+  padding: 6px 30px
+  border-style: solid
+  border-width: 1px
+  border-bottom-width: solid
+  font-size: 12px
+  font-weight: bold
+  transition: all ease 500ms
+
+#main-wrapper
+  margin: 0 auto
+  width: 950px
+
+#logo
+  float: left
+  width: 200px
+  height: 65px
+  background: url('../images/logo.png') no-repeat
+
+  a
+    display: block
+    width: 100%
+    height: 100%
+
+#headerbar
+  float: right
+
+#searchform
+  float: right
+  margin-top: 16px
+
+  > div
+    position: relative
+    display: table
+
+    > div
+      display: table-cell
+      padding-right: 8px
+      vertical-align: top
+
+  .icon
+    padding: 0 2px
+    font-size: 16px
+
+#logout-button
+  float: right
+  margin-top: 16px
+  margin-left: 25px
+  border-bottom-style: solid
+  border-bottom-width: 2px
+  transition: all ease 500ms
+
+#main-navigation
+  margin-top: 24px
+
+  a
+    padding: 0 12px
+    height: 70px
+    border-bottom-style: solid
+    botder-bottom-width: 2px
+    transition: all ease 500ms
+
+  .icon
+    font-size: 32px
+
+  .title
+    margin-top: 2px
+    font-weight: bold
+
+
+.btn-group-justified .btn
+  border-right-width: 0
+
+  &:last-of-type
+    border-right-width: 1px
+
+#content
+  width: 710px
+
+#sidebar
+  margin-top: 27px
+  width: 215px
+  border-style: solid
+  border-width: 1px
+  border-radius: 4px
+
+  header
+    margin: 1px
+    padding: 0 10px
+    height: 40px
+    line-height: 40px
+    font-weight: bold
+    border-top-left-radius: 2px
+    border-top-right-radius: 2px
+
+  ul
+    margin: 0
+    padding: 0
+    list-style: none
+
+  li
+    padding: 10px
+    border-top-style: solid
+    border-top-width: 1px
+    font-size: 12px
+
+  a
+    text-decoration: none
+    transition: color ease 500ms
+
+.page-header
+  margin: 20px 0
+  padding: 0
+
+.alert-notification
+  a
+    font-weight: bold
+    text-decoration: none
+    transition: color ease 500ms
+
+.alert-label, .alert-content
+  display: inline-block
+  vertical-align: top
+
+.alert-label
+  width: 60px
+
+.modules
+  margin: 0
+  padding: 0
+  list-style: none
+
+  li
+    float: left
+    margin-right: 15px
+    margin-bottom: 15px
+    padding: 8px
+    width: 200px
+    border-radius: 4px
+    border-style: solid
+    border-width: 1px
+
+  .icon
+    float: left
+    margin-right: 15px
+    font-size: 50px
+
+  .left
+    margin-top: 5px
+
+  .title
+    margin-top: 6px
+    margin-left: 20px
+    font-size: 16px
+    font-weight: bold
+
+  .button
+    margin-top: 10px
+    width: 100%
+    border-bottom-style: solid
+    border-bottom-width: 2px
+    font-size: 12px
+    font-weight: bold
+    transition: all ease 500ms
+
+  a
+    text-decoration: none
+
+.table-wrapper
+  margin-bottom: 20px
+  border-radius: 4px
+  border-style: solid
+  border-width: 1px
+
+.table
+  margin-bottom: 1px
+
+  caption
+    padding: 5px 10px
+    text-align: left
+    font-weight: bold
+    font-size: 18px
+    border-bottom-style: solid
+    border-bottom-width: 1px
+
+  tbody
+    tr
+      border-top-style: solid
+      border-top-width: 1px
+      transition: background ease 500ms
+
+      &:last-child
+        border-radius: 4px
+
+.tfooter
+  margin-top: -1px
+  height: 40px
+  border-top-style: solid
+  border-top-width: 1px
+
+.progress
+  display: inline-block
+  margin-bottom: 0
+  width: 300px
+  height: 10px
+
+.content-tab-wrapper
+  border-style: solid
+  border-width: 1px
+  border-radius: 4px
+
+  .nav-tabs
+    > li > a
+      border-radius: 0
+      border: none !important
+      border-right-style: solid !important
+      border-right-width: 1px !important
+      outline: none
+      font-weight: bold
+      transition: background ease 500ms
+
+    li:not(:first-child) a
+      margin-left: -2px
+
+.tab-content
+  padding: 25px 10px
+
+.input-group-btn .icon-calendar
+  font-size: 18px
+
+thead.dark
+  th
+    height: 40px
+    line-height: 40px
+    font-weight: normal
+
+#footer
+  margin: 20px 0
+  padding-top: 20px
+  border-top-style: solid
+  border-top-width: 1px
+  text-align: center
+  font-size: 10px
+
+.menu-btn
+  display: none
+  cursor: pointer
+
+@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)
+  #logo
+    background-image: url('../images/logo@2x.png')
+    background-size: 200px 65px
diff --git a/interface/web/themes/default/assets/stylesheets/login.css b/interface/web/themes/default/assets/stylesheets/login.css
new file mode 100644
index 0000000..73379eb
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/login.css
@@ -0,0 +1,9 @@
+#content {
+	margin: 0 auto;
+	float: none;
+}
+
+.form-group input[type="checkbox"] {
+	width: auto;
+	height: auto;
+}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/pushy.css b/interface/web/themes/default/assets/stylesheets/pushy.css
new file mode 100644
index 0000000..6d55022
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/pushy.css
@@ -0,0 +1,98 @@
+/*! Pushy - v0.9.1 - 2013-9-16
+* Pushy is a responsive off-canvas navigation menu using CSS transforms & transitions.
+* https://github.com/christophery/pushy/
+* by Christopher Yee */
+
+/* Menu Appearance */
+
+.pushy{
+    position: fixed;
+    width: 200px;
+    height: 100%;
+    top: 0;
+    z-index: 9999;
+    background: #333332;
+    font-size: 0.9em;
+    font-weight: bold;
+    -webkit-box-shadow: inset -10px 0 6px -9px rgba(0, 0, 0, .7);
+    -moz-box-shadow: inset -10px 0 6px -9px rgba(0, 0, 0, .7);
+    box-shadow: inset -10px 0 6px -9px rgba(0, 0, 0, .7);
+    overflow: auto;
+    -webkit-overflow-scrolling: touch; /* enables momentum scrolling in iOS overflow elements */
+}
+
+.pushy a{
+    display: block;
+    color: #b3b3b1;
+    padding: 15px 30px;
+    border-bottom: 1px solid rgba(0, 0, 0, .1);
+    border-top: 1px solid rgba(255, 255, 255, .1);
+    text-decoration: none;
+}
+
+.pushy a:hover{
+    background: #00b4ff;
+    color: #FFF;
+}
+
+/* Menu Movement */
+
+.pushy-left{
+    -webkit-transform: translate3d(-200px,0,0);
+    -moz-transform: translate3d(-200px,0,0);
+    -ms-transform: translate3d(-200px,0,0);
+    -o-transform: translate3d(-200px,0,0);
+    transform: translate3d(-200px,0,0);
+}
+
+.pushy-open{
+    -webkit-transform: translate3d(0,0,0);
+    -moz-transform: translate3d(0,0,0);
+    -ms-transform: translate3d(0,0,0);
+    -o-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+}
+
+.container-push, .push-push{
+    -webkit-transform: translate3d(200px,0,0);
+    -moz-transform: translate3d(200px,0,0);
+    -ms-transform: translate3d(200px,0,0);
+    -o-transform: translate3d(200px,0,0);
+    transform: translate3d(200px,0,0);
+}
+
+/* Menu Transitions */
+
+.pushy, #container, .push{
+    -webkit-transition: -webkit-transform .2s cubic-bezier(.16, .68, .43, .99);
+    -moz-transition: -moz-transform .2s cubic-bezier(.16, .68, .43, .99);
+    -o-transition: -o-transform .2s cubic-bezier(.16, .68, .43, .99);
+    transition: transform .2s cubic-bezier(.16, .68, .43, .99);
+    /* improves performance issues on mobile*/
+    -webkit-backface-visibility: hidden;
+    -webkit-perspective: 1000;
+}
+
+/* Site Overlay */
+
+.site-overlay{
+    display: none;
+}
+
+.pushy-active .site-overlay{
+    display: block;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 200px;
+    z-index: 9999;
+}
+
+/* Example Media Query */
+
+@media screen and (max-width: 768px){
+    .pushy{
+        font-size: 1.0em;
+    }
+}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/pushy.min.css b/interface/web/themes/default/assets/stylesheets/pushy.min.css
new file mode 100644
index 0000000..dc2728b
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/pushy.min.css
@@ -0,0 +1,4 @@
+/*! Pushy - v0.9.1 - 2013-9-16
+* Pushy is a responsive off-canvas navigation menu using CSS transforms & transitions.
+* https://github.com/christophery/pushy/
+* by Christopher Yee */.pushy{position:fixed;width:200px;height:100%;top:0;z-index:9999;background:#333332;font-size:.9em;font-weight:bold;-webkit-box-shadow:inset -10px 0 6px -9px rgba(0,0,0,.7);-moz-box-shadow:inset -10px 0 6px -9px rgba(0,0,0,.7);box-shadow:inset -10px 0 6px -9px rgba(0,0,0,.7);overflow:auto;-webkit-overflow-scrolling:touch}.pushy a{display:block;color:#b3b3b1;padding:15px 30px;border-bottom:1px solid rgba(0,0,0,.1);border-top:1px solid rgba(255,255,255,.1);text-decoration:none}.pushy a:hover{background:#00b4ff;color:#FFF}.pushy-left{-webkit-transform:translate3d(-200px,0,0);-moz-transform:translate3d(-200px,0,0);-ms-transform:translate3d(-200px,0,0);-o-transform:translate3d(-200px,0,0);transform:translate3d(-200px,0,0)}.pushy-open{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.container-push,.push-push{-webkit-transform:translate3d(200px,0,0);-moz-transform:translate3d(200px,0,0);-ms-transform:translate3d(200px,0,0);-o-transform:translate3d(200px,0,0);transform:translate3d(200px,0,0)}.pushy,#container,.push{-webkit-transition:-webkit-transform .2s cubic-bezier(.16,.68,.43,.99);-moz-transition:-moz-transform .2s cubic-bezier(.16,.68,.43,.99);-o-transition:-o-transform .2s cubic-bezier(.16,.68,.43,.99);transition:transform .2s cubic-bezier(.16,.68,.43,.99);-webkit-backface-visibility:hidden;-webkit-perspective:1000}.site-overlay{display:none}.pushy-active .site-overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:200px;z-index:9999}@media screen and (max-width:768px){.pushy{font-size:1.0}}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/responsive.css b/interface/web/themes/default/assets/stylesheets/responsive.css
new file mode 100644
index 0000000..dd91918
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/responsive.css
@@ -0,0 +1,96 @@
+html, body {
+  height: 100%; }
+
+.pushy ul {
+  padding-left: 0;
+  list-style: none; }
+  .pushy ul.subnavi li {
+    font-size: 12px; }
+    .pushy ul.subnavi li a {
+      padding: 2px 10px;
+      font-weight: normal; }
+    .pushy ul.subnavi li a.subnav-header {
+      font-weight: bold; }
+.pushy a {
+  padding: 10px;
+  transition: color ease 500ms; }
+.pushy i {
+  font-size: 22px;
+  vertical-align: sub; }
+
+@media screen and (max-width: 970px) {
+  #main-wrapper, #content, #sidebar {
+    width: 100%; }
+
+  #inner-wrapper {
+    margin: 0 10px; }
+
+  #sidebar.news-sidebar {
+    margin-top: 0; } }
+@media screen and (max-width: 860px) {
+  #main-navigation {
+    display: block; }
+    #main-navigation a {
+      float: left;
+      display: block;
+      margin-top: -1px;
+      padding-top: 6px;
+      width: 60px;
+      height: 50px;
+      border-bottom: 0;
+      border-right-style: solid;
+      border-right-width: 1px;
+      border-bottom-style: solid;
+      border-bottom-width: 1px; }
+    #main-navigation .icon {
+      font-size: 16px; }
+    #main-navigation .title {
+      font-size: 10px; }
+    #main-navigation .btn {
+      border-radius: 0; }
+      #main-navigation .btn:first-child {
+        margin-left: -1px; } }
+@media screen and (max-width: 670px) {
+  #main-navigation, #sidebar {
+    display: none; }
+
+  .menu-btn {
+    display: block;
+    margin-top: 8px;
+    margin-right: 10px;
+    font-size: 30px; } }
+@media screen and (max-width: 600px) {
+  #headerbar {
+    float: left;
+    width: 100%; }
+
+  #searchform {
+    float: left;
+    margin-top: 0; }
+
+  #logout-button {
+    margin-top: 0;
+    margin-left: 0; }
+
+  #sidebar {
+    margin-top: 10px; }
+
+  .table, .table thead, .table tbody, .table tr, .table th, .table td {
+    display: block; }
+
+  .table caption {
+    width: 100%; }
+
+  .table thead tr {
+    position: absolute;
+    top: -9999px;
+    left: -9999px; }
+
+  .table tbody tr {
+    border-top: none; }
+
+  .progress {
+    width: 100%; } }
+@media screen and (max-width: 350px) {
+  #searchform input {
+    width: 130px; } }
diff --git a/interface/web/themes/default/assets/stylesheets/responsive.min.css b/interface/web/themes/default/assets/stylesheets/responsive.min.css
new file mode 100644
index 0000000..1ff506d
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/responsive.min.css
@@ -0,0 +1 @@
+html,body{height:100%}.pushy ul{padding-left:0;list-style:none}.pushy ul.subnavi li{font-size:12px}.pushy ul.subnavi li a{padding:2px 10px;font-weight:normal}.pushy ul.subnavi li a.subnav-header{font-weight:bold}.pushy a{padding:10px;transition:color ease 500ms}.pushy i{font-size:22px;vertical-align:sub}@media screen and (max-width:970px){#main-wrapper,#content,#sidebar{width:100%}#inner-wrapper{margin:0 10px}#sidebar.news-sidebar{margin-top:0}}@media screen and (max-width:860px){#main-navigation{display:block}#main-navigation a{float:left;display:block;margin-top:-1px;padding-top:6px;width:60px;height:50px;border-bottom:0;border-right-style:solid;border-right-width:1px;border-bottom-style:solid;border-bottom-width:1px}#main-navigation .icon{font-size:16px}#main-navigation .title{font-size:10px}#main-navigation .btn{border-radius:0}#main-navigation .btn:first-child{margin-left:-1px}}@media screen and (max-width:670px){#main-navigation,#sidebar{display:none}.menu-btn{display:block;margin-top:8px;margin-right:10px;font-size:30px}}@media screen and (max-width:600px){#headerbar{float:left;width:100%}#searchform{float:left;margin-top:0}#logout-button{margin-top:0;margin-left:0}#sidebar{margin-top:10px}.table,.table thead,.table tbody,.table tr,.table th,.table td{display:block}.table caption{width:100%}.table thead tr{position:absolute;top:-9999px;left:-9999px}.table tbody tr{border-top:0}.progress{width:100%}}@media screen and (max-width:350px){#searchform input{width:130px}}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/responsive.sass b/interface/web/themes/default/assets/stylesheets/responsive.sass
new file mode 100644
index 0000000..8959a83
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/responsive.sass
@@ -0,0 +1,108 @@
+html, body
+  height: 100%
+
+.pushy
+  ul
+    padding-left: 0
+    list-style: none
+
+    &.subnavi li
+      font-size: 12px
+
+      a
+        padding: 2px 10px
+
+  a
+    padding: 10px
+    transition: color ease 500ms
+
+  i
+    font-size: 22px
+    vertical-align: sub
+
+@media screen and (max-width: 970px)
+  #main-wrapper, #content, #sidebar
+    width: 100%
+
+  #inner-wrapper
+    margin: 0 10px
+
+  #sidebar.news-sidebar
+    margin-top: 0
+
+@media screen and (max-width: 860px)
+  #main-navigation
+    display: block
+
+    a
+      float: left
+      display: block
+      margin-top: -1px
+      padding-top: 6px
+      width: 60px
+      height: 50px
+      border-bottom: 0
+      border-right-style: solid
+      border-right-width: 1px
+      border-bottom-style: solid
+      border-bottom-width: 1px
+
+    .icon
+      font-size: 16px
+
+    .title
+      font-size: 10px
+
+    .btn
+      border-radius: 0
+
+      &:first-child
+        margin-left: -1px
+
+@media screen and (max-width: 670px)
+  #main-navigation, .subnavigation
+    display: none
+
+  .menu-btn
+    display: block
+    margin-top: 8px
+    margin-right: 10px
+    font-size: 30px
+
+@media screen and (max-width: 600px)
+  #headerbar
+    float: left
+    width: 100%
+
+  #searchform
+    float: left
+    margin-top: 0
+
+  #logout-button
+    margin-top: 0
+    margin-left: 0
+
+  #sidebar
+    margin-top: 10px
+
+  .table, .table thead, .table tbody, .table tr, .table th, .table td
+    display: block
+
+  .table caption
+    width: 100%
+
+  .table thead tr
+    position: absolute
+    top: -9999px
+    left: -9999px
+
+  .table tbody tr
+    border-top: none
+
+  .progress
+    width: 100%
+
+@media screen and (max-width: 350px)
+  #searchform
+    input
+      width: 130px
diff --git a/interface/web/themes/default/assets/stylesheets/select2-bootstrap.css b/interface/web/themes/default/assets/stylesheets/select2-bootstrap.css
new file mode 100644
index 0000000..3b83f0a
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/select2-bootstrap.css
@@ -0,0 +1,87 @@
+.form-control .select2-choice {
+    border: 0;
+    border-radius: 2px;
+}
+
+.form-control .select2-choice .select2-arrow {
+    border-radius: 0 2px 2px 0;   
+}
+
+.form-control.select2-container {
+    height: auto !important;
+    padding: 0;
+}
+
+.form-control.select2-container.select2-dropdown-open {
+    border-color: #5897FB;
+    border-radius: 3px 3px 0 0;
+}
+
+.form-control .select2-container.select2-dropdown-open .select2-choices {
+    border-radius: 3px 3px 0 0;
+}
+
+.form-control.select2-container .select2-choices {
+    border: 0 !important;
+    border-radius: 3px;
+}
+
+.control-group.warning .select2-container .select2-choice,
+.control-group.warning .select2-container .select2-choices,
+.control-group.warning .select2-container-active .select2-choice,
+.control-group.warning .select2-container-active .select2-choices,
+.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,
+.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,
+.control-group.warning .select2-container-multi.select2-container-active .select2-choices {
+    border: 1px solid #C09853 !important;
+}
+
+.control-group.warning .select2-container .select2-choice div {
+    border-left: 1px solid #C09853 !important;
+    background: #FCF8E3 !important;
+}
+
+.control-group.error .select2-container .select2-choice,
+.control-group.error .select2-container .select2-choices,
+.control-group.error .select2-container-active .select2-choice,
+.control-group.error .select2-container-active .select2-choices,
+.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,
+.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,
+.control-group.error .select2-container-multi.select2-container-active .select2-choices {
+    border: 1px solid #B94A48 !important;
+}
+
+.control-group.error .select2-container .select2-choice div {
+    border-left: 1px solid #B94A48 !important;
+    background: #F2DEDE !important;
+}
+
+.control-group.info .select2-container .select2-choice,
+.control-group.info .select2-container .select2-choices,
+.control-group.info .select2-container-active .select2-choice,
+.control-group.info .select2-container-active .select2-choices,
+.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,
+.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,
+.control-group.info .select2-container-multi.select2-container-active .select2-choices {
+    border: 1px solid #3A87AD !important;
+}
+
+.control-group.info .select2-container .select2-choice div {
+    border-left: 1px solid #3A87AD !important;
+    background: #D9EDF7 !important;
+}
+
+.control-group.success .select2-container .select2-choice,
+.control-group.success .select2-container .select2-choices,
+.control-group.success .select2-container-active .select2-choice,
+.control-group.success .select2-container-active .select2-choices,
+.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,
+.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,
+.control-group.success .select2-container-multi.select2-container-active .select2-choices {
+    border: 1px solid #468847 !important;
+}
+
+.control-group.success .select2-container .select2-choice div {
+    border-left: 1px solid #468847 !important;
+    background: #DFF0D8 !important;
+}
diff --git a/interface/web/themes/default/assets/stylesheets/select2-spinner.gif b/interface/web/themes/default/assets/stylesheets/select2-spinner.gif
new file mode 100644
index 0000000..5b33f7e
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/select2-spinner.gif
Binary files differ
diff --git a/interface/web/themes/default/assets/stylesheets/select2.css b/interface/web/themes/default/assets/stylesheets/select2.css
new file mode 100644
index 0000000..afa4e3f
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/select2.css
@@ -0,0 +1,704 @@
+/*
+Version: 3.5.2 Timestamp: Sat Nov  1 14:43:36 EDT 2014
+*/
+.select2-container {
+    margin: 0;
+    position: relative;
+    display: inline-block;
+    /* inline-block for ie7 */
+    zoom: 1;
+    *display: inline;
+    vertical-align: middle;
+}
+
+.select2-container,
+.select2-drop,
+.select2-search,
+.select2-search input {
+  /*
+    Force border-box so that % widths fit the parent
+    container without overlap because of margin/padding.
+    More Info : http://www.quirksmode.org/css/box.html
+  */
+  -webkit-box-sizing: border-box; /* webkit */
+     -moz-box-sizing: border-box; /* firefox */
+          box-sizing: border-box; /* css3 */
+}
+
+.select2-container .select2-choice {
+    display: block;
+    height: 26px;
+    padding: 0 0 0 8px;
+    overflow: hidden;
+    position: relative;
+
+    border: 1px solid #aaa;
+    white-space: nowrap;
+    line-height: 26px;
+    color: #444;
+    text-decoration: none;
+
+    border-radius: 4px;
+
+    background-clip: padding-box;
+
+    -webkit-touch-callout: none;
+      -webkit-user-select: none;
+         -moz-user-select: none;
+          -ms-user-select: none;
+              user-select: none;
+
+    background-color: #fff;
+    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
+    background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
+    background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
+    background-image: linear-gradient(to top, #eee 0%, #fff 50%);
+}
+
+html[dir="rtl"] .select2-container .select2-choice {
+    padding: 0 8px 0 0;
+}
+
+.select2-container.select2-drop-above .select2-choice {
+    border-bottom-color: #aaa;
+
+    border-radius: 0 0 4px 4px;
+
+    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
+    background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
+    background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
+    background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
+}
+
+.select2-container.select2-allowclear .select2-choice .select2-chosen {
+    margin-right: 42px;
+}
+
+.select2-container .select2-choice > .select2-chosen {
+    margin-right: 26px;
+    display: block;
+    overflow: hidden;
+
+    white-space: nowrap;
+
+    text-overflow: ellipsis;
+    float: none;
+    width: auto;
+}
+
+html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
+    margin-left: 26px;
+    margin-right: 0;
+}
+
+.select2-container .select2-choice abbr {
+    display: none;
+    width: 12px;
+    height: 12px;
+    position: absolute;
+    right: 24px;
+    top: 8px;
+
+    font-size: 1px;
+    text-decoration: none;
+
+    border: 0;
+    background: url('select2.png') right top no-repeat;
+    cursor: pointer;
+    outline: 0;
+}
+
+.select2-container.select2-allowclear .select2-choice abbr {
+    display: inline-block;
+}
+
+.select2-container .select2-choice abbr:hover {
+    background-position: right -11px;
+    cursor: pointer;
+}
+
+.select2-drop-mask {
+    border: 0;
+    margin: 0;
+    padding: 0;
+    position: fixed;
+    left: 0;
+    top: 0;
+    min-height: 100%;
+    min-width: 100%;
+    height: auto;
+    width: auto;
+    opacity: 0;
+    z-index: 9998;
+    /* styles required for IE to work */
+    background-color: #fff;
+    filter: alpha(opacity=0);
+}
+
+.select2-drop {
+    width: 100%;
+    margin-top: -1px;
+    position: absolute;
+    z-index: 9999;
+    top: 100%;
+
+    background: #fff;
+    color: #000;
+    border: 1px solid #aaa;
+    border-top: 0;
+
+    border-radius: 0 0 4px 4px;
+
+    -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
+            box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
+}
+
+.select2-drop.select2-drop-above {
+    margin-top: 1px;
+    border-top: 1px solid #aaa;
+    border-bottom: 0;
+
+    border-radius: 4px 4px 0 0;
+
+    -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
+            box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
+}
+
+.select2-drop-active {
+    border: 1px solid #5897fb;
+    border-top: none;
+}
+
+.select2-drop.select2-drop-above.select2-drop-active {
+    border-top: 1px solid #5897fb;
+}
+
+.select2-drop-auto-width {
+    border-top: 1px solid #aaa;
+    width: auto;
+}
+
+.select2-drop-auto-width .select2-search {
+    padding-top: 4px;
+}
+
+.select2-container .select2-choice .select2-arrow {
+    display: inline-block;
+    width: 18px;
+    height: 100%;
+    position: absolute;
+    right: 0;
+    top: 0;
+
+    border-left: 1px solid #aaa;
+    border-radius: 0 4px 4px 0;
+
+    background-clip: padding-box;
+
+    background: #ccc;
+    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
+    background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
+    background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
+    background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
+}
+
+html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
+    left: 0;
+    right: auto;
+
+    border-left: none;
+    border-right: 1px solid #aaa;
+    border-radius: 4px 0 0 4px;
+}
+
+.select2-container .select2-choice .select2-arrow b {
+    display: block;
+    width: 100%;
+    height: 100%;
+    background: url('select2.png') no-repeat 0 1px;
+}
+
+html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
+    background-position: 2px 1px;
+}
+
+.select2-search {
+    display: inline-block;
+    width: 100%;
+    min-height: 26px;
+    margin: 0;
+    padding-left: 4px;
+    padding-right: 4px;
+
+    position: relative;
+    z-index: 10000;
+
+    white-space: nowrap;
+}
+
+.select2-search input {
+    width: 100%;
+    height: auto !important;
+    min-height: 26px;
+    padding: 4px 20px 4px 5px;
+    margin: 0;
+
+    outline: 0;
+    font-family: sans-serif;
+    font-size: 1em;
+
+    border: 1px solid #aaa;
+    border-radius: 0;
+
+    -webkit-box-shadow: none;
+            box-shadow: none;
+
+    background: #fff url('select2.png') no-repeat 100% -22px;
+    background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
+    background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
+    background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
+    background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
+}
+
+html[dir="rtl"] .select2-search input {
+    padding: 4px 5px 4px 20px;
+
+    background: #fff url('select2.png') no-repeat -37px -22px;
+    background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
+    background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
+    background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
+    background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
+}
+
+.select2-drop.select2-drop-above .select2-search input {
+    margin-top: 4px;
+}
+
+.select2-search input.select2-active {
+    background: #fff url('select2-spinner.gif') no-repeat 100%;
+    background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
+    background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
+    background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
+    background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
+}
+
+.select2-container-active .select2-choice,
+.select2-container-active .select2-choices {
+    border: 1px solid #5897fb;
+    outline: none;
+
+    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
+            box-shadow: 0 0 5px rgba(0, 0, 0, .3);
+}
+
+.select2-dropdown-open .select2-choice {
+    border-bottom-color: transparent;
+    -webkit-box-shadow: 0 1px 0 #fff inset;
+            box-shadow: 0 1px 0 #fff inset;
+
+    border-bottom-left-radius: 0;
+    border-bottom-right-radius: 0;
+
+    background-color: #eee;
+    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
+    background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
+    background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
+    background-image: linear-gradient(to top, #fff 0%, #eee 50%);
+}
+
+.select2-dropdown-open.select2-drop-above .select2-choice,
+.select2-dropdown-open.select2-drop-above .select2-choices {
+    border: 1px solid #5897fb;
+    border-top-color: transparent;
+
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
+    background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
+    background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
+    background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
+}
+
+.select2-dropdown-open .select2-choice .select2-arrow {
+    background: transparent;
+    border-left: none;
+    filter: none;
+}
+html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {
+    border-right: none;
+}
+
+.select2-dropdown-open .select2-choice .select2-arrow b {
+    background-position: -18px 1px;
+}
+
+html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b {
+    background-position: -16px 1px;
+}
+
+.select2-hidden-accessible {
+    border: 0;
+    clip: rect(0 0 0 0);
+    height: 1px;
+    margin: -1px;
+    overflow: hidden;
+    padding: 0;
+    position: absolute;
+    width: 1px;
+}
+
+/* results */
+.select2-results {
+    max-height: 200px;
+    padding: 0 0 0 4px;
+    margin: 4px 4px 4px 0;
+    position: relative;
+    overflow-x: hidden;
+    overflow-y: auto;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+html[dir="rtl"] .select2-results {
+    padding: 0 4px 0 0;
+    margin: 4px 0 4px 4px;
+}
+
+.select2-results ul.select2-result-sub {
+    margin: 0;
+    padding-left: 0;
+}
+
+.select2-results li {
+    list-style: none;
+    display: list-item;
+    background-image: none;
+}
+
+.select2-results li.select2-result-with-children > .select2-result-label {
+    font-weight: bold;
+}
+
+.select2-results .select2-result-label {
+    padding: 3px 7px 4px;
+    margin: 0;
+    cursor: pointer;
+
+    min-height: 1em;
+
+    -webkit-touch-callout: none;
+      -webkit-user-select: none;
+         -moz-user-select: none;
+          -ms-user-select: none;
+              user-select: none;
+}
+
+.select2-results-dept-1 .select2-result-label { padding-left: 20px }
+.select2-results-dept-2 .select2-result-label { padding-left: 40px }
+.select2-results-dept-3 .select2-result-label { padding-left: 60px }
+.select2-results-dept-4 .select2-result-label { padding-left: 80px }
+.select2-results-dept-5 .select2-result-label { padding-left: 100px }
+.select2-results-dept-6 .select2-result-label { padding-left: 110px }
+.select2-results-dept-7 .select2-result-label { padding-left: 120px }
+
+.select2-results .select2-highlighted {
+    background: #3875d7;
+    color: #fff;
+}
+
+.select2-results li em {
+    background: #feffde;
+    font-style: normal;
+}
+
+.select2-results .select2-highlighted em {
+    background: transparent;
+}
+
+.select2-results .select2-highlighted ul {
+    background: #fff;
+    color: #000;
+}
+
+.select2-results .select2-no-results,
+.select2-results .select2-searching,
+.select2-results .select2-ajax-error,
+.select2-results .select2-selection-limit {
+    background: #f4f4f4;
+    display: list-item;
+    padding-left: 5px;
+}
+
+/*
+disabled look for disabled choices in the results dropdown
+*/
+.select2-results .select2-disabled.select2-highlighted {
+    color: #666;
+    background: #f4f4f4;
+    display: list-item;
+    cursor: default;
+}
+.select2-results .select2-disabled {
+  background: #f4f4f4;
+  display: none;
+  cursor: default;
+}
+
+.select2-results .select2-selected {
+    display: none;
+}
+
+.select2-more-results.select2-active {
+    background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
+}
+
+.select2-results .select2-ajax-error {
+    background: rgba(255, 50, 50, .2);
+}
+
+.select2-more-results {
+    background: #f4f4f4;
+    display: list-item;
+}
+
+/* disabled styles */
+
+.select2-container.select2-container-disabled .select2-choice {
+    background-color: #f4f4f4;
+    background-image: none;
+    border: 1px solid #ddd;
+    cursor: default;
+}
+
+.select2-container.select2-container-disabled .select2-choice .select2-arrow {
+    background-color: #f4f4f4;
+    background-image: none;
+    border-left: 0;
+}
+
+.select2-container.select2-container-disabled .select2-choice abbr {
+    display: none;
+}
+
+
+/* multiselect */
+
+.select2-container-multi .select2-choices {
+    height: auto !important;
+    height: 1%;
+    margin: 0;
+    padding: 0 5px 0 0;
+    position: relative;
+
+    border: 1px solid #aaa;
+    cursor: text;
+    overflow: hidden;
+
+    background-color: #fff;
+    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
+    background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
+    background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
+    background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
+}
+
+html[dir="rtl"] .select2-container-multi .select2-choices {
+    padding: 0 0 0 5px;
+}
+
+.select2-locked {
+  padding: 3px 5px 3px 5px !important;
+}
+
+.select2-container-multi .select2-choices {
+    min-height: 26px;
+}
+
+.select2-container-multi.select2-container-active .select2-choices {
+    border: 1px solid #5897fb;
+    outline: none;
+
+    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
+            box-shadow: 0 0 5px rgba(0, 0, 0, .3);
+}
+.select2-container-multi .select2-choices li {
+    float: left;
+    list-style: none;
+}
+html[dir="rtl"] .select2-container-multi .select2-choices li
+{
+    float: right;
+}
+.select2-container-multi .select2-choices .select2-search-field {
+    margin: 0;
+    padding: 0;
+    white-space: nowrap;
+}
+
+.select2-container-multi .select2-choices .select2-search-field input {
+    padding: 5px;
+    margin: 1px 0;
+
+    font-family: sans-serif;
+    font-size: 100%;
+    color: #666;
+    outline: 0;
+    border: 0;
+    -webkit-box-shadow: none;
+            box-shadow: none;
+    background: transparent !important;
+}
+
+.select2-container-multi .select2-choices .select2-search-field input.select2-active {
+    background: #fff url('select2-spinner.gif') no-repeat 100% !important;
+}
+
+.select2-default {
+    color: #999 !important;
+}
+
+.select2-container-multi .select2-choices .select2-search-choice {
+    padding: 3px 5px 3px 18px;
+    margin: 3px 0 3px 5px;
+    position: relative;
+
+    line-height: 13px;
+    color: #333;
+    cursor: default;
+    border: 1px solid #aaaaaa;
+
+    border-radius: 3px;
+
+    -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
+            box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
+
+    background-clip: padding-box;
+
+    -webkit-touch-callout: none;
+      -webkit-user-select: none;
+         -moz-user-select: none;
+          -ms-user-select: none;
+              user-select: none;
+
+    background-color: #e4e4e4;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
+    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
+    background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
+    background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
+    background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
+}
+html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
+{
+    margin: 3px 5px 3px 0;
+    padding: 3px 18px 3px 5px;
+}
+.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
+    cursor: default;
+}
+.select2-container-multi .select2-choices .select2-search-choice-focus {
+    background: #d4d4d4;
+}
+
+.select2-search-choice-close {
+    display: block;
+    width: 12px;
+    height: 13px;
+    position: absolute;
+    right: 3px;
+    top: 4px;
+
+    font-size: 1px;
+    outline: none;
+    background: url('select2.png') right top no-repeat;
+}
+html[dir="rtl"] .select2-search-choice-close {
+    right: auto;
+    left: 3px;
+}
+
+.select2-container-multi .select2-search-choice-close {
+    left: 3px;
+}
+
+html[dir="rtl"] .select2-container-multi .select2-search-choice-close {
+    left: auto;
+    right: 2px;
+}
+
+.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
+  background-position: right -11px;
+}
+.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
+    background-position: right -11px;
+}
+
+/* disabled styles */
+.select2-container-multi.select2-container-disabled .select2-choices {
+    background-color: #f4f4f4;
+    background-image: none;
+    border: 1px solid #ddd;
+    cursor: default;
+}
+
+.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
+    padding: 3px 5px 3px 5px;
+    border: 1px solid #ddd;
+    background-image: none;
+    background-color: #f4f4f4;
+}
+
+.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {    display: none;
+    background: none;
+}
+/* end multiselect */
+
+
+.select2-result-selectable .select2-match,
+.select2-result-unselectable .select2-match {
+    text-decoration: underline;
+}
+
+.select2-offscreen, .select2-offscreen:focus {
+    clip: rect(0 0 0 0) !important;
+    width: 1px !important;
+    height: 1px !important;
+    border: 0 !important;
+    margin: 0 !important;
+    padding: 0 !important;
+    overflow: hidden !important;
+    position: absolute !important;
+    outline: 0 !important;
+    left: 0px !important;
+    top: 0px !important;
+}
+
+.select2-display-none {
+    display: none;
+}
+
+.select2-measure-scrollbar {
+    position: absolute;
+    top: -10000px;
+    left: -10000px;
+    width: 100px;
+    height: 100px;
+    overflow: scroll;
+}
+
+/* Retina-ize icons */
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx)  {
+    .select2-search input,
+    .select2-search-choice-close,
+    .select2-container .select2-choice abbr,
+    .select2-container .select2-choice .select2-arrow b {
+        background-image: url('select2x2.png') !important;
+        background-repeat: no-repeat !important;
+        background-size: 60px 40px !important;
+    }
+
+    .select2-search input {
+        background-position: 100% -21px !important;
+    }
+}
diff --git a/interface/web/themes/default/assets/stylesheets/select2.png b/interface/web/themes/default/assets/stylesheets/select2.png
new file mode 100644
index 0000000..1d804ff
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/select2.png
Binary files differ
diff --git a/interface/web/themes/default/assets/stylesheets/themes/dark/colors.sass b/interface/web/themes/default/assets/stylesheets/themes/dark/colors.sass
new file mode 100644
index 0000000..1fffeb6
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/dark/colors.sass
@@ -0,0 +1,33 @@
+$color-black: rgb(0, 0, 0)
+$color-black-transparent: rgba(0, 0, 0, .2)
+$color-background-blueish: rgb(16, 26, 34)
+$color-font-main: rgb(223, 223, 223)
+$color-gradient-grey-start: rgb(255, 255, 255)
+$color-gradient-grey-stop: rgb(185, 187, 189)
+$color-gradient-green-start: rgb(123, 204, 137)
+$color-gradient-green-stop: rgb(106, 185, 119)
+$color-green-border: rgb(90, 171, 104)
+$color-green-border-hover: rgb(80, 155, 90)
+$color-green: rgb(60, 179, 85)
+$color-grey: rgb(135, 135, 135)
+$color-grey-hover: rgb(107, 107, 107)
+$color-grey-bg: rgb(16, 26, 34)
+$color-grey-border: rgb(211, 215, 218)
+$color-grey-light: rgb(36, 59, 85)
+$color-red: rgb(199, 15, 25)
+$color-red-hover: lighten($color-red, 5%)
+$color-red-dark: darken($color-red, 10%)
+$color-red-dark-hover: darken($color-red-dark, 5%)
+$color-white: rgb(16, 26, 34)
+$color-notification-info-background: rgb(0, 49, 61)
+$color-notification-info-border: rgb(206, 221, 237)
+$color-notification-info-font: rgb(249, 241, 201)
+$color-notification-info-link: rgb(232, 217, 161)
+$color-notification-info-link-hover: lighten($color-notification-info-link, 10%)
+$color-notification-danger-background: rgb(247, 223, 223)
+$color-notification-danger-border: rgb(220, 178, 179)
+$color-notification-danger-font: rgb(175, 121, 125)
+$color-input-focus: $color-notification-info-font
+$color-table-hover: $color-notification-info-background
+$color-thead-begin: rgb(43, 85, 109)
+$color-thead-end: rgb(28, 57, 78)
diff --git a/interface/web/themes/default/assets/stylesheets/themes/dark/mixins.sass b/interface/web/themes/default/assets/stylesheets/themes/dark/mixins.sass
new file mode 100644
index 0000000..2c471e5
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/dark/mixins.sass
@@ -0,0 +1,13 @@
+@import "colors"
+
+@mixin background-gradient
+  background: linear-gradient(to bottom, $color-gradient-grey-start, $color-gradient-grey-stop)
+
+  &:hover
+    background: linear-gradient(to bottom, darken($color-gradient-grey-start, 5%), darken($color-gradient-grey-stop, 5%))
+
+@mixin background-gradient-green
+  background: linear-gradient(to bottom, $color-gradient-green-start, $color-gradient-green-stop)
+
+  &:hover
+    background: linear-gradient(to bottom, darken($color-gradient-green-start, 5%), darken($color-gradient-green-stop, 5%))
diff --git a/interface/web/themes/default/assets/stylesheets/themes/dark/theme.css b/interface/web/themes/default/assets/stylesheets/themes/dark/theme.css
new file mode 100644
index 0000000..47a0285
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/dark/theme.css
@@ -0,0 +1,169 @@
+html, body {
+  -webkit-tap-highlight-color: black; }
+
+body {
+  background: #101a22;
+  color: #dfdfdf; }
+
+.green {
+  color: #3cb355; }
+
+.form-control:focus {
+  border-color: #f9f1c9; }
+
+.formbutton-default {
+  background: linear-gradient(to bottom, white, #b9bbbd);
+  color: #101a22; }
+  .formbutton-default:hover {
+    background: linear-gradient(to bottom, #f2f2f2, #acaeb1); }
+
+.formbutton-success {
+  background: linear-gradient(to bottom, #7bcc89, #6ab977);
+  border-color: #5aab68;
+  border-bottom-color: #5aab68;
+  color: #101a22; }
+  .formbutton-success:hover {
+    background: linear-gradient(to bottom, #69c579, #59b167); }
+  .formbutton-success:hover, .formbutton-success.active {
+    border-bottom-color: #509b5a;
+    color: #101a22; }
+
+.formbutton-danger {
+  background: linear-gradient(to bottom, #c70f19, #b60008);
+  border-color: #980b13;
+  border-bottom-color: #980b13;
+  color: white; }
+  .formbutton-danger:hover {
+    background: linear-gradient(to bottom, #c30b15, #b20004); }
+  .formbutton-danger:hover, .formbutton-danger.active {
+    border-bottom-color: #8f0209;
+    color: white; }
+
+#searchform button {
+  background: linear-gradient(to bottom, white, #b9bbbd); }
+  #searchform button:hover {
+    background: linear-gradient(to bottom, #f2f2f2, #acaeb1); }
+
+#logout-button {
+  background: #c70f19;
+  border-bottom-color: #980b13; }
+  #logout-button:hover {
+    background: #df111c;
+    border-bottom-color: #800a10; }
+
+#main-navigation a {
+  background: linear-gradient(to bottom, white, #b9bbbd);
+  border-bottom-color: #878787; }
+  #main-navigation a:hover {
+    background: linear-gradient(to bottom, #f2f2f2, #acaeb1); }
+  #main-navigation a:hover, #main-navigation a.active {
+    border-bottom-color: #6b6b6b;
+    color: #c70f19; }
+#main-navigation .icon {
+  text-shadow: 1px 1px 1px #101a22; }
+
+#sidebar {
+  border-color: #cedded;
+  background: #101a22; }
+  #sidebar header {
+    background: #00313d;
+    color: #f9f1c9; }
+  #sidebar li {
+    border-top-color: #cedded; }
+  #sidebar a {
+    color: inherit; }
+    #sidebar a:hover {
+      color: #f2eaca; }
+
+.page-header {
+  border-color: #878787; }
+
+.alert-notification {
+  background: #00313d;
+  border-color: #cedded;
+  color: #f9f1c9; }
+  .alert-notification a {
+    color: #e8d9a1; }
+    .alert-notification a:hover {
+      color: #f2eaca; }
+
+.alert-danger {
+  background: #f7dfdf;
+  border-color: #dcb2b3;
+  color: #af797d; }
+
+.modules li {
+  background: #101a22;
+  border-color: #d3d7da;
+  box-shadow: inset 1px 3px 8px -5px rgba(0, 0, 0, 0.2); }
+.modules .button {
+  background: linear-gradient(to bottom, white, #b9bbbd);
+  border-bottom-color: #878787; }
+  .modules .button:hover {
+    background: linear-gradient(to bottom, #f2f2f2, #acaeb1); }
+  .modules .button:hover, .modules .button.active {
+    border-bottom-color: #6b6b6b; }
+.modules a {
+  color: inherit; }
+
+.table-wrapper {
+  background: #101a22;
+  border-color: #d3d7da; }
+
+.table caption {
+  border-bottom-color: #d3d7da; }
+.table tbody tr {
+  border-top-color: #d3d7da; }
+  .table tbody tr:nth-child(odd) {
+    background: #101a22; }
+  .table tbody tr:nth-child(even) {
+    background: #101a22; }
+  .table tbody tr:hover {
+    background: #00313d; }
+
+.tfooter {
+  border-top-color: #d3d7da; }
+
+.content-tab-wrapper {
+  background: #101a22;
+  border-color: #d3d7da; }
+  .content-tab-wrapper .nav-tabs {
+    background: #243b55;
+    box-shadow: inset -1px -2px 6px -5px rgba(0, 0, 0, 0.2); }
+    .content-tab-wrapper .nav-tabs > li > a {
+      border-right-color: #d3d7da !important;
+      color: inherit; }
+      .content-tab-wrapper .nav-tabs > li > a:hover {
+        background: #1c2f43; }
+    .content-tab-wrapper .nav-tabs .active a {
+      background: #101a22 !important; }
+      .content-tab-wrapper .nav-tabs .active a:focus {
+        color: inherit; }
+
+thead.dark {
+  background: linear-gradient(to bottom, #2b556d, #1c394e) !important;
+  color: #dfdfdf; }
+
+thead.dark tr:nth-child(2) {
+  background: linear-gradient(to bottom, white, #b9bbbd) !important; }
+
+#footer {
+  border-top-color: #d3d7da; }
+
+.pushy {
+  background: #101a22; }
+  .pushy ul.subnavi li a:hover {
+    background: none; }
+  .pushy a:hover, .pushy a.active {
+    background: #101a22;
+    color: inherit; }
+
+@media screen and (max-width: 860px) {
+  #main-navigation a {
+    border-right-color: #d3d7da;
+    border-bottom-color: #d3d7da; }
+    #main-navigation a.active {
+      border-right-color: #d3d7da;
+      border-bottom-color: #d3d7da; }
+    #main-navigation a:hover {
+      border-bottom-color: #d3d7da; } }
diff --git a/interface/web/themes/default/assets/stylesheets/themes/dark/theme.min.css b/interface/web/themes/default/assets/stylesheets/themes/dark/theme.min.css
new file mode 100644
index 0000000..4fbe95a
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/dark/theme.min.css
@@ -0,0 +1 @@
+html,body{-webkit-tap-highlight-color:black}body{background:#101a22;color:#dfdfdf}.green{color:#3cb355}.form-control:focus{border-color:#f9f1c9}.formbutton-default{background:linear-gradient(to bottom,white,#b9bbbd);color:#101a22}.formbutton-default:hover{background:linear-gradient(to bottom,#f2f2f2,#acaeb1)}.formbutton-success{background:linear-gradient(to bottom,#7bcc89,#6ab977);border-color:#5aab68;border-bottom-color:#5aab68;color:#101a22}.formbutton-success:hover{background:linear-gradient(to bottom,#69c579,#59b167)}.formbutton-success:hover,.formbutton-success.active{border-bottom-color:#509b5a;color:#101a22}.formbutton-danger{background:linear-gradient(to bottom,#c70f19,#b60008);border-color:#980b13;border-bottom-color:#980b13;color:white}.formbutton-danger:hover{background:linear-gradient(to bottom,#c30b15,#b20004)}.formbutton-danger:hover,.formbutton-danger.active{border-bottom-color:#8f0209;color:white}#searchform button{background:linear-gradient(to bottom,white,#b9bbbd)}#searchform button:hover{background:linear-gradient(to bottom,#f2f2f2,#acaeb1)}#logout-button{background:#c70f19;border-bottom-color:#980b13}#logout-button:hover{background:#df111c;border-bottom-color:#800a10}#main-navigation a{background:linear-gradient(to bottom,white,#b9bbbd);border-bottom-color:#878787}#main-navigation a:hover{background:linear-gradient(to bottom,#f2f2f2,#acaeb1)}#main-navigation a:hover,#main-navigation a.active{border-bottom-color:#6b6b6b;color:#c70f19}#main-navigation .icon{text-shadow:1px 1px 1px #101a22}#sidebar{border-color:#cedded;background:#101a22}#sidebar header{background:#00313d;color:#f9f1c9}#sidebar li{border-top-color:#cedded}#sidebar a{color:inherit}#sidebar a:hover{color:#f2eaca}.page-header{border-color:#878787}.alert-notification{background:#00313d;border-color:#cedded;color:#f9f1c9}.alert-notification a{color:#e8d9a1}.alert-notification a:hover{color:#f2eaca}.alert-danger{background:#f7dfdf;border-color:#dcb2b3;color:#af797d}.modules li{background:#101a22;border-color:#d3d7da;box-shadow:inset 1px 3px 8px -5px rgba(0,0,0,0.2)}.modules .button{background:linear-gradient(to bottom,white,#b9bbbd);border-bottom-color:#878787}.modules .button:hover{background:linear-gradient(to bottom,#f2f2f2,#acaeb1)}.modules .button:hover,.modules .button.active{border-bottom-color:#6b6b6b}.modules a{color:inherit}.table-wrapper{background:#101a22;border-color:#d3d7da}.table caption{border-bottom-color:#d3d7da}.table tbody tr{border-top-color:#d3d7da}.table tbody tr:nth-child(odd){background:#101a22}.table tbody tr:nth-child(even){background:#101a22}.table tbody tr:hover{background:#00313d}.tfooter{border-top-color:#d3d7da}.content-tab-wrapper{background:#101a22;border-color:#d3d7da}.content-tab-wrapper .nav-tabs{background:#243b55;box-shadow:inset -1px -2px 6px -5px rgba(0,0,0,0.2)}.content-tab-wrapper .nav-tabs>li>a{border-right-color:#d3d7da!important;color:inherit}.content-tab-wrapper .nav-tabs>li>a:hover{background:#1c2f43}.content-tab-wrapper .nav-tabs .active a{background:#101a22!important}.content-tab-wrapper .nav-tabs .active a:focus{color:inherit}thead.dark{background:linear-gradient(to bottom,#2b556d,#1c394e)!important;color:#dfdfdf}thead.dark tr:nth-child(2){background:linear-gradient(to bottom,white,#b9bbbd)!important}#footer{border-top-color:#d3d7da}.pushy{background:#101a22}.pushy ul.subnavi li a:hover{background:0}.pushy a:hover,.pushy a.active{background:#101a22;color:inherit}@media screen and (max-width:860px){#main-navigation a{border-right-color:#d3d7da;border-bottom-color:#d3d7da}#main-navigation a.active{border-right-color:#d3d7da;border-bottom-color:#d3d7da}#main-navigation a:hover{border-bottom-color:#d3d7da}}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/themes/dark/theme.sass b/interface/web/themes/default/assets/stylesheets/themes/dark/theme.sass
new file mode 100644
index 0000000..f06e91c
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/dark/theme.sass
@@ -0,0 +1,185 @@
+@import "colors"
+@import "mixins"
+
+html, body
+  -webkit-tap-highlight-color: $color-black
+
+body
+  background: $color-background-blueish
+  color: $color-font-main
+
+.green
+  color: $color-green
+
+.form-control:focus
+  border-color: $color-input-focus
+
+.formbutton-default
+  @include background-gradient
+  color: $color-background-blueish
+
+.formbutton-success
+  @include background-gradient-green
+  border-color: $color-green-border
+  border-bottom-color: $color-green-border
+  color: $color-white
+
+  &:hover, &.active
+    border-bottom-color: $color-green-border-hover
+    color: $color-white
+
+#searchform
+  button
+    @include background-gradient
+
+#logout-button
+  background: $color-red
+  border-bottom-color: $color-red-dark
+
+  &:hover
+    background: $color-red-hover
+    border-bottom-color: $color-red-dark-hover
+
+#main-navigation
+  a
+    @include background-gradient
+    border-bottom-color: $color-grey
+
+    &:hover, &.active
+      border-bottom-color: $color-grey-hover
+      color: $color-red
+
+  .icon
+    text-shadow: 1px 1px 1px $color-white
+
+#sidebar
+  border-color: $color-notification-info-border
+  background: $color-white
+
+  header
+    background: $color-notification-info-background
+    color: $color-notification-info-font
+
+  li
+    border-top-color: $color-notification-info-border
+
+  a
+    color: inherit
+
+    &:hover
+      color: $color-notification-info-link-hover
+
+.page-header
+  border-color: $color-grey
+
+
+.alert-notification
+  background: $color-notification-info-background
+  border-color: $color-notification-info-border
+  color: $color-notification-info-font
+
+  a
+    color: $color-notification-info-link
+
+    &:hover
+      color: $color-notification-info-link-hover
+
+.alert-danger
+  background: $color-notification-danger-background
+  border-color: $color-notification-danger-border
+  color: $color-notification-danger-font
+
+.modules
+  li
+    background: $color-grey-bg
+    border-color: $color-grey-border
+    box-shadow: inset 1px 3px 8px -5px $color-black-transparent
+
+  .button
+    @include background-gradient
+    border-bottom-color: $color-grey
+
+    &:hover, &.active
+      border-bottom-color: $color-grey-hover
+
+  a
+    color: inherit
+
+.table-wrapper
+  background: $color-white
+  border-color: $color-grey-border
+
+.table
+  caption
+    border-bottom-color: $color-grey-border
+
+  tbody
+    tr
+      border-top-color: $color-grey-border
+
+      &:nth-child(odd)
+        background: $color-background-blueish
+
+      &:nth-child(even)
+        background: $color-white
+
+      &:hover
+        background: $color-table-hover
+
+.tfooter
+  border-top-color: $color-grey-border
+
+.content-tab-wrapper
+  background: $color-white
+  border-color: $color-grey-border
+
+  .nav-tabs
+    background: $color-grey-light
+    box-shadow: inset -1px -2px 6px -5px $color-black-transparent
+
+    > li > a
+      border-right-color: $color-grey-border !important
+      color: inherit
+
+      &:hover
+        background: darken($color-grey-light, 5%)
+
+    .active a
+      background: $color-white !important
+
+      &:focus
+        color: inherit
+
+thead.dark
+  background: linear-gradient(to bottom, $color-thead-begin, $color-thead-end) !important
+  color: $color-font-main
+
+#footer
+  border-top-color: $color-grey-border
+
+.pushy
+  background: $color-background-blueish
+
+  ul
+    &.subnavi li
+      a
+        &:hover
+          background: none
+
+  a
+    &:hover, &.active
+      background: $color-background-blueish
+      color: inherit
+
+@media screen and (max-width: 860px)
+  #main-navigation
+    a
+      border-right-color: $color-grey-border
+      border-bottom-color: $color-grey-border
+
+      &.active
+        border-right-color: $color-grey-border
+        border-bottom-color: $color-grey-border
+
+      &:hover
+        border-bottom-color: $color-grey-border
diff --git a/interface/web/themes/default/assets/stylesheets/themes/default/colors.sass b/interface/web/themes/default/assets/stylesheets/themes/default/colors.sass
new file mode 100644
index 0000000..f1952f0
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/default/colors.sass
@@ -0,0 +1,33 @@
+$color-black: rgb(0, 0, 0)
+$color-black-transparent: rgba(0, 0, 0, .2)
+$color-background-blueish: rgb(242, 245, 247)
+$color-font-main: rgb(60, 68, 75)
+$color-gradient-grey-start: rgb(255, 255, 255)
+$color-gradient-grey-stop: rgb(238, 240, 242)
+$color-gradient-green-start: rgb(123, 204, 137)
+$color-gradient-green-stop: rgb(106, 185, 119)
+$color-green-border: rgb(90, 171, 104)
+$color-green-border-hover: rgb(80, 155, 90)
+$color-green: rgb(60, 179, 85)
+$color-grey: rgb(204, 204, 204)
+$color-grey-hover: rgb(173, 173, 173)
+$color-grey-bg: rgb(225, 228, 233)
+$color-grey-border: rgb(211, 215, 218)
+$color-grey-light: $color-gradient-grey-stop
+$color-red: rgb(199, 15, 25)
+$color-red-hover: lighten($color-red, 5%)
+$color-red-dark: darken($color-red, 10%)
+$color-red-dark-hover: darken($color-red-dark, 5%)
+$color-white: rgb(255, 255, 255)
+$color-notification-info-background: rgb(223, 234, 246)
+$color-notification-info-border: rgb(206, 221, 237)
+$color-notification-info-font: rgb(105, 130, 150)
+$color-notification-info-link: rgb(35, 113, 202)
+$color-notification-info-link-hover: lighten($color-notification-info-link, 10%)
+$color-notification-danger-background: rgb(247, 223, 223)
+$color-notification-danger-border: rgb(220, 178, 179)
+$color-notification-danger-font: rgb(149, 104, 107)
+$color-input-focus: $color-notification-info-font
+$color-table-hover: $color-notification-info-background
+$color-thead-begin: rgb(87, 100, 109)
+$color-thead-end: rgb(62, 71, 78)
diff --git a/interface/web/themes/default/assets/stylesheets/themes/default/mixins.sass b/interface/web/themes/default/assets/stylesheets/themes/default/mixins.sass
new file mode 100644
index 0000000..02dcdf6
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/default/mixins.sass
@@ -0,0 +1,13 @@
+@import "colors"
+
+@mixin background-gradient
+  background: linear-gradient(to bottom, $color-gradient-grey-start, $color-gradient-grey-stop)
+
+  &:hover
+    background: linear-gradient(to bottom, darken($color-gradient-grey-start, 2%), darken($color-gradient-grey-stop, 2%))
+
+@mixin background-gradient-green
+  background: linear-gradient(to bottom, $color-gradient-green-start, $color-gradient-green-stop)
+
+  &:hover
+    background: linear-gradient(to bottom, darken($color-gradient-green-start, 2%), darken($color-gradient-green-stop, 2%))
diff --git a/interface/web/themes/default/assets/stylesheets/themes/default/theme.css b/interface/web/themes/default/assets/stylesheets/themes/default/theme.css
new file mode 100644
index 0000000..4ddf824
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/default/theme.css
@@ -0,0 +1,172 @@
+html, body {
+  -webkit-tap-highlight-color: black; }
+
+body {
+  background: #f2f5f7;
+  color: #3c444b; }
+
+.green {
+  color: #3cb355; }
+
+.form-control:focus {
+  border-color: #698296; }
+
+.formbutton-default {
+  background: linear-gradient(to bottom, white, #eef0f2);
+  border-bottom-color: #cccccc;
+  color: #3c444b; }
+  .formbutton-default:hover {
+    background: linear-gradient(to bottom, #fafafa, #e8ebee); }
+  .formbutton-default:hover, .formbutton-default.active {
+    border-bottom-color: #adadad; }
+
+.formbutton-success {
+  background: linear-gradient(to bottom, #7bcc89, #6ab977);
+  border-color: #5aab68;
+  border-bottom-color: #5aab68;
+  color: white; }
+  .formbutton-success:hover {
+    background: linear-gradient(to bottom, #74c982, #63b671); }
+  .formbutton-success:hover, .formbutton-success.active {
+    border-bottom-color: #509b5a;
+    color: white; }
+
+.formbutton-danger {
+  background: linear-gradient(to bottom, #c70f19, #b60008);
+  border-color: #980b13;
+  border-bottom-color: #980b13;
+  color: white; }
+  .formbutton-danger:hover {
+    background: linear-gradient(to bottom, #c30b15, #b20004); }
+  .formbutton-danger:hover, .formbutton-danger.active {
+    border-bottom-color: #8f0209;
+    color: white; }
+
+#searchform button {
+  background: linear-gradient(to bottom, white, #eef0f2); }
+  #searchform button:hover {
+    background: linear-gradient(to bottom, #fafafa, #e8ebee); }
+
+#logout-button {
+  background: #c70f19;
+  border-bottom-color: #980b13; }
+  #logout-button:hover {
+    background: #df111c;
+    border-bottom-color: #800a10; }
+
+#main-navigation a {
+  background: linear-gradient(to bottom, white, #eef0f2);
+  border-bottom-color: #cccccc; }
+  #main-navigation a:hover {
+    background: linear-gradient(to bottom, #fafafa, #e8ebee); }
+  #main-navigation a:hover, #main-navigation a.active {
+    border-bottom-color: #adadad;
+    color: #c70f19; }
+#main-navigation .icon {
+  text-shadow: 1px 1px 1px white; }
+
+#sidebar {
+  border-color: #cedded;
+  background: white; }
+  #sidebar header {
+    background: #dfeaf6;
+    color: #698296; }
+  #sidebar li {
+    border-top-color: #cedded; }
+  #sidebar a {
+    color: inherit; }
+    #sidebar a:hover {
+      color: #428bde; }
+
+.page-header {
+  border-color: #cccccc; }
+
+.alert-notification {
+  background: #dfeaf6;
+  border-color: #cedded;
+  color: #698296; }
+  .alert-notification a {
+    color: #2371ca; }
+    .alert-notification a:hover {
+      color: #428bde; }
+
+.alert-danger {
+  background: #f7dfdf;
+  border-color: #dcb2b3;
+  color: #95686b; }
+
+.modules li {
+  background: #e1e4e9;
+  border-color: #d3d7da;
+  box-shadow: inset 1px 3px 8px -5px rgba(0, 0, 0, 0.2); }
+.modules .button {
+  background: linear-gradient(to bottom, white, #eef0f2);
+  border-bottom-color: #cccccc; }
+  .modules .button:hover {
+    background: linear-gradient(to bottom, #fafafa, #e8ebee); }
+  .modules .button:hover, .modules .button.active {
+    border-bottom-color: #adadad; }
+.modules a {
+  color: inherit; }
+
+.table-wrapper {
+  background: white;
+  border-color: #d3d7da; }
+
+.table caption {
+  border-bottom-color: #d3d7da; }
+.table tbody tr {
+  border-top-color: #d3d7da; }
+  .table tbody tr:nth-child(odd) {
+    background: #f2f5f7; }
+  .table tbody tr:nth-child(even) {
+    background: white; }
+  .table tbody tr:hover {
+    background: #dfeaf6; }
+
+.tfooter {
+  background: linear-gradient(to bottom, white, #eef0f2);
+  border-top-color: #d3d7da; }
+
+.content-tab-wrapper {
+  background: white;
+  border-color: #d3d7da; }
+  .content-tab-wrapper .nav-tabs {
+    background: #eef0f2;
+    box-shadow: inset -1px -2px 6px -5px rgba(0, 0, 0, 0.2); }
+    .content-tab-wrapper .nav-tabs > li > a {
+      border-right-color: #d3d7da !important;
+      color: inherit; }
+      .content-tab-wrapper .nav-tabs > li > a:hover {
+        background: #e0e3e7; }
+    .content-tab-wrapper .nav-tabs .active a {
+      background: white !important; }
+
+thead.dark {
+  background: linear-gradient(to bottom, #57646d, #3e474e) !important;
+  color: white; }
+
+thead.dark tr:nth-child(2) {
+  background: linear-gradient(to bottom, #FAFAFA, #E8EBEE) !important; }
+
+
+#footer {
+  border-top-color: #d3d7da; }
+
+.pushy {
+  background: #f2f5f7; }
+  .pushy ul.subnavi li a:hover {
+    background: none; }
+  .pushy a:hover, .pushy a.active {
+    background: #f2f5f7;
+    color: inherit; }
+
+@media screen and (max-width: 860px) {
+  #main-navigation a {
+    border-right-color: #d3d7da;
+    border-bottom-color: #d3d7da; }
+    #main-navigation a.active {
+      border-right-color: #d3d7da;
+      border-bottom-color: #d3d7da; }
+    #main-navigation a:hover {
+      border-bottom-color: #d3d7da; } }
diff --git a/interface/web/themes/default/assets/stylesheets/themes/default/theme.min.css b/interface/web/themes/default/assets/stylesheets/themes/default/theme.min.css
new file mode 100644
index 0000000..d168603
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/default/theme.min.css
@@ -0,0 +1 @@
+html,body{-webkit-tap-highlight-color:black}body{background:#f2f5f7;color:#3c444b}.green{color:#3cb355}.form-control:focus{border-color:#698296}.formbutton-default{background:linear-gradient(to bottom,white,#eef0f2);border-bottom-color:#ccc;color:#3c444b}.formbutton-default:hover{background:linear-gradient(to bottom,#fafafa,#e8ebee)}.formbutton-default:hover,.formbutton-default.active{border-bottom-color:#adadad}.formbutton-success{background:linear-gradient(to bottom,#7bcc89,#6ab977);border-color:#5aab68;border-bottom-color:#5aab68;color:white}.formbutton-success:hover{background:linear-gradient(to bottom,#74c982,#63b671)}.formbutton-success:hover,.formbutton-success.active{border-bottom-color:#509b5a;color:white}.formbutton-danger{background:linear-gradient(to bottom,#c70f19,#b60008);border-color:#980b13;border-bottom-color:#980b13;color:white}.formbutton-danger:hover{background:linear-gradient(to bottom,#c30b15,#b20004)}.formbutton-danger:hover,.formbutton-danger.active{border-bottom-color:#8f0209;color:white}#searchform button{background:linear-gradient(to bottom,white,#eef0f2)}#searchform button:hover{background:linear-gradient(to bottom,#fafafa,#e8ebee)}#logout-button{background:#c70f19;border-bottom-color:#980b13}#logout-button:hover{background:#df111c;border-bottom-color:#800a10}#main-navigation a{background:linear-gradient(to bottom,white,#eef0f2);border-bottom-color:#ccc}#main-navigation a:hover{background:linear-gradient(to bottom,#fafafa,#e8ebee)}#main-navigation a:hover,#main-navigation a.active{border-bottom-color:#adadad;color:#c70f19}#main-navigation .icon{text-shadow:1px 1px 1px white}#sidebar{border-color:#cedded;background:white}#sidebar header{background:#dfeaf6;color:#698296}#sidebar li{border-top-color:#cedded}#sidebar a{color:inherit}#sidebar a:hover{color:#428bde}.page-header{border-color:#ccc}.alert-notification{background:#dfeaf6;border-color:#cedded;color:#698296}.alert-notification a{color:#2371ca}.alert-notification a:hover{color:#428bde}.alert-danger{background:#f7dfdf;border-color:#dcb2b3;color:#95686b}.modules li{background:#e1e4e9;border-color:#d3d7da;box-shadow:inset 1px 3px 8px -5px rgba(0,0,0,0.2)}.modules .button{background:linear-gradient(to bottom,white,#eef0f2);border-bottom-color:#ccc}.modules .button:hover{background:linear-gradient(to bottom,#fafafa,#e8ebee)}.modules .button:hover,.modules .button.active{border-bottom-color:#adadad}.modules a{color:inherit}.table-wrapper{background:white;border-color:#d3d7da}.table caption{border-bottom-color:#d3d7da}.table tbody tr{border-top-color:#d3d7da}.table tbody tr:nth-child(odd){background:#f2f5f7}.table tbody tr:nth-child(even){background:white}.table tbody tr:hover{background:#dfeaf6}.tfooter{background:linear-gradient(to bottom,white,#eef0f2);border-top-color:#d3d7da}.content-tab-wrapper{background:white;border-color:#d3d7da}.content-tab-wrapper .nav-tabs{background:#eef0f2;box-shadow:inset -1px -2px 6px -5px rgba(0,0,0,0.2)}.content-tab-wrapper .nav-tabs>li>a{border-right-color:#d3d7da!important;color:inherit}.content-tab-wrapper .nav-tabs>li>a:hover{background:#e0e3e7}.content-tab-wrapper .nav-tabs .active a{background:white!important}thead.dark{background:linear-gradient(to bottom,#57646d,#3e474e)!important;color:white}thead.dark tr:nth-child(2){background:linear-gradient(to bottom,#fafafa,#e8ebee)!important}#footer{border-top-color:#d3d7da}.pushy{background:#f2f5f7}.pushy ul.subnavi li a:hover{background:0}.pushy a:hover,.pushy a.active{background:#f2f5f7;color:inherit}@media screen and (max-width:860px){#main-navigation a{border-right-color:#d3d7da;border-bottom-color:#d3d7da}#main-navigation a.active{border-right-color:#d3d7da;border-bottom-color:#d3d7da}#main-navigation a:hover{border-bottom-color:#d3d7da}}
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/stylesheets/themes/default/theme.sass b/interface/web/themes/default/assets/stylesheets/themes/default/theme.sass
new file mode 100644
index 0000000..9ef4982
--- /dev/null
+++ b/interface/web/themes/default/assets/stylesheets/themes/default/theme.sass
@@ -0,0 +1,187 @@
+@import "colors"
+@import "mixins"
+
+html, body
+  -webkit-tap-highlight-color: $color-black
+
+body
+  background: $color-background-blueish
+  color: $color-font-main
+
+.green
+  color: $color-green
+
+.form-control:focus
+  border-color: $color-input-focus
+
+.formbutton-default
+  @include background-gradient
+  border-bottom-color: $color-grey
+  color: $color-font-main
+
+  &:hover, &.active
+    border-bottom-color: $color-grey-hover
+
+.formbutton-success
+  @include background-gradient-green
+  border-color: $color-green-border
+  border-bottom-color: $color-green-border
+  color: $color-white
+
+  &:hover, &.active
+    border-bottom-color: $color-green-border-hover
+    color: $color-white
+
+#searchform
+  button
+    @include background-gradient
+
+#logout-button
+  background: $color-red
+  border-bottom-color: $color-red-dark
+
+  &:hover
+    background: $color-red-hover
+    border-bottom-color: $color-red-dark-hover
+
+#main-navigation
+  a
+    @include background-gradient
+    border-bottom-color: $color-grey
+
+    &:hover, &.active
+      border-bottom-color: $color-grey-hover
+      color: $color-red
+
+  .icon
+    text-shadow: 1px 1px 1px $color-white
+
+#sidebar
+  border-color: $color-notification-info-border
+  background: $color-white
+
+  header
+    background: $color-notification-info-background
+    color: $color-notification-info-font
+
+  li
+    border-top-color: $color-notification-info-border
+
+  a
+    color: inherit
+
+    &:hover
+      color: $color-notification-info-link-hover
+
+.page-header
+  border-color: $color-grey
+
+
+.alert-notification
+  background: $color-notification-info-background
+  border-color: $color-notification-info-border
+  color: $color-notification-info-font
+
+  a
+    color: $color-notification-info-link
+
+    &:hover
+      color: $color-notification-info-link-hover
+
+.alert-danger
+  background: $color-notification-danger-background
+  border-color: $color-notification-danger-border
+  color: $color-notification-danger-font
+
+.modules
+  li
+    background: $color-grey-bg
+    border-color: $color-grey-border
+    box-shadow: inset 1px 3px 8px -5px $color-black-transparent
+
+  .button
+    @include background-gradient
+    border-bottom-color: $color-grey
+
+    &:hover, &.active
+      border-bottom-color: $color-grey-hover
+
+  a
+    color: inherit
+
+.table-wrapper
+  background: $color-white
+  border-color: $color-grey-border
+
+.table
+  caption
+    border-bottom-color: $color-grey-border
+
+  tbody
+    tr
+      border-top-color: $color-grey-border
+
+      &:nth-child(odd)
+        background: $color-background-blueish
+
+      &:nth-child(even)
+        background: $color-white
+
+      &:hover
+        background: $color-table-hover
+
+.tfooter
+  background: linear-gradient(to bottom, $color-gradient-grey-start, $color-gradient-grey-stop)
+  border-top-color: $color-grey-border
+
+.content-tab-wrapper
+  background: $color-white
+  border-color: $color-grey-border
+
+  .nav-tabs
+    background: $color-grey-light
+    box-shadow: inset -1px -2px 6px -5px $color-black-transparent
+
+    > li > a
+      border-right-color: $color-grey-border !important
+      color: inherit
+
+      &:hover
+        background: darken($color-grey-light, 5%)
+
+    .active a
+      background: $color-white !important
+
+thead.dark
+  background: linear-gradient(to bottom, $color-thead-begin, $color-thead-end) !important
+  color: $color-white
+
+#footer
+  border-top-color: $color-grey-border
+
+.pushy
+  background: $color-background-blueish
+
+  ul
+    &.subnavi li
+      a
+        &:hover
+          background: none
+
+  a
+    &:hover, &.active
+      background: $color-background-blueish
+      color: inherit
+
+@media screen and (max-width: 860px)
+  #main-navigation
+    a
+      border-right-color: $color-grey-border
+      border-bottom-color: $color-grey-border
+
+      &.active
+        border-right-color: $color-grey-border
+        border-bottom-color: $color-grey-border
+
+      &:hover
+        border-bottom-color: $color-grey-border
diff --git a/interface/web/themes/default/css/iehacks.css b/interface/web/themes/default/css/iehacks.css
deleted file mode 100644
index a6048da..0000000
--- a/interface/web/themes/default/css/iehacks.css
+++ /dev/null
@@ -1,184 +0,0 @@
-@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) 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) 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         */
-
-  /*------------------------------------------------------------------------------------------------------*/
-
-  /**
-   * 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; }
-
-  /*------------------------------------------------------------------------------------------------------*/
-}
-
-@media screen, projection
-{
-  }
-
-@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/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/interface/web/themes/default/css/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 5b5dab2..0000000
--- a/interface/web/themes/default/css/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_flat_55_fbec88_40x100.png b/interface/web/themes/default/css/images/ui-bg_flat_55_fbec88_40x100.png
deleted file mode 100644
index 47acaad..0000000
--- a/interface/web/themes/default/css/images/ui-bg_flat_55_fbec88_40x100.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_glass_75_d0e5f5_1x400.png b/interface/web/themes/default/css/images/ui-bg_glass_75_d0e5f5_1x400.png
deleted file mode 100644
index 9fb564f..0000000
--- a/interface/web/themes/default/css/images/ui-bg_glass_75_d0e5f5_1x400.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_glass_85_dfeffc_1x400.png b/interface/web/themes/default/css/images/ui-bg_glass_85_dfeffc_1x400.png
deleted file mode 100644
index 0149515..0000000
--- a/interface/web/themes/default/css/images/ui-bg_glass_85_dfeffc_1x400.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_glass_95_fef1ec_1x400.png b/interface/web/themes/default/css/images/ui-bg_glass_95_fef1ec_1x400.png
deleted file mode 100644
index 4443fdc..0000000
--- a/interface/web/themes/default/css/images/ui-bg_glass_95_fef1ec_1x400.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/interface/web/themes/default/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
deleted file mode 100644
index 81ecc36..0000000
--- a/interface/web/themes/default/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/interface/web/themes/default/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
deleted file mode 100644
index 4f3faf8..0000000
--- a/interface/web/themes/default/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/interface/web/themes/default/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
deleted file mode 100644
index 38c3833..0000000
--- a/interface/web/themes/default/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_217bc0_256x240.png b/interface/web/themes/default/css/images/ui-icons_217bc0_256x240.png
deleted file mode 100644
index 6f4bd87..0000000
--- a/interface/web/themes/default/css/images/ui-icons_217bc0_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_2e83ff_256x240.png b/interface/web/themes/default/css/images/ui-icons_2e83ff_256x240.png
deleted file mode 100644
index 09d1cdc..0000000
--- a/interface/web/themes/default/css/images/ui-icons_2e83ff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_469bdd_256x240.png b/interface/web/themes/default/css/images/ui-icons_469bdd_256x240.png
deleted file mode 100644
index bd2cf07..0000000
--- a/interface/web/themes/default/css/images/ui-icons_469bdd_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_6da8d5_256x240.png b/interface/web/themes/default/css/images/ui-icons_6da8d5_256x240.png
deleted file mode 100644
index 9f3eafa..0000000
--- a/interface/web/themes/default/css/images/ui-icons_6da8d5_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_cd0a0a_256x240.png b/interface/web/themes/default/css/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100644
index 2ab019b..0000000
--- a/interface/web/themes/default/css/images/ui-icons_cd0a0a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_d8e7f3_256x240.png b/interface/web/themes/default/css/images/ui-icons_d8e7f3_256x240.png
deleted file mode 100644
index ad2dc6f..0000000
--- a/interface/web/themes/default/css/images/ui-icons_d8e7f3_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/images/ui-icons_f9bd01_256x240.png b/interface/web/themes/default/css/images/ui-icons_f9bd01_256x240.png
deleted file mode 100644
index c7c53cb..0000000
--- a/interface/web/themes/default/css/images/ui-icons_f9bd01_256x240.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/css/jquery-ui-1.11.1.min.css b/interface/web/themes/default/css/jquery-ui-1.11.1.min.css
deleted file mode 100644
index 353389c..0000000
--- a/interface/web/themes/default/css/jquery-ui-1.11.1.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-24
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2C%20Lucida%20Sans%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=0px&bgColorHeader=5c9ccc&bgTextureHeader=gloss_wave&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=inset_hard&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=glass&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=inset_hard&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=0px
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #a6c9e2;background:#fcfdfd url("images/ui-bg_inset-hard_100_fcfdfd_1x100.png") 50% bottom repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #4297d7;background:#5c9ccc url("images/ui-bg_gloss-wave_55_5c9ccc_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5dbec;background:#dfeffc url("images/ui-bg_glass_85_dfeffc_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#2e6e9e}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2e6e9e;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #79b7e7;background:#d0e5f5 url("images/ui-bg_glass_75_d0e5f5_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1d5987}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#1d5987;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #79b7e7;background:#f5f8f9 url("images/ui-bg_inset-hard_100_f5f8f9_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#e17009}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#e17009;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fad42e;background:#fbec88 url("images/ui-bg_flat_55_fbec88_40x100.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_469bdd_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_d8e7f3_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_6da8d5_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_217bc0_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_f9bd01_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:0}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:0}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:0}
\ No newline at end of file
diff --git a/interface/web/themes/default/css/jquery-ui-1.11.1.structure.min.css b/interface/web/themes/default/css/jquery-ui-1.11.1.structure.min.css
deleted file mode 100644
index 6cb84be..0000000
--- a/interface/web/themes/default/css/jquery-ui-1.11.1.structure.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-21
-* http://jqueryui.com
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
\ No newline at end of file
diff --git a/interface/web/themes/default/css/jquery-ui-1.11.1.theme.min.css b/interface/web/themes/default/css/jquery-ui-1.11.1.theme.min.css
deleted file mode 100644
index 331ca60..0000000
--- a/interface/web/themes/default/css/jquery-ui-1.11.1.theme.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery UI - v1.11.1 - 2014-09-24
-* http://jqueryui.com
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #a6c9e2;background:#fcfdfd url("images/ui-bg_inset-hard_100_fcfdfd_1x100.png") 50% bottom repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #4297d7;background:#5c9ccc url("images/ui-bg_gloss-wave_55_5c9ccc_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5dbec;background:#dfeffc url("images/ui-bg_glass_85_dfeffc_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#2e6e9e}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2e6e9e;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #79b7e7;background:#d0e5f5 url("images/ui-bg_glass_75_d0e5f5_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1d5987}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#1d5987;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #79b7e7;background:#f5f8f9 url("images/ui-bg_inset-hard_100_f5f8f9_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#e17009}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#e17009;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fad42e;background:#fbec88 url("images/ui-bg_flat_55_fbec88_40x100.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_469bdd_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_d8e7f3_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_6da8d5_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_217bc0_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_f9bd01_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:0}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:0}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:0}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:0}
\ No newline at end of file
diff --git a/interface/web/themes/default/css/print.css b/interface/web/themes/default/css/print.css
deleted file mode 100644
index ede8d4a..0000000
--- a/interface/web/themes/default/css/print.css
+++ /dev/null
@@ -1,112 +0,0 @@
-@charset "UTF-8";
-/* 
-    Document   : print.css
-    Created on : 06.07.2012, 12:21:59
-    Author     : Christian Foellmann (foe-services.de)
-    Description:
-        Basis was css-code from the "ISPConfig 3: default theme" which was based on
-        "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework 3.0.6
-        by Copyright 2005-2008, Dirk Jesse (http://www.yaml.de)
-*/
-
-#col1, #col1_content { float:none; width: 100%; margin: 0; padding: 0; border: 0; }
-
-#col2 { display:none; }
-#col3 { display:none; }
-/*------------------------------------------------------------------------------------------------------*/
-
-/**
- * @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; }
\ No newline at end of file
diff --git a/interface/web/themes/default/css/styles.css b/interface/web/themes/default/css/styles.css
deleted file mode 100644
index 000846a..0000000
--- a/interface/web/themes/default/css/styles.css
+++ /dev/null
@@ -1,1935 +0,0 @@
-@charset "UTF-8";
-/* 
-    Document   : styles.css
-    Created on : 06.07.2012, 12:21:59
-    Author     : Christian Foellmann (foe-services.de)
-    Description:
-        Basis was css-code from the "ISPConfig 3: default theme" which was based on
-        "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework 3.0.6
-        by Copyright 2005-2008, Dirk Jesse (http://www.yaml.de)
-*/
-
-/* overall
--------------------------------------------------------------- */
-* {
-    margin: 0;
-    padding: 0;
-}
-html * { font-size: 100.01% }
-body {
-    font-family: "Trebuchet MS", sans-serif;
-    font-size: 75.00%; 
-    color: #444;
-    background: url("../images/screen_bg.png") repeat-x top left fixed #EEEEEE;
-    padding: 10px 0;
-}
-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 }
-a {
-    color: #4D87C7;
-    text-decoration:none;
-}
-a:focus,
-a:hover,
-a:active {
-    color:#182E7A;
-    text-decoration:underline;
-}
-hr {
-    color: #fff;
-    background:transparent;
-    margin: 0 0 0.5em 0;
-    padding: 0 0 0.5em 0;
-    border:0;
-    border-bottom: 1px #eee solid;
-}
-textarea, pre, tt, code {
-    font-family: Consolas,"Lucida Console","Courier New",monospace;
-    font-size: 0.9em;	
-}
-
-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 */
-
-p { line-height: 1.5em; margin: 0 0 1em 0; }
-
-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;
-}
-
-header, #nav, #main, footer {
-    clear: both;
-}
-#page {
-    min-width: 980px;
-    max-width: 80%;
-    background: #fff;
-    text-align:left;
-    margin: 0 auto;
-    padding: 10px;
-}
-.skip, .hideme, .print {
-    height: 1px;
-    left: -1000em;
-    position: absolute;
-    top: -1000em;
-    width: 1px;
-}
-
-/* header
--------------------------------------------------------------- */
-header {
-    position: relative;
-    color: #faf0e6;
-    padding: 15px 2em 5px 20px;
-    background: url("../images/header_bg.png") repeat-x top left #9a9a9a;
-}
-header h1 {
-    font-size:2.5em;
-    letter-spacing:-2px;
-    line-height:65%;
-    color: silver;
-}
-header span {
-    color: #333333;
-}
-
-/* header/topsubnav
--------------------------------------------------------------- */
-#topsubnav {
-    position:absolute;
-    top: 10px;
-    right: 10px;
-    text-align: right;
-}
-#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;
-}
-
-/* nav
--------------------------------------------------------------- */
-#topNav ul {
-    list-style: none;
-    padding: 0 0 0 20px;
-    margin: 0;
-    background: #9a9a9a
-}
-
-#topNav ul li {
-    display: inline;
-    margin: 0 2px 0 0;
-}
-
-#topNav a {
-    background: url("../icons/x32_sprite.png") no-repeat #D3D3D3;
-    border-top-left-radius:5px;
-    border-top-right-radius:5px;
-    color:black;
-    display:inline-block;
-    height:20px;
-    padding-top:37px;
-    text-align:center;
-    text-decoration:none;
-    min-width:78px;
-}
-
-#topNav a:hover {
-    background-color: #eeeeee;
-    color: #000000;
-}
-
-#topNav #topNav_current a {
-    font-weight: bold;
-    color: black;
-    background-color: #ffffff;
-}
-.topnav-tools { background-position: 22px -10px !important; }
-.topnav-admin { background-position: 22px -74px !important; }
-.topnav-sites { background-position: 22px -523px !important; }
-.topnav-monitor { background-position: 22px -585px !important; }
-.topnav- { background-position: 22px -650px !important; }
-.topnav-help { background-position: 22px -715px !important; }
-.topnav-mail { background-position: 22px -780px !important; }
-.topnav-mailuser { background-position: 22px -780px !important; }
-.topnav-vm { background-position: 22px -842px !important; }
-.topnav-domain { background-position: 22px -905px !important; }
-.topnav-dns { background-position: 22px -970px !important; }
-.topnav-dashboard { background-position: 22px -1035px !important; }
-.topnav-client { background-position: 22px -1098px !important; }
-.topnav-billing { background-position: 22px -1162px !important; }
-#topNav a span {
-            padding: 0 3px;
-        }
-/* main
--------------------------------------------------------------- */
-#main { 
-    background: #fff;
-    padding: 1em 0;
-}
-
-/* main/sideNav + submenu
--------------------------------------------------------------- */
-#sideNav { 
-    width: 200px; 
-    float:left;
-    padding: 0 10px 0 0; 
-}
-
-#submenu {
-    width: 100%;
-    overflow: hidden;
-    margin: 0px;
-    list-style-type: none;
-    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;
-    font-size:0.9em;
-}
-
-#submenu a,
-#submenu strong {
-    display:block;
-    width: 90%;
-    padding: 2px 0px 2px 10%;
-    text-decoration: none;
-    background-color:#fff;
-    color: #444;
-    border-bottom: 1px #eee solid;
-}
-
-/* Menu Title */
-#submenu li.title {
-    width: 100%;
-    padding: 0px;
-    font-weight: bold;
-    color: #444;
-    background-color: #fff;
-    border-top: 2px #888 solid;
-    font-size: 1.1em;
-}
-
-#submenu li.title a {
-    background-color: #f0f8ff;
-    color: #444;
-}
-#submenu li.title a:hover {
-    color: white;
-}
-
-#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;
-}
-
-/* Form-Elements in the Menu*/
-#submenu * select#server_id {
-    margin: 3px 10%;
-    padding: 1px;
-    width: 80%;
-}
-
-/* main/content
--------------------------------------------------------------- */
-#content { 
-    margin-left: 200px; 
-    margin-right: 0;
-    padding: 0px 10px 10px 20px;
-    border-left: 1px #ddd solid;
-}
-
-/* footer
--------------------------------------------------------------- */
-
-footer { 
-    color:#666; 
-    background: #f9f9f9;
-    padding: 10px 20px;
-    border-top: 5px #efefef solid;
-    font-size: 0.8em;
-    text-align: center;
-}
-footer a {
-    color: #999;
-    background:transparent;
-    font-weight: bold;
-}
-footer a:hover, footer a:active {
-    color: #4D87C7; 
-    background-color: transparent; 
-    text-decoration:underline;
-}
-
-/* Set a background-color, no system backgorund used anymore */
-select, input, textarea {
-    background: #FFFFFF;
-    border: 1px solid #DFDFDF;
-    padding: 1px;
-    outline:none;
-}
-
-table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
-table.full { width: 100%; }
-table.fixed { table-layout:fixed }
-
-table.list td {
-    max-width: 350px;
-    min-width: 32px;
-    white-space: nowrap;
-    overflow:hidden;
-    text-overflow: ellipsis;
-    -o-text-overflow: ellipsis;
-    -icab-text-overflow: ellipsis;
-    -khtml-text-overflow: ellipsis;
-    -moz-text-overflow: ellipsis;
-    -webkit-text-overflow: ellipsis;
-}
-th,
-td {
-    padding: 0.5em;
-    text-align:left;
-}
-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;
-}
-table.list th[class$="_pid"],
-table.list td[class$="_pid"],
-table.list th[class$="_active"],
-table.list td[class$="_active"],
-table.list th.tbl_col_autoresponder,
-table.list td.tbl_col_autoresponder,
-table.list th.tbl_col_postfix,
-table.list td.tbl_col_postfix,
-table.list th.tbl_col_disablesmtp,
-table.list td.tbl_col_disablesmtp,
-table.list th.tbl_col_disableimap,
-table.list td.tbl_col_disableimap,
-table.list th.tbl_col_disablepop3,
-table.list td.tbl_col_disablepop3 {
-    width: 70px;
-    text-align: center;
-}
-table.list .tbl_col_buttons,
-table.list .tbl_col_limit {
-    width: 50px;
-}
-.tbl_col_client_pid input {
-    width: 50px;
-}
-.pnl_listarea th[class^="tbl_col"] { cursor:pointer; }
-.pnl_listarea th[class^="tbl_col"]:hover { background-position:0 -15px!important; }
-.pnl_listarea th.tbl_col_nosort { cursor:default; }
-.pnl_listarea th.tbl_col_nosort:hover { background-position:0 0!important; }
-
-.pageForm_description { font-size: 12px; }
-
-/* Tab-Box */
-.tabbox_tabs { border-bottom: 1px solid #d3d3d3; }
-.tabbox_tabs ul {
-    list-style: none;
-    padding: 0;
-    margin: 0;
-}
-.tabbox_tabs li {
-    display: inline;
-    margin: 0 2px 0 0;
-}
-.tabbox_tabs a {
-    padding: 0 1em;
-    text-decoration: none;
-    color: black;
-    background: #d3d3d3;
-    border: 1px solid #d3d3d3;
-}
-.tabbox_tabs a:hover {
-    background: #fc0;
-    color: #540;
-}
-.tabbox_tabs .active a {
-    font-weight: bold;
-    color: #ff6600;
-    background: #ffffff;
-}
-.pnl_toolsarea fieldset, .pnl_listarea fieldset, .pnl_formsarea fieldset {
-    border-top: 1px solid #949494;
-    margin: 20px 0;
-}
-.pnl_toolsarea fieldset legend , .pnl_listarea fieldset legend {
-    font-weight: bold;
-    color: #6299c5;
-}
-.pnl_formarea fieldset {
-    font-weight: bold;
-}
-/* hide line and legend when inside tabbed content */
-#tabbox_content * .pnl_toolsarea fieldset, #tabbox_content * .pnl_listarea fieldset, #tabbox_content * .pnl_formsarea fieldset { border: none !important; }
-#tabbox_content * .pnl_toolsarea fieldset legend, #tabbox_content * .pnl_listarea fieldset legend, #tabbox_content * .pnl_formsarea fieldset legend { display: none !important; }
-.codeview {
-    margin:20px 0;
-    padding:2px;
-    border: 1px solid #ffcc00;
-    background: #fffaea;
-    font-family: Consolas, "Lucida Console", "Courier New", monospace;
-    font-size: 0.9em;
-}
-/* Lists */
-table.list {
-    width: 100%;
-    border: 1px solid #d3d3d3 !important;
-}
-table.list thead th { font-size: 10px; }
-table.list tbody { border: 1px solid #d3d3d3 !important; }
-table.list tfoot td { text-align: center;  background: #f8f8f8 url("../images/lists_tfoot_bg.png") repeat-x bottom left;  padding: 24px 8px 8px 8px; }
-table.list .tbl_paging img { vertical-align: top; }
-table.list .tbl_row_even { background: #fcfcfc; }
-table.list .tbl_row_uneven { background: #f0f8ff; }
-table.list tr:hover { background: #fffacd; }
-table.list td { word-wrap:break-word;white-space:pre-wrap; }
-table.list td.tbl_col_buttons { word-wrap:normal;white-space:normal;overflow:visible; }
-
-/* Password Strength */
-#passBar {
-    width: 101px; height: 10px;
-    background: url("../images/meter_bg.gif") repeat-x bottom left;
-    margin: 2px 0;
-    float: left;
-}
-#passText {
-    padding: 0;
-    float: left;
-}
-
-/* Systemmonitor */
-.systemmonitor-server,
-.systemmonitor-ve,
-.systemmonitor-state {
-    margin: 10px 5px;
-    font-family: Consolas, "Lucida Console", "Courier New", monospace;
-    font-size: 0.9em;
-    float: left;
-    width: 100%;
-}
-.systemmonitor-server:hover,
-.systemmonitor-vm:hover { background-color: #FFFACD; }
-.state-no_state,
-.state-no_state-ve {
-    border-top: 4px solid #95A19F;
-    background-color: #f8f8ff;
-}
-.state-unknown,
-.state-unknown-ve {
-    border-top: 4px solid #30302e;
-    background-color: #cecfc5;
-}
-.state-ok,
-.state-ok-ve {
-    border-top: 4px solid #23fb00;
-    background-color: #adffa2;
-}
-.state-info,
-.state-info-ve {
-    border-top: 4px solid #183e99;
-    background-color: #d4e2ff;
-}
-.state-warning,
-.state-warning-ve {
-    border-top: 4px solid #ffa800;
-    background-color: #ffda93;
-}
-.state-critical,
-.state-critical-ve {
-    border-top: 4px solid #ff0000;
-    background-color: #ffb9b9;
-}
-.state-error,
-.state-error-ve {
-    border-top: 4px solid #ff0000;
-    background-color: #ff7f7f;
-}       
-div.icoDevice {
-    float: left;
-    width: 64px;
-    height: 64px;
-    margin: 5px;
-    background: url("../icons/device_sprite.png") no-repeat transparent;
-}
-.systemmonitor-server div.icoDevice { background-position: 0 0; }
-.systemmonitor-ve div.icoDevice { background-position: -64px 0; }
-.systemmonitor-network div.icoDevice { background-position: -128px 0; }
-div.statusDevice,
-div.statusMsg { float: left; }
-div.statusMsg p { 
-    float: left;
-    padding: 5px;
-}
-.systemmonitor-state .status {
-    margin: 5px;
-}
-.status {
-    float: right;
-    width: 32px;
-    height: 32px;
-    background: url("../icons/x32_sprite.png") no-repeat transparent;
-}
-div.status {
-    float: left !important;
-}
-.state-warning .status,
-.state-warning-ve .status { background-position: 0 -143px; }
-.state-no_state .status,
-.state-no_state-ve .status,
-.state-unknown .status,
-.state-unknown-ve .status { background-position: 0 -207px; }
-.state-ok .status,
-.state-ok-ve .status { background-position: 0 -270px; }
-.state-info .status,
-.state-info-ve .status { background-position: 0 -336px; }
-.state-error .status,
-.state-error-ve .status { background-position: 0 -400px; }
-.state-critical .status,
-.state-critical-ve .status { background-position: 0 -463px; }
-
-/* Usage unknown  
-.systemmonitor-content table {
-    border: none;
-    margin-top: 10px;
-}
-
-.systemmonitor-content * .online {
-    border: 1px solid #ffffff;
-    background-color: #E3FFB8;
-    color: #000000;
-    padding:0px 5px;
-}
-.systemmonitor-content * .offline {
-    border: 1px solid #ffffff;
-    background-color: #d12f19; 
-    color:#ffffff;
-    padding:0px 5px;
-}*/
-
-/* Dashboard */
-.dashboard-modules {
-    float:left;
-    width:60px;
-    height: 60px;
-    border:1px dotted #888888;
-    border-radius:5px;
-    background-color: #cccccc;
-    margin:10px;
-    background-position: center 5px;
-    background-repeat: no-repeat;
-    text-align: center;
-}
-.dashboard-modules a, 
-.dashboard-modules a:hover {
-    background: url("../icons/x32_sprite.png") no-repeat transparent;
-    color:Black;
-    display:block;
-    font-weight:bold;
-    height:30px;
-    padding-top:42px;
-    width:60px;
-    text-decoration: none;
-}
-.dashboard-modules.tools a { background-position: 12px -9px; }
-.dashboard-modules.admin a { background-position: 12px -73px; }
-.dashboard-modules.sites a { background-position: 12px -520px; }
-.dashboard-modules.monitor a { background-position: 13px -585px; }
-.dashboard-modules.help a { background-position: 13px -716px; }
-.dashboard-modules.mail a { background-position: 12px -776px; }
-.dashboard-modules.vm a { background-position: 14px -842px; }
-.dashboard-modules.domain a { background-position: 12px -905px; }
-.dashboard-modules.dns a { background-position: 12px -970px; }
-.dashboard-modules.client a { background-position: 13px -1096px; }
-.dashboard-modules.billing a { background-position: 14px -1162px; }
-
-.panel_dashboard h2 { font-size:20px; }
-
-/* Image-Replacement */
-.swap { background-repeat:no-repeat; }
-.swap span { display:none; height:16px; } 
-#ir-HeaderLogo {
-    background-image: url("../images/header_logo.png");
-    height:32px;
-    margin:0 0 0.2em;
-} 
-div#ir-Yes,
-div#ir-No {
-    text-align: center;
-    background: url("../icons/x16_sprite.png") no-repeat transparent;
-}
-#ir-Yes {
-    background-position: center -342px !important;
-    height: 16px;
-}
-#ir-No {
-    background-position: center -362px !important;
-    height: 16px;
-}
-.swap {
-    background-repeat: no-repeat;
-}
-.swap span {
-    display: none;
-    height: 16px;
-}
-/* BUTTONS */
-a.button,
-.button,
-.buttons button {
-    display: inline-block;
-    margin: 0 2px;
-    padding: 2px 5px;
-    color: #525252;
-    text-shadow: 0px 1px 1px #fff;
-    border: 1px solid #c6c6c6;
-    border-radius: 4px;
-    background-color: #f7f7f7;
-    box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    -o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    -webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    -moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-    text-decoration: none;
-}
-a.button:focus,
-input.button:focus,
-.buttons button:focus {
-    border-color: #4fadd5;
-    box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
-    outline: none;
-}
-.buttons button[type]{
-    padding:5px 10px 5px 7px; /* Firefox */
-    line-height:17px; /* Safari */
-    white-space: nowrap;
-}
-*:first-child+html button[type]{
-    padding:4px 10px 3px 7px; /* IE7 */
-}
-.buttons button img,
-.buttons a img {
-    margin:0 3px -3px 0 !important;
-    padding:0;
-    border:none;
-    width:16px;
-    height:16px;
-}
-.topbuttons {
-    margin-bottom: 10px;
-}
-/* BUTTONS STANDARD */
-button:hover,
-.buttons a:hover {
-    background-color:#dff4ff;
-    border:1px solid #c2e1ef;
-    color:#336699;
-}
-.buttons a:active {
-    background-color:#6299c5;
-    border:1px solid #6299c5;
-    color:#fff;
-}
-
-/* BUTTONS POSITIVE */
-button.positive,
-.buttons a.positive { color:#529214; }
-.buttons a.positive:hover,
-button.positive:hover {
-    background-color:#E6EFC2;
-    border:1px solid #C6D880;
-    color:#529214;
-}
-.buttons a.positive:active {
-    background-color:#529214;
-    border:1px solid #529214;
-    color:#fff;
-}
-
-/* BUTTONS NEGATIVE */
-.buttons a.negative,
-button.negative {
-    color:#d12f19;
-}
-.buttons a.negative:hover,
-button.negative:hover {
-    background-color:#fbe3e4;
-    border:1px solid #fbc2c4;
-    color:#d12f19;
-}
-.buttons a.negative:active {
-    background-color:#d12f19;
-    border:1px solid #d12f19;
-    color:#fff;
-}
-
-/* Button with icon and text */
-.iconstxt { background: url("../icons/button_sprite.png") no-repeat transparent; }
-.iconstxt span { padding-left: 20px; font-weight: bold; }
-.iconstxt.icoPositive { background-position: 6px -130px; }
-.iconstxt.icoNegative { background-position: 6px -98px; }
-.iconstxt.icoAdd { background-position: 6px -66px; }
-.iconstxt.icoKey { background-position: 6px -1px; }
-.iconstxt.icoDelete { background-position: 6px -34px; }
-.iconstxt.icoDownload { background-position: 6px -1px; }
-.iconstxt.icoRestore { background-position: 6px -1px; }
-
-/* Button with icon and without text */
-.icons16 { position: relative; }
-.icons16>span {
-    opacity: 0;
-    visibility: hidden;
-    -webkit-transition: opacity 1s linear;
-    -moz-transition: opacity 1s linear;
-    -o-transition: opacity 1s linear;
-    -ms-transition: opacity 1s linear;
-    transition: opacity 1s linear;
-    position: absolute;
-    right: 23px;
-    top: -1px;
-    padding: 1px 2px;
-    border: 1px solid rgb(155,155,11);
-    background: rgb(255,255,111);
-    white-space: nowrap;
-}
-.icons16:hover>span {
-    opacity: 1.0;
-    visibility: visible;
-}
-a.icons16 {
-    height: 18px;
-    width: 18px;
-    padding: 0;
-    background: url("../icons/x16_sprite.png") no-repeat transparent;
-}
-button.icons16 {
-    height: 20px;
-    width: 20px;
-    padding: 0;
-    background: url("../icons/x16_sprite.png") no-repeat transparent;
-}
-.icons16.icoEdit { background-position: -1px -1px; }
-.icons16.icoLoginAs { background-position: -1px -21px; }
-.icons16.icoPDF { background-position: -1px -61px; }
-.icons16.icoDelete { background-position: -1px -81px; }
-.icons16.icoWebmailer { background-position: -1px -101px; }
-.icons16.icoFilter { background-position: -1px -161px; }
-.icons16.icoDbAdmin { background-position: -1px -221px; }
-.icons16.icoAction { background-position: -1px -241px; }
-.icons16.icoLink { background-position: -1px -422px; float: right; }
-
-div.group-icon {
-    float: left;
-    padding: 2px 0;
-}
-.group-admin,
-.group-user {
-    height: 20px;
-    width: 20px;
-    padding: 0;
-    float: left;
-    background: url("../icons/x16_sprite.png") no-repeat transparent;
-}
-.group-admin { background-position: 0 -380px; }
-.group-user { background-position: 0 -400px; }
-
-span.marked { color: #cc0000; }
-span.small { font-size: 0.9em; }
-
-#ajaxloader {
-    position: absolute;
-    width: 325px;
-    height: 150px;
-    background: #ffffff url('../images/ajax-loader.gif') no-repeat center center;
-    border: solid 2px #e1e1e1;
-    border-radius: 10px;
-    /*background: rgba(255, 255, 255, 0.85);*/
-    padding: 20px;
-    text-align:center;
-    z-index: 100;
-}
-.blockLabel.email_at {
-    width: 20px !important;
-    margin: 1.6em 0.3em 0 0 !important;
-}
-.textDisplay { display: block; }
-
-/* Form Length Classes */
-.textInput.formLengthBool { width: 25px !important; }
-.selectInput.formLengthBool { width: 60px !important; }
-.textInput.formLengthLimit { width: 50px !important; }
-.selectInput.formLengthLimit { width: 85px !important; }
-.formLengthDate { width: 75px !important; }
-.formLengthIPv4 { width: 125px !important; }
-.formLengthIPv6 { }
-.formLengthEmailUser { width: 30% !important; }
-.formLengthEmailDomain { width: 30% !important; }
-.formLengthHalf { width: 15% !important; }
-.formLengthDouble { width: 50% !important; }
-
-/* Individual Form Lengths */
-.textInput#username, 
-.textInput#password,
-.textInput#passwort,
-.textInput#source_password { width: 100px; }
-.selectInput#language {	width: 75px; }
-.selectInput#client_group_id, .selectInput#default_group { width: 125px; }
-input#refresh, input#retry, input#expire, input#minimum, input#ttl { width: 50px !important; }
-
-/* --- */
-
-a[href $="#logout"] {
-    padding-right: 20px;
-    background: url("../icons/x16_sprite.png") no-repeat right -143px transparent !important;
-}
-
-/* Select Menu with Images */
-select.withicons option {
-    background-repeat:no-repeat;
-    background-position: 1px;
-    padding-left:24px;
-}	
-div[class^=country-] {
-    background-image: url("../icons/flags_sprite.png");
-    background-repeat: no-repeat;
-    height: 20px;
-    width: 26px;
-}
-li[class^=country-] {
-    background-image: url("../icons/flags_sprite.png");
-    background-repeat: no-repeat;
-    text-indent: 24px;
-}
-li[class^=country-] a.ui-state-hover { background: transparent; }
-div[class^=country-] span {
-    display: none;
-}
-select.flags option {
-    background-image: url("../icons/flags_sprite.png");
-    background-repeat: no-repeat;
-    padding: 1px 0 1px 30px;
-}
-select.flags option[value=EL] {background-position:0 -1475px}
-select.flags option[value=AD], select.flags option[value=ad], .country-AD {background-position:0 -1px}
-select.flags option[value=AE], select.flags option[value=ae], .country-AE {background-position:0 -23px}
-select.flags option[value=AF], select.flags option[value=af], .country-AF {background-position:0 -45px}
-select.flags option[value=AG], select.flags option[value=ag], .country-AG {background-position:0 -67px}
-select.flags option[value=AI], select.flags option[value=ai], .country-AI {background-position:0 -89px}
-select.flags option[value=AL], select.flags option[value=al], .country-AL {background-position:0 -111px}
-select.flags option[value=AM], select.flags option[value=am], .country-AM {background-position:0 -133px}
-select.flags option[value=AN], select.flags option[value=an], .country-AN {background-position:0 -155px}
-select.flags option[value=AO], select.flags option[value=ao], .country-AO {background-position:0 -177px}
-select.flags option[value=AQ], select.flags option[value=aq], .country-AQ {background-position:0 -199px}
-select.flags option[value=AR], select.flags option[value=ar], .country-AR {background-position:0 -221px}
-select.flags option[value=AS], select.flags option[value=as], .country-AS {background-position:0 -243px}
-select.flags option[value=AT], select.flags option[value=at], .country-AT {background-position:0 -265px}
-select.flags option[value=AU], select.flags option[value=au], .country-AU {background-position:0 -287px}
-select.flags option[value=AW], select.flags option[value=aw], .country-AW {background-position:0 -309px}
-select.flags option[value=AX], select.flags option[value=ax], .country-AX {background-position:0 -331px}
-select.flags option[value=AZ], select.flags option[value=az], .country-AZ {background-position:0 -353px}
-select.flags option[value=BA], select.flags option[value=ba], .country-BA {background-position:0 -375px}
-select.flags option[value=BB], select.flags option[value=bb], .country-BB {background-position:0 -397px}
-select.flags option[value=BD], select.flags option[value=bd], .country-BD {background-position:0 -419px}
-select.flags option[value=BE], select.flags option[value=be], .country-BE {background-position:0 -441px}
-select.flags option[value=BF], select.flags option[value=bf], .country-BF {background-position:0 -463px}
-select.flags option[value=BG], select.flags option[value=bg], .country-BG {background-position:0 -485px}
-select.flags option[value=BH], select.flags option[value=bh], .country-BH {background-position:0 -507px}
-select.flags option[value=BI], select.flags option[value=bi], .country-BI {background-position:0 -529px}
-select.flags option[value=BJ], select.flags option[value=bj], .country-BJ {background-position:0 -551px}
-select.flags option[value=BM], select.flags option[value=bm], .country-BM {background-position:0 -573px}
-select.flags option[value=BN], select.flags option[value=bn], .country-BN {background-position:0 -595px}
-select.flags option[value=BO], select.flags option[value=bo], .country-BO {background-position:0 -617px}
-select.flags option[value=BR], select.flags option[value=br], .country-BR {background-position:0 -639px}
-select.flags option[value=BS], select.flags option[value=bs], .country-BS {background-position:0 -661px}
-select.flags option[value=BT], select.flags option[value=bt], .country-BT {background-position:0 -683px}
-select.flags option[value=BV], select.flags option[value=bv], .country-BV {background-position:0 -705px}
-select.flags option[value=BW], select.flags option[value=bw], .country-BW {background-position:0 -727px}
-select.flags option[value=BY], select.flags option[value=by], .country-BY {background-position:0 -749px}
-select.flags option[value=BZ], select.flags option[value=bz], .country-BZ {background-position:0 -771px}
-select.flags option[value=CA], select.flags option[value=ca], .country-CA {background-position:0 -793px}
-select.flags option[value=CC], select.flags option[value=cc], .country-CC {background-position:0 -837px}
-select.flags option[value=CD], select.flags option[value=cd], .country-CD {background-position:0 -859px}
-select.flags option[value=CF], select.flags option[value=cf], .country-CF {background-position:0 -881px}
-select.flags option[value=CG], select.flags option[value=cg], .country-CG {background-position:0 -903px}
-select.flags option[value=CH], select.flags option[value=ch], .country-CH {background-position:0 -925px}
-select.flags option[value=CI], select.flags option[value=ci], .country-CI {background-position:0 -947px}
-select.flags option[value=CK], select.flags option[value=ck], .country-CK {background-position:0 -969px}
-select.flags option[value=CL], select.flags option[value=cl], .country-CL {background-position:0 -991px}
-select.flags option[value=CM], select.flags option[value=cm], .country-CM {background-position:0 -1013px}
-select.flags option[value=CN], select.flags option[value=cn], .country-CN {background-position:0 -1035px}
-select.flags option[value=CO], select.flags option[value=co], .country-CO {background-position:0 -1057px}
-select.flags option[value=CR], select.flags option[value=cr], .country-CR {background-position:0 -1079px}
-select.flags option[value=CS], select.flags option[value=cs], .country-CS {background-position:0 -1101px}
-select.flags option[value=CU], select.flags option[value=cu], .country-CU {background-position:0 -1123px}
-select.flags option[value=CV], select.flags option[value=cv], .country-CV {background-position:0 -1145px}
-select.flags option[value=CX], select.flags option[value=cx], .country-CX {background-position:0 -1167px}
-select.flags option[value=CY], select.flags option[value=cy], .country-CY {background-position:0 -1189px}
-select.flags option[value=CZ], select.flags option[value=cz], .country-CZ {background-position:0 -1211px}
-select.flags option[value=DE], select.flags option[value=de], .country-DE {background-position:0 -1233px}
-select.flags option[value=DJ], select.flags option[value=dj], .country-DJ {background-position:0 -1255px}
-select.flags option[value=DK], select.flags option[value=dk], .country-DK {background-position:0 -1277px}
-select.flags option[value=DM], select.flags option[value=dm], .country-DM {background-position:0 -1299px}
-select.flags option[value=DO], select.flags option[value=do], .country-DO {background-position:0 -1321px}
-select.flags option[value=DZ], select.flags option[value=dz], .country-DZ {background-position:0 -1343px}
-select.flags option[value=EC], select.flags option[value=ec], .country-EC {background-position:0 -1365px}
-select.flags option[value=EE], select.flags option[value=ee], .country-EE {background-position:0 -1387px}
-select.flags option[value=EG], select.flags option[value=eg], .country-EG {background-position:0 -1409px}
-select.flags option[value=EH], select.flags option[value=eh], .country-EH {background-position:0 -1431px}
-select.flags option[value=ER], select.flags option[value=er], .country-ER {background-position:0 -1475px}
-select.flags option[value=ES], select.flags option[value=es], .country-ES {background-position:0 -1497px}
-select.flags option[value=ET], select.flags option[value=ET], select.flags option[value=et], .country-ET {background-position:0 -1519px}
-select.flags option[value=FI], select.flags option[value=fi], .country-FI {background-position:0 -1585px}
-select.flags option[value=FJ], select.flags option[value=fj], .country-FJ {background-position:0 -1607px}
-select.flags option[value=FK], select.flags option[value=fk], .country-FK {background-position:0 -1629px}
-select.flags option[value=FM], select.flags option[value=fm], .country-FM {background-position:0 -1651px}
-select.flags option[value=FO], select.flags option[value=fo], .country-FO {background-position:0 -1673px}
-select.flags option[value=FR], select.flags option[value=fr], .country-FR {background-position:0 -1695px}
-select.flags option[value=GA], select.flags option[value=ga], .country-GA {background-position:0 -1717px}
-select.flags option[value=GB], select.flags option[value=en], select.flags option[value=gb], .country-GB, .country-EN {background-position:0 -1739px}
-select.flags option[value=GD], select.flags option[value=gd], .country-GD {background-position:0 -1761px}
-select.flags option[value=GE], select.flags option[value=ge], .country-GE {background-position:0 -1783px}
-select.flags option[value=GF], select.flags option[value=gf], .country-GF {background-position:0 -1805px}
-select.flags option[value=GH], select.flags option[value=gh], .country-GH {background-position:0 -1827px}
-select.flags option[value=GI], select.flags option[value=gi], .country-GI {background-position:0 -1849px}
-select.flags option[value=GL], select.flags option[value=gl], .country-GL {background-position:0 -1871px}
-select.flags option[value=GM], select.flags option[value=gm], .country-GM {background-position:0 -1893px}
-select.flags option[value=GN], select.flags option[value=gn], .country-GN {background-position:0 -1915px}
-select.flags option[value=GP], select.flags option[value=gp], .country-GP {background-position:0 -1937px}
-select.flags option[value=GQ], select.flags option[value=gq], .country-GQ {background-position:0 -1959px}
-select.flags option[value=GR], select.flags option[value=el], select.flags option[value=gr], .country-GR, .country-EL {background-position:0 -1981px}
-select.flags option[value=GS], select.flags option[value=gs], .country-GS {background-position:0 -2003px}
-select.flags option[value=GT], select.flags option[value=gt], .country-GT {background-position:0 -2025px}
-select.flags option[value=GU], select.flags option[value=gu], .country-GU {background-position:0 -2047px}
-select.flags option[value=GW], select.flags option[value=gw], .country-GW {background-position:0 -2069px}
-select.flags option[value=GY], select.flags option[value=gy], .country-GY {background-position:0 -2091px}
-select.flags option[value=HK], select.flags option[value=hk], .country-HK {background-position:0 -2113px}
-select.flags option[value=HM], select.flags option[value=hm], .country-HM {background-position:0 -2135px}
-select.flags option[value=HN], select.flags option[value=hn], .country-HN {background-position:0 -2157px}
-select.flags option[value=HR], select.flags option[value=hr], .country-HR {background-position:0 -2179px}
-select.flags option[value=HT], select.flags option[value=ht], .country-HT {background-position:0 -2201px}
-select.flags option[value=HU], select.flags option[value=hu], .country-HU {background-position:0 -2223px}
-select.flags option[value=ID], select.flags option[value=id], .country-ID {background-position:0 -2245px}
-select.flags option[value=IE], select.flags option[value=ie], .country-IE {background-position:0 -2267px}
-select.flags option[value=IL], select.flags option[value=il], .country-IL {background-position:0 -2289px}
-select.flags option[value=IN], select.flags option[value=in], .country-IN {background-position:0 -2311px}
-select.flags option[value=IO], select.flags option[value=io], .country-IO {background-position:0 -2333px}
-select.flags option[value=IQ], select.flags option[value=iq], .country-IQ {background-position:0 -2355px}
-select.flags option[value=IR], select.flags option[value=ir], .country-IR {background-position:0 -2377px}
-select.flags option[value=IS], select.flags option[value=is], .country-IS {background-position:0 -2399px}
-select.flags option[value=IT], select.flags option[value=it], .country-IT {background-position:0 -2421px}
-select.flags option[value=JM], select.flags option[value=jm], .country-JM {background-position:0 -2443px}
-select.flags option[value=JO], select.flags option[value=jo], .country-JO {background-position:0 -2465px}
-select.flags option[value=JP], select.flags option[value=ja], select.flags option[value=jp], .country-JP, .country-JA {background-position:0 -2487px}
-select.flags option[value=KE], select.flags option[value=ke], .country-KE {background-position:0 -2509px}
-select.flags option[value=KG], select.flags option[value=kg], .country-KG {background-position:0 -2531px}
-select.flags option[value=KH], select.flags option[value=kh], .country-KH {background-position:0 -2553px}
-select.flags option[value=KI], select.flags option[value=ki], .country-KI {background-position:0 -2575px}
-select.flags option[value=KM], select.flags option[value=km], .country-KM {background-position:0 -2597px}
-select.flags option[value=KN], select.flags option[value=kn], .country-KN {background-position:0 -2619px}
-select.flags option[value=KP], select.flags option[value=kp], .country-KP {background-position:0 -2641px}
-select.flags option[value=KR], select.flags option[value=kr], .country-KR {background-position:0 -2663px}
-select.flags option[value=KW], select.flags option[value=kw], .country-KW {background-position:0 -2685px}
-select.flags option[value=KY], select.flags option[value=ky], .country-KY {background-position:0 -2707px}
-select.flags option[value=KZ], select.flags option[value=kz], .country-KZ {background-position:0 -2729px}
-select.flags option[value=LA], select.flags option[value=la], .country-LA {background-position:0 -2751px}
-select.flags option[value=LB], select.flags option[value=lb], .country-LB {background-position:0 -2773px}
-select.flags option[value=LC], select.flags option[value=lc], .country-LC {background-position:0 -2795px}
-select.flags option[value=LI], select.flags option[value=li], .country-LI {background-position:0 -2817px}
-select.flags option[value=LK], select.flags option[value=lk], .country-LK {background-position:0 -2839px}
-select.flags option[value=LR], select.flags option[value=lr], .country-LR {background-position:0 -2861px}
-select.flags option[value=LS], select.flags option[value=ls], .country-LS {background-position:0 -2883px}
-select.flags option[value=LT], select.flags option[value=lt], .country-LT {background-position:0 -2905px}
-select.flags option[value=LU], select.flags option[value=lu], .country-LU {background-position:0 -2927px}
-select.flags option[value=LV], select.flags option[value=lv], .country-LV {background-position:0 -2949px}
-select.flags option[value=LY], select.flags option[value=ly], .country-LY {background-position:0 -2971px}
-select.flags option[value=MA], select.flags option[value=ma], .country-MA {background-position:0 -2993px}
-select.flags option[value=MC], select.flags option[value=mc], .country-MC {background-position:0 -3015px}
-select.flags option[value=MD], select.flags option[value=md], .country-MD {background-position:0 -3037px}
-select.flags option[value=ME], select.flags option[value=me], .country-ME {background-position:0 -3059px}
-select.flags option[value=MG], select.flags option[value=mg], .country-MG {background-position:0 -3081px}
-select.flags option[value=MH], select.flags option[value=mh], .country-MH {background-position:0 -3103px}
-select.flags option[value=MK], select.flags option[value=mk], .country-MK {background-position:0 -3125px}
-select.flags option[value=ML], select.flags option[value=ml], .country-ML {background-position:0 -3147px}
-select.flags option[value=MM], select.flags option[value=mm], .country-MM {background-position:0 -3169px}
-select.flags option[value=MN], select.flags option[value=mn], .country-MN {background-position:0 -3191px}
-select.flags option[value=MO], select.flags option[value=mo], .country-MO {background-position:0 -3213px}
-select.flags option[value=MP], select.flags option[value=mp], .country-MP {background-position:0 -3235px}
-select.flags option[value=MQ], select.flags option[value=mq], .country-MQ {background-position:0 -3257px}
-select.flags option[value=MR], select.flags option[value=mr], .country-MR {background-position:0 -3279px}
-select.flags option[value=MS], select.flags option[value=ms], .country-MS {background-position:0 -3301px}
-select.flags option[value=MT], select.flags option[value=mt], .country-MT {background-position:0 -3323px}
-select.flags option[value=MU], select.flags option[value=mu], .country-MU {background-position:0 -3345px}
-select.flags option[value=MV], select.flags option[value=mv], .country-MV {background-position:0 -3367px}
-select.flags option[value=MW], select.flags option[value=mw], .country-MW {background-position:0 -3389px}
-select.flags option[value=MX], select.flags option[value=mx], .country-MX {background-position:0 -3411px}
-select.flags option[value=MY], select.flags option[value=my], .country-MY {background-position:0 -3433px}
-select.flags option[value=MZ], select.flags option[value=mz], .country-MZ {background-position:0 -3455px}
-select.flags option[value=NA], select.flags option[value=na], .country-NA {background-position:0 -3477px}
-select.flags option[value=NC], select.flags option[value=nc], .country-NC {background-position:0 -3499px}
-select.flags option[value=NE], select.flags option[value=ne], .country-NE {background-position:0 -3521px}
-select.flags option[value=NF], select.flags option[value=nf], .country-NF {background-position:0 -3543px}
-select.flags option[value=NG], select.flags option[value=ng], .country-NG {background-position:0 -3565px}
-select.flags option[value=NI], select.flags option[value=ni], .country-NI {background-position:0 -3587px}
-select.flags option[value=NL], select.flags option[value=nl], .country-NL {background-position:0 -3609px}
-select.flags option[value=NO], select.flags option[value=no], .country-NO {background-position:0 -3631px}
-select.flags option[value=NP], select.flags option[value=np], .country-NP {background-position:0 -3653px}
-select.flags option[value=NR], select.flags option[value=nr], .country-NR {background-position:0 -3675px}
-select.flags option[value=NU], select.flags option[value=nu], .country-NU {background-position:0 -3697px}
-select.flags option[value=NZ], select.flags option[value=nz], .country-NZ {background-position:0 -3719px}
-select.flags option[value=OM], select.flags option[value=om], .country-OM {background-position:0 -3741px}
-select.flags option[value=PA], select.flags option[value=pa], .country-PA {background-position:0 -3763px}
-select.flags option[value=PE], select.flags option[value=pe], .country-PE {background-position:0 -3785px}
-select.flags option[value=PF], select.flags option[value=pf], .country-PF {background-position:0 -3807px}
-select.flags option[value=PG], select.flags option[value=pg], .country-PG {background-position:0 -3829px}
-select.flags option[value=PH], select.flags option[value=ph], .country-PH {background-position:0 -3851px}
-select.flags option[value=PK], select.flags option[value=pk], .country-PK {background-position:0 -3873px}
-select.flags option[value=PL], select.flags option[value=pl], .country-PL {background-position:0 -3895px}
-select.flags option[value=PM], select.flags option[value=pm], .country-PM {background-position:0 -3917px}
-select.flags option[value=PN], select.flags option[value=pn], .country-PN {background-position:0 -3939px}
-select.flags option[value=PR], select.flags option[value=pr], .country-PR {background-position:0 -3961px}
-select.flags option[value=PS], select.flags option[value=ps], .country-PS {background-position:0 -3983px}
-select.flags option[value=PT], select.flags option[value=pt], .country-PT {background-position:0 -4005px}
-select.flags option[value=PW], select.flags option[value=pw], .country-PW {background-position:0 -4027px}
-select.flags option[value=PY], select.flags option[value=py], .country-PY {background-position:0 -4049px}
-select.flags option[value=QA], select.flags option[value=qa], .country-QA {background-position:0 -4071px}
-select.flags option[value=RE], select.flags option[value=re], .country-RE {background-position:0 -4093px}
-select.flags option[value=RO], select.flags option[value=ro], .country-RO {background-position:0 -4115px}
-select.flags option[value=RS], select.flags option[value=rs], .country-RS {background-position:0 -4137px}
-select.flags option[value=RU], select.flags option[value=ru], .country-RU {background-position:0 -4159px}
-select.flags option[value=RW], select.flags option[value=rw], .country-RW {background-position:0 -4181px}
-select.flags option[value=SA], select.flags option[value=sa], .country-SA {background-position:0 -4203px}
-select.flags option[value=SB], select.flags option[value=sb], .country-SB {background-position:0 -4225px}
-select.flags option[value=SC], select.flags option[value=sc], .country-SC {background-position:0 -4247px}
-select.flags option[value=SD], select.flags option[value=sd], .country-SD {background-position:0 -4291px}
-select.flags option[value=SE], select.flags option[value=se], .country-SE {background-position:0 -4313px}
-select.flags option[value=SG], select.flags option[value=sg], .country-SG {background-position:0 -4335px}
-select.flags option[value=SH], select.flags option[value=sh], .country-SH {background-position:0 -4357px}
-select.flags option[value=SI], select.flags option[value=si], .country-SI {background-position:0 -4379px}
-select.flags option[value=SJ], select.flags option[value=sj], .country-SJ {background-position:0 -4401px}
-select.flags option[value=SK], select.flags option[value=sk], .country-SK {background-position:0 -4423px}
-select.flags option[value=SL], select.flags option[value=sl], .country-SL {background-position:0 -4445px}
-select.flags option[value=SM], select.flags option[value=sm], .country-SM {background-position:0 -4467px}
-select.flags option[value=SN], select.flags option[value=sn], .country-SN {background-position:0 -4489px}
-select.flags option[value=SO], select.flags option[value=so], .country-SO {background-position:0 -4511px}
-select.flags option[value=SR], select.flags option[value=sr], .country-SR {background-position:0 -4533px}
-select.flags option[value=ST], select.flags option[value=st], .country-ST {background-position:0 -4555px}
-select.flags option[value=SV], select.flags option[value=sv], .country-SV {background-position:0 -4577px}
-select.flags option[value=SY], select.flags option[value=sy], .country-SY {background-position:0 -4599px}
-select.flags option[value=SZ], select.flags option[value=sz], .country-SZ {background-position:0 -4621px}
-select.flags option[value=TC], select.flags option[value=tc], .country-TC {background-position:0 -4643px}
-select.flags option[value=TD], select.flags option[value=td], .country-TD {background-position:0 -4665px}
-select.flags option[value=TF], select.flags option[value=tf], .country-TF {background-position:0 -4687px}
-select.flags option[value=TG], select.flags option[value=tg], .country-TG {background-position:0 -4709px}
-select.flags option[value=TH], select.flags option[value=th], .country-TH {background-position:0 -4731px}
-select.flags option[value=TJ], select.flags option[value=tj], .country-TJ {background-position:0 -4753px}
-select.flags option[value=TK], select.flags option[value=tk], .country-TK {background-position:0 -4775px}
-select.flags option[value=TL], select.flags option[value=tl], .country-TL {background-position:0 -4797px}
-select.flags option[value=TM], select.flags option[value=tm], .country-TM {background-position:0 -4819px}
-select.flags option[value=TN], select.flags option[value=tn], .country-TN {background-position:0 -4841px}
-select.flags option[value=TO], select.flags option[value=to], .country-TO {background-position:0 -4863px}
-select.flags option[value=TR], select.flags option[value=tr], .country-TR {background-position:0 -4885px}
-select.flags option[value=TT], select.flags option[value=tt], .country-TT {background-position:0 -4907px}
-select.flags option[value=TV], select.flags option[value=tv], .country-TV {background-position:0 -4929px}
-select.flags option[value=TW], select.flags option[value=tw], .country-TW {background-position:0 -4951px}
-select.flags option[value=TZ], select.flags option[value=tz], .country-TZ {background-position:0 -4973px}
-select.flags option[value=UA], select.flags option[value=ua], .country-UA {background-position:0 -4995px}
-select.flags option[value=UG], select.flags option[value=ug], .country-UG {background-position:0 -5017px}
-select.flags option[value=UM], select.flags option[value=um], .country-UM {background-position:0 -5039px}
-select.flags option[value=US], select.flags option[value=us], .country-US {background-position:0 -5061px}
-select.flags option[value=UY], select.flags option[value=uy], .country-UY {background-position:0 -5083px}
-select.flags option[value=UZ], select.flags option[value=uz], .country-UZ {background-position:0 -5105px}
-select.flags option[value=VA], select.flags option[value=va], .country-VA {background-position:0 -5127px}
-select.flags option[value=VC], select.flags option[value=vc], .country-VC {background-position:0 -5149px}
-select.flags option[value=VE], select.flags option[value=ve], .country-VE {background-position:0 -5171px}
-select.flags option[value=VG], select.flags option[value=vg], .country-VG {background-position:0 -5193px}
-select.flags option[value=VI], select.flags option[value=vi], .country-VI {background-position:0 -5215px}
-select.flags option[value=VN], select.flags option[value=vn], .country-VN {background-position:0 -5237px}
-select.flags option[value=VU], select.flags option[value=vu], .country-VU {background-position:0 -5259px}
-select.flags option[value=WF], select.flags option[value=wf], .country-WF {background-position:0 -5303px}
-select.flags option[value=WS], select.flags option[value=ws], .country-WS {background-position:0 -5325px}
-select.flags option[value=YE], select.flags option[value=ye], .country-YE {background-position:0 -5347px}
-select.flags option[value=YT], select.flags option[value=yt], .country-YT {background-position:0 -5369px}
-select.flags option[value=ZA], select.flags option[value=za], .country-ZA {background-position:0 -5391px}
-select.flags option[value=ZM], select.flags option[value=zm], .country-ZM {background-position:0 -5413px}
-select.flags option[value=ZW], select.flags option[value=zw], .country-ZW {background-position:0 -5435px}
-
-.panel_login {
-    max-width: 80%;
-    min-width: 680px;
-}
-div.subsectiontoggle {
-    border:1px solid #ccc;
-    font-weight:bold;
-    font-size:14px;
-    padding-top:10px;
-    padding-bottom:0;
-    margin-top:5px;
-    text-indent:15px;
-    cursor:pointer;
-    margin-bottom:10px;
-    background-color:#f4f4f4;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-}
-div.subsectiontoggle span {
-    display:inline-block;
-    margin-bottom:-3px;
-    margin-right:10px;
-    width:16px;
-    height:16px;
-    background: url("../icons/button_sprite.png") 0 -72px no-repeat transparent;
-}
-div.subsectiontoggle span.showing{
-    background-position: 0 -40px;
-}
-div.subsectiontoggle em {
-    display:block;
-    position:relative;
-    left:425px;
-    top:-13px;
-    margin-bottom:-3px;
-    width:13px;
-    height:13px;
-    background:url("../images/chevron.png") top left no-repeat;
-    -webkit-transform:none;
-    -moz-transform:none;
-    -khtml-transform:none;
-    -o-transform:none;
-    -ms-transform:none;
-    transform:none;
-    -webkit-transition-duration: .2s;
-    -moz-transition-duration: .2s;
-    -khtml-transition-duration: .2s;
-    -o-transition-duration: .2s;
-    -ms-transition-duration: .2s;
-    transition-duration: .2s;
-    -webkit-transition-property: -webkit-transform;
-    -moz-transition-property: -moz-transform;
-    -khtml-transition-property: -khtml-transform;
-    -o-transition-property: -o-transform;
-    -ms-transition-property: -ms-transform;
-    transition-property: transform;
-}
-div.subsectiontoggle em.showing {
-    display:block;
-    position:relative;
-    left:425px;
-    top:-13px;
-    background:url("../images/chevron.png") top left no-repeat;
-    width:13px;
-    height:13px;
-    -webkit-transform:rotate(90deg);
-    -moz-transform:rotate(90deg);
-    -khtml-transform:rotate(90deg);
-    -o-transform:rotate(90deg);
-    -ms-transform:rotate(90deg);
-    transform:rotate(90deg);
-}
-div.subsectiontoggle:hover em {
-    -webkit-transform:rotate(90deg);
-    -moz-transform:rotate(90deg);
-    -khtml-transform:rotate(90deg);
-    -o-transform:rotate(90deg);
-    -ms-transform:rotate(90deg);
-    transform:rotate(90deg);
-}
-
-
-div.gs-container {
-    margin-top:10px;
-}
-div.gs-container * {
-    margin: 0;
-    padding: 0;
-    background-position: 0 0;
-    text-decoration: none;
-    font-size: 1em;
-}
-div.gs-container input {
-    background: url("../icons/x16_sprite.png") no-repeat 2px -119px #FFFFFF;
-    height:20px;
-    border:1px solid #444;
-    padding:0 22px 2px;
-    color:#444;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-}
-input.gs-loading {
-    background-image: url("../images/loading.gif");
-    background-repeat: no-repeat;
-    background-position: center right;
-}
-ul.gs-resultbox {
-    margin: 0 !important;
-    padding: 0 !important;
-    width: 300px;
-    z-index: 999999;
-    border: 1px solid #777;
-    font-size: 11px;
-    background: #fff;
-    -moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -o-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    box-shadow: 2px 2px 5px 0 #c5c5c5;
-    list-style: none;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-    max-height:500px;
-    overflow:auto;
-}
-ul.gs-resultbox li {
-    float: left;
-    width: 100%;
-    clear: both;
-    cursor: pointer;
-}
-ul.gs-resultbox li.gs-cheader {
-    height: 13px;
-    overflow: hidden;
-    padding: 5px 0;
-    color: #fff;
-    background: #6ea6d1;
-    cursor:default;
-    padding-bottom:10px;
-}
-ul.gs-resultbox li.gs-cheader p.gs-cheader-title {
-    margin: 0 !important;
-    padding: 0 0 0 10px !important;
-    float: left;
-    font-size: 12px;
-    font-weight: bold;
-}
-ul.gs-resultbox li.gs-cheader p.gs-cheader-limit {
-    margin: 0 !important;
-    padding: 0 10px 0 0 !important;
-    float: right;
-    font-size: 11px;
-    font-weight: normal;
-}
-ul.gs-resultbox li.gs-cdata {
-    margin: 0 !important;
-    padding: 0 !important;
-    border-bottom: 1px solid #c5c5c5;
-}
-ul.gs-resultbox li.gs-cdata:last-child {
-    border-bottom: none;
-}
-ul.gs-resultbox li.gs-cdata:hover {
-    background: #eaf4fd;
-}
-ul.gs-resultbox li.gs-cdata a {
-    display: block;
-    padding: 5px 10px;
-    text-decoration: none !important;
-    background: #fff;
-}
-ul.gs-resultbox li.gs-cdata a:hover {
-    background: #cde0ff;
-}
-ul.gs-resultbox li.gs-cdata img {
-    margin-right: 12px;
-}
-ul.gs-resultbox li.gs-cdata p {
-    margin: 0 !important;
-    padding: 0 !important;
-    color: #444;
-    font-size: 10px;
-    min-height:30px;
-}
-ul.gs-resultbox li.gs-cdata p span.gs-cdata-title {
-    display: inline !important;
-    margin: 0 !important;
-    padding: 0 !important;
-    font-size: 11px;
-    font-weight: bold;
-    color: #000;
-}
-ul.gs-resultbox li:first-child {
-    -moz-border-radius:5px 5px 0 0;
-    -webkit-border-radius:5px 5px 0 0;
-    -khtml-border-radius:5px 5px 0 0;
-    -o-border-radius:5px 5px 0 0;
-    -ms-border-radius:5px 5px 0 0;
-    border-radius:5px 5px 0 0;
-}
-ul.gs-resultbox li:last-child {
-    -moz-border-radius:0 0 5px 5px;
-    -webkit-border-radius:0 0 5px 5px;
-    -khtml-border-radius:0 0 5px 5px;
-    -o-border-radius:0 0 5px 5px;
-    -ms-border-radius:0 0 5px 5px;
-    border-radius:0 0 5px 5px;
-}
-
-div.df-container {
-}
-div.df-container * {
-    margin: 0;
-    padding: 0;
-    background-position: 0 0;
-    text-decoration: none;
-    font-size: 1em;
-}
-div.df-container input {
-}
-input.df-loading {
-    background-image: url("../images/loading.gif");
-    background-repeat: no-repeat;
-    background-position: center right;
-}
-ul.df-resultbox {
-    margin: 0 !important;
-    padding: 0 !important;
-    min-width: 250px;
-    max-width: 500px;
-    z-index: 999999;
-    border: 1px solid #777;
-    font-size: 11px;
-    background: #fff;
-    -moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -o-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    -ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
-    box-shadow: 2px 2px 5px 0 #c5c5c5;
-    list-style: none;
-    -moz-border-radius:5px;
-    -webkit-border-radius:5px;
-    -khtml-border-radius:5px;
-    -o-border-radius:5px;
-    -ms-border-radius:5px;
-    border-radius:5px;
-}
-ul.df-resultbox li {
-    float: left;
-    width: 100%;
-    clear: both;
-    cursor: pointer;
-}
-ul.df-resultbox li.df-cheader {
-    height: 13px;
-    overflow: hidden;
-    padding: 5px 0;
-    color: #fff;
-    background: #6ea6d1;
-    cursor:default;
-    padding-bottom:10px;
-}
-ul.df-resultbox li.df-cheader p.df-cheader-title {
-    margin: 0 !important;
-    padding: 0 0 0 10px !important;
-    float: left;
-    font-size: 12px;
-    font-weight: bold;
-}
-ul.df-resultbox li.df-cheader p.df-cheader-limit {
-    margin: 0 !important;
-    padding: 0 10px 0 0 !important;
-    float: right;
-    font-size: 11px;
-    font-weight: normal;
-}
-ul.df-resultbox li.df-cdata {
-    margin: 0 !important;
-    padding: 0 !important;
-    border-bottom: 1px solid #c5c5c5;
-}
-ul.df-resultbox li.df-cdata:last-child {
-    border-bottom: none;
-}
-ul.df-resultbox li.df-cdata:hover {
-    background: #eaf4fd;
-}
-ul.df-resultbox li.df-cdata a {
-    display: block;
-    padding: 5px 10px;
-    text-decoration: none !important;
-    background: #fff;
-}
-ul.df-resultbox li.df-cdata a:hover {
-    background: #cde0ff;
-}
-ul.df-resultbox li.df-cdata img {
-    margin-right: 12px;
-}
-ul.df-resultbox li.df-cdata p {
-    margin: 0 !important;
-    padding: 0 !important;
-    color: #444;
-    font-size: 10px;
-    min-height:30px;
-}
-ul.df-resultbox li.df-cdata p span.df-cdata-title {
-    display: inline !important;
-    margin: 0 !important;
-    padding: 0 !important;
-    font-size: 11px;
-    font-weight: bold;
-    color: #000;
-}
-ul.df-resultbox li:first-child {
-    -moz-border-radius:5px 5px 0 0;
-    -webkit-border-radius:5px 5px 0 0;
-    -khtml-border-radius:5px 5px 0 0;
-    -o-border-radius:5px 5px 0 0;
-    -ms-border-radius:5px 5px 0 0;
-    border-radius:5px 5px 0 0;
-}
-ul.df-resultbox li:last-child {
-    -moz-border-radius:0 0 5px 5px;
-    -webkit-border-radius:0 0 5px 5px;
-    -khtml-border-radius:0 0 5px 5px;
-    -o-border-radius:0 0 5px 5px;
-    -ms-border-radius:0 0 5px 5px;
-    border-radius:0 0 5px 5px;
-}
-
-span.icons16-empty {
-    float:left;
-    display:block;
-    height:20px;
-    width:20px;
-    margin:0 7px 0 0;
-}
-
-.ttip {
-    width:16px;
-    height:16px;
-    cursor:pointer;
-    background: url("../icons/x16_sprite.png") no-repeat -2px -42px transparent;
-    float:right;
-    display:inline;
-    position:relative;
-    right:-2px;
-    top:-2px;
-}
-
-p.prefix {
-    float: left;
-    margin: 0;
-    text-align: right;
-}
-p.label {
-    float: left;
-    margin: 5px 15px 0 0;
-}
-p.value {
-    float:left;
-    margin: 0 0 0 2px;
-}
-
-/* content_ispc
--------------------------------------------------------------- */
-.tipsy {
-    font-size: 12px !important;
-    position: absolute;
-    padding: 5px;
-    z-index: 100000;
-}
-.tipsy-inner {
-    background-color: #000;
-    color: #FFF;
-    max-width: 350px;
-    padding: 5px 8px 4px 8px;
-    text-align: left;
-}
-
-/* Rounded corners */
-.tipsy-inner {
-    border-radius: 5px;
-    -moz-border-radius: 5px;
-    -webkit-border-radius: 5px;
-}
-
-/* Uncomment for shadow */
-/*.tipsy-inner { box-shadow: 0 0 5px #000000; -webkit-box-shadow: 0 0 5px #000000; -moz-box-shadow: 0 0 5px #000000; }*/
-
-.tipsy-arrow {
-    position: absolute;
-    width: 0;
-    height: 0;
-    line-height: 0;
-    border: 5px dashed #000;
-}
-/* Rules to colour arrows */
-.tipsy-arrow-n { border-bottom-color: #000; }
-.tipsy-arrow-s { border-top-color: #000; }
-.tipsy-arrow-e { border-left-color: #000; }
-.tipsy-arrow-w { border-right-color: #000; }
-
-.tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -5px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; }
-.tipsy-nw .tipsy-arrow { top: 0; left: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
-.tipsy-ne .tipsy-arrow { top: 0; right: 10px; border-bottom-style: solid; border-top: none;  border-left-color: transparent; border-right-color: transparent;}
-.tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-style: solid; border-bottom: none;  border-left-color: transparent; border-right-color: transparent; }
-.tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; border-top-style: solid; border-bottom: none;  border-left-color: transparent; border-right-color: transparent; }
-.tipsy-se .tipsy-arrow { bottom: 0; right: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
-.tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -5px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; }
-.tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -5px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; }
-
-/* uni-form-generic
--------------------------------------------------------------- */
-
-/* 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{}
-
-/* uni-form
--------------------------------------------------------------- */
-
-/* Keep in mind that wherever you see "Required property" it means that the property must exist */
-
-/* ------------------------------------------------------------------------------ */
-
-/* Generals */
-.uniForm fieldset{}
-.uniForm fieldset legend{ color: #333; font-weight: bold; font-size: 100%; margin: 0; padding: 1.5em 1.5em 1.5em 0; }
-
-/* This is the main unit that contains our form elements */
-.uniForm .ctrlHolder{ padding: 3px; border-bottom: 1px dotted #dfdfdf; }
-
-.uniForm .buttonHolder{ 
-    text-align: left; 
-    background: #CEDEEF url("../images/buttonHolder_bg.gif") no-repeat right;
-    margin: 3em 0 1em;
-    padding: 8px;
-}
-.uniForm .resetButton{ float: left; }
-.uniForm .primaryAction{ font-weight: bold; }
-
-/* This class gets added to div.ctrlHolder to highlight the row */
-.uniForm .focused{ background: #fffcdf; }
-
-/* .inlineLabel is used for inputs within labels - checkboxes and radio buttons */
-.uniForm .inlineLabel input,
-.uniForm .inlineLabels .inlineLabel input,
-.uniForm .blockLabels .inlineLabel input{ float: left; margin: 0 .4em 0 0; }
-.uniForm .inlineLabel span{ float: left; width: 90%; }
-
-/* ------------------------------------------------------------------------------ */
-
-/* .blockLabels (default style, will be applied even if you don"t class the parent element) */
-.uniForm .blockLabels .ctrlHolder{}
-
-.uniForm label,
-.uniForm .blockLabels label,
-.uniForm .blockLabels .label{ margin: 0 0 .5em 0; }
-
-.uniForm .textInput,
-.uniForm .blockLabels .textInput,
-.uniForm .blockLabels .fileUpload{ width: 43%; /* <- Required property */ }
-
-.uniForm .selectInput,
-.uniForm select,
-.uniForm .blockLabels .selectInput,
-.uniForm .blockLabels select{ width: 43.5%; /* <- Required property */ }
-.uniForm textarea,
-.uniForm .blockLabels textarea{ width: 43%; /* <- Required property */ height: 12em; }
-
-.uniForm .formHint,
-.uniForm .blockLabels .formHint{ width: 55%; /* <- Required property */ font-size: .9em; color: #777; position: relative; top: -.5em; }
-
-.uniForm .multiField,
-.uniForm .blockLabels .multiField{ width: 43%; }
-.uniForm .multiField .inlineLabel,
-.uniForm .blockLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
-.uniForm .multiField .blockLabel,
-.uniForm .blockLabels .multiField .blockLabel{ width: 30%; margin: 0 10px 0 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: .3em 0 0 0; }
-
-/* ------------------------------------------------------------------------------ */
-
-/* .inlineLabels */
-.uniForm .inlineLabels .ctrlHolder{}
-
-.uniForm .inlineLabels label,
-.uniForm .inlineLabels .label{ width: 20%; /* <- Required property */ margin: .3em 2% 0 0; /* <- Required property */ }
-
-.uniForm .inlineLabels .textInput,
-.uniForm .inlineLabels .fileUpload{ width: 35%; /* <- Required property */ }
-
-.uniForm .inlineLabels .selectInput,
-.uniForm .inlineLabels select{ width: 35%; /* <- Required property */ }
-
-.uniForm .inlineLabels textarea{  width: 35%; /* <- Required property */ height: 12em; }
-
-.uniForm .inlineLabels .formHint{ margin-top: 0; margin-left: 22%; font-size: .9em; color: #777; position: static; }
-
-.uniForm .inlineLabels .multiField{ width: 60%; /* <- Required property */ margin: 0 0 .3em 0; }
-.uniForm .inlineLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
-.uniForm .inlineLabels .multiField .blockLabel{ float: left; width: 26%; margin: 0 3% 0 0; }
-.uniForm .inlineLabels .multiField .blockLabel .textInput,
-.uniForm .inlineLabels .multiField .blockLabel .selectInput,
-.uniForm .inlineLabels .multiField .blockLabel select{ width: 100%; margin: .3em 0 0 0; }
-
-/* Focus pseudoclasses */
-.uniForm .ctrlHolder .textInput:focus{ outline: none; /* Get rid of the "glow" effect in WebKit, optional */ }
-.uniForm .ctrlHolder textarea:focus{ outline: none; /* Get rid of the "glow" effect in WebKit, optional */ }
-.uniForm div.focused .formHint{ color: #333; }
-
-/* Columns (they are floated left by default) */
-.uniForm .col{ width: 37.9%; /* <- Required property */ margin: 0 2% 20px 0; }
-/* Use .first and .last classes to control the layout/spacing of your columns */
-.uniForm .col.first{ width: 39%; /* <- Required property */ float: left; clear: none; }
-.uniForm .col.last{ width: 39%; /* <- Required property */ float: right; clear: none; margin-right: 0; }
-
-/* Messages */
-.uniForm #errorMsg, .confirmpassworderror{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
-.uniForm .error{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; }
-
-.uniForm #errorMsg dt, .uniForm #errorMsg h3{ margin: 0 0 .5em 0; font-size: 100%; line-height: 100%; font-weight: bold; }
-.uniForm #errorMsg dd{ margin: 0; padding: 0; }
-.uniForm #errorMsg ol{ margin: 0; padding: 0; list-style:none;}
-.uniForm #errorMsg ol li{ margin: 0; padding: 2px; list-style-position: inside; border-bottom: 1px dotted #df7d7d; position: relative; }
-.uniForm .errorField{ color: #af4c4c; margin: 0 0 6px 0; padding: 4px; background: #ffbfbf; }
-
-.uniForm #OKMsg, .confirmpasswordok{ background: #C8FFBF; border: 1px solid #A2EF95; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
-.uniForm #OKMsg p{ margin: 0; }
-
-/* ------------------------------------------------------------------------------ */
-
-/* This is the main unit that contains our form elements */
-
-.uniForm .textInput, .uniForm .selectInput, .uniForm textarea {
-    background:#FFFFFF none repeat scroll 0 0;
-    color: #000000;
-    border: 1px solid #DFDFDF;
-    padding: 1px;
-}
-
-/* jquery-ui-custom
--------------------------------------------------------------- */
-.ui-datepicker-calendar thead tr th {
-    background-image:none;
-    background-color:#FFFFFF;
-    color:#000000;
-}
-.ui-widget { font-family: "Trebuchet MS", Arial, sans-serif; font-size: 100%; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: "Trebuchet MS", Arial, sans-serif; font-size: 100%; }
-ul.ui-autocomplete { max-height: 250px; overflow-y: auto; min-width: 85px;}
-.ui-combobox { position: relative; display: inline-block; margin-right: 17px; }
-.ui-combobox-toggle { position: absolute !important; top: 0; bottom: 0; margin-left: -1px; padding: 1px !important; background: none repeat scroll 0 0 #FFFFFF !important; border: 1px solid #DFDFDF !important;}
-.ui-combobox-input { background: none repeat scroll 0 0 #FFFFFF !important; border: 1px solid #DFDFDF !important; padding: 1px; font-weight: normal !important; }
-.panel_install_package .ui-combobox { float: left; }
-.clear-float { clear: both; }
-
-a.link-page, span.page-spacer {
-    display: inline-block;
-    text-align: center;
-    padding: 2px;
-    line-height: 16px;
-    text-decoration: none !important;
-    color: inherit !important;
-    min-width: 16px;
-}
-a.link-page {
-    border: 1px solid #FFFFFF;
-    margin: 0 5px;
-}
-
-a.link-page:hover {
-    background-color: #DFDFDF;
-}
-
-span.page-spacer {
-    margin: 0 -5px;
-}
-
-a.link-page.current-page {
-    background-color: #DFDFDF;
-    font-weight: bold;
-}
-
-.command {
-    padding: 1em;
-    border: 1px dashed #2f6fab;
-    color: black;
-    background-color: #f9f9f9;
-    line-height: 1.1em;
-    font-family: Courier New, Courier, mono;
-    font-size: 12px;
-    font-style: italic;
-}
-.system {
-    color: black;
-    font-family: Courier New, Courier, mono;
-    font-size: 12px;
-    font-style: italic;
-}
-.highlight {
-    color: #FF0000;
-    font-family: Georgia, "Times New Roman", Times, serif;
-    font-size: 12px;
-    text-decoration: underline;
-}
-
-.custom-combobox {
-    position: relative !important;
-    display: inline-block !important;
-    overflow: hidden;
-    padding-right: 10px;
-    max-width: 356px;
-}
-.custom-combobox-toggle {
-    background: none repeat scroll 0 0 #ffffff !important;
-    border: 1px solid #dfdfdf !important;
-    position: absolute !important;
-    top: 0 !important;
-    right: -1px;
-    z-index: 5000;
-    bottom: 0 !important;
-    margin-left: -1px !important;
-    padding: 1px !important;
-    /* support: IE7 */
-    *height: 1.7em !important;
-    *top: 0.1em !important;
-    width: 17px !important;
-}
-.custom-combobox-input {
-    background: none repeat scroll 0 0 #ffffff !important;
-    border: 1px solid #dfdfdf !important;
-    font-weight: normal !important;
-    margin: 0 !important;
-    padding: 0.3em !important;
-    display: inline-block !important;
-    width: 100%;
-}
-
-.tbl_col_limit .custom-combobox-toggle {
-	right: 0px;
-}
-
-.tbl_col_limit .custom-combobox-input {
-	width: 80% !important;
-}
-
-.tbl_col_limit input {
-    padding: 0.3em !important;	
-}
-
-.ui-autocomplete {
-	overflow-x: hidden !important;
-	padding-bottom: 3px !important;
-}
-
-li.ui-menu-item {
-	display: block !important;
-	width: auto !important;
-	margin-right: -1px !important;
-	margin-bottom: -1px !important;
-	margin-top: -1px !important;
-	font-weight: normal !important;
-	border: 1px solid #fff !important;
-	padding-left: 4px !important;
-	margin-left: 0px !important
-}
\ No newline at end of file
diff --git a/interface/web/themes/default/icons/button_sprite.png b/interface/web/themes/default/icons/button_sprite.png
deleted file mode 100644
index a5df0e0..0000000
--- a/interface/web/themes/default/icons/button_sprite.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/device_sprite.png b/interface/web/themes/default/icons/device_sprite.png
deleted file mode 100644
index 1095366..0000000
--- a/interface/web/themes/default/icons/device_sprite.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16/arrow.png b/interface/web/themes/default/icons/x16/arrow.png
deleted file mode 100644
index 82cfae3..0000000
--- a/interface/web/themes/default/icons/x16/arrow.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16/arrow_180.png b/interface/web/themes/default/icons/x16/arrow_180.png
deleted file mode 100644
index a1e5e6b..0000000
--- a/interface/web/themes/default/icons/x16/arrow_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16/arrow_stop.png b/interface/web/themes/default/icons/x16/arrow_stop.png
deleted file mode 100644
index 702b9b7..0000000
--- a/interface/web/themes/default/icons/x16/arrow_stop.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16/arrow_stop_180.png b/interface/web/themes/default/icons/x16/arrow_stop_180.png
deleted file mode 100644
index 573ff48..0000000
--- a/interface/web/themes/default/icons/x16/arrow_stop_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16/cross_circle.png b/interface/web/themes/default/icons/x16/cross_circle.png
deleted file mode 100644
index e0886b8..0000000
--- a/interface/web/themes/default/icons/x16/cross_circle.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16/tick_circle.png b/interface/web/themes/default/icons/x16/tick_circle.png
deleted file mode 100644
index 26b2d5a..0000000
--- a/interface/web/themes/default/icons/x16/tick_circle.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x16_sprite.png b/interface/web/themes/default/icons/x16_sprite.png
deleted file mode 100644
index 612c53b..0000000
--- a/interface/web/themes/default/icons/x16_sprite.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/icons/x32_sprite.png b/interface/web/themes/default/icons/x32_sprite.png
deleted file mode 100644
index 5c9f04f..0000000
--- a/interface/web/themes/default/icons/x32_sprite.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/ajax-loader.gif b/interface/web/themes/default/images/ajax-loader.gif
deleted file mode 100644
index 7c4804e..0000000
--- a/interface/web/themes/default/images/ajax-loader.gif
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/buttonHolder_bg.gif b/interface/web/themes/default/images/buttonHolder_bg.gif
deleted file mode 100644
index 45dc0da..0000000
--- a/interface/web/themes/default/images/buttonHolder_bg.gif
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/chevron.png b/interface/web/themes/default/images/chevron.png
deleted file mode 100644
index 7ca0587..0000000
--- a/interface/web/themes/default/images/chevron.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/favicon.ico b/interface/web/themes/default/images/favicon.ico
deleted file mode 100644
index da6257c..0000000
--- a/interface/web/themes/default/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/header_bg.png b/interface/web/themes/default/images/header_bg.png
deleted file mode 100644
index f53a8b4..0000000
--- a/interface/web/themes/default/images/header_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/header_logo.png b/interface/web/themes/default/images/header_logo.png
deleted file mode 100644
index d85333a..0000000
--- a/interface/web/themes/default/images/header_logo.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/lists_tfoot_bg.png b/interface/web/themes/default/images/lists_tfoot_bg.png
deleted file mode 100644
index fe3acff..0000000
--- a/interface/web/themes/default/images/lists_tfoot_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/lists_thead_bg.png b/interface/web/themes/default/images/lists_thead_bg.png
deleted file mode 100644
index c75d17f..0000000
--- a/interface/web/themes/default/images/lists_thead_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/loading.gif b/interface/web/themes/default/images/loading.gif
deleted file mode 100644
index 19afda1..0000000
--- a/interface/web/themes/default/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/meter_bg.gif b/interface/web/themes/default/images/meter_bg.gif
deleted file mode 100644
index 6b38c6e..0000000
--- a/interface/web/themes/default/images/meter_bg.gif
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/images/screen_bg.png b/interface/web/themes/default/images/screen_bg.png
deleted file mode 100644
index 5cfb149..0000000
--- a/interface/web/themes/default/images/screen_bg.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default/js/html5shiv.js b/interface/web/themes/default/js/html5shiv.js
deleted file mode 100644
index c2d5512..0000000
--- a/interface/web/themes/default/js/html5shiv.js
+++ /dev/null
@@ -1,220 +0,0 @@
-/*! HTML5 Shiv v3.5 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
-;(function(window, document) {
-
-  /** Preset options */
-  var options = window.html5 || {};
-
-  /** Used to skip problem elements */
-  var reSkip = /^<|^(?:button|form|map|select|textarea|object|iframe|option|optgroup)$/i;
-
-  /** Not all elements can be cloned in IE (this list can be shortend) **/
-  var saveClones = /^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i;
-
-  /** Detect whether the browser supports default html5 styles */
-  var supportsHtml5Styles;
-
-  /** Detect whether the browser supports unknown elements */
-  var supportsUnknownElements;
-
-  (function() {
-    var a = document.createElement('a');
-
-    a.innerHTML = '<xyz></xyz>';
-
-    //if the hidden property is implemented we can assume, that the browser supports HTML5 Styles | this fails in Chrome 8
-    supportsHtml5Styles = ('hidden' in a);
-    //if we are part of Modernizr, we do an additional test to solve the Chrome 8 fail
-    if(supportsHtml5Styles && typeof injectElementWithStyles == 'function'){
-        injectElementWithStyles('#modernizr{}', function(node){
-            node.hidden = true;
-            supportsHtml5Styles = (window.getComputedStyle ?
-                  getComputedStyle(node, null) :
-                  node.currentStyle).display == 'none';
-        });
-    }
-
-    supportsUnknownElements = a.childNodes.length == 1 || (function() {
-      // assign a false positive if unable to shiv
-      try {
-        (document.createElement)('a');
-      } catch(e) {
-        return true;
-      }
-      var frag = document.createDocumentFragment();
-      return (
-        typeof frag.cloneNode == 'undefined' ||
-        typeof frag.createDocumentFragment == 'undefined' ||
-        typeof frag.createElement == 'undefined'
-      );
-    }());
-
-  }());
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * Creates a style sheet with the given CSS text and adds it to the document.
-   * @private
-   * @param {Document} ownerDocument The document.
-   * @param {String} cssText The CSS text.
-   * @returns {StyleSheet} The style element.
-   */
-  function addStyleSheet(ownerDocument, cssText) {
-    var p = ownerDocument.createElement('p'),
-        parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
-
-    p.innerHTML = 'x<style>' + cssText + '</style>';
-    return parent.insertBefore(p.lastChild, parent.firstChild);
-  }
-
-  /**
-   * Returns the value of `html5.elements` as an array.
-   * @private
-   * @returns {Array} An array of shived element node names.
-   */
-  function getElements() {
-    var elements = html5.elements;
-    return typeof elements == 'string' ? elements.split(' ') : elements;
-  }
-
-  /**
-   * Shivs the `createElement` and `createDocumentFragment` methods of the document.
-   * @private
-   * @param {Document|DocumentFragment} ownerDocument The document.
-   */
-  function shivMethods(ownerDocument) {
-    var cache = {},
-        docCreateElement = ownerDocument.createElement,
-        docCreateFragment = ownerDocument.createDocumentFragment,
-        frag = docCreateFragment();
-
-    ownerDocument.createElement = function(nodeName) {
-      //abort shiv
-      if(!html5.shivMethods){
-          return docCreateElement(nodeName);
-      }
-
-      var node;
-
-      if(cache[nodeName]){
-          node = cache[nodeName].cloneNode();
-      } else if(saveClones.test(nodeName)){
-           node = (cache[nodeName] = docCreateElement(nodeName)).cloneNode();
-      } else {
-          node = docCreateElement(nodeName);
-      }
-
-      // Avoid adding some elements to fragments in IE < 9 because
-      // * Attributes like `name` or `type` cannot be set/changed once an element
-      //   is inserted into a document/fragment
-      // * Link elements with `src` attributes that are inaccessible, as with
-      //   a 403 response, will cause the tab/window to crash
-      // * Script elements appended to fragments will execute when their `src`
-      //   or `text` property is set
-      return node.canHaveChildren && !reSkip.test(nodeName) ? frag.appendChild(node) : node;
-    };
-
-    ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
-      'var n=f.cloneNode(),c=n.createElement;' +
-      'h.shivMethods&&(' +
-        // unroll the `createElement` calls
-        getElements().join().replace(/\w+/g, function(nodeName) {
-          docCreateElement(nodeName);
-          frag.createElement(nodeName);
-          return 'c("' + nodeName + '")';
-        }) +
-      ');return n}'
-    )(html5, frag);
-  }
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * Shivs the given document.
-   * @memberOf html5
-   * @param {Document} ownerDocument The document to shiv.
-   * @returns {Document} The shived document.
-   */
-  function shivDocument(ownerDocument) {
-    var shived;
-    if (ownerDocument.documentShived) {
-      return ownerDocument;
-    }
-    if (html5.shivCSS && !supportsHtml5Styles) {
-      shived = !!addStyleSheet(ownerDocument,
-        // corrects block display not defined in IE6/7/8/9
-        'article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +
-        // corrects audio display not defined in IE6/7/8/9
-        'audio{display:none}' +
-        // corrects canvas and video display not defined in IE6/7/8/9
-        'canvas,video{display:inline-block;*display:inline;*zoom:1}' +
-        // corrects 'hidden' attribute and audio[controls] display not present in IE7/8/9
-        '[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}' +
-        // adds styling not present in IE6/7/8/9
-        'mark{background:#FF0;color:#000}'
-      );
-    }
-    if (!supportsUnknownElements) {
-      shived = !shivMethods(ownerDocument);
-    }
-    if (shived) {
-      ownerDocument.documentShived = shived;
-    }
-    return ownerDocument;
-  }
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * The `html5` object is exposed so that more elements can be shived and
-   * existing shiving can be detected on iframes.
-   * @type Object
-   * @example
-   *
-   * // options can be changed before the script is included
-   * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
-   */
-  var html5 = {
-
-    /**
-     * An array or space separated string of node names of the elements to shiv.
-     * @memberOf html5
-     * @type Array|String
-     */
-    'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video',
-
-    /**
-     * A flag to indicate that the HTML5 style sheet should be inserted.
-     * @memberOf html5
-     * @type Boolean
-     */
-    'shivCSS': !(options.shivCSS === false),
-
-    /**
-     * A flag to indicate that the document's `createElement` and `createDocumentFragment`
-     * methods should be overwritten.
-     * @memberOf html5
-     * @type Boolean
-     */
-    'shivMethods': !(options.shivMethods === false),
-
-    /**
-     * A string to describe the type of `html5` object ("default" or "default print").
-     * @memberOf html5
-     * @type String
-     */
-    'type': 'default',
-
-    // shivs the document according to the specified `html5` object options
-    'shivDocument': shivDocument
-  };
-
-  /*--------------------------------------------------------------------------*/
-
-  // expose html5
-  window.html5 = html5;
-
-  // shiv the document
-  shivDocument(document);
-
-}(this, document));
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/error.tpl.htm b/interface/web/themes/default/templates/error.tpl.htm
index d75fda4..f0c1081 100644
--- a/interface/web/themes/default/templates/error.tpl.htm
+++ b/interface/web/themes/default/templates/error.tpl.htm
@@ -1,8 +1,9 @@
-<div class="uniForm">
-    <div id="errorMsg">
-        <h3>Error</h3>
-        <ol>
-            <li>###ERRORMSG###</li>
-        </ol>
-    </div>
-</div>
\ No newline at end of file
+<div class='alert alert-danger clear'>
+  <div class='alert-label'><strong><tmpl_var name="error_txt"></strong></div>
+  <div class='alert-content'>
+	<ol>
+		<li>###ERRORMSG###</li>
+	</ol>
+	<div>TODO: WRONG HTML ELEMENTS</div>
+  </div>
+</div>
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 9ea714f..eea836c 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -1,194 +1,125 @@
 <!DOCTYPE html>
-<html dir="ltr" lang="en-US">      
-    <head>
-        <!--Possible? Vars in lang= ?-->
-        <meta charset="<tmpl_var name="html_content_encoding">" />
-        <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
-        <meta http-equiv="X-UA-Compatible" content="IE=9"/>
-        <link href="themes/default/css/styles.css" rel="stylesheet" media="screen" type="text/css" />
-        <link href="themes/default/css/print.css" rel="stylesheet" media="print" type="text/css" />
-        <!--[if IE 9]><link href="themes/default/css/iehacks.css" rel="stylesheet" type="text/css" /><![endif]-->
-        <!--[if lte IE 8]><script type="text/javascript" src="themes/default/js/html5shiv.js"></script><![endif]-->
-        <!--[if lte IE 7]><link href="themes/default/css/iehacks.css" rel="stylesheet" type="text/css" /><![endif]-->
-        <link href="themes/default/css/jquery-ui-1.11.1.min.css" rel="stylesheet" type="text/css" />
-        <link href="themes/default/css/jquery-ui-1.11.1.structure.min.css" rel="stylesheet" type="text/css" />
-        <link href="themes/default/css/jquery-ui-1.11.1.theme.min.css" rel="stylesheet" type="text/css" />
-        <link rel="shortcut icon" href="/themes/default/images/favicon.ico" />
-        <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
-        <script type="text/javascript" src="js/jquery-ui-1.11.1.custom.min.js"></script>
-        <script type="text/javascript" src="js/scrigo.js.php"></script>
-        <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
-        <script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
-        <script type="text/javascript" src="js/jquery.tipsy.js"></script>
-        <script type="text/javascript" src="js/jquery.combobox.js"></script>
-        <script type="text/javascript" src="js/chosen/chosen.jquery.min.js"></script>
-        <tmpl_loop name="js_d_includes">
-            <script type="text/javascript" src="js/js.d/<tmpl_var name='file'>"></script>
-        </tmpl_loop>
-        <script language="JavaScript" type="text/javascript">
-            $(document).ready(function() {
-                loadInitContent();
-				
-				$('form').not('#dummy_login_form').attr('autocomplete','off');
-                
-                $("#pageForm").submit(function(e){
-                    //Prevent form submit: e.preventDefault() in lists
-                    if ($(".panel #Filter").length > 0) {
-                        e.preventDefault();
-                    }
-                });
-                
-                $('#globalsearch').ispconfigSearch({
-                    dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
-                    resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-                    noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-                    noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-                    searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">'
-                });
-                
-                $('.ttip').tipsy({live: true, gravity: 'ne', html: true});
-                
-                tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled">';
-                tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled">';
-                tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
-                tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
-				
-				// Store password in browser; works in Firefox, but not Chrome
-				$(document).on('keyup', '#username', function() {
-					$('#username').on("blur", function(){
-						if($('#username').val() == '') {
-							return true;
-						}
-						if($('#dummy_username').val() == '' || $('#dummy_username').val() != $(this).val()){
-							$('#dummy_login').show();
-							$('#dummy_username').attr('value', $(this).val()).trigger('focus').trigger('blur');
-							$('#dummy_login').hide();
-						}
-						if($('#dummy_username').val() == $(this).val() && $(this).val() != ''){
-							$('#passwort').val($('#dummy_passwort').val());
-						} else {
-							$('#passwort').val('');
-						}
-						$('#passwort').focus();
-					});
-					
-					$('#username').on("keyup", function(){
-						$('#dummy_username').val('');
-						$('#dummy_passwort').val('');
-						$('#passwort').val('');
-					});
-				});
+<html lang='en'>
+<head>
+  <meta charset='utf-8' />
 
-	            $(document).on("change", function(event) {
-	                var elName = event.target.localName;
-	                if ($(".panel #Filter").length > 0 && elName == 'select') {
-	                    event.preventDefault();
-	                    $(".panel #Filter").trigger('click');
-	                }
-	                if(elName == 'select' || elName == 'input' || elName == 'textarea') {
-	                    if($(event.target).hasClass('no-page-form-change') == false) {
-	                        // set marker that something was changed
-	                        pageFormChanged = true;
-	                    }
-	                }
-	            });
+  <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
 
-				
-            });
-            
-            
-            $(document).bind("keypress", function(event) {
-                //Use $ submit with keypress Enter in panel filterbar
-                if (event.which == '13' && $(".panel #Filter").length > 0 && $(event.target).hasClass('ui-autocomplete-input') == false ) {
-                    event.preventDefault();
-                    $(".panel #Filter").trigger('click');
-                }
-                //Use $ submit with keypress Enter in forms
-                if (event.which == '13' && $(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
-                    event.preventDefault();
-                    $(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
-                }
-            });
-            
-            $(document).delegate('.pnl_listarea th', 'click', function(event) {
-                if($(this).attr('class').length > 0 && $(".panel #Filter").length > 0 && $(this).hasClass('tbl_col_buttons') == false && $(this).hasClass('tbl_col_limit') == false && $(this).hasClass('tbl_col_nosort') == false) {
-                  event.preventDefault();
-                  var clickevent = $('#Filter').attr('onclick');
-                  var element = $(this).attr('class');
-                  if(typeof clickevent == 'string') {
-                      $('#Filter').attr('onclick', clickevent.replace(".php')", ".php?orderby=" + element + "')"));
-                  }
-                  $(".panel #Filter").trigger('click');
-                  
-                  $("#pageForm").ajaxComplete(function() {
-                      if($("th."+element).css("background-position") == '0px -15px') {
-                        if($("th."+element).css("text-align") == "right") {
-                          $("th."+element).css("text-align","left");
-                        } else {
-                          $("th."+element).css("text-align","right");
-                        }
-                      } else {
-                        $(".pnl_listarea th").css("text-align","");
-                      }
-                      $(".pnl_listarea th").css("background-position","0 0");
-                      $("th."+element).css("background-position","0 -15px");
-                  });
-                }
-            });
-            
-        </script>
-    </head>
-    <body>
-        <div id="page">
-            <!-- begin: header -->
-            <header>
-                <nav id="topsubnav">
-                    <!-- start: skip link navigation -->
-                    <a class="skip" href="#navigation" title="skip link">Skip to the navigation</a><span class="hideme">.</span>
-                    <a class="skip" href="#content" title="skip link">Skip to the content</a><span class="hideme">.</span>
-                    <!-- end: skip link navigation -->
-                    <tmpl_if name="cpuser">
-                        <a href="#logout" onclick="loadContent('login/logout.php');"><tmpl_var format="strtoupper" name="logout_txt"> <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>-->
-                        <tmpl_if name='usertype' op='==' value='normaluser'><input type="text" id="globalsearch" size="25" value="" /></tmpl_if>
-                    </tmpl_if>
-                </nav>
-                <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
-                <span>hosting control panel</span>
-            </header>
-            <!-- end: header -->
-            <a id="navigation" name="navigation"></a><!-- skiplink anchor: navigation -->
-            <!-- begin: main navigation #nav -->
-            <nav id="topNav">&nbsp;</nav>
-            <!-- end: main navigation -->
+  <meta name='viewport' content='width=device-width, user-scalable=yes'>
+  <meta name='description' lang='en' content='' />
+  <meta name='keywords' lang='en' content='' />
+  <meta name='robots' content='index, follow' />
 
-            <!-- begin: main content area #main -->
-            <section id="main" name="content">
-                <nav id="sideNav" class="clearfix">&nbsp;</nav>
-                <!-- begin: #content -->
-                <section id="content">
-                    <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
-						<input type="text" style="display:none" /><input type="password" style="display:none"/>
-                        <div id="pageContent"><!-- AJAX CONTENT --></div>
-                    </form>
-                    <div id="ie_clearing">&nbsp;</div>
-                    <!-- End: IE Column Clearing -->
-                </section>
-                <!-- end: #content -->
-            </section>
-            <!-- end: #main -->
-            <!-- begin: footer -->
-            <footer>
-                Powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
-            </footer><!-- end: footer -->
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/fonts.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/ispconfig.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/pushy.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap-datetimepicker.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/responsive.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/themes/default/theme.min.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/select2.css' />
+  <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/select2-bootstrap.css' />
+  <tmpl_if name='logged_in' value='n'><link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/login.css' /></tmpl_if>
+</head>
+
+<body>
+  <!-- off canvas -->
+  <nav class='pushy pushy-left'></nav>
+  <div class='site-overlay'></div>
+
+  <div id='container'>
+    <div id='main-wrapper'>
+      <div id='inner-wrapper'>
+        <div class='clear'>
+          <div class='left clear'>
+            <!-- off canvas menu button -->
+            <div class='menu-btn left'>&#9776;</div>
+            <!-- logo -->
+            <div id='logo' style="background: url({tmpl_var name="base64_logo_txt"}) no-repeat;width:{tmpl_var name="base64_logo_width"};height:{tmpl_var name="base64_logo_height"}"><a href='#'></a></div>
+          </div>
+          <div id='headerbar' class='clear'>
+            <!-- logout button -->
+            <tmpl_if name="cpuser">
+				<button type='button' id='logout-button' class='btn btn-sm btn-danger' data-load-content="login/logout.php"><tmpl_var format="strtoupper" name="logout_txt"> <tmpl_var format="strtoupper" name="cpuser"></button>
+				<tmpl_if name='usertype' op='==' value='normaluser'>
+					<!-- search field -->
+					<form action='#' method='get' id='searchform' role='form'>
+					  <div>
+						<div>
+						  <div class='input-group'>
+							<input id='globalsearch' type='text' class='form-control' placeholder='Search' />
+							<span class='input-group-btn'>
+							  <button class='btn btn-default' title='Search…'>
+								<span class='icon icon-lens'></span>
+							  </button>
+							</span>
+						  </div>
+						</div>
+					  </div>
+					</form>
+				</tmpl_if>
+            </tmpl_if>
+          </div>
         </div>
-		
-<div id="dummy_login" style="display:none;position:absolute;top:-1000px;left:-1000px;">
-<form action="" method="post" target="dummy_login" id="dummy_login_form">
-<input name="username" id="dummy_username" type="text" autocomplete="on" value="" />
-<input name="passwort" id="dummy_passwort" type="password" autocomplete="on" value="" />
-<input type="submit" value="Login" id="dummy_submit"/>
-</form>
-<iframe id="dummy_iframe" src="dummy_login.html" name="dummy_login" style="display:none;"></iframe>
-</div>
-    </body>
-</html>
+		<tmpl_if name='logged_in' value='y'><div id='topnav-container'>
+		</div></tmpl_if>
+		<div class='clear'>
+          <!-- content -->
+          <div id='content' class='right'>
+			<form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class='form-horizontal' role='form'>
+				<div id="pageContent"><!-- AJAX CONTENT --></div>
+			</form>
+          </div>
+          <!-- news sidebar -->
+          <tmpl_if name='logged_in' value='y'><div id='sidebar' class='news-sidebar left'>
+          </div></tmpl_if>
+        </div>
+        <footer id='footer'>
+          powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
+        </footer>
+      </div>
+    </div>
+  </div>
+
+  <script type="text/javascript" src="js/jquery.min.js"></script>
+  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/bootstrap.min.js'></script>
+  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/bootstrap-datetimepicker.min.js'></script>
+  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/ispconfig.min.js'></script>
+  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/modernizr.custom.min.js'></script>
+  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/pushy.min.js'></script>
+  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/responsive.min.js'></script>
+  <script src='js/select2/select2.min.js'></script>
+  <script src='js/scrigo.js.php'></script>
+  <script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
+  <script type="text/javascript" src="js/jquery.tipsy.js"></script>
+  <tmpl_loop name="js_d_includes">
+	<script type="text/javascript" src="js/js.d/<tmpl_var name='file'>"></script>
+  </tmpl_loop>
+  <script>
+  <!--
+	//$('.ttip').tipsy({live: true, gravity: 'ne', html: true});
+	
+	ISPConfig.tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled">';
+	ISPConfig.tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled">';
+	ISPConfig.tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
+	ISPConfig.tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
+	
+	<tmpl_if name="use_loadindicator" value="y">ISPConfig.setOption('useLoadIndicator', true);</tmpl_if>
+	<tmpl_if name="use_combobox" value="y">ISPConfig.setOption('useComboBox', true);</tmpl_if>
+	
+	$(document).ready(function() {
+		$('#globalsearch').ispconfigSearch({
+			dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
+			resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
+			noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
+			noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
+			searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">',
+			resultBoxPosition: ''
+		});
+
+	});
+  //-->
+  </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/module.tpl.htm b/interface/web/themes/default/templates/module.tpl.htm
index f8a26de..ebbaf91 100644
--- a/interface/web/themes/default/templates/module.tpl.htm
+++ b/interface/web/themes/default/templates/module.tpl.htm
@@ -19,7 +19,7 @@
                     <tmpl_loop name="nav_left">
                         <table bgcolor="#F4F6FB" width="115">
                             <tr>
-                                <td class="navLeftHead"><tmpl_var name="title"></td>
+                                <td><tmpl_var name="title"></td>
                             </tr>
                             <tr>
                                 <td>
diff --git a/interface/web/themes/default/templates/module_tree.tpl.htm b/interface/web/themes/default/templates/module_tree.tpl.htm
index be21381..3eca1df 100644
--- a/interface/web/themes/default/templates/module_tree.tpl.htm
+++ b/interface/web/themes/default/templates/module_tree.tpl.htm
@@ -20,7 +20,7 @@
                     <tmpl_loop name="nav_left">
                         <table bgcolor="#F4F6FB" width="115">
                             <tr>
-                                <td class="navLeftHead"><tmpl_var name="title"></td>
+                                <td><tmpl_var name="title"></td>
                             </tr>
                             <tr>
                                 <td>
diff --git a/interface/web/themes/default/templates/sidenav.tpl.htm b/interface/web/themes/default/templates/sidenav.tpl.htm
index b42ea66..b851003 100644
--- a/interface/web/themes/default/templates/sidenav.tpl.htm
+++ b/interface/web/themes/default/templates/sidenav.tpl.htm
@@ -1,28 +1,22 @@
-<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">
-                        <tmpl_if name="target" op="==" value="_blank">
-                        <a href="<tmpl_var name='link'>" target="_blank">
-                        <tmpl_else>
-                        <a href="#" onclick="loadContent('<tmpl_var name='link'>')">
-                        </tmpl_if>
-                    </tmpl_if>
-                    <tmpl_var name="title">
-                    <tmpl_if name="link">
-                        </a>
-                    </tmpl_if>
-                </li>
-            </tmpl_loop>
-    </tmpl_loop>
-</ul>
\ No newline at end of file
+<tmpl_loop name="nav_left">
+	<header><tmpl_if name="startpage"><a href="#" class="subnav-header" data-load-content="<tmpl_var name='startpage'>"></tmpl_if><tmpl_var name="title"><tmpl_if name="startpage"></a></tmpl_if></header>
+	<ul id="sub-navigation">
+	  <tmpl_loop name="items">
+	  <li<tmpl_if name="html_id"> id='<tmpl_var name="html_id">' </tmpl_if>>
+		<tmpl_if name="link">
+			<tmpl_if name="target" op="==" value="_blank">
+				<a href="<tmpl_var name='link'>" target="_blank">
+			<tmpl_else>
+				<a href="#" data-load-content="<tmpl_var name='link'>">
+			</tmpl_if>
+		</tmpl_if>
+		  <div>
+			<strong><tmpl_var name="title"></strong>
+		  </div>
+		<tmpl_if name="link">
+		</a>
+		</tmpl_if>
+	  </li>
+	  </tmpl_loop>
+	</ul>
+</tmpl_loop>
diff --git a/interface/web/themes/default/templates/tabbed_form.tpl.htm b/interface/web/themes/default/templates/tabbed_form.tpl.htm
index 08002d5..5560f3e 100644
--- a/interface/web/themes/default/templates/tabbed_form.tpl.htm
+++ b/interface/web/themes/default/templates/tabbed_form.tpl.htm
@@ -1,27 +1,43 @@
-<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="#" onclick="return 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="#" onclick="return changeTab('<tmpl_var name='name'>','<tmpl_var name='app_module'>/<tmpl_var name='form_action'>')"><tmpl_var name='title'></a></li>
-            </tmpl_if>
+	<tmpl_if name="form_hint">
+		<div class='page-header'>
+		  <h1><tmpl_var name="form_hint"></h1>
+		</div>
+	</tmpl_if>
+	<tmpl_if name="msg">
+		<div class='alert alert-notification'>
+		  <tmpl_var name="msg">
+		</div>
+	</tmpl_if>
+	<tmpl_if name="error">
+		<div class='alert alert-danger clear'>
+		  <div class='alert-label'><strong><tmpl_var name="error_txt"></strong></div>
+		  <div class='alert-content'>
+			<ol><tmpl_var name="error"></ol>
+			<div>TODO: IP address is empty.</div>
+			<div>TODO: Hostname is empty.</div>
+		  </div>
+		</div>
+	</tmpl_if>
+	
+	<!-- content in tabs -->
+	<div class='content-tab-wrapper'>
+		<!-- tabs -->
+		<ul class='nav nav-tabs'>
+		<tmpl_loop name="formTab">
+			<li<tmpl_if name="active"> class='active'</tmpl_if>>
+				<a href='#' onclick="return ISPConfig.changeTab('<tmpl_var name='name'>','<tmpl_var name='app_module'>/<tmpl_var name='form_action'>')"><tmpl_var name='title'></a>
+			</li>
         </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>
+		</ul>
 
-<input type="hidden" name="next_tab" value="">
-<input type="hidden" name="phpsessid" value="{tmpl_var name='phpsessid'}">
\ No newline at end of file
+		<div id="tabbox_content" class="tab-content">
+			<div class='tab-pane active fade in'>
+			<tmpl_dyninclude name="content_tpl">
+			</div>
+		</div>
+
+		<input type="hidden" name="next_tab" value="">
+		<input type="hidden" name="phpsessid" value="{tmpl_var name='phpsessid'}">
+	</div>
+
+
diff --git a/interface/web/themes/default/templates/topnav.tpl.htm b/interface/web/themes/default/templates/topnav.tpl.htm
index 485fa23..8637eaf 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">
+	<!-- main navigation -->
+	<nav id='main-navigation' class='btn-group btn-group-justified'>
     <tmpl_loop name="nav_top">
-        <tmpl_if name="active">
-            <li id="topNav_current"><a href="#" class="topnav topnav-<tmpl_var name='module'>"><span><tmpl_var name="title"></span></a></li>
-        <tmpl_else>
-            <li><a href="#" onclick="capp('<tmpl_var name='module'>')" class="topnav topnav-<tmpl_var name='module'>"><span><tmpl_var name="title"></span></a></li>
-        </tmpl_if>
+		<a href="#" class="btn btn-default <tmpl_if name="active">active"<tmpl_else>" data-capp="<tmpl_var name='module'>"</tmpl_if> data-icon-class="icon-<tmpl_var name='module'>">
+		  <div class="icon icon-<tmpl_var name='module'>"></div>
+		  <div class="title"><tmpl_var name="title"></div>
+		</a>
     </tmpl_loop>
-</ul>
+	</nav>
diff --git a/interface/web/themes/default_64_navimg/css/additional.css b/interface/web/themes/default_64_navimg/css/additional.css
deleted file mode 100644
index c064817..0000000
--- a/interface/web/themes/default_64_navimg/css/additional.css
+++ /dev/null
@@ -1,64 +0,0 @@
-@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_304/icons/x64/system.png') !important;
-	}
-
-	.topnav-client {
-		background-image: url('/themes/default_304/icons/x64/client.png') !important;
-	}
-
-	.topnav-mail {
-		background-image: url('/themes/default_304/icons/x64/email.png') !important;
-	}
-
-	.topnav-monitor {
-		background-image: url('/themes/default_304/icons/x64/monitor.png') !important;
-	}
-
-	.topnav-sites {
-		background-image: url('/themes/default_304/icons/x64/sites.png') !important;
-	}
-
-	.topnav-dns {
-		background-image: url('/themes/default_304/icons/x64/dns.png') !important;
-	}
-
-	.topnav-tools {
-		background-image: url('/themes/default_304/icons/x64/tools.png') !important;
-	}
-
-	.topnav-help {
-		background-image: url('/themes/default_304/icons/x64/help.png') !important;
-	}
-
-	.topnav- {
-		background-image: url('/themes/default_304/icons/x64/login.png') !important;
-	}
-
-	.topnav-domain {
-		background-image: url('/themes/default_304/icons/x64/domain.png') !important;
-	}
-
-	.topnav-dashboard {
-		background-image: url('/themes/default_304/icons/x64/dashboard.png') !important;
-	}
-	
-	.topnav-vm {
-		background-image: url("/themes/default_304/icons/x64/drawer.png") !important;
-	}
-
-}
\ No newline at end of file
diff --git a/interface/web/themes/default_64_navimg/icons/x16/arrow.png b/interface/web/themes/default_64_navimg/icons/x16/arrow.png
deleted file mode 100644
index 82cfae3..0000000
--- a/interface/web/themes/default_64_navimg/icons/x16/arrow.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_64_navimg/icons/x16/arrow_180.png b/interface/web/themes/default_64_navimg/icons/x16/arrow_180.png
deleted file mode 100644
index a1e5e6b..0000000
--- a/interface/web/themes/default_64_navimg/icons/x16/arrow_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_64_navimg/icons/x16/arrow_stop.png b/interface/web/themes/default_64_navimg/icons/x16/arrow_stop.png
deleted file mode 100644
index 702b9b7..0000000
--- a/interface/web/themes/default_64_navimg/icons/x16/arrow_stop.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_64_navimg/icons/x16/arrow_stop_180.png b/interface/web/themes/default_64_navimg/icons/x16/arrow_stop_180.png
deleted file mode 100644
index 573ff48..0000000
--- a/interface/web/themes/default_64_navimg/icons/x16/arrow_stop_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_64_navimg/ispconfig_version b/interface/web/themes/default_64_navimg/ispconfig_version
deleted file mode 100644
index bb19ac3..0000000
--- a/interface/web/themes/default_64_navimg/ispconfig_version
+++ /dev/null
@@ -1 +0,0 @@
-3.0.4.6
\ No newline at end of file
diff --git a/interface/web/themes/default_64_navimg/templates/main.tpl.htm b/interface/web/themes/default_64_navimg/templates/main.tpl.htm
deleted file mode 100644
index 6d0395b..0000000
--- a/interface/web/themes/default_64_navimg/templates/main.tpl.htm
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=<tmpl_var name="html_content_encoding">"/>
-	<meta http-equiv="X-UA-Compatible" content="IE=8"/>
-    <link href="themes/default_304/css/central.css" rel="stylesheet" type="text/css"/>
-    <link href="themes/default_64_navimg/css/additional.css" rel="stylesheet" type="text/css"/>
-    <!--[if lte IE 7]>
-	    <link href="themes/default_304/css/patches/central.css" rel="stylesheet" type="text/css" />
-    <![endif]-->
-    <!--[if lte ie 6]>
-      <style type="text/css" media="screen">
-        /*
-        Move these to your IE specific stylesheet if possible
-        */
-        .uniForm,
-        .uniForm fieldset,
-        .uniForm .ctrlHolder,
-        .uniForm .formHint,
-        .uniForm .buttonHolder, 
-        .uniForm .ctrlHolder .multiField,
-        .uniForm .inlineLabel{ zoom:1; }
-
-        .uniForm .inlineLabels label, .uniForm .inlineLabels .label,
-        .uniForm .blockLabels label, .uniForm .blockLabels .label,
-        .uniForm .inlineLabel span{ padding-bottom: .2em; }
-
-        .uniForm .inlineLabel input,
-        .uniForm .inlineLabels .inlineLabel input,
-        .uniForm .blockLabels .inlineLabel input{ margin-top: -.3em; }
-      </style>
-    <![endif]-->
-    <!--[if gt ie 6]>
-      <style type="text/css" media="screen">
-        /*
-        Move these to your IE specific stylesheet if possible
-        */
-        .uniForm,
-        .uniForm fieldset,
-        .uniForm .ctrlHolder,
-        .uniForm .formHint,
-        .uniForm .buttonHolder, 
-        .uniForm .ctrlHolder .multiField,
-        .uniForm .inlineLabel{ zoom:1; }
-
-        .uniForm .inlineLabels label, .uniForm .inlineLabels .label,
-        .uniForm .blockLabels label, .uniForm .blockLabels .label,
-        .uniForm .inlineLabel span{ padding-bottom: .2em; }
-
-        .uniForm .inlineLabel input,
-        .uniForm .inlineLabels .inlineLabel input,
-        .uniForm .blockLabels .inlineLabel input{ margin-top: -.3em; }
-      </style>
-    <![endif]-->
-	<link href="themes/default_304/css/screen/redmond/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css"/>
-	<link href="themes/default_304/css/screen/jquery-ui-custom.css" rel="stylesheet" type="text/css"/>
-    <link rel="shortcut icon" href="/themes/default_304/images/favicon.ico" />
-    <script type="text/javascript" src="js/jquery-1.6.3.min.js"></script>
-	<script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
-    <script type="text/javascript" src="js/scrigo.js.php"></script>
-    <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
-	<script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
-	<script type="text/javascript" src="js/jquery.tipsy.js"></script>
-	<script language="JavaScript" type="text/javascript">
-		var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
-		if(!is_chrome && getInternetExplorerVersion() > 8.0) {
-			var style = document.createElement('style');
-			style.innerHTML = '#page_margins { min-width: 980px; max-width: 80%; background: #fff; display: table;}';
-			document.getElementsByTagName("head")[0].appendChild(style);
-		}
-
-		jQuery(document).ready(function() {
-			loadInitContent();
-			
-			$("#pageForm").submit(function(e){
-				//Prevent form submit: e.preventDefault() in lists
-				if ($(".panel #Filter").length > 0) {
-					e.preventDefault();
-				}
-			});
-			
-			jQuery('.subsectiontoggle').live("click", function(){
-				jQuery(this).children().toggleClass('showing').end().next().slideToggle();
-			});
-			
-			jQuery('#globalsearch').ispconfigSearch({
-				dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
-				resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-				noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-				noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-				searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">'
-			});
-			
-			jQuery('.ttip').tipsy({live: true, gravity: 'ne', html: true});
-			
-			tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled>';
-            tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled>';
-            tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
-            tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
-		});
-
-		jQuery(document).bind("change", function(event) {
-			var elName = event.target.localName;
-            if (jQuery(".panel #Filter").length > 0 && elName == 'select') {
-                event.preventDefault();
-                jQuery(".panel #Filter").trigger('click');
-            }
-            if(elName == 'select' || elName == 'input' || elName == 'textarea') {
-                // set marker that something was changed
-                pageFormChanged = true;
-            }
-		});
-		
-		jQuery(document).bind("keypress", function(event) {
-			//Use jQuery submit with keypress Enter in panel filterbar
-			if (event.which == '13' && jQuery(".panel #Filter").length > 0) {
-				event.preventDefault();
-				jQuery(".panel #Filter").trigger('click');
-			}
-			//Use jQuery submit with keypress Enter in forms
-			if (event.which == '13' && jQuery(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && jQuery(event.target).is(':input')) {
-				event.preventDefault();
-				jQuery(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
-			}
-		});
-	</script>
-</head>
-<body>
-    <div id="page_margins">
-        <div id="page">
-            <div id="header">
-                <div id="topsubnav">
-                    <!-- start: skip link navigation -->
-                    <a class="skip" href="#navigation" title="skip link">Skip to the navigation</a><span class="hideme">.</span>
-                    <a class="skip" href="#content" title="skip link">Skip to the content</a><span class="hideme">.</span>
-                    <!-- end: skip link navigation -->
-			        <tmpl_if name="cpuser">
-                    <span><a href="#logout" onclick="loadContent('login/logout.php');">LOGOUT <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>--></span>
-					<tmpl_if name='usertype' op='==' value='normaluser'><input type="text" id="globalsearch" size="25" value="" /></tmpl_if>
-			        </tmpl_if>
-                </div>
-                <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
-                <span>hosting control panel</span>
-            </div>
-            <!-- begin: main navigation #nav -->
-            <div id="nav">
-                <a id="navigation" name="navigation"></a>
-                <!-- skiplink anchor: navigation -->
-                <div id="nav_main">
-                    <div id="topNav">&nbsp;</div>
-                </div>
-            </div>
-            <!-- end: main navigation -->
-            <!-- begin: main content area #main -->
-            <div id="main">
-                <!-- begin: #col1 - first float column -->
-                <div id="col1">
-                    <div id="col1_content" class="clearfix">
-                        <div id="sideNav">&nbsp;</div>
-                    </div>
-                </div>
-                <!-- end: #col1 -->
-                <!-- begin: #col3 static column -->
-                <div id="col3">
-                    <div id="col3_content" class="clearfix">
-                        <a id="content" name="content"></a>
-                        <!-- skiplink anchor: Content -->
-                        <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
-						<input type="text" style="display:none" /><input type="password" style="display:none"/>
-                        <div id="pageContent"><!-- AJAX CONTENT --></div>
-                        </form>
-                    </div>
-                    <div id="ie_clearing">&nbsp;</div>
-                    <!-- End: IE Column Clearing -->
-                </div>
-                <!-- end: #col3 -->
-            </div>
-            <!-- end: #main -->
-            <!-- begin: #footer -->
-            <div id="footer">
-            Powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
-            </div><!-- end: #footer -->
-        </div>
-    </div>
-</body>
-</html>
diff --git a/interface/web/themes/default_combobox/css/additional.css b/interface/web/themes/default_combobox/css/additional.css
deleted file mode 100644
index be7769b..0000000
--- a/interface/web/themes/default_combobox/css/additional.css
+++ /dev/null
@@ -1,153 +0,0 @@
-.list button.ui-widget{position:absolute}
-
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and ../images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #F5F5F5; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #dfdfdf; background: #FFFACD; font-weight: bold; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #dfdfdf; background: #ffffff; font-weight: bold;}
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(../images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and ../images */
-.ui-icon { width: 16px; height: 16px; background-image: url(../images/ui-image.png); }
-.ui-widget-content .ui-icon {background-image: url(../images/ui-image.png); }
-.ui-widget-header .ui-icon {background-image: url(../images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(../images/ui-image.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-image.png); }
-.ui-state-active .ui-icon {background-image: url(../images/ui-image.png); }
-.ui-state-highlight .ui-icon {background-image: url(../images/ui-image.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-image.png); }
-
-/* positioning */
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-
-.ui-autocomplete { position: absolute; cursor: default; }	
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-
-.ui-menu {
-	list-style:none;
-	padding: 2px;
-	margin: 0;
-	display:block;
-	float: left;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-	margin:0;
-	padding: 0;
-	zoom: 1;
-	float: left;
-	clear: left;
-	width: 100%;
-}
-.ui-menu .ui-menu-item a {text-align:left;text-decoration:none;
-	display:block;
-	padding:.1em .4em;
-	line-height:1.5;
-	zoom:1;
-	height: 15px;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-	margin: -1px;
-}
-.ui-widget-content{background:#fff;border:1px solid #DFDFDF}
-.ui-autocomplete-input{width:60%}
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width:17px } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .20em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -10px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
\ No newline at end of file
diff --git a/interface/web/themes/default_combobox/icons/x16/arrow.png b/interface/web/themes/default_combobox/icons/x16/arrow.png
deleted file mode 100644
index 82cfae3..0000000
--- a/interface/web/themes/default_combobox/icons/x16/arrow.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_combobox/icons/x16/arrow_180.png b/interface/web/themes/default_combobox/icons/x16/arrow_180.png
deleted file mode 100644
index a1e5e6b..0000000
--- a/interface/web/themes/default_combobox/icons/x16/arrow_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_combobox/icons/x16/arrow_stop.png b/interface/web/themes/default_combobox/icons/x16/arrow_stop.png
deleted file mode 100644
index 702b9b7..0000000
--- a/interface/web/themes/default_combobox/icons/x16/arrow_stop.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_combobox/icons/x16/arrow_stop_180.png b/interface/web/themes/default_combobox/icons/x16/arrow_stop_180.png
deleted file mode 100644
index 573ff48..0000000
--- a/interface/web/themes/default_combobox/icons/x16/arrow_stop_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_combobox/images/ui-image.png b/interface/web/themes/default_combobox/images/ui-image.png
deleted file mode 100644
index d1de91b..0000000
--- a/interface/web/themes/default_combobox/images/ui-image.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_combobox/ispconfig_version b/interface/web/themes/default_combobox/ispconfig_version
deleted file mode 100644
index bb19ac3..0000000
--- a/interface/web/themes/default_combobox/ispconfig_version
+++ /dev/null
@@ -1 +0,0 @@
-3.0.4.6
\ No newline at end of file
diff --git a/interface/web/themes/default_combobox/templates/main.tpl.htm b/interface/web/themes/default_combobox/templates/main.tpl.htm
deleted file mode 100644
index 1df185f..0000000
--- a/interface/web/themes/default_combobox/templates/main.tpl.htm
+++ /dev/null
@@ -1,343 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=<tmpl_var name="html_content_encoding">"/>
-	<meta http-equiv="X-UA-Compatible" content="IE=8"/>
-    <link href="themes/default_304/css/central.css" rel="stylesheet" type="text/css"/>
-    <!--[if lte IE 7]>
-	    <link href="themes/default_304/css/patches/central.css" rel="stylesheet" type="text/css" />
-    <![endif]-->
-    <!--[if lte ie 6]>
-      <style type="text/css" media="screen">
-        /*
-        Move these to your IE specific stylesheet if possible
-        */
-        .uniForm,
-        .uniForm fieldset,
-        .uniForm .ctrlHolder,
-        .uniForm .formHint,
-        .uniForm .buttonHolder, 
-        .uniForm .ctrlHolder .multiField,
-        .uniForm .inlineLabel{ zoom:1; }
-
-        .uniForm .inlineLabels label, .uniForm .inlineLabels .label,
-        .uniForm .blockLabels label, .uniForm .blockLabels .label,
-        .uniForm .inlineLabel span{ padding-bottom: .2em; }
-
-        .uniForm .inlineLabel input,
-        .uniForm .inlineLabels .inlineLabel input,
-        .uniForm .blockLabels .inlineLabel input{ margin-top: -.3em; }
-      </style>
-    <![endif]-->
-    <!--[if gt ie 6]>
-      <style type="text/css" media="screen">
-        /*
-        Move these to your IE specific stylesheet if possible
-        */
-        .uniForm,
-        .uniForm fieldset,
-        .uniForm .ctrlHolder,
-        .uniForm .formHint,
-        .uniForm .buttonHolder, 
-        .uniForm .ctrlHolder .multiField,
-        .uniForm .inlineLabel{ zoom:1; }
-
-        .uniForm .inlineLabels label, .uniForm .inlineLabels .label,
-        .uniForm .blockLabels label, .uniForm .blockLabels .label,
-        .uniForm .inlineLabel span{ padding-bottom: .2em; }
-
-        .uniForm .inlineLabel input,
-        .uniForm .inlineLabels .inlineLabel input,
-        .uniForm .blockLabels .inlineLabel input{ margin-top: -.3em; }
-      </style>
-    <![endif]-->
-	<link href="themes/default_304/css/screen/redmond/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css"/>
-	<link href="themes/default_304/css/screen/jquery-ui-custom.css" rel="stylesheet" type="text/css"/>
-	<link href="themes/default_combobox/css/additional.css" rel="stylesheet" type="text/css"/>
-    <link rel="shortcut icon" href="/themes/default_304/images/favicon.ico" />
-    <script type="text/javascript" src="js/jquery-1.6.3.min.js"></script>
-    <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
-    <script type="text/javascript" src="js/scrigo.js.php"></script>
-    <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
-	<script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
-	<script type="text/javascript" src="js/jquery.tipsy.js"></script>
-	<script language="JavaScript" type="text/javascript">
-		var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
-		if(!is_chrome && getInternetExplorerVersion() > 8.0) {
-			var style = document.createElement('style');
-			style.innerHTML = '#page_margins { min-width: 980px; max-width: 80%; background: #fff; display: table;}';
-			document.getElementsByTagName("head")[0].appendChild(style);
-		}
-
-
-		jQuery(document).ready(function() {
-			loadInitContent();
-			
-			$("#pageForm").submit(function(e){
-				//Prevent form submit: e.preventDefault() in lists
-				if ($(".panel #Filter").length > 0) {
-					e.preventDefault();
-				}
-			});
-			
-			jQuery('.subsectiontoggle').live("click", function(){
-				jQuery(this).children().toggleClass('showing').end().next().slideToggle();
-			});
-			
-			jQuery('#globalsearch').ispconfigSearch({
-				dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
-				resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-				noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-				noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-				searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">'
-			});
-			
-			jQuery('.ttip').tipsy({live: true, gravity: 'ne', html: true});
-			
-			tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled>';
-            tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled>';
-            tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
-            tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
-		});
-
-		jQuery(document).bind("change", function(event) {
-			var elName = event.target.localName;
-            if (jQuery(".panel #Filter").length > 0 && elName == 'select') {
-                event.preventDefault();
-                jQuery(".panel #Filter").trigger('click');
-            }
-            if(elName == 'select' || elName == 'input' || elName == 'textarea') {
-                // set marker that something was changed
-                pageFormChanged = true;
-            }
-		});
-
-		jQuery(".ui-autocomplete a").live("click", function(event) {
-			if ($(".panel #Filter").length > 0) {
-				$(".panel #Filter").attr("onsubmit",$(".panel #Filter").attr("onclick")).submit();
-			}
-		});
-		
-		jQuery(document).bind("keypress", function(event) {
-			//Use jQuery submit with keypress Enter in panel filterbar
-			if (event.which == '13' && jQuery(".panel #Filter").length > 0) {
-				event.preventDefault();
-				jQuery(".panel #Filter").trigger('click');
-			}
-			//Use jQuery submit with keypress Enter in forms
-			if (event.which == '13' && jQuery(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && jQuery(event.target).is(':input')) {
-				event.preventDefault();
-				jQuery(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
-			}
-		});
-
-		(function( $ ){
-		  $(".pnl_listarea th").live("click",  function(){
-		    if($(this).attr('class').length > 0 && $("#Filter").length > 0){
-		      eval($("#Filter").attr("onclick").replace(".php');",".php?orderby="+$(this).attr('class')+"');"));
-		      var element = $(this).attr('class');
-		      $("#pageForm").ajaxComplete(function() {
-			  if($("th."+element).css("background-position") == '0px -15px'){
-			    if($("th."+element).css("text-align") == "right"){
-			      $("th."+element).css("text-align","left");
-			    } else {
-			      $("th."+element).css("text-align","right");
-			    }
-			  } else {
-			    $(".pnl_listarea th").css("text-align","");
-			  }
-			  $(".pnl_listarea th").css("background-position","0 0");
-			  $("th."+element).css("background-position","0 -15px");
-		      });
-		    }
-		});
-		})( jQuery );
-
-		(function( $ ) {
-		$.widget( "ui.combobox", {
-			_create: function() {
-				var self = this,
-					oldWidth = this.element.width(),
-					select = this.element.hide(),
-					selected = select.children( ":selected" ),
-					value = selected.val() ? selected.text() : "";
-				var input = this.input = $( "<input>" )
-					.insertAfter( select )
-					.width( oldWidth )
-					.val( value )
-					.css("float","left")
-					.autocomplete({
-						delay: 0,
-						minLength: 0,
-						source: function( request, response ) {
-							var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
-							response( select.children( "option" ).map(function() {
-								var text = $( this ).text();
-								if (( !request.term || matcher.test(text) ) )
-									return {
-										label: text.replace(
-											new RegExp(
-												"(?![^&;]+;)(?!<[^<>]*)(" +
-												$.ui.autocomplete.escapeRegex(request.term) +
-												")(?![^<>]*>)(?![^&;]+;)", "gi"
-											), "<strong>$1</strong>" ),
-										value: text,
-										option: this
-									};
-							}) );
-						},
-						select: function( event, ui ) {
-							ui.item.option.selected = true;
-							self._trigger( "selected", event, {
-								item: ui.item.option
-							});
-						},
-						change: function( event, ui ) {
-							if ( !ui.item ) {
-								var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
-									valid = false;
-								select.children( "option" ).each(function() {
-									if ( $( this ).text().match( matcher ) ) {
-										this.selected = valid = true;
-										return false;
-									}
-								});
-								if ( !valid ) {
-									// remove invalid value, as it didn't match anything
-									$( this ).val( "" );
-									select.val( "" );
-									input.data( "autocomplete" ).term = "";
-									return false;
-								}
-							}
-						},
-						// open: function(event, ui) { }, alternativ event for check by enter input
-						search: function(event, ui) {
-							if ( !ui.item ) {
-								var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
-									valid = false;
-								select.children( "option" ).each(function() {
-									if ( $( this ).text().match( matcher ) ) {
-										this.selected = valid = true;
-										return false;
-									}
-								});
-							} }
-					})
-					.addClass( "ui-widget ui-widget-content ui-corner-left" );
-
-				input.data( "autocomplete" )._renderItem = function( ul, item ) {
-					return $( "<li></li>" )
-						.data( "item.autocomplete", item )
-						.append( "<a>" + item.label + "</a>" )
-						.appendTo( ul );
-				};
-
-				this.button = $( "<button type='button'>&nbsp;</button>" )
-					.attr( "tabIndex", -1 )
-					.attr( "title", "Show All Items" )
-					.height($(input).outerHeight())
-					.css("float","left")
-					.insertAfter( input )
-					.button({
-						icons: {
-							primary: "ui-icon-triangle-1-s"
-						},
-						text: false
-					})
-					.removeClass( "ui-corner-all" )
-					.addClass( "ui-corner-right ui-button-icon" )
-					.click(function() {
-						// close if already visible
-						if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
-							input.autocomplete( "close" );
-							return;
-						}
-
-						// work around a bug (likely same cause as #5265)
-						$( this ).blur();
-
-						// pass empty string as value to search for, displaying all results
-						input.autocomplete( "search", "" );
-						input.focus();
-					});
-			},
-
-			destroy: function() {
-				this.input.remove();
-				this.button.remove();
-				this.element.show();
-				$.Widget.prototype.destroy.call( this );
-			}
-		});
-	})( jQuery );
- 
-
-	jQuery("html").ajaxComplete( function(){
-	  if(jQuery(".panel .list td select").css("display") != "none"){
-	    jQuery(".panel .list td select").combobox();
-	  }
-	});
-	</script>
-</head>
-<body>
-    <div id="page_margins">
-        <div id="page">
-            <div id="header">
-                <div id="topsubnav">
-                    <!-- start: skip link navigation -->
-                    <a class="skip" href="#navigation" title="skip link">Skip to the navigation</a><span class="hideme">.</span>
-                    <a class="skip" href="#content" title="skip link">Skip to the content</a><span class="hideme">.</span>
-                    <!-- end: skip link navigation -->
-			        <tmpl_if name="cpuser">
-                    <span><a href="#logout" onclick="loadContent('login/logout.php');">LOGOUT <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>--></span>
-					<tmpl_if name='usertype' op='==' value='normaluser'><input type="text" id="globalsearch" size="25" value="" /></tmpl_if>
-			        </tmpl_if>
-                </div>
-                <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
-                <span>hosting control panel</span>
-            </div>
-            <!-- begin: main navigation #nav -->
-            <div id="nav">
-                <a id="navigation" name="navigation"></a>
-                <!-- skiplink anchor: navigation -->
-                <div id="nav_main">
-                    <div id="topNav">&nbsp;</div>
-                </div>
-            </div>
-            <!-- end: main navigation -->
-            <!-- begin: main content area #main -->
-            <div id="main">
-                <!-- begin: #col1 - first float column -->
-                <div id="col1">
-                    <div id="col1_content" class="clearfix">
-                        <div id="sideNav">&nbsp;</div>
-                    </div>
-                </div>
-                <!-- end: #col1 -->
-                <!-- begin: #col3 static column -->
-                <div id="col3">
-                    <div id="col3_content" class="clearfix">
-                        <a id="content" name="content"></a>
-                        <!-- skiplink anchor: Content -->
-                        <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
-						<input type="text" style="display:none" /><input type="password" style="display:none"/>
-                        <div id="pageContent"><!-- AJAX CONTENT --></div>
-                        </form>
-                    </div>
-                    <div id="ie_clearing">&nbsp;</div>
-                    <!-- End: IE Column Clearing -->
-                </div>
-                <!-- end: #col3 -->
-            </div>
-            <!-- end: #main -->
-            <!-- begin: #footer -->
-            <div id="footer">
-            Powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
-            </div><!-- end: #footer -->
-        </div>
-    </div>
-</body>
-</html>
diff --git a/interface/web/themes/default_no_navimg/css/additional.css b/interface/web/themes/default_no_navimg/css/additional.css
deleted file mode 100644
index d17ab55..0000000
--- a/interface/web/themes/default_no_navimg/css/additional.css
+++ /dev/null
@@ -1,68 +0,0 @@
-@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:66px;
-	}
-
-	.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-vm {
-		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;
-	}
-	
-	.topnav-billing {
-		background-image: none !important;
-	}
-	
-}
\ No newline at end of file
diff --git a/interface/web/themes/default_no_navimg/icons/x16/arrow.png b/interface/web/themes/default_no_navimg/icons/x16/arrow.png
deleted file mode 100644
index 82cfae3..0000000
--- a/interface/web/themes/default_no_navimg/icons/x16/arrow.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_no_navimg/icons/x16/arrow_180.png b/interface/web/themes/default_no_navimg/icons/x16/arrow_180.png
deleted file mode 100644
index a1e5e6b..0000000
--- a/interface/web/themes/default_no_navimg/icons/x16/arrow_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_no_navimg/icons/x16/arrow_stop.png b/interface/web/themes/default_no_navimg/icons/x16/arrow_stop.png
deleted file mode 100644
index 702b9b7..0000000
--- a/interface/web/themes/default_no_navimg/icons/x16/arrow_stop.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_no_navimg/icons/x16/arrow_stop_180.png b/interface/web/themes/default_no_navimg/icons/x16/arrow_stop_180.png
deleted file mode 100644
index 573ff48..0000000
--- a/interface/web/themes/default_no_navimg/icons/x16/arrow_stop_180.png
+++ /dev/null
Binary files differ
diff --git a/interface/web/themes/default_no_navimg/ispconfig_version b/interface/web/themes/default_no_navimg/ispconfig_version
deleted file mode 100644
index bb19ac3..0000000
--- a/interface/web/themes/default_no_navimg/ispconfig_version
+++ /dev/null
@@ -1 +0,0 @@
-3.0.4.6
\ No newline at end of file
diff --git a/interface/web/themes/default_no_navimg/templates/main.tpl.htm b/interface/web/themes/default_no_navimg/templates/main.tpl.htm
deleted file mode 100644
index adfc656..0000000
--- a/interface/web/themes/default_no_navimg/templates/main.tpl.htm
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=<tmpl_var name="html_content_encoding">"/>
-    <meta http-equiv="X-UA-Compatible" content="IE=8"/>
-	<link href="themes/default_304/css/central.css" rel="stylesheet" type="text/css"/>
-    <!--[if lte IE 7]>
-	    <link href="themes/default_304/css/patches/central.css" rel="stylesheet" type="text/css" />
-    <![endif]-->
-    <!--[if lte ie 6]>
-      <style type="text/css" media="screen">
-        /*
-        Move these to your IE specific stylesheet if possible
-        */
-        .uniForm,
-        .uniForm fieldset,
-        .uniForm .ctrlHolder,
-        .uniForm .formHint,
-        .uniForm .buttonHolder, 
-        .uniForm .ctrlHolder .multiField,
-        .uniForm .inlineLabel{ zoom:1; }
-
-        .uniForm .inlineLabels label, .uniForm .inlineLabels .label,
-        .uniForm .blockLabels label, .uniForm .blockLabels .label,
-        .uniForm .inlineLabel span{ padding-bottom: .2em; }
-
-        .uniForm .inlineLabel input,
-        .uniForm .inlineLabels .inlineLabel input,
-        .uniForm .blockLabels .inlineLabel input{ margin-top: -.3em; }
-      </style>
-    <![endif]-->
-    <!--[if gt ie 6]>
-      <style type="text/css" media="screen">
-        /*
-        Move these to your IE specific stylesheet if possible
-        */
-        .uniForm,
-        .uniForm fieldset,
-        .uniForm .ctrlHolder,
-        .uniForm .formHint,
-        .uniForm .buttonHolder, 
-        .uniForm .ctrlHolder .multiField,
-        .uniForm .inlineLabel{ zoom:1; }
-
-        .uniForm .inlineLabels label, .uniForm .inlineLabels .label,
-        .uniForm .blockLabels label, .uniForm .blockLabels .label,
-        .uniForm .inlineLabel span{ padding-bottom: .2em; }
-
-        .uniForm .inlineLabel input,
-        .uniForm .inlineLabels .inlineLabel input,
-        .uniForm .blockLabels .inlineLabel input{ margin-top: -.3em; }
-      </style>
-    <![endif]-->
-	<link href="themes/default_304/css/screen/redmond/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css"/>
-	<link href="themes/default_304/css/screen/jquery-ui-custom.css" rel="stylesheet" type="text/css"/>
-    <link href="themes/default_no_navimg/css/additional.css" rel="stylesheet" type="text/css"/>
-    <link rel="shortcut icon" href="/themes/default_304/images/favicon.ico" />
-    <script type="text/javascript" src="js/jquery-1.6.3.min.js"></script>
-	<script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
-    <script type="text/javascript" src="js/scrigo.js.php"></script>
-    <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
-	<script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
-	<script type="text/javascript" src="js/jquery.tipsy.js"></script>
-	<script language="JavaScript" type="text/javascript">
-		var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
-		if(!is_chrome && getInternetExplorerVersion() > 8.0) {
-			var style = document.createElement('style');
-			style.innerHTML = '#page_margins { min-width: 980px; max-width: 80%; background: #fff; display: table;}';
-			document.getElementsByTagName("head")[0].appendChild(style);
-		}
-
-		jQuery(document).ready(function() {
-			loadInitContent();
-			
-			$("#pageForm").submit(function(e){
-				//Prevent form submit: e.preventDefault() in lists
-				if ($(".panel #Filter").length > 0) {
-					e.preventDefault();
-				}
-			});
-			
-			jQuery('.subsectiontoggle').live("click", function(){
-				jQuery(this).children().toggleClass('showing').end().next().slideToggle();
-			});
-			
-			jQuery('#globalsearch').ispconfigSearch({
-				dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
-				resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-				noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-				noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-				searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">'
-			});
-			
-			jQuery('.ttip').tipsy({live: true, gravity: 'ne', html: true});
-			
-			tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled>';
-            tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled>';
-            tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
-            tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
-		});
-
-		jQuery(document).bind("change", function(event) {
-			var elName = event.target.localName;
-            if (jQuery(".panel #Filter").length > 0 && elName == 'select') {
-                event.preventDefault();
-                jQuery(".panel #Filter").trigger('click');
-            }
-            if(elName == 'select' || elName == 'input' || elName == 'textarea') {
-                // set marker that something was changed
-                pageFormChanged = true;
-            }
-		});
-		
-		jQuery(document).bind("keypress", function(event) {
-			//Use jQuery submit with keypress Enter in panel filterbar
-			if (event.which == '13' && jQuery(".panel #Filter").length > 0) {
-				event.preventDefault();
-				jQuery(".panel #Filter").trigger('click');
-			}
-			//Use jQuery submit with keypress Enter in forms
-			if (event.which == '13' && jQuery(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && jQuery(event.target).is(':input')) {
-				event.preventDefault();
-				jQuery(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
-			}
-		});
-
-	</script>
-</head>
-<body>
-    <div id="page_margins">
-        <div id="page">
-            <div id="header">
-                <div id="topsubnav">
-                    <!-- start: skip link navigation -->
-                    <a class="skip" href="#navigation" title="skip link">Skip to the navigation</a><span class="hideme">.</span>
-                    <a class="skip" href="#content" title="skip link">Skip to the content</a><span class="hideme">.</span>
-                    <!-- end: skip link navigation -->
-			        <tmpl_if name="cpuser">
-                    <span><a href="#logout" onclick="loadContent('login/logout.php');">LOGOUT <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>--></span>
-					<tmpl_if name='usertype' op='==' value='normaluser'><input type="text" id="globalsearch" size="25" value="" /></tmpl_if>
-			        </tmpl_if>
-                </div>
-                <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
-                <span>hosting control panel</span>
-            </div>
-            <!-- begin: main navigation #nav -->
-            <div id="nav">
-                <a id="navigation" name="navigation"></a>
-                <!-- skiplink anchor: navigation -->
-                <div id="nav_main">
-                    <div id="topNav">&nbsp;</div>
-                </div>
-            </div>
-            <!-- end: main navigation -->
-            <!-- begin: main content area #main -->
-            <div id="main">
-                <!-- begin: #col1 - first float column -->
-                <div id="col1">
-                    <div id="col1_content" class="clearfix">
-                        <div id="sideNav">&nbsp;</div>
-                    </div>
-                </div>
-                <!-- end: #col1 -->
-                <!-- begin: #col3 static column -->
-                <div id="col3">
-                    <div id="col3_content" class="clearfix">
-                        <a id="content" name="content"></a>
-                        <!-- skiplink anchor: Content -->
-                        <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
-						<input type="text" style="display:none" /><input type="password" style="display:none"/>
-                        <div id="pageContent"><!-- AJAX CONTENT --></div>
-                        </form>
-                    </div>
-                    <div id="ie_clearing">&nbsp;</div>
-                    <!-- End: IE Column Clearing -->
-                </div>
-                <!-- end: #col3 -->
-            </div>
-            <!-- end: #main -->
-            <!-- begin: #footer -->
-            <div id="footer">
-                Powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
-           </div><!-- end: #footer -->
-       </div>
-    </div>
-</body>
-</html>
diff --git a/interface/web/tools/dns_import_tupa.php b/interface/web/tools/dns_import_tupa.php
index 775d515..b81a83b 100644
--- a/interface/web/tools/dns_import_tupa.php
+++ b/interface/web/tools/dns_import_tupa.php
@@ -86,44 +86,74 @@
 		$domains = $exdb->queryAllRecords("SELECT * FROM domains WHERE type = 'MASTER'");
 		if(is_array($domains)) {
 			foreach($domains as $domain) {
-				$soa = $exdb->queryOneRecord("SELECT * FROM records WHERE type = 'SOA' AND domain_id = ".$domain['id']);
+				$soa = $exdb->queryOneRecord("SELECT * FROM records WHERE type = 'SOA' AND domain_id = ?", $domain['id']);
 				if(is_array($soa)) {
 					$parts = explode(' ', $soa['content']);
-					$origin = $app->db->quote(addot($soa['name']));
-					$ns = $app->db->quote(addot($parts[0]));
-					$mbox = $app->db->quote(addot($parts[1]));
-					$serial = $app->db->quote($parts[2]);
+					$origin = addot($soa['name']);
+					$ns = addot($parts[0]);
+					$mbox = addot($parts[1]);
+					$serial = $parts[2];
 					$refresh = 7200;
 					$retry =  540;
 					$expire = 604800;
-					$minimum = 86400;
-					$ttl = $app->db->quote($soa['ttl']);
+					$minimum = 3600;
+					$ttl = $soa['ttl'];
 
-					$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `origin`, `ns`, `mbox`, `serial`, `refresh`, `retry`, `expire`, `minimum`, `ttl`, `active`, `xfer`) VALUES
-					('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$origin', '$ns', '$mbox', '$serial', '$refresh', '$retry', '$expire', '$minimum', '$ttl', 'Y', '')";
+					$insert_data = array(
+						"sys_userid" => $sys_userid,
+						"sys_groupid" => $sys_groupid,
+						"sys_perm_user" => 'riud',
+						"sys_perm_group" => 'riud',
+						"sys_perm_other" => '',
+						"server_id" => $server_id,
+						"origin" => $origin,
+						"ns" => $ns,
+						"mbox" => $mbox,
+						"serial" => $serial,
+						"refresh" => $refresh,
+						"retry" => $retry,
+						"expire" => $expire,
+						"minimum" => $minimum,
+						"ttl" => $ttl,
+						"active" => 'Y',
+						"xfer" => ''
+					);
 					$dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
 					unset($parts);
 					$msg .= 'Import Zone: '.$soa['name'].'<br />';
 
 					//* Process the other records
-					$records = $exdb->queryAllRecords("SELECT * FROM records WHERE type != 'SOA' AND domain_id = ".$domain['id']);
+					$records = $exdb->queryAllRecords("SELECT * FROM records WHERE type != 'SOA' AND domain_id = ?", $domain['id']);
 					if(is_array($records)) {
 						foreach($records as $rec) {
 							$rr = array();
 
-							$rr['name'] = $app->db->quote(addot($rec['name']));
-							$rr['type'] = $app->db->quote($rec['type']);
-							$rr['aux'] = $app->db->quote($rec['prio']);
-							$rr['ttl'] = $app->db->quote($rec['ttl']);
+							$rr['name'] = addot($rec['name']);
+							$rr['type'] = $rec['type'];
+							$rr['aux'] = $rec['prio'];
+							$rr['ttl'] = $rec['ttl'];
 
 							if($rec['type'] == 'NS' || $rec['type'] == 'MX' || $rec['type'] == 'CNAME') {
-								$rr['data'] = $app->db->quote(addot($rec['content']));
+								$rr['data'] = addot($rec['content']);
 							} else {
-								$rr['data'] = $app->db->quote($rec['content']);
+								$rr['data'] = $rec['content'];
 							}
 
-							$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES
-							('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '$rr[name]', '$rr[type]', '$rr[data]', '$rr[aux]', '$rr[ttl]', 'Y')";
+							$insert_data = array(
+								"sys_userid" => $sys_userid,
+								"sys_groupid" => $sys_groupid,
+								"sys_perm_user" => 'riud',
+								"sys_perm_group" => 'riud',
+								"sys_perm_other" => '',
+								"server_id" => $server_id,
+								"zone" => $dns_soa_id,
+								"name" => $rr['name'],
+								"type" => $rr['type'],
+								"data" => $rr['data'],
+								"aux" => $rr['aux'],
+								"ttl" => $rr['ttl'],
+								"active" => 'Y'
+							);
 							$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 							//$msg .= $insert_data.'<br />';
 
diff --git a/interface/web/tools/form/interface_settings.tform.php b/interface/web/tools/form/interface_settings.tform.php
index f81ce2d..f213605 100644
--- a/interface/web/tools/form/interface_settings.tform.php
+++ b/interface/web/tools/form/interface_settings.tform.php
@@ -96,7 +96,7 @@
 		}
 	}
 } else {
-	$tmp = $app->db->queryOneRecord("SELECT * FROM sys_user where username = '".$_SESSION["s"]["user"]['username']."'");
+	$tmp = $app->db->queryOneRecord("SELECT * FROM sys_user where username = ?", $_SESSION["s"]["user"]['username']);
 	$modules = $tmp['modules'];
 	//$modules = $conf['interface_modules_enabled'];
 	if($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
diff --git a/interface/web/tools/form/resync.tform.php b/interface/web/tools/form/resync.tform.php
index 01c9470..3bc10a6 100644
--- a/interface/web/tools/form/resync.tform.php
+++ b/interface/web/tools/form/resync.tform.php
@@ -2,10 +2,10 @@
 $form["title"]    = "Resync Tool";
 $form["description"]  = "";
 $form["name"]    = "resync";
-$form["action"]   = "resync_do.php";
+$form["action"]   = "resync.php";
 $form["db_history"]  = "no";
 $form["tab_default"] = "resync";
-$form["list_default"] = "resync_show.php";
+$form["list_default"] = "resync.php";
 $form["auth"]   = 'yes'; 
 
 $form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
@@ -18,96 +18,6 @@
 	'title'  => "Resync",
 	'width'  => 100,
 	'template'  => "templates/resync.htm",
-	'fields'  => array (
-		'mail_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE mail_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'web_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE web_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'dns_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE dns_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'file_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE file_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'db_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE db_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'vserver_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE vserver_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'proxy_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE proxy_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-		'firewall_server_id' => array (
-			'datatype' => 'INTEGER',
-			'formtype' => 'SELECT',
-			'default' => '',
-			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT server_id FROM server WHERE firewall_server = 1 AND mirror_server_id = 0 AND {AUTHSQL}',
-				'keyfield'=> 'server_id',
-				'valuefield'=> 'server_name'
-			),
-			'value'  => ''
-		),
-	)
 );
 
 
diff --git a/interface/web/tools/import_ispconfig.php b/interface/web/tools/import_ispconfig.php
index 75e5992..0998d18 100644
--- a/interface/web/tools/import_ispconfig.php
+++ b/interface/web/tools/import_ispconfig.php
@@ -143,7 +143,7 @@
 
 	//* Get the user and groupid for the new records
 	$sys_groupid = $app->functions->intval($_POST['client_group_id']);
-	$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = $sys_groupid");
+	$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $sys_groupid);
 	$sys_userid = $app->functions->intval($tmp['userid']);
 	unset($tmp);
 	if($sys_groupid == 0) $error .= 'Inavlid groupid<br />';
@@ -159,7 +159,7 @@
 	$mail_domain_rec = $client->mail_domain_get($remote_session_id, array('domain' => $mail_domain));
 	if(is_array($mail_domain_rec)) {
 		$mail_domain_rec = $mail_domain_rec[0];
-		$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE domain = '".$app->db->quote($mail_domain)."'");
+		$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE domain = ?", $mail_domain);
 		if($tmp['number'] > 0) $error .= 'Domain '.$mail_domain.' exists already in local database.<br />';
 		unset($tmp);
 
@@ -182,7 +182,7 @@
 			$mail_users = $client->mail_user_get($remote_session_id, array('email' => '%@'.$mail_domain));
 			if(is_array($mail_users)) {
 				foreach($mail_users as $mail_user) {
-					$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE email = '".$app->db->quote($mail_user['email'])."'");
+					$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE email = ?", $mail_user['email']);
 					if($tmp['number'] == 0) {
 
 						//* Prepare record
@@ -229,7 +229,7 @@
 			$mail_aliases = $client->mail_alias_get($remote_session_id, array('type' => 'alias', 'destination' => '%@'.$mail_domain));
 			if(is_array($mail_aliases)) {
 				foreach($mail_aliases as $mail_alias) {
-					$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE `type` = 'alias' AND source = '".$app->db->quote($mail_alias['source'])."' AND destination = '".$app->db->quote($mail_alias['destination'])."'");
+					$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE `type` = 'alias' AND source = ? AND destination = ?", $mail_alias['source'], $mail_alias['destination']);
 					if($tmp['number'] == 0) {
 						$mail_alias['sys_userid'] = $sys_userid;
 						$mail_alias['sys_groupid'] = $sys_groupid;
@@ -250,7 +250,7 @@
 			$mail_aliases = $client->mail_alias_get($remote_session_id, array('type' => 'aliasdomain', 'destination' => '@'.$mail_domain));
 			if(is_array($mail_aliases)) {
 				foreach($mail_aliases as $mail_alias) {
-					$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE `type` = 'aliasdomain' AND source = '".$app->db->quote($mail_alias['source'])."' AND destination = '".$app->db->quote($mail_alias['destination'])."'");
+					$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE `type` = 'aliasdomain' AND source = ? AND destination = ?", $mail_alias['source'], $mail_alias['destination']);
 					if($tmp['number'] == 0) {
 						$mail_alias['sys_userid'] = $sys_userid;
 						$mail_alias['sys_groupid'] = $sys_groupid;
@@ -271,7 +271,7 @@
 			$mail_forwards = $client->mail_forward_get($remote_session_id, array('type' => 'forward', 'source' => '%@'.$mail_domain));
 			if(is_array($mail_forwards)) {
 				foreach($mail_forwards as $mail_forward) {
-					$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE `type` = 'forward' AND source = '".$app->db->quote($mail_forward['source'])."' AND destination = '".$app->db->quote($mail_forward['destination'])."'");
+					$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE `type` = 'forward' AND source = ? AND destination = ?", $mail_forward['source'], $mail_forward['destination']);
 					if($tmp['number'] == 0) {
 						$mail_forward['sys_userid'] = $sys_userid;
 						$mail_forward['sys_groupid'] = $sys_groupid;
@@ -292,7 +292,7 @@
 			$mail_spamfilters = $client->mail_spamfilter_user_get($remote_session_id, array('email' => '%@'.$mail_domain));
 			if(is_array($mail_spamfilters)) {
 				foreach($mail_spamfilters as $mail_spamfilter) {
-					$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_users WHERE email = '".$app->db->quote($mail_spamfilter['email'])."'");
+					$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_users WHERE email = ?", $mail_spamfilter['email']);
 					if($tmp['number'] == 0) {
 						$mail_spamfilter['sys_userid'] = $sys_userid;
 						$mail_spamfilter['sys_groupid'] = $sys_groupid;
diff --git a/interface/web/tools/import_plesk.php b/interface/web/tools/import_plesk.php
deleted file mode 100644
index f6e2890..0000000
--- a/interface/web/tools/import_plesk.php
+++ /dev/null
@@ -1,1430 +0,0 @@
-<?php
-/*
-Copyright (c) 2008, Till Brehm, projektfarm Gmbh
-Plesk(r) Importer (c) 2012, Marius Cramer, pixcept KG
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-global $app, $conf;
-
-require_once '../../lib/config.inc.php';
-
-require_once '../../lib/app.inc.php';
-
-/**
- *
- * @param db $exdb
- * @return array
- */
-
-
-function read_limit_data($exdb) {
-	$limits = array();
-	// Limits
-	$limit_data = $exdb->queryAllRecords("SELECT l.id, l.limit_name, l.value FROM Limits as l");
-	foreach($limit_data as $entry) {
-		if(array_key_exists($entry['id'], $limits) == false) $limits[$entry['id']] = array();
-		$limits[$entry['id']][$entry['limit_name']] = $entry['value'];
-
-		// limits that are there:
-		/*
-        disk_space
-        disk_space_soft
-        expiration
-        max_box
-        max_db
-        max_dom_aliases
-        max_maillists
-        max_mn
-        max_site
-        max_site_builder
-        max_subdom
-        max_subftp_users
-        max_traffic
-        max_traffic_soft
-        max_unity_mobile_sites
-        max_webapps
-        max_wu
-        mbox_quota
-        */
-	}
-
-	return $limits;
-}
-
-
-/**
- *
- * @param array $limits
- * @param int $id
- * @param string $limit
- * @param mixed $default
- * @return mixed
- */
-function get_limit($limits, $id, $limit, $default = false) {
-	$ret = $default;
-	if(isset($limits[$id][$limit])) $ret = $limits[$id][$limit];
-
-	return $ret;
-}
-
-function get_option($options, $option, $default = false) {
-	$ret = $default;
-	if(isset($options[$option])) $ret = $options[$option];
-
-	return $ret;
-}
-
-function add_dot($string) {
-	if(strlen($string) > 0 && substr($string, -1, 1) !== '.') $string .= '.';
-	return $string;
-}
-
-function byte_to_mbyte($byte) {
-	if($byte <= 0) return $byte; // limit = -1 -> unlimited
-	return round($byte / (1024*1024));
-}
-
-function yes_no($num, $reverse = false) {
-	return ($num == 1 && !$reverse) || ($num != 1 && $reverse) ? 'y' : 'n';
-}
-
-// taken from the web_domain_edit.php
-function id_hash($id, $levels) {
-	$hash = "" . $id % 10 ;
-	$id /= 10 ;
-	$levels -- ;
-	while ( $levels > 0 ) {
-		$hash .= "/" . $id % 10 ;
-		$id /= 10 ;
-		$levels-- ;
-	}
-	return $hash;
-}
-
-$COMMANDS = 'unset HISTFILE
-MYSERVER="192.168.1.10"
-MYSQL_EXPORT_USER="root"
-MYSQL_EXPORT_PASS=""
-MYSQL_IMPORT_USER="root"
-MYSQL_IMPORT_PASS=""
-';
-
-function add_command($cmd) {
-	global $COMMANDS;
-
-	$COMMANDS .= $cmd . "\n";
-}
-
-
-/* TODO: document root rewrite on ftp account and other home directories */
-
-//* Check permissions for module
-$app->auth->check_module_permissions('admin');
-
-//* This is only allowed for administrators
-if(!$app->auth->is_admin()) die('only allowed for administrators.');
-
-$app->uses('tpl,getconf');
-$app->load('importer');
-
-$app->tpl->newTemplate('form.tpl.htm');
-$app->tpl->setInclude('content_tpl', 'templates/import_plesk.htm');
-$msg = '';
-$error = '';
-
-// Start migrating plesk data
-if(isset($_POST['start']) && $_POST['start'] == 1) {
-
-	//* Set variable sin template
-	$app->tpl->setVar('dbhost', $_POST['dbhost']);
-	$app->tpl->setVar('dbname', $_POST['dbname']);
-	$app->tpl->setVar('dbuser', $_POST['dbuser']);
-	$app->tpl->setVar('dbpassword', $_POST['dbpassword']);
-	$app->tpl->setVar('webcontent', $_POST['webcontent']);
-	$app->tpl->setVar('mailcontent', $_POST['mailcontent']);
-
-	//* Establish connection to external database
-	$msg .= 'Connecting to external database...<br />';
-
-	//* Backup DB login details
-	/*$conf_bak['db_host'] = $conf['db_host'];
-	$conf_bak['db_database'] = $conf['db_database'];
-	$conf_bak['db_user'] = $conf['db_user'];
-	$conf_bak['db_password'] = $conf['db_password'];*/
-
-	//* Set external Login details
-	$conf['imp_db_host'] = $_POST['dbhost'];
-	$conf['imp_db_database'] = $_POST['dbname'];
-	$conf['imp_db_user'] = $_POST['dbuser'];
-	$conf['imp_db_password'] = $_POST['dbpassword'];
-	$conf['imp_db_charset'] = $conf['db_charset'];
-	$conf['imp_db_new_link'] = $conf['db_new_link'];
-	$conf['imp_db_client_flags'] = $conf['db_client_flags'];
-
-	//* create new db object
-	$exdb = new db('imp');
-
-	$msg .= 'db object created...<br />';
-
-	$importer = new importer();
-	$session_id = 'ISPC3'; // set dummy session id for remoting lib
-	$msg .= 'importer object created...<br />';
-
-	// import on server
-	$server_id = 1;
-
-	//* Connect to DB
-	if($exdb !== false) {
-		$msg .= 'Connecting to external database done...<br />';
-
-		$limits = read_limit_data($exdb);
-
-		$msg .= 'read all limit data...<br />';
-
-		// param_id -> cl_params table - not needed for import
-		// tpye = admin, reseller, client
-		$admins = $exdb->queryAllRecords("SELECT c.id, c.parent_id, c.type, c.cr_date, c.cname, c.pname, c.login, c.account_id, a.password, a.type as `pwtype`, c.status, c.phone, c.fax, c.email, c.address, c.city, c.state, c.pcode, c.country, c.locale, c.limits_id, c.params_id, c.perm_id, c.pool_id, c.logo_id, c.tmpl_id, c.guid, c.overuse, c.vendor_id, c.external_id FROM clients as c LEFT JOIN accounts as a ON (a.id = c.account_id) WHERE c.type = 'admin' ORDER BY c.parent_id, c.id");
-		$resellers = $exdb->queryAllRecords("SELECT c.id, c.parent_id, c.type, c.cr_date, c.cname, c.pname, c.login, c.account_id, a.password, a.type as `pwtype`, c.status, c.phone, c.fax, c.email, c.address, c.city, c.state, c.pcode, c.country, c.locale, c.limits_id, c.params_id, c.perm_id, c.pool_id, c.logo_id, c.tmpl_id, c.guid, c.overuse, c.vendor_id, c.external_id FROM clients as c LEFT JOIN accounts as a ON (a.id = c.account_id) WHERE c.type = 'reseller' ORDER BY c.parent_id, c.id");
-		$clients  = $exdb->queryAllRecords("SELECT c.id, c.parent_id, c.type, c.cr_date, c.cname, c.pname, c.login, c.account_id, a.password, a.type as `pwtype`, c.status, c.phone, c.fax, c.email, c.address, c.city, c.state, c.pcode, c.country, c.locale, c.limits_id, c.params_id, c.perm_id, c.pool_id, c.logo_id, c.tmpl_id, c.guid, c.overuse, c.vendor_id, c.external_id FROM clients as c LEFT JOIN accounts as a ON (a.id = c.account_id) WHERE c.type = 'client' ORDER BY c.parent_id, c.id");
-
-		$users = array_merge($admins, $resellers, $clients);
-		$msg .= 'read all users (' . count($users) . ')...<br />';
-
-
-		$plesk_ispc_ids = array(); // array with key = plesk id, value = ispc id
-
-		$phpopts = array('no', 'fast-cgi', 'cgi', 'mod', 'suphp', 'php-fpm');
-
-		// import admins / resellers
-		for($i = 0; $i < count($users); $i++) {
-			$entry = $users[$i];
-
-			$old_client = $importer->client_get_by_username($session_id, $entry['login']);
-			if($old_client) {
-				if($old_client['client_id'] == 0) {
-					$entry['login'] = 'psa_' . $entry['login'];
-					$old_client = $importer->client_get_by_username($session_id, $entry['login']);
-					if($old_client) {
-						$msg .= $entry['login'] . ' existed, updating id ' . $old_client['client_id'] . '<br />';
-					}
-				} else {
-					$msg .= $entry['login'] . ' existed, updating id ' . $old_client['client_id'] . '<br />';
-				}
-			}
-			$params = array(
-				'company_name' => $entry['cname'],
-				'contact_name' => $entry['pname'],
-				'customer_no' => 'Plesk' . $entry['id'],
-				'username' => $entry['login'],
-				'password' => $entry['password'],
-				'language' => substr($entry['locale'], 0, 2), // plesk stores as de-DE or en-US
-				//'usertheme' => '',
-				'street' => $entry['address'],
-				'zip' => $entry['pcode'],
-				'city' => $entry['city'],
-				'state' => $entry['state'],
-				'country' => $entry['country'],
-				'telephone' => $entry['phone'],
-				//'mobile' => $entry[''],
-				'fax' => $entry['fax'],
-				'email' => $entry['email'],
-				//'internet' => $entry[''],
-				//'icq' => $entry[''],
-				//'vat_id' => $entry[''],
-				//'company_id' => $entry[''],
-				//'bank_account_number' => $entry[''],
-				//'bank_code' => $entry[''],
-				//'bank_name' => $entry[''],
-				//'bank_account_iban' => $entry[''],
-				//'bank_account_swift' => $entry[''],
-				'notes' => 'imported from Plesk id ' . $entry['id'],
-				//'template_master' => $entry[''],
-				//'template_additional' => $entry[''],
-				//'default_mailserver' => $entry[''],
-				'limit_maildomain' => get_limit($limits, $entry['id'], 'max_site', -1),
-				'limit_mailbox' => get_limit($limits, $entry['id'], 'max_box', -1),
-				'limit_mailalias' => get_limit($limits, $entry['id'], 'max_mn', -1),
-				'limit_mailaliasdomain' => get_limit($limits, $entry['id'], 'max_dom_aliases', -1),
-				'limit_mailmailinglist' => get_limit($limits, $entry['id'], 'max_maillists', -1),
-				'limit_mailforward' => get_limit($limits, $entry['id'], 'max_mn', -1),
-				'limit_mailcatchall' => 1,
-				'limit_mailrouting' => 0,
-				'limit_mailfilter' => 0,
-				'limit_fetchmail' => 0,
-				'limit_mailquota' => get_limit($limits, $entry['id'], 'mbox_quota', -1),
-				'limit_spamfilter_wblist' => 0,
-				'limit_spamfilter_user' => 0,
-				'limit_spamfilter_policy' => 0,
-				//'default_webserver' => '',
-				'limit_web_domain' => get_limit($limits, $entry['id'], 'max_site', -1),
-				'limit_web_quota' => intval(get_limit($limits, $entry['id'], 'disk_space', -1)),
-				'web_php_options' => implode(',', $phpopts),
-				'limit_web_aliasdomain' => get_limit($limits, $entry['id'], 'max_dom_aliases', -1),
-				'limit_web_subdomain' => get_limit($limits, $entry['id'], 'max_subdom', -1),
-				'limit_ftp_user' => (string)($app->functions->intval(get_limit($limits, $entry['id'], 'max_subftp_users', -2)) + 1),
-				'limit_shell_user' => 0,
-				'ssh_chroot' => 'no,jailkit',
-				'limit_webdav_user' => get_limit($limits, $entry['id'], 'max_wu', 0),
-				//'default_dnsserver' => '',
-				'limit_dns_zone' => -1,
-				'limit_dns_slave_zone' => -1,
-				'limit_dns_record' => -1,
-				'limit_client' => ($entry['type'] == 'client' ? 0 : -1),
-				//'default_dbserver' => '',
-				'limit_database' => get_limit($limits, $entry['id'], 'max_db', -1),
-				'limit_cron' => 0,
-				'limit_cron_type' => 'url',
-				'limit_cron_frequency' => '5',
-				'limit_traffic_quota' => intval(get_limit($limits, $entry['id'], 'max_traffic', -1)),
-				'limit_openvz_vm' => 0,
-				'limit_openvz_vm_template_id' => ''
-			);
-			$reseller_id = 0;
-			if($entry['parent_id'] != 0) {
-				if(array_key_exists($entry['parent_id'], $plesk_ispc_ids)) {
-					$reseller_id = $plesk_ispc_ids[$entry['parent_id']];
-				}
-			}
-
-			if($old_client) {
-				$new_id = $old_client['client_id'];
-				$ok = $importer->client_update($session_id, $old_client['client_id'], $reseller_id, array_merge($old_client, $params));
-				if($ok === false) {
-
-				}
-			} else {
-				$new_id = $importer->client_add($session_id, $reseller_id, $params);
-			}
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Client " . $entry['id'] . " (" . $entry['pname'] . ") could not be inserted/updated.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Client " . $entry['id'] . " (" . $entry['pname'] . ") inserted/updated.<br />";
-			}
-
-			$plesk_ispc_ids[$entry['id']] = $new_id;
-		}
-		unset($users);
-		unset($clients);
-		unset($resellers);
-		unset($admins);
-
-		$web_config = $app->getconf->get_server_config($server_id, 'web');
-
-		$domains = $exdb->queryAllRecords("SELECT d.id, d.cr_date, d.name, d.displayName, d.dns_zone_id, d.status, d.htype, d.real_size, d.cl_id, d.limits_id, d.params_id, d.guid, d.overuse, d.gl_filter, d.vendor_id, d.webspace_id, d.webspace_status, d.permissions_id, d.external_id FROM domains as d WHERE d.parentDomainId = 0");
-		$dom_ftp_users = array();
-		$domain_ids = array();
-		$domain_roots = array();
-		$domain_owners = array();
-		$dns_domain_ids = array();
-		$maildomain_ids = array();
-		foreach($domains as $entry) {
-			$res = $exdb->query("SELECT d.dom_id, d.param, d.val FROM dom_param as d WHERE d.dom_id = '" . $entry['id'] . "'");
-			$options = array();
-			while($opt = $res->get()) {
-				$options[$opt['param']] = $opt['val'];
-			}
-
-			/* TODO: options that might be used later:
-             * OveruseBlock true/false
-             * OveruseNotify true/false
-             * OveruseSuspend true/false
-             * wu_script true/false (webusers allowed to use scripts?)
-             * webmail string (webmailer used - horde)
-             */
-
-			$redir_type = '';
-			$redir_path = '';
-
-			if($entry['htype'] === 'std_fwd') {
-				// redirection
-				$redir = $exdb->queryOneRecord("SELECT f.dom_id, f.ip_address_id, f.redirect FROM forwarding as f WHERE f.dom_id = '" . $entry['id'] . "'");
-				$redir_type = 'R,L';
-				$redir_path = $redir['redirect'];
-			} elseif($entry['htype'] === 'vrt_hst') {
-				// default virtual hosting (vhost)
-			} else {
-				/* TODO: unknown type */
-			}
-
-			$hosting = $exdb->queryOneRecord("SELECT h.dom_id, h.sys_user_id, h.ip_address_id, h.real_traffic, h.fp, h.fp_ssl, h.fp_enable, h.fp_adm, h.fp_pass, h.ssi, h.php, h.cgi, h.perl, h.python, h.fastcgi, h.miva, h.coldfusion, h.asp, h.asp_dot_net, h.ssl, h.webstat, h.same_ssl, h.traffic_bandwidth, h.max_connection, h.php_handler_type, h.www_root, h.maintenance_mode, h.certificate_id, s.login, s.account_id, s.home, s.shell, s.quota, s.mapped_to, a.password, a.type as `pwtype` FROM hosting as h LEFT JOIN sys_users as s ON (s.id = h.sys_user_id) LEFT JOIN accounts as a ON (s.account_id = a.id) WHERE h.dom_id = '" . $entry['id'] . "'");
-			if($hosting['sys_user_id']) {
-				$dom_ftp_users[] = array('id' => 0,
-					'dom_id' => $hosting['dom_id'],
-					'sys_user_id' => $hosting['sys_user_id'],
-					'login' => $hosting['login'],
-					'account_id' => $hosting['account_id'],
-					'home' => $hosting['home'],
-					'shell' => $hosting['shell'],
-					'quota' => $hosting['quota'],
-					'mapped_to' => $hosting['mapped_to'],
-					'password' => $hosting['password'],
-					'pwtype' => $hosting['pwtype']
-				);
-			}
-
-			$phpmode = 'no';
-			if(get_option($hosting, 'php', 'false') === 'true') {
-				$mode = get_option($hosting, 'php_handler_type', 'module');
-				if($mode === 'module') $phpmode = 'mod';
-				else $phpmode = 'fast-cgi';
-				/* TODO: what other options could be in "php_handler_type"? */
-			}
-
-			/* TODO: plesk offers some more options:
-             * sys_user_id -> owner of files?
-             * ip_address_id - needed?
-             * fp - frontpage extensions
-             * miva - ?
-             * coldfusion
-             * asp
-             * asp_dot_net
-             * traffic_bandwidth
-             * max_connections
-             */
-			$params = array(
-				'server_id' => $server_id,
-				'ip_address' => '*',
-				//'ipv6_address' => '',
-				'domain' => $entry['name'],
-				'type' => 'vhost', // can be vhost or alias
-				'parent_domain_id' => '', // only if alias
-				'vhost_type' => 'name', // or ip (-based)
-				'hd_quota' => byte_to_mbyte(get_limit($limits, $entry['id'], 'disk_space', -1)),
-				'traffic_quota' => byte_to_mbyte(get_limit($limits, $entry['id'], 'max_traffic', -1)),
-				'cgi' => yes_no(get_option($hosting, 'cgi', 'false') === 'true' ? 1 : 0),
-				'ssi' => yes_no(get_option($hosting, 'ssi', 'false') === 'true' ? 1 : 0),
-				'suexec' => yes_no(1), // does plesk use this?!
-				'errordocs' => get_option($options, 'apacheErrorDocs', 'false') === 'true' ? 1 : 0,
-				'subdomain' => 'www', // plesk always uses this option
-				'ssl' => yes_no(get_option($hosting, 'ssl', 'false') === 'true' ? 1 : 0),
-				'php' => $phpmode,
-				'fastcgi_php_version' => '', // plesk has no different php versions
-				'ruby' => yes_no(0), // plesk has no ruby support
-				'python' => yes_no(get_option($hosting, 'python', 'false') === 'true' ? 1 : 0),
-				'active' => yes_no(($entry['status'] == 0 && get_option($hosting, 'maintenance_mode', 'false') !== 'true') ? 1 : 0),
-				'redirect_type' => $redir_type,
-				'redirect_path' => $redir_path,
-				'seo_redirect' => '',
-				'ssl_state' => $entry[''],
-				'ssl_locality' => $entry[''],
-				'ssl_organisation' => $entry[''],
-				'ssl_organisation_unit' => $entry[''],
-				'ssl_country' => $entry[''],
-				'ssl_domain' => $entry[''],
-				'ssl_request' => $entry[''],
-				'ssl_cert' => $entry[''],
-				'ssl_bundle' => $entry[''],
-				'ssl_action' => $entry[''],
-				'stats_password' => '',
-				'stats_type' => get_option($hosting, 'webstat', 'webalizer') === 'awstats' ? 'awstats' : 'webalizer',
-				'backup_interval' => 'none',
-				'backup_copies' => 1,
-				'allow_override' => 'All',
-				'pm_process_idle_timeout' => 10,
-				'pm_max_requests' => 0
-			);
-
-			// find already inserted domain
-			$old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '" . $entry['name'] . "'");
-			if(!$old_domain) $old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE CONCAT(subdomain, '.', domain) = '" . $entry['name'] . "'");
-			if($old_domain) {
-				$new_id = $old_domain['domain_id'];
-				$msg .= "Found domain with id " . $new_id . ", updating it.<br />";
-				$params = array_merge($old_domain, $params);
-				$ok = $importer->sites_web_domain_update($session_id, $plesk_ispc_ids[$entry['cl_id']], $new_id, $params);
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$new_id = $importer->sites_web_domain_add($session_id, $plesk_ispc_ids[$entry['cl_id']], $params, true); // read only...
-			}
-
-			$domain_ids[$entry['id']] = $new_id;
-			$domain_roots[$entry['id']] = $entry['www_root'];
-			$domain_owners[$entry['id']] = $entry['cl_id'];
-			$dns_domain_ids[$entry['dns_zone_id']] = $entry['id'];
-
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Domain " . $entry['id'] . " (" . $entry['name'] . ") could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Domain " . $entry['id'] . " (" . $entry['name'] . ") inserted -> " . $new_id . ".<br />";
-
-				$cmd_data = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = '" . $new_id . "'");
-				$path = $cmd_data['document_root'];
-				add_command('chattr -i ' . escapeshellarg($path));
-				add_command('if [[ -f ' . $path . '/web/index.html ]] ; then rm ' . $path . '/web/index.html ; fi');
-				add_command('rsync -av --modify-window 10 --progress -e ssh root@${MYSERVER}:' . $hosting['www_root'] . '/ ' . $path . '/web/');
-				add_command('chown -R ' . $cmd_data['system_user'] . ':' . $cmd_data['system_group'] . ' ' . escapeshellarg($path));
-				add_command('grep ' . escapeshellarg($hosting['www_root']) . ' ' . $path . '/web -r -l | xargs replace ' . escapeshellarg($hosting['www_root']) . ' ' . escapeshellarg($path . '/web') . ' --');
-				add_command('chown -R root:root ' . escapeshellarg($path . '/log') . ' ' . escapeshellarg($path . '/ssl') . ' ' . escapeshellarg($path . '/web/stats'));
-				add_command('chattr +i ' . escapeshellarg($path));
-			}
-
-			// add domain to mail domains too
-			$params = array(
-				'server_id' => $server_id,
-				'domain' => $entry['name'],
-				'active' => yes_no(($entry['status'] == 0 ? 1 : 0))
-			);
-			$old_domain = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = '" . $entry['name'] . "'");
-			if($old_domain) {
-				$new_id = $old_domain['domain_id'];
-				$params = array_merge($old_domain, $params);
-				$msg .= "Found maildomain with id " . $new_id . ", updating it.<br />";
-				$ok = $importer->mail_domain_update($session_id, $plesk_ispc_ids[$entry['cl_id']], $new_id, $params);
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Inserting new maildomain " . $entry['name'] . ".<br />";
-				$new_id = $importer->mail_domain_add($session_id, $plesk_ispc_ids[$entry['cl_id']], $params);
-			}
-
-			$maildomain_ids[$entry['id']] = $new_id;
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Maildomain (" . $entry['name'] . ") could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Maildomain " . $new_id . " (" . $entry['name'] . ") inserted.<br />";
-			}
-
-		}
-
-		$domain_aliases = $exdb->queryAllRecords("SELECT da.id, da.name, da.displayName, da.dns, da.mail, da.web, da.dom_id, da.status FROM domainaliases as da");
-		foreach($domain_aliases as $entry) {
-			$params = array(
-				'server_id' => $server_id,
-				'domain' => $entry['name'],
-				'type' => 'alias',
-				'parent_domain_id' => $domain_ids[$entry['dom_id']],
-				'redirect_type' => '',
-				'redirect_path' => '',
-				'subdomain' => 'www',
-				'active' => yes_no(($entry['status'] == 0 && $entry['web'] === 'true') ? 1 : 0)
-			);
-
-			$old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '" . $entry['name'] . "'");
-			if(!$old_domain) $old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE CONCAT(subdomain, '.', domain) = '" . $entry['name'] . "'");
-			if($old_domain) {
-				$new_id = $old_domain['domain_id'];
-				$params = array_merge($old_domain, $params);
-				$msg .= "Found domain with id " . $new_id . ", updating it.<br />";
-				$ok = $importer->sites_web_aliasdomain_update($session_id, $plesk_ispc_ids[$domain_owners[$entry['dom_id']]], $new_id, $params);
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$new_id = $importer->sites_web_aliasdomain_add($session_id, $plesk_ispc_ids[$domain_owners[$entry['dom_id']]], $params);
-			}
-
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Aliasdomain " . $entry['id'] . " (" . $entry['name'] . ") could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Aliasdomain " . $entry['id'] . " (" . $entry['name'] . ") inserted.<br />";
-			}
-
-			// add alias to mail domains, too
-			$params = array(
-				'server_id' => $server_id,
-				'domain' => $entry['name'],
-				'active' => yes_no(($entry['status'] == 0 && $entry['mail'] === 'true') ? 1 : 0)
-			);
-
-			$old_domain = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = '" . $entry['name'] . "'");
-			if($old_domain) {
-				$new_id = $old_domain['domain_id'];
-				$params = array_merge($old_domain, $params);
-				$msg .= "Found mail domain with id " . $new_id . ", updating it.<br />";
-				$ok = $importer->mail_domain_update($session_id, $plesk_ispc_ids[$domain_owners[$entry['dom_id']]], $new_id, $params);
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$new_id = $importer->mail_domain_add($session_id, $plesk_ispc_ids[$domain_owners[$entry['dom_id']]], $params);
-			}
-
-			$maildomain_ids[$entry['id']] = $new_id;
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Aliasmaildomain " . $entry['id'] . " (" . $entry['name'] . ") could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Aliasmaildomain " . $entry['id'] . " (" . $entry['name'] . ") inserted.<br />";
-			}
-		}
-
-		$subdomain_ids = array();
-		$subdomain_roots = array();
-		$subdomain_owners = array();
-
-		$subdomains = $exdb->queryAllRecords("SELECT d.id, d.cr_date, d.name, d.displayName, d.dns_zone_id, d.status, d.htype, d.real_size, d.cl_id, d.limits_id, d.params_id, d.guid, d.overuse, d.gl_filter, d.vendor_id, d.webspace_id, d.webspace_status, d.permissions_id, d.external_id, d.parentDomainId FROM domains as d WHERE d.parentDomainId != 0");
-		foreach($subdomains as $entry) {
-			$res = $exdb->query("SELECT d.dom_id, d.param, d.val FROM dom_param as d WHERE d.dom_id = '" . $entry['id'] . "'");
-			$options = array();
-			while($opt = $exdb->nextRecord()) {
-				$options[$opt['param']] = $opt['val'];
-			}
-
-			$parent_domain = $exdb->queryOneRecord("SELECT d.id, d.cl_id, d.name FROM domains as d WHERE d.id = '" . $entry['parentDomainId'] . "'");
-			$redir_type = '';
-			$redir_path = '';
-
-			if($entry['htype'] === 'std_fwd') {
-				// redirection
-				$redir = $exdb->queryOneRecord("SELECT f.dom_id, f.ip_address_id, f.redirect FROM forwarding as f WHERE f.dom_id = '" . $entry['id'] . "'");
-				$redir_type = 'R,L';
-				$redir_path = $redir['redirect'];
-			} elseif($entry['htype'] === 'vrt_hst') {
-				// default virtual hosting (vhost)
-			} else {
-				/* TODO: unknown type */
-			}
-
-			$hosting = $exdb->queryOneRecord("SELECT h.dom_id, h.sys_user_id, h.ip_address_id, h.real_traffic, h.fp, h.fp_ssl, h.fp_enable, h.fp_adm, h.fp_pass, h.ssi, h.php, h.cgi, h.perl, h.python, h.fastcgi, h.miva, h.coldfusion, h.asp, h.asp_dot_net, h.ssl, h.webstat, h.same_ssl, h.traffic_bandwidth, h.max_connection, h.php_handler_type, h.www_root, h.maintenance_mode, h.certificate_id, s.login, s.account_id, s.home, s.shell, s.quota, s.mapped_to, a.password, a.type as `pwtype` FROM hosting as h LEFT JOIN sys_users as s ON (s.id = h.sys_user_id) LEFT JOIN accounts as a ON (s.account_id = a.id) WHERE h.dom_id = '" . $entry['id'] . "'");
-			if($hosting['sys_user_id']) {
-				$dom_ftp_users[] = array('id' => 0,
-					'dom_id' => $hosting['dom_id'],
-					'sys_user_id' => $hosting['sys_user_id'],
-					'login' => $hosting['login'],
-					'account_id' => $hosting['account_id'],
-					'home' => $hosting['home'],
-					'shell' => $hosting['shell'],
-					'quota' => $hosting['quota'],
-					'mapped_to' => $hosting['mapped_to'],
-					'password' => $hosting['password'],
-					'pwtype' => $hosting['pwtype']
-				);
-			}
-
-			$phpmode = 'no';
-			if(get_option($hosting, 'php', 'false') === 'true') {
-				$mode = get_option($hosting, 'php_handler_type', 'module');
-				if($mode === 'module') $phpmode = 'mod';
-				else $phpmode = 'fast-cgi';
-				/* TODO: what other options could be in "php_handler_type"? */
-			}
-			/* TODO: plesk offers some more options:
-             * sys_user_id -> owner of files?
-             * ip_address_id - needed?
-             * fp - frontpage extensions
-             * miva - ?
-             * coldfusion
-             * asp
-             * asp_dot_net
-             * traffic_bandwidth
-             * max_connections
-             */
-
-			$web_folder = $hosting['www_root'];
-			$web_folder = preg_replace('/^\/(var|srv)\/www\/(vhosts\/)?[^\/]+\/(.*)\/httpdocs.*/', '$3', $web_folder);
-
-			//if(substr($web_folder, 0, 1) === '/') $web_folder = substr($web_folder, 1);
-			//if(substr($web_folder, -1, 1) === '/') $web_folder = substr($web_folder, 0, -1);
-			$params = array(
-				'server_id' => $server_id,
-				'ip_address' => '*',
-				//'ipv6_address' => '',
-				'domain' => $entry['name'],
-				'web_folder' => $web_folder,
-				'type' => 'vhostsubdomain', // can be vhost or alias
-				'parent_domain_id' => $domain_ids[$entry['parentDomainId']],
-				'vhost_type' => 'name', // or ip (-based)
-				'hd_quota' => byte_to_mbyte(get_limit($limits, $entry['dom_id'], 'disk_space', -1)),
-				'traffic_quota' => byte_to_mbyte(get_limit($limits, $entry['dom_id'], 'max_traffic', -1)),
-				'cgi' => yes_no(get_option($hosting, 'cgi', 'false') === 'true' ? 1 : 0),
-				'ssi' => yes_no(get_option($hosting, 'ssi', 'false') === 'true' ? 1 : 0),
-				'suexec' => yes_no(1), // does plesk use this?!
-				'errordocs' => get_option($options, 'apacheErrorDocs', 'false') === 'true' ? 1 : 0,
-				'subdomain' => '', // plesk always uses this option
-				'ssl' => yes_no(get_option($hosting, 'ssl', 'false') === 'true' ? 1 : 0),
-				'php' => $phpmode,
-				'fastcgi_php_version' => '', // plesk has no different php versions
-				'ruby' => yes_no(0), // plesk has no ruby support
-				'python' => yes_no(get_option($hosting, 'python', 'false') === 'true' ? 1 : 0),
-				'active' => yes_no(($entry['status'] == 0 && get_option($hosting, 'maintenance_mode', 'false') !== 'true') ? 1 : 0),
-				'redirect_type' => $redir_type,
-				'redirect_path' => $redir_path,
-				'seo_redirect' => '',
-				'ssl_state' => $entry[''],
-				'ssl_locality' => $entry[''],
-				'ssl_organisation' => $entry[''],
-				'ssl_organisation_unit' => $entry[''],
-				'ssl_country' => $entry[''],
-				'ssl_domain' => $entry[''],
-				'ssl_request' => $entry[''],
-				'ssl_cert' => $entry[''],
-				'ssl_bundle' => $entry[''],
-				'ssl_action' => $entry[''],
-				'stats_password' => '',
-				'stats_type' => get_option($hosting, 'webstat', 'webalizer') === 'awstats' ? 'awstats' : 'webalizer',
-				'backup_interval' => 'none',
-				'backup_copies' => 1,
-				'allow_override' => 'All',
-				'pm_process_idle_timeout' => 10,
-				'pm_max_requests' => 0
-			);
-
-			$old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '" . $entry['name'] . "'");
-			if(!$old_domain) $old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE CONCAT(subdomain, '.', domain) = '" . $entry['name'] . "'");
-			if($old_domain) {
-				$new_id = $old_domain['domain_id'];
-				$params = array_merge($old_domain, $params);
-				$msg .= "Found domain " . $entry['name'] . " with id " . $new_id . ", updating it.<br />";
-				$ok = $importer->sites_web_vhost_subdomain_update($session_id, $plesk_ispc_ids[$parent_domain['cl_id']], $new_id, $params);
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$new_id = $importer->sites_web_vhost_subdomain_add($session_id, $plesk_ispc_ids[$parent_domain['cl_id']], $params, true); // read only...
-			}
-
-			$subdomain_ids[$entry['id']] = $new_id;
-			$subdomain_roots[$entry['id']] = $hosting['www_root'];
-			$subdomain_owners[$entry['id']] = $entry['cl_id'];
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Subdomain " . $entry['id'] . " (" . $entry['name'] . ") with folder \"" . $web_folder . "\" could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Subdomain " . $entry['id'] . " (" . $entry['name'] . ") inserted.<br />";
-
-				$cmd_data = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = '" . $new_id . "'");
-				$path = $cmd_data['document_root'];
-				add_command('chattr -i ' . escapeshellarg($path));
-				add_command('if [[ -f ' . $path . '/' . $web_folder . '/index.html ]] ; then rm ' . $path . '/' . $web_folder . '/index.html ; fi');
-				add_command('rsync -av --modify-window 10 --progress -e ssh root@${MYSERVER}:' . $hosting['www_root'] . '/ ' . $path . '/' . $web_folder . '/');
-				add_command('chown -R ' . $cmd_data['system_user'] . ':' . $cmd_data['system_group'] . ' ' . escapeshellarg($path));
-				add_command('grep ' . escapeshellarg($hosting['www_root']) . ' ' . $path . '/web -r -l | xargs replace ' . escapeshellarg($hosting['www_root']) . ' ' . escapeshellarg($path . '/web') . ' --');
-				add_command('chown -R root:root ' . escapeshellarg($path . '/log') . ' ' . escapeshellarg($path . '/ssl') . ' ' . escapeshellarg($path . '/web/stats'));
-				add_command('chattr +i ' . escapeshellarg($path));
-
-			}
-			$domain_ids[$entry['id']] = $new_id;
-		}
-
-		// subdomains in plesk are real vhosts, so we have to treat them as vhostsubdomains
-		$subdomains = $exdb->queryAllRecords("SELECT d.id, d.dom_id, d.name, d.displayName, d.sys_user_id, d.ssi, d.php, d.cgi, d.perl, d.python, d.fastcgi, d.miva, d.coldfusion, d.asp, d.asp_dot_net, d.ssl, d.same_ssl, d.php_handler_type, d.www_root, d.maintenance_mode, d.certificate_id FROM subdomains as d");
-		foreach($subdomains as $entry) {
-			$res = $exdb->query("SELECT d.dom_id, d.param, d.val FROM dom_param as d WHERE d.dom_id = '" . $entry['dom_id'] . "'");
-			$options = array();
-			while($opt = $res->get()) {
-				$options[$opt['param']] = $opt['val'];
-			}
-
-			$parent_domain = $exdb->queryOneRecord("SELECT d.id, d.cl_id, d.name FROM domains as d WHERE d.id = '" . $entry['dom_id'] . "'");
-
-			/* TODO: options that might be used later:
-             * OveruseBlock true/false
-             * OveruseNotify true/false
-             * OveruseSuspend true/false
-             * wu_script true/false (webusers allowed to use scripts?)
-             * webmail string (webmailer used - horde)
-             */
-
-			$redir_type = '';
-			$redir_path = '';
-
-			if($entry['htype'] === 'std_fwd') {
-				// redirection
-				$redir = $exdb->queryOneRecord("SELECT f.dom_id, f.ip_address_id, f.redirect FROM forwarding as f WHERE f.dom_id = '" . $entry['id'] . "'");
-				$redir_type = 'R,L';
-				$redir_path = $redir['redirect'];
-			} elseif($entry['htype'] === 'vrt_hst') {
-				// default virtual hosting (vhost)
-			} else {
-				/* TODO: unknown type */
-			}
-
-			$hosting = $exdb->queryOneRecord("SELECT h.dom_id, h.sys_user_id, h.ip_address_id, h.real_traffic, h.fp, h.fp_ssl, h.fp_enable, h.fp_adm, h.fp_pass, h.ssi, h.php, h.cgi, h.perl, h.python, h.fastcgi, h.miva, h.coldfusion, h.asp, h.asp_dot_net, h.ssl, h.webstat, h.same_ssl, h.traffic_bandwidth, h.max_connection, h.php_handler_type, h.www_root, h.maintenance_mode, h.certificate_id FROM hosting as h WHERE h.dom_id = '" . $entry['dom_id'] . "'");
-			$hosting = array_merge($hosting, $entry); //settings from subdomain override parent settings
-
-			$phpmode = 'no';
-			if(get_option($hosting, 'php', 'false') === 'true') {
-				$mode = get_option($hosting, 'php_handler_type', 'module');
-				if($mode === 'module') $phpmode = 'mod';
-				else $phpmode = 'fast-cgi';
-				/* TODO: what other options could be in "php_handler_type"? */
-			}
-			/* TODO: plesk offers some more options:
-             * sys_user_id -> owner of files?
-             * ip_address_id - needed?
-             * fp - frontpage extensions
-             * miva - ?
-             * coldfusion
-             * asp
-             * asp_dot_net
-             * traffic_bandwidth
-             * max_connections
-             */
-
-			$web_folder = $entry['www_root'];
-			$web_folder = preg_replace('/^\/(var|srv)\/www\/(vhosts\/)?[^\/]+\/(.*)\/httpdocs.*/', '$3', $web_folder);
-
-			$params = array(
-				'server_id' => $server_id,
-				'ip_address' => '*',
-				//'ipv6_address' => '',
-				'domain' => $entry['name'] . '.' . $parent_domain['name'],
-				'web_folder' => $web_folder,
-				'type' => 'vhostsubdomain', // can be vhost or alias
-				'parent_domain_id' => $domain_ids[$entry['dom_id']],
-				'vhost_type' => 'name', // or ip (-based)
-				'hd_quota' => byte_to_mbyte(get_limit($limits, $entry['dom_id'], 'disk_space', -1)),
-				'traffic_quota' => byte_to_mbyte(get_limit($limits, $entry['dom_id'], 'max_traffic', -1)),
-				'cgi' => yes_no(get_option($hosting, 'cgi', 'false') === 'true' ? 1 : 0),
-				'ssi' => yes_no(get_option($hosting, 'ssi', 'false') === 'true' ? 1 : 0),
-				'suexec' => yes_no(1), // does plesk use this?!
-				'errordocs' => get_option($options, 'apacheErrorDocs', 'false') === 'true' ? 1 : 0,
-				'subdomain' => '', // plesk always uses this option
-				'ssl' => yes_no(get_option($hosting, 'ssl', 'false') === 'true' ? 1 : 0),
-				'php' => $phpmode,
-				'fastcgi_php_version' => '', // plesk has no different php versions
-				'ruby' => yes_no(0), // plesk has no ruby support
-				'python' => yes_no(get_option($hosting, 'python', 'false') === 'true' ? 1 : 0),
-				'active' => yes_no(($entry['status'] == 0 && get_option($hosting, 'maintenance_mode', 'false') !== 'true') ? 1 : 0),
-				'redirect_type' => $redir_type,
-				'redirect_path' => $redir_path,
-				'seo_redirect' => '',
-				'ssl_state' => $entry[''],
-				'ssl_locality' => $entry[''],
-				'ssl_organisation' => $entry[''],
-				'ssl_organisation_unit' => $entry[''],
-				'ssl_country' => $entry[''],
-				'ssl_domain' => $entry[''],
-				'ssl_request' => $entry[''],
-				'ssl_cert' => $entry[''],
-				'ssl_bundle' => $entry[''],
-				'ssl_action' => $entry[''],
-				'stats_password' => '',
-				'stats_type' => get_option($hosting, 'webstat', 'webalizer') === 'awstats' ? 'awstats' : 'webalizer',
-				'backup_interval' => 'none',
-				'backup_copies' => 1,
-				'allow_override' => 'All',
-				'pm_process_idle_timeout' => 10,
-				'pm_max_requests' => 0
-			);
-
-			$old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = '" . $entry['name'] . '.' . $parent_domain['name'] . "'");
-			if(!$old_domain) $old_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE CONCAT(subdomain, '.', domain) = '" . $entry['name'] . "'");
-			if($old_domain) {
-				$new_id = $old_domain['domain_id'];
-				$params = array_merge($old_domain, $params);
-				$msg .= "Found domain with id " . $new_id . ", updating it.<br />";
-				$ok = $importer->sites_web_vhost_subdomain_update($session_id, $plesk_ispc_ids[$parent_domain['cl_id']], $new_id, $params);
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$new_id = $importer->sites_web_vhost_subdomain_add($session_id, $plesk_ispc_ids[$parent_domain['cl_id']], $params, true); // read only...
-			}
-
-			$subdomain_ids[$entry['id']] = $new_id;
-			$subdomain_roots[$entry['id']] = $entry['www_root'];
-			$subdomain_owners[$entry['id']] = $entry['cl_id'];
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Subdomain " . $entry['id'] . " (" . $entry['name'] . ") could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Subdomain " . $entry['id'] . " (" . $entry['name'] . ") inserted.<br />";
-
-				$cmd_data = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = '" . $new_id . "'");
-				$path = $cmd_data['document_root'];
-				add_command('chattr -i ' . escapeshellarg($path));
-				add_command('if [[ -f ' . $path . '/' . $web_folder . '/index.html ]] ; then rm ' . $path . '/' . $web_folder . '/index.html ; fi');
-				add_command('rsync -av --modify-window 10 --progress -e ssh root@${MYSERVER}:' . $entry['www_root'] . '/ ' . $path . '/' . $web_folder . '/');
-				add_command('chown -R ' . $cmd_data['system_user'] . ':' . $cmd_data['system_group'] . ' ' . escapeshellarg($path));
-				add_command('chown -R root:root ' . escapeshellarg($path . '/log') . ' ' . escapeshellarg($path . '/ssl') . ' ' . escapeshellarg($path . '/web/stats'));
-				add_command('chattr +i ' . escapeshellarg($path));
-			}
-		}
-
-		// dns have to be done AFTER domains due to missing client info
-		/*
-        $dns_zone_ids = array();
-        $dns_zone_serials = array();
-        $dns_zones = $exdb->queryAllRecords("SELECT d.id, d.name, d.displayName, d.status, d.email, d.type, d.ttl, d.ttl_unit, d.refresh, d.refresh_unit, d.retry, d.retry_unit, d.expire, d.expire_unit, d.minimum, d.minimum_unit, d.serial_format, d.serial FROM dns_zone as d");
-        foreach($dns_zones as $entry) {
-            $ns = $exdb->queryOneRecord("SELECT d.id, d.val FROM dns_recs as d WHERE d.dns_zone_id = '" . $entry['id'] . "' AND d.type = 'NS'");
-            if(!$ns) $ns = array('id' => 0, 'val' => 'ns.' . $entry['name']);
-
-            $dom_id = $dns_domain_ids[$entry['id']];
-            $client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-            if(!$client_id) $client_id = 0;
-
-            $params = array(
-                            'server_id' => $server_id,
-                            'origin' => add_dot($entry['name']), // what to put here?
-                            'ns' => add_dot($ns['val']), // what to put here?
-                            'mbox' => str_replace('@', '.', add_dot($entry['email'])),
-                            'serial' => $entry['serial'],
-                            'refresh' => $entry['refresh'],
-                            'retry' => $entry['retry'],
-                            'expire' => $entry['expire'],
-                            'minimum' => $entry['minimum'],
-                            'ttl' => $entry['ttl'],
-                            'xfer' => '',
-                            'also_notify' => '',
-                            'update_acl' => '',
-                            'active' => yes_no(($entry['status'] == 0 ? 1 : 0))
-                            );
-
-            $old_dns = $app->db->queryOneRecord("SELECT id FROM dns_soa WHERE origin = '" . add_dot($entry['name']) . "'");
-            if($old_dns) $old_id = $old_dns['id'];
-            if($old_id) {
-                $new_id = $old_id;
-                $ok = $importer->dns_zone_update($session_id, $client_id, $old_id, $params);
-                /if($ok === false) {
-                //    $msg .= "DNS " . $entry['id'] . " (" . $entry['name'] . ") could not be updated.<br />";
-                //    $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-                //} else {
-                    $msg .= "DNS " . $entry['id'] . " (" . $entry['name'] . ") updated.<br />";
-                //}
-            } else {
-                $new_id = $importer->dns_zone_add($session_id, $client_id, $params);
-                if($new_id === false) {
-                    //something went wrong here...
-                    $msg .= "DNS " . $entry['id'] . " (" . $entry['name'] . ") could not be inserted.<br />";
-                    $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-                } else {
-                    $msg .= "DNS " . $entry['id'] . " (" . $entry['name'] . ") inserted.<br />";
-                }
-            }
-            $dns_zone_ids[$entry['id']] = $new_id;
-            $dns_zone_serials[$entry['id']] = $entry['serial'];
-        }
-        unset($dns_zones);
-        */
-		/* types:
-         * PTR, NS, A, CNAME, MX, TXT, AAAA
-         *//*
-        $dns_records = $exdb->queryAllRecords("SELECT d.id, d.dns_zone_id, d.type, d.displayHost, d.host, d.displayVal, d.val, d.opt, d.time_stamp FROM dns_recs as d");
-        foreach($dns_records as $entry) {
-            $dns_id = (array_key_exists($entry['dns_zone_id'], $dns_zone_ids) ? $dns_zone_ids[$entry['dns_zone_id']] : 0);
-            if(!$dns_id) {
-                // entry for missing dns zone...?
-                continue;
-            }
-
-            $dom_id = $dns_domain_ids[$entry['dns_zone_id']];
-            $client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-            if(!$client_id) $client_id = 0;
-
-            $params = array(
-                        'server_id' => $server_id,
-                        'zone' => $dns_id,
-                        'name' => add_dot($entry['host']),
-                        'type' => $entry['type'],
-                        'data' => $entry['val'],
-                        //'ttl' => '',
-                        'active' => yes_no(1),
-                        'stamp' => $entry['time_stamp'],
-                        //'serial' => $dns_zone_serials[$entry['id']]
-                        );
-
-
-            $record = $app->db->queryOneRecord("SELECT id FROM dns_rr WHERE zone = '" . $dns_zone_ids[$entry['dns_zone_id']] . "' AND name = '" . add_dot($entry['host']) . "' AND type = '" . $entry['type'] . "'");
-            $old_id = 0;
-            if($record) {
-                $old_id = $record['id'];
-            }
-
-            $new_id = false;
-            if($entry['type'] === 'MX') {
-                $params['aux'] = $entry['opt'];
-                if($old_id) {
-                    $ok = $importer->dns_mx_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_mx_add($session_id, $client_id, $params);
-                }
-            } elseif($entry['type'] === 'PTR') {
-                if($old_id) {
-                    $ok = $importer->dns_ptr_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_ptr_add($session_id, $client_id, $params);
-                }
-            } elseif($entry['type'] === 'A') {
-                if($old_id) {
-                    $ok = $importer->dns_a_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_a_add($session_id, $client_id, $params);
-                }
-            } elseif($entry['type'] === 'AAAA') {
-                if($old_id) {
-                    $ok = $importer->dns_aaaa_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_aaaa_add($session_id, $client_id, $params);
-                }
-            } elseif($entry['type'] === 'TXT') {
-                if($old_id) {
-                    $ok = $importer->dns_txt_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_txt_add($session_id, $client_id, $params);
-                }
-            } elseif($entry['type'] === 'CNAME') {
-                if($old_id) {
-                    $ok = $importer->dns_cname_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_cname_add($session_id, $client_id, $params);
-                }
-            } elseif($entry['type'] === 'NS') {
-                if($old_id) {
-                    $ok = $importer->dns_ns_update($session_id, $client_id, $old_id, $params);
-                    if($ok !== false) $new_id = $old_id;
-                } else {
-                    $new_id = $importer->dns_ns_add($session_id, $client_id, $params);
-                }
-            }
-            if($new_id === false) {
-                //something went wrong here...
-                $msg .= "DNS " . $entry['id'] . " (" . $entry['name'] . ") could not be inserted/updated.<br />";
-                $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />" . var_export($params, true) . '<br />';
-            } else {
-                $msg .= "DNS " . $entry['id'] . " (" . $entry['name'] . ") inserted/updated.<br />";
-            }
-
-        }
-        unset($dns_records);
-        */
-
-		$folder_ids = array();
-		/* web_folder creation*/
-		$protected_dirs = $exdb->queryAllRecords("SELECT `id`, `non_ssl`, `ssl`, `cgi_bin`, `realm`, `path`, `dom_id` FROM protected_dirs");
-		foreach($protected_dirs as $entry) {
-			if($entry['path'] == 'plesk-stat') continue;
-
-			$params = array('server_id' => $server_id,
-				'parent_domain_id' => $domain_ids[$entry['dom_id']],
-				'path' => $entry['path'],
-				'active' => 'y');
-
-			$client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-
-			$folder_id = 0;
-			$check = $app->db->queryOneRecord('SELECT * FROM `web_folder` WHERE `parent_domain_id` = \'' . $domain_ids[$entry['dom_id']] . '\' AND `path` = \'' . $app->db->quote($entry['path']) . '\'');
-			if($check) {
-				$ok = $importer->sites_web_folder_update($session_id, $client_id, $check['web_folder_id'], array_merge($check, $params));
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				$folder_id = $check['web_folder_id'];
-				$msg .= 'Updated HTTP AUTH folder (' . $folder_id . '): ' . $entry['path'] . '<br />';
-			} else {
-				$folder_id = $importer->sites_web_folder_add($session_id, $client_id, $params);
-				$msg .= 'Created HTTP AUTH folder (' . $folder_id . '): ' . $entry['path'] . '<br />';
-				if(!$folder_id) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />" . var_export($params, true) . '<br />';
-			}
-
-			$folder_ids[$entry['id']] = $folder_id;
-		}
-
-		$pd_users = $exdb->queryAllRecords("SELECT u.id, u.login, u.account_id, u.pd_id, a.password, d.dom_id FROM pd_users as u INNER JOIN protected_dirs as d ON (d.id = u.pd_id) INNER JOIN accounts as a ON (a.id = u.account_id)");
-		foreach($pd_users as $entry) {
-			$params = array('server_id' => $server_id,
-				'web_folder_id' => $folder_ids[$entry['pd_id']],
-				'username' => $entry['login'],
-				'password' => $entry['password'],
-				'active' => 'y');
-			if($entry['login'] == '' || !isset($folder_ids[$entry['pd_id']])) {
-				$msg .= 'Skipping Folder user because of missing data.<br />';
-				continue;
-			}
-			$client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-
-			$check = $app->db->queryOneRecord('SELECT * FROM `web_folder_user` WHERE `web_folder_id` = ' . intval($folder_ids[$entry['pd_id']]) . ' AND `username` = \'' . $entry['login'] . '\'');
-			if($check) {
-				$ok = $importer->sites_web_folder_user_update($session_id, $client_id, $check['web_folder_user_id'], array_merge($check, $params));
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				$msg .= 'Updated HTTP AUTH folder user  (' . $fu_id . '): ' . $entry['login'] . '<br />';
-			} else {
-				$fu_id = $importer->sites_web_folder_user_add($session_id, $client_id, $params);
-				$msg .= 'Created HTTP AUTH folder user  (' . $fu_id . '): ' . $entry['login'] . '<br />';
-				if(!$fu_id) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />" . var_export($params, true) . '<br />';
-			}
-		}
-
-		/*$web_users = $exdb->queryAllRecords("SELECT id, dom_id, sys_user_id, ssi, php, cgi, perl, python, fastcgi, asp, asp_dot_net FROM web_users");
-        foreach($web_users as $entry) {
-            $params =
-        }
-        */
-
-
-		$ftp_users = $exdb->queryAllRecords("SELECT f.id, f.dom_id, f.sys_user_id, s.login, s.account_id, s.home, s.shell, s.quota, s.mapped_to, a.password, a.type as `pwtype` FROM ftp_users as f INNER JOIN sys_users as s ON (s.id = f.sys_user_id) INNER JOIN accounts as a ON (a.id = s.account_id)");
-		$ftp_users = array_merge($ftp_users, $dom_ftp_users);
-		foreach($ftp_users as $entry) {
-			$parent_domain = $exdb->queryOneRecord("SELECT d.id, d.cl_id, d.name FROM domains as d WHERE d.id = '" . $entry['dom_id'] . "'");
-			if(!$entry['id']) continue;
-			$ispc_dom_id = $domain_ids[$entry['dom_id']];
-			$client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-			if(!$client_id) $client_id = 0;
-
-			$document_root = str_replace("[website_id]", $ispc_dom_id, $web_config["website_path"]);
-			$document_root = str_replace("[website_idhash_1]", id_hash($ispc_dom_id, 1), $document_root);
-			$document_root = str_replace("[website_idhash_2]", id_hash($ispc_dom_id, 1), $document_root);
-			$document_root = str_replace("[website_idhash_3]", id_hash($ispc_dom_id, 1), $document_root);
-			$document_root = str_replace("[website_idhash_4]", id_hash($ispc_dom_id, 1), $document_root);
-
-			// Set the values for document_root, system_user and system_group
-			$system_user = 'web'.$ispc_dom_id;
-			$system_group = 'client'.$client_id;
-			$document_root = str_replace("[client_id]", $client_id, $document_root);
-			$document_root = str_replace("[client_idhash_1]", id_hash($client_id, 1), $document_root);
-			$document_root = str_replace("[client_idhash_2]", id_hash($client_id, 2), $document_root);
-			$document_root = str_replace("[client_idhash_3]", id_hash($client_id, 3), $document_root);
-			$document_root = str_replace("[client_idhash_4]", id_hash($client_id, 4), $document_root);
-
-			$uid = $system_user;
-			$gid = $system_group;
-
-			$sys_grp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = '" . $client_id . "'");
-			if(!$sys_grp) $sys_grp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = 0");
-
-			if(!$sys_grp) $sys_groupid = 1;
-			else $sys_groupid = $sys_grp['groupid'];
-
-			$params = array(
-				'server_id' => $server_id,
-				'parent_domain_id' => $domain_ids[$entry['dom_id']],
-				'username' => $entry['login'],
-				'password' => $entry['password'],
-				'quota_size' => byte_to_mbyte(($entry['quota'] == 0 ? -1 : $entry['quota'])),
-				'active' => yes_no(1),
-				'uid' => $uid,
-				'gid' => $gid,
-				'dir' => $document_root . (substr($document_root, -1) !== '/' ? '/' : ''),
-				'sys_groupid' => $sys_groupid
-				//'quota_files' => $entry[''],
-				//'ul_ratio' => $entry[''],
-				//'dl_ratio' => $entry[''],
-				//'ul_bandwidth' => $entry[''],
-				//'dl_bandwidth' => $entry['']
-			);
-			$new_id = false;
-			$old_ftp = $app->db->queryOneRecord("SELECT ftp_user_id, parent_domain_id FROM ftp_user WHERE username = '" . $entry['login'] ."'");
-			if($old_ftp) {
-				if($old_ftp['parent_domain_id'] != $domain_ids[$entry['dom_id']]) {
-					$msg .= "FTP Account conflicts with other domain!<br />";
-				} else {
-					$new_id = $old_ftp['ftp_user_id'];
-					$ok = $importer->sites_ftp_user_update($session_id, $client_id, $new_id, array_merge($old_ftp, $params));
-					if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				}
-			} else {
-				$new_id = $importer->sites_ftp_user_add($session_id, $client_id, $params);
-			}
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "FTP " . $entry['id'] . " (" . $entry['login'] . ") could not be inserted.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				$msg .= "Params: " . var_export($params, true) . "<br />";
-			} else {
-				$msg .= "FTP Account " . $entry['id'] . " (" . $entry['login'] . ") inserted.<br />";
-			}
-		}
-
-		$mail_config = $app->getconf->get_server_config($server_id, 'mail');
-
-		$mail_addresses = $exdb->queryAllRecords("SELECT m.id, m.mail_name, m.perm_id, m.postbox, m.account_id, m.redirect, m.redir_addr, m.mail_group, m.autoresponder, m.spamfilter, m.virusfilter, m.mbox_quota, m.dom_id, m.userId, a.password, a.type as `pwtype` FROM mail as m LEFT JOIN accounts as a ON (a.id = m.account_id) ");
-		$mail_ids = array();
-		foreach($mail_addresses as $entry) {
-
-			$parent_domain = $exdb->queryOneRecord("SELECT d.id, d.cl_id, d.name FROM domains as d WHERE d.id = '" . $entry['dom_id'] . "'");
-			if(!$parent_domain) {
-				$msg .= "Could not insert/update mail address " . $entry['mail_name'] . " as domain is missing.<br />";
-				continue;
-			}
-
-			/* postbox true/false
-             * mail_group true/false
-             * spamfilter true/false
-             */
-
-
-			$has_responder = false;
-			if($entry['autoresponder'] === 'true') {
-				$responder = $exdb->queryOneRecord("SELECT id, mn_id, resp_name, keystr, key_where, subject, reply_to, content_type, charset, text, resp_on, ans_freq, mem_limit FROM mail_resp WHERE mn_id = '" . $entry['id'] . "'");
-				if($responder) $has_responder = true;
-			}
-
-			$maildir = str_replace("[domain]", $parent_domain["name"], $mail_config["maildir_path"]);
-			$maildir = str_replace("[localpart]", strtolower($entry["mail_name"]), $maildir);
-
-
-			$params = array(
-				'server_id' => $server_id,
-				'email' => $entry['mail_name'] . "@" . $parent_domain['name'],
-				'login' => strtolower($entry['mail_name'] . "@" . $parent_domain['name']),
-				'password' => $entry['password'],
-				'name' => $entry[''],
-				'quota' => ($entry['mbox_quota'] == -1 ? 0 : $entry['mbox_quota']), // in bytes!
-				'cc' => $entry['redir_addr'],
-				'maildir' => $maildir,
-				'homedir' => $mail_config["homedir_path"],
-				'uid' => $mail_config["mailuser_uid"],
-				'gid' => $mail_config["mailuser_gid"],
-				'postfix' => yes_no(1),
-				'disableimap' => yes_no(0),
-				'disablepop3' => yes_no(0),
-				'autoresponder_subject' => ($has_responder ? $responder['subject'] : ''),
-				'autoresponder_text' => ($has_responder ? $responder['text'] : ''),
-				'autoresponder' => yes_no($has_responder ? 1 : 0),
-				'autoresponder_start_date' => ($has_responder && $responder['resp_on'] === 'true' ? strftime('%Y-%m-%d', time()) : strftime('%Y-%m-%d', time() - (3600*24))),
-				'autoresponder_end_date' => ($has_responder && $responder['resp_on'] === 'true' ? strftime('%Y-%m-%d', time() + (3600*24*365)) : strftime('%Y-%m-%d', time())),
-				'move_junk' => yes_no(0)
-			);
-			$client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-
-			// if this is no postbox we do not need to create a mailuser
-			if($entry['postbox'] !== 'false') {
-				$old_mail = $app->db->queryOneRecord("SELECT mailuser_id FROM mail_user WHERE email = '" . $entry['mail_name'] . "@" . $parent_domain['name'] . "'");
-				if($old_mail) {
-					$new_id = $old_mail['mailuser_id'];
-					$ok = $importer->mail_user_update($session_id, $client_id, $new_id, array_merge($old_mail, $params));
-					if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				} else {
-					$new_id = $importer->mail_user_add($session_id, $client_id, $params);
-				}
-
-				if($new_id === false) {
-					//something went wrong here...
-					$msg .= "Mail" . $entry['id'] . " (" . $entry['mail_name'] . "@" . $parent_domain['name'] . ") could not be inserted/updated.<br />";
-					$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				} else {
-					$msg .= "Mail " . $entry['id'] . " (" . $entry['mail_name'] . "@" . $parent_domain['name'] . ") inserted/updated.<br />";
-
-					add_command('rsync -av --delete-after --modify-window 10 --progress -e ssh root@${MYSERVER}:/var/qmail/mailnames/' . $parent_domain['name'] . '/' . strtolower($entry['mail_name']) . '/Maildir/ ' . $maildir . '/Maildir/');
-					add_command('chown -R vmail:vmail ' . $maildir);
-					add_command('chmod 744 ' . $maildir . '/Maildir/subscriptions');
-					add_command('chmod 600 ' . $maildir . '/Maildir/dovecot-*');
-					add_command('chmod 700 ' . $maildir . '/Maildir/cur ' . $maildir . '/Maildir/new ' . $maildir . '/Maildir/tmp');
-					add_command('chmod 600 ' . $maildir . '/Maildir/cur/* ' . $maildir . '/Maildir/new/* ' . $maildir . '/Maildir/tmp/*');
-				}
-				$mail_ids[$entry['id']] = $new_id;
-			}
-
-			// select all redirs for this address
-			$mail_redir = $exdb->queryAllRecords("SELECT id, mn_id, address FROM mail_redir WHERE mn_id = '" . $entry['id'] . "'");
-			foreach($mail_redir as $redir) {
-				$params = array(
-					'server_id' => $server_id,
-					'source' => $entry['mail_name'] . "@" . $parent_domain['name'],
-					'destination' => $redir['address'],
-					'type' => 'forward', // or forward
-					'active' => yes_no(1)
-				);
-
-				$old_mail = $app->db->queryOneRecord("SELECT forwarding_id FROM mail_forwarding WHERE source = '" . $entry['mail_name'] . "@" . $parent_domain['name'] . "' AND destination = '" . $redir['address'] . "'");
-				if($old_mail) {
-					$new_id = $old_mail['forwarding_id'];
-					$ok = $importer->mail_forward_update($session_id, $client_id, $new_id, array_merge($old_mail, $params));
-					if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				} else {
-					$new_id = $importer->mail_forward_add($session_id, $client_id, $params);
-				}
-
-				if($new_id === false) {
-					//something went wrong here...
-					$msg .= "Mail redirect " . $entry['id'] . " (" . $entry['mail_name'] . "@" . $parent_domain['name'] . " to " . $redir['address'] . ") could not be inserted/updated.<br />";
-					$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				} else {
-					$msg .= "Mail redirect " . $entry['id'] . " (" . $entry['mail_name'] . "@" . $parent_domain['name'] . " to " . $redir['address'] . ") inserted/updated.<br />";
-				}
-			}
-			unset($mail_redir);
-		}
-		unset($mail_addresses);
-
-		$mail_aliases = $exdb->queryAllRecords("SELECT a.id, a.mn_id, a.alias, m.dom_id, m.mail_name FROM mail_aliases as a INNER JOIN mail as m ON (m.id = a.mn_id)");
-		foreach($mail_aliases as $entry) {
-
-			$parent_domain = $exdb->queryOneRecord("SELECT d.id, d.cl_id, d.name FROM domains as d WHERE d.id = '" . $entry['dom_id'] . "'");
-			if(!$parent_domain) {
-				$msg .= "Could not insert/update mail alias " . $entry['alias'] . " as domain is missing.<br />";
-				continue;
-			}
-
-			$params = array(
-				'server_id' => $server_id,
-				'source' => $entry['alias'] . "@" . $parent_domain['name'],
-				'destination' => $entry['mail_name'] . "@" . $parent_domain['name'],
-				'type' => 'alias', // or forward
-				'active' => yes_no(1)
-			);
-			$client_id = $plesk_ispc_ids[$domain_owners[$entry['dom_id']]];
-
-			$old_mail = $app->db->queryOneRecord("SELECT forwarding_id FROM mail_forwarding WHERE source = '" . $entry['alias'] . "@" . $parent_domain['name'] . "' AND destination = '" . $entry['mail_name'] . "@" . $parent_domain['name'] . "'");
-			if($old_mail) {
-				$new_id = $old_mail['forwarding_id'];
-				$ok = $importer->mail_alias_update($session_id, $client_id, $new_id, array_merge($old_mail, $params));
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$new_id = $importer->mail_alias_add($session_id, $client_id, $params);
-			}
-
-			if($new_id === false) {
-				//something went wrong here...
-				$msg .= "Mail alias " . $entry['id'] . " (" . $entry['alias'] . "@" . $parent_domain['name'] . ") could not be inserted/updated.<br />";
-				$msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$msg .= "Mail alias " . $entry['id'] . " (" . $entry['alias'] . "@" . $parent_domain['name'] . ") inserted/updated.<br />";
-			}
-		}
-		unset($mail_aliases);
-
-		//spamfilter // preferences = true/false, username = email address, can be *@*
-		//id, username, preferences
-
-		//spamfilter_preferences
-		//prefid, spamfilter_id, preference, value
-
-
-
-		//$client_traffic = $exdb->queryAllRecords("SELECT t.cl_id, t.date, t.http_in, t.http_out, t.ftp_in, t.ftp_out, t.smtp_in, t.smtp_out, t.pop3_imap_in, t.pop3_imap_out FROM ClientsTraffic as t");
-
-		$db_userids = array();
-
-		$db_users  = $exdb->queryAllRecords("SELECT u.id, u.login, u.account_id, u.db_id, a.password, a.type as `pwtype`, d.dom_id FROM db_users as u INNER JOIN data_bases as d ON (d.id = u.db_id) LEFT JOIN accounts as a ON (a.id = u.account_id)");
-		foreach($db_users as $db_user) {
-			// database user
-			$params = array('server_id' => $server_id,
-				'database_user' => $db_user['login'],
-				'database_password' => $db_user['password']);
-
-			$client_id = $plesk_ispc_ids[$domain_owners[$db_user['dom_id']]];
-
-			$check = $app->db->queryOneRecord('SELECT * FROM `web_database_user` WHERE `database_user` = \'' . $app->db->quote($db_user['login']) . '\'');
-			$db_user_id = 0;
-			if($check) {
-				$ok = $importer->sites_database_user_update($session_id, $client_id, $check['database_user_id'], array_merge($check, $params));
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-				$db_user_id = $check['database_user_id'];
-			} else {
-				$db_user_id = $importer->sites_database_user_add($session_id, $client_id, $params);
-			}
-
-			if(!isset($db_userids[$db_user['db_id']])) $db_userids[$db_user['db_id']] = $db_user_id;
-			$msg .= 'Created / updated database user: ' . $db_user['login'] . '<br />';
-		}
-
-		add_command('# DATABASES');
-
-		$databases  = $exdb->queryAllRecords("SELECT d.id, d.name, d.type, d.dom_id, d.db_server_id, d.default_user_id FROM `data_bases` as d");
-		foreach($databases as $database) {
-			$params = array('server_id' => $server_id,
-				'parent_domain_id' => $domain_ids[$database['dom_id']],
-				'type' => 'mysql',
-				'database_name' => $database['name'],
-				'database_user_id' => $db_userids[$database['id']],
-				'database_ro_user_id' => 0,
-				'database_charset' => 'utf8',
-				'remote_access' => 'n',
-				'active' => 'y',
-				'remote_ips' => '');
-
-			$client_id = $plesk_ispc_ids[$domain_owners[$database['dom_id']]];
-
-			$check = $app->db->queryOneRecord('SELECT * FROM `web_database` WHERE `database_name` = \'' . $app->db->quote($database['name']) . '\'');
-			if($check) {
-				$ok = $importer->sites_database_update($session_id, $client_id, $check['database_id'], array_merge($check, $params));
-				if($ok === false) $msg .= "&nbsp; Error: " . $importer->getFault() . "<br />";
-			} else {
-				$importer->sites_database_add($session_id, $client_id, $params);
-			}
-
-			add_command('for T in `mysql -u ${MYSQL_IMPORT_USER} -p${MYSQL_IMPORT_PASS} ' . $database['name'] . ' -e \'show tables\' | awk \'{ print $1}\' | grep -v \'^Tables\'` ; do echo "DROP TABLE \\`$T\\`" ; mysql -u ${MYSQL_IMPORT_USER} -p${MYSQL_IMPORT_PASS} ' . $database['name'] . ' -e "DROP TABLE \\`$T\\`" ; done');
-			add_command('mysqldump -cCQ --quote-names --hex-blob -h ${MYSERVER} -u ${MYSQL_EXPORT_USER} -p${MYSQL_EXPORT_PASS} ' . $database['name'] . ' | mysql -D ' . $database['name'] . ' -u ${MYSQL_IMPORT_USER} -p${MYSQL_IMPORT_PASS}');
-
-			$msg .= 'Created / updated database: ' . $database['name'] . '<br />';
-		}
-
-		// do we need table disk_usage for import? i think we don't
-
-		// name is domain name, displayName is including "Umlaute"
-		//$anon_ftp = $exdb->queryAllRecords("SELECT f.id, f.dom_id, f.max_conn, f.bandwidth, f.incoming, f.incoming_readable, f.incoming_subdirs, f.status, f.quota, f.display_login, f.login_text FROM anon_ftp as f");
-
-
-		//DomainServices
-		//id, dom_id, type, status, parameters_id, ipCollectionId
-
-		//DomainsTraffic
-		//dom_id, date, http_in, http_out, ftp_in, ftp_out, smtp_in, smtp_out, pop3_imap_in, pop3_imap_out
-
-
-		//IP_Adresses
-		//id, ip_address, mask, iface, ssl_certificate_id, default_domain_id, ftps, main, status
-
-		//ip_pool
-		//id, ip_address_id, type
-
-		/* TODO:
-                */
-		//misc // needed? global settings
-		//param, val
-
-		//Permissions
-		//id, permission, value
-
-		//smb_users // pass is base64 encoded plaintext
-		//id, login, password, contactName, email, companyName, phone, fax, address, city, state, zip, country, creationDate, isBuiltIn, roleId, uuid, isLocked, authCookie, sessionId, externalId, ownerId, isDomainAdmin, additionalInfo, imNumber, imType, isLegacyUser
-
-		/* TODO:
-        sys_users // mapped_to = parent_id
-        id, login, account_id, home, shell, quota, mapped_to
-
-         */
-		add_command('unset MYSERVER');
-		add_command('unset MYSQL_EXPORT_USER');
-		add_command('unset MYSQL_EXPORT_PASS');
-		add_command('unset MYSQL_IMPORT_USER');
-		add_command('unset MYSQL_IMPORT_PASS');
-		add_command('# END');
-		file_put_contents('/tmp/plesk_import_commands.sh', $COMMANDS);
-	} else {
-		$msg .= 'Connecting to external database failed!<br />';
-		$msg .= $exdb->connect_error;
-		$msg .= substr($exdb->errorMessage, 0, 25);
-
-		$error .= $exdb->errorMessage;
-	}
-
-	//* restore db login details
-	/*$conf['db_host'] = $conf_bak['db_host'];
-	$conf['db_database'] = $conf_bak['db_database'];
-	$conf['db_user'] = $conf_bak['db_user'];
-	$conf['db_password'] = $conf_bak['db_password'];*/
-
-}
-
-$app->tpl->setVar('msg', $msg);
-$app->tpl->setVar('error', $error);
-
-
-$app->tpl_defaults();
-$app->tpl->pparse();
-
-
-?>
diff --git a/interface/web/tools/import_vpopmail.php b/interface/web/tools/import_vpopmail.php
index 119bfb8..3c8db20 100644
--- a/interface/web/tools/import_vpopmail.php
+++ b/interface/web/tools/import_vpopmail.php
@@ -68,7 +68,7 @@
 		$msg .= 'Databse connection succeeded<br />';
 
 		$local_server_id = intval($_POST['local_server_id']);
-		$tmp = $app->db->queryOneRecord("SELECT mail_server FROM server WHERE server_id = $local_server_id");
+		$tmp = $app->db->queryOneRecord("SELECT mail_server FROM server WHERE server_id = ?", $local_server_id);
 
 		if($tmp['mail_server'] == 1) {
 			start_import();
@@ -106,41 +106,41 @@
 		foreach($records as $rec) {
 			$pw_domain = $rec['pw_domain'];
 			//* Check if we have a client with that username already
-			$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE username = '$pw_domain'");
+			$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE username = ?", $pw_domain);
 			if($tmp['number'] == 0) {
 				$pw_crypt_password = $app->auth->crypt_password($rec['pw_clear_passwd']);
 				$country = 'FI';
 
 				//* add client
 				$sql = "INSERT INTO `client` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `company_name`, `company_id`, `contact_name`, `customer_no`, `vat_id`, `street`, `zip`, `city`, `state`, `country`, `telephone`, `mobile`, `fax`, `email`, `internet`, `icq`, `notes`, `bank_account_owner`, `bank_account_number`, `bank_code`, `bank_name`, `bank_account_iban`, `bank_account_swift`, `default_mailserver`, `limit_maildomain`, `limit_mailbox`, `limit_mailalias`, `limit_mailaliasdomain`, `limit_mailforward`, `limit_mailcatchall`, `limit_mailrouting`, `limit_mailfilter`, `limit_fetchmail`, `limit_mailquota`, `limit_spamfilter_wblist`, `limit_spamfilter_user`, `limit_spamfilter_policy`, `default_webserver`, `limit_web_ip`, `limit_web_domain`, `limit_web_quota`, `web_php_options`, `limit_cgi`, `limit_ssi`, `limit_perl`, `limit_ruby`, `limit_python`, `force_suexec`, `limit_hterror`, `limit_wildcard`, `limit_ssl`, `limit_web_subdomain`, `limit_web_aliasdomain`, `limit_ftp_user`, `limit_shell_user`, `ssh_chroot`, `limit_webdav_user`, `limit_aps`, `default_dnsserver`, `limit_dns_zone`, `limit_dns_slave_zone`, `limit_dns_record`, `default_dbserver`, `limit_database`, `limit_cron`, `limit_cron_type`, `limit_cron_frequency`, `limit_traffic_quota`, `limit_client`, `limit_mailmailinglist`, `limit_openvz_vm`, `limit_openvz_vm_template_id`, `parent_client_id`, `username`, `password`, `language`, `usertheme`, `template_master`, `template_additional`, `created_at`, `id_rsa`, `ssh_rsa`)
-				VALUES(1, 1, 'riud', 'riud', '', '', '', '$pw_domain', '', '', '', '', '', '', '$country', '', '', '', '', 'http://', '', '', '', '', '', '', '', '', 1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, 0, 0, 1, NULL, -1, -1, 'no,fast-cgi,cgi,mod,suphp', 'n', 'n', 'n', 'n', 'n', 'y', 'n', 'n', 'n', -1, -1, -1, 0, 'no,jailkit', 0, 0, 1, -1, -1, -1, 1, -1, 0, 'url', 5, -1, 0, -1, 0, 0, 0, '$pw_domain', '$pw_crypt_password', '".$conf['language']."', 'default', 0, '', NOW(), '', '')";
-				$app->db->query($sql);
+				VALUES(1, 1, 'riud', 'riud', '', '', '', ?, '', '', '', '', '', '', ?, '', '', '', '', 'http://', '', '', '', '', '', '', '', '', 1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, 0, 0, 1, NULL, -1, -1, 'no,fast-cgi,cgi,mod,suphp', 'n', 'n', 'n', 'n', 'n', 'y', 'n', 'n', 'n', -1, -1, -1, 0, 'no,jailkit', 0, 0, 1, -1, -1, -1, 1, -1, 0, 'url', 5, -1, 0, -1, 0, 0, 0, ?, ?, ?, 'default', 0, '', NOW(), '', '')";
+				$app->db->query($sql, $pw_domain,$country, $pw_domain, $pw_crypt_password, $conf['language']);
 				$client_id = $app->db->insertID();
 
 				//* add sys_group
-				$groupid = $app->db->datalogInsert('sys_group', "(name,description,client_id) VALUES ('".$app->db->quote($pw_domain)."','',".$client_id.")", 'groupid');
+				$groupid = $app->db->datalogInsert('sys_group', array("name" => $pw_domain, "description" => '', "client_id" => $client_id), 'groupid');
 				$groups = $groupid;
 
-				$username = $app->db->quote($pw_domain);
+				$username = $pw_domain;
 				$password = $pw_crypt_password;
 				$modules = $conf['interface_modules_enabled'];
 				$startmodule = 'dashboard';
-				$usertheme = $app->db->quote('default');
+				$usertheme = 'default';
 				$type = 'user';
 				$active = 1;
-				$language = $app->db->quote($conf["language"]);
+				$language = $conf["language"];
 				//$password = $app->auth->crypt_password($password);
 
 				// Create the controlpaneluser for the client
 				//Generate ssh-rsa-keys
 				exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f /tmp/id_rsa -N ""');
-				$app->db->query("UPDATE client SET created_at = ".time().", id_rsa = '".$app->db->quote(@file_get_contents('/tmp/id_rsa'))."', ssh_rsa = '".$app->db->quote(@file_get_contents('/tmp/id_rsa.pub'))."' WHERE client_id = ".$client_id);
+				$app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", @file_get_contents('/tmp/id_rsa'), @file_get_contents('/tmp/id_rsa.pub'), $client_id);
 				exec('rm -f /tmp/id_rsa /tmp/id_rsa.pub');
 
 				// Create the controlpaneluser for the client
 				$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
-				VALUES ('$username','$password','$modules','$startmodule','$usertheme','$type','$active','$language',$groups,$groupid,".$client_id.")";
-				$app->db->query($sql);
+				VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+				$app->db->query($sql, $username,$password,$modules,$startmodule,$usertheme,$type,$active,$language,$groups,$groupid,$client_id);
 
 				//* Set the default servers
 				$tmp = $app->db->queryOneRecord('SELECT server_id FROM server WHERE mail_server = 1 AND mirror_server_id = 0 LIMIT 0,1');
@@ -152,8 +152,8 @@
 				$tmp = $app->db->queryOneRecord('SELECT server_id FROM server WHERE db_server = 1 AND mirror_server_id = 0 LIMIT 0,1');
 				$default_dbserver = $app->functions->intval($tmp['server_id']);
 
-				$sql = "UPDATE client SET default_mailserver = $default_mailserver, default_webserver = $default_webserver, default_dnsserver = $default_dnsserver, default_dbserver = $default_dbserver WHERE client_id = ".$client_id;
-				$app->db->query($sql);
+				$sql = "UPDATE client SET default_mailserver = ?, default_webserver = ?, default_dnsserver = ?, default_dbserver = ? WHERE client_id = ?";
+				$app->db->query($sql, $default_mailserver, $default_webserver, $default_dnsserver, $default_dbserver, $client_id);
 
 				$msg .= "Added Client $username.<br />";
 			} else {
@@ -169,14 +169,22 @@
 			$domain = $rec['pw_domain'];
 
 			//* Check if domain exists already
-			$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE domain = '$domain'");
+			$tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE domain = ?", $domain);
 			if($tmp['number'] == 0) {
-				$user_rec = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE username = '$domain'");
+				$user_rec = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE username = ?", $domain);
 				$sys_userid = ($user_rec['userid'] > 0)?$user_rec['userid']:1;
 				$sys_groupid = ($user_rec['default_group'] > 0)?$user_rec['default_group']:1;
 
-				$sql = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `domain`, `active`)
-				VALUES(".$sys_userid.", ".$sys_groupid.", 'riud', 'riud', '', $local_server_id, '$domain', 'y')";
+				$sql = array(
+					"sys_userid" => $sys_userid,
+					"sys_groupid" => $sys_groupid,
+					"sys_perm_user" => 'riud',
+					"sys_perm_group" => 'riud',
+					"sys_perm_other" => '',
+					"server_id" => $local_server_id,
+					"domain" => $domain,
+					"active" => 'y'
+				);
 				$app->db->datalogInsert('mail_domain', $sql, 'domain_id');
 				$msg .= "Imported domain $domain <br />";
 			} else {
@@ -193,20 +201,52 @@
 			$email = $rec['pw_name'].'@'.$rec['pw_domain'];
 
 			//* Check for duplicate mailboxes
-			$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE email = '".$app->db->quote($email)."'");
+			$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE email = ?", $email);
 
 			if($tmp['number'] == 0) {
 
 				//* get the mail domain for the mailbox
-				$domain_rec = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = '$domain'");
+				$domain_rec = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $domain);
 
 				if(is_array($domain_rec)) {
 					$pw_crypt_password = $app->auth->crypt_password($rec['pw_clear_passwd']);
 					$maildir_path = "/var/vmail/".$rec['pw_domain']."/".$rec['pw_name'];
 
 					//* Insert the mailbox
-					$sql = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `email`, `login`, `password`, `name`, `uid`, `gid`, `maildir`, `quota`, `cc`, `homedir`, `autoresponder`, `autoresponder_start_date`, `autoresponder_end_date`, `autoresponder_subject`, `autoresponder_text`, `move_junk`, `custom_mailfilter`, `postfix`, `access`, `disableimap`, `disablepop3`, `disabledeliver`, `disablesmtp`, `disablesieve`, `disablelda`, `disabledoveadm`)
-					VALUES(".$domain_rec['sys_userid'].", ".$domain_rec['sys_groupid'].", 'riud', 'riud', '', $local_server_id, '$email', '$email', '$pw_crypt_password', '$email', 5000, 5000, '$maildir_path', 0, '', '/var/vmail', 'n', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'Out of office reply', '', 'n', '', 'y', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n')";
+					$sql = array(
+						"sys_userid" => $domain_rec['sys_userid'],
+						"sys_groupid" => $domain_rec['sys_groupid'],
+						"sys_perm_user" => 'riud',
+						"sys_perm_group" => 'riud',
+						"sys_perm_other" => '',
+						"server_id" => $local_server_id,
+						"email" => $email,
+						"login" => $email,
+						"password" => $pw_crypt_password,
+						"name" => $email,
+						"uid" => 5000,
+						"gid" => 5000,
+						"maildir" => $maildir_path,
+						"quota" => 0,
+						"cc" => '',
+						"homedir" => '/var/vmail',
+						"autoresponder" => 'n',
+						"autoresponder_start_date" => '0000-00-00 00:00:00',
+						"autoresponder_end_date" => '0000-00-00 00:00:00',
+						"autoresponder_subject" => 'Out of office reply',
+						"autoresponder_text" => '',
+						"move_junk" => 'n',
+						"custom_mailfilter" => '',
+						"postfix" => 'y',
+						"access" => 'n',
+						"disableimap" => 'n',
+						"disablepop3" => 'n',
+						"disabledeliver" => 'n',
+						"disablesmtp" => 'n',
+						"disablesieve" => 'n',
+						"disablelda" => 'n',
+						"disabledoveadm" => 'n'
+					);
 					$app->db->datalogInsert('mail_user', $sql, 'mailuser_id');
 					$msg .= "Imported mailbox $email <br />";
 				}
@@ -242,16 +282,26 @@
 			}
 
 			//* Check for duplicate forwards
-			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE source = '".$app->db->quote($email)."' AND destination = '".$app->db->quote($target)."'");
+			$tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE source = ? AND destination = ?", $email, $target);
 
 			if($tmp['number'] == 0 && $target != '') {
 
 				//* get the mail domain
-				$domain_rec = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = '".$rec['domain']."'");
+				$domain_rec = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $rec['domain']);
 
 				if(is_array($domain_rec)) {
-					$sql = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `source`, `destination`, `type`, `active`)
-					VALUES(".$domain_rec['sys_userid'].", ".$domain_rec['sys_groupid'].", 'riud', 'riud', '', $local_server_id, '".$app->db->quote($email)."', '".$app->db->quote($target)."', 'forward', 'y')";
+					$sql = array(
+						"sys_userid" => $domain_rec['sys_userid'],
+						"sys_groupid" => $domain_rec['sys_groupid'],
+						"sys_perm_user" => 'riud',
+						"sys_perm_group" => 'riud',
+						"sys_perm_other" => '',
+						"server_id" => $local_server_id,
+						"source" => $email,
+						"destination" => $target,
+						"type" => 'forward',
+						"active" => 'y' 
+					);
 					$app->db->datalogInsert('mail_forwarding', $sql, 'forwarding_id');
 				}
 				$msg .= "Imported alias $email.<br />";
diff --git a/interface/web/tools/lib/lang/ar_resync.lng b/interface/web/tools/lib/lang/ar_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/ar_resync.lng
+++ b/interface/web/tools/lib/lang/ar_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/bg_resync.lng b/interface/web/tools/lib/lang/bg_resync.lng
index 3a6a9db..97537c3 100644
--- a/interface/web/tools/lib/lang/bg_resync.lng
+++ b/interface/web/tools/lib/lang/bg_resync.lng
@@ -1,19 +1,45 @@
 <?php
-$wb['head_txt'] = 'Повторно синхронизиране Инструменти';
-$wb['legend_txt'] = 'Повторно синхронизиране';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync clientdb config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['btn_start_txt'] = 'Стартирай';
-$wb['btn_cancel_txt'] = 'Отказ';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
+$wb['btn_start_txt'] = 'Start';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/br_resync.lng b/interface/web/tools/lib/lang/br_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/br_resync.lng
+++ b/interface/web/tools/lib/lang/br_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/cz_resync.lng b/interface/web/tools/lib/lang/cz_resync.lng
index 56b937c..97537c3 100644
--- a/interface/web/tools/lib/lang/cz_resync.lng
+++ b/interface/web/tools/lib/lang/cz_resync.lng
@@ -1,20 +1,45 @@
 <?php
-$wb['head_txt'] = 'Resynchronizační nástroje';
-$wb['legend_txt'] = 'Resynchronizace';
-$wb['resync_sites_txt'] = 'Resynchronizovat webové stránky';
-$wb['resync_ftp_txt'] = 'Resynchronizovat FTP uživatele';
-$wb['resync_shell_txt'] = 'Resynchronizovat shell uživatele';
-$wb['resync_cron_txt'] = 'Resynchronizovat cron úlohy';
-$wb['resync_db_txt'] = 'Resynchronizovat clientdb konfigurace';
-$wb['resync_mailbox_txt'] = 'Resynchronizovat e-mailové schránky';
-$wb['resync_dns_txt'] = 'Resynchronizovat DNS záznamy';
-$wb['btn_start_txt'] = 'Zahájit';
-$wb['btn_cancel_txt'] = 'Zrušit';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
+$wb['btn_start_txt'] = 'Start';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
-
diff --git a/interface/web/tools/lib/lang/de_resync.lng b/interface/web/tools/lib/lang/de_resync.lng
index 59d85b9..32d1c23 100644
--- a/interface/web/tools/lib/lang/de_resync.lng
+++ b/interface/web/tools/lib/lang/de_resync.lng
@@ -1,20 +1,45 @@
 <?php
-$wb['head_txt'] = 'Resync Werkzeug';
-$wb['legend_txt'] = 'Resync ausgewählte Dienste auf entfernten Server.';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'Alle Dienste';
 $wb['resync_sites_txt'] = 'Webseiten';
-$wb['resync_ftp_txt'] = 'FTP Benutzer';
+$wb['resync_ftp_txt'] = 'FTP-Benutzer';
+$wb['resync_webdav_txt'] = 'WebDAV Benutzer';
 $wb['resync_shell_txt'] = 'Shell Benutzer';
 $wb['resync_cron_txt'] = 'Cronjobs';
-$wb['resync_db_txt'] = 'Datenbanken';
-$wb['resync_mailbox_txt'] = 'E-Mail Konten';
-$wb['resync_dkim_txt'] = 'DKIM-Keys';
+$wb['resync_db_txt'] = 'Kunden Datenbankeinstellungen';
+$wb['resync_mailbox_txt'] = 'Mailkonten';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
 $wb['resync_dns_txt'] = 'DNS Einträge';
-$wb['resync_client_txt'] = 'Kunden';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Kunden und Reseller';
+$wb['all_active_txt'] = 'Alle aktiven Server';
+$wb['all_active_mail_txt'] = 'Alle aktive Mail-Server';
+$wb['all_active_web_txt'] = 'Alle aktive Web-Server';
+$wb['all_active_dns_txt'] = 'Alle aktive DNS-Server';
+$wb['all_active_file_txt'] = 'Alle aktive File-Server';
+$wb['all_active_db_txt'] = 'Alle aktive Datenbank-Server';
+$wb['all_active_vserver_txt'] = 'Alle aktive vServer';
+$wb['do_sites_txt'] = 'Resynced Webseiten';
+$wb['do_ftp_txt'] = 'Resynced FTP-Benutzer';
+$wb['do_webdav_txt'] = 'Resynced WebDav Benutzer';
+$wb['do_shell_txt'] = 'Resynced Shell Benutzer';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Datenbank Benutzer';
+$wb['do_db_txt'] = 'Resynced Datenbank';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailkonto';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail Access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS Zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced Kunden und Reseller';
+$wb['no_results_txt'] = 'Keine Daten vorhanden';
 $wb['btn_start_txt'] = 'Start';
-$wb['btn_cancel_txt'] = 'Zurück';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Benutzer';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'Kein aktiver Serfer gefunden';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/el_resync.lng b/interface/web/tools/lib/lang/el_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/el_resync.lng
+++ b/interface/web/tools/lib/lang/el_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/en_resync.lng b/interface/web/tools/lib/lang/en_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/en_resync.lng
+++ b/interface/web/tools/lib/lang/en_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/es_resync.lng b/interface/web/tools/lib/lang/es_resync.lng
index a699866..97537c3 100644
--- a/interface/web/tools/lib/lang/es_resync.lng
+++ b/interface/web/tools/lib/lang/es_resync.lng
@@ -1,19 +1,45 @@
 <?php
-$wb['head_txt'] = 'Herramienta de Resincronización';
-$wb['legend_txt'] = 'Resincronizar';
-$wb['resync_sites_txt'] = 'Resincronizar Sitios webs';
-$wb['resync_ftp_txt'] = 'Resincronizar Usuarios FTP';
-$wb['resync_shell_txt'] = 'Resincronizar Usuarios shell';
-$wb['resync_cron_txt'] = 'Resincronizar Tareas de cron';
-$wb['resync_db_txt'] = 'Resincronizar Configuración de bases de datos';
-$wb['resync_mailbox_txt'] = 'Resincronizar Buzones de correo';
-$wb['resync_dns_txt'] = 'Resincronizar Registros DNS ';
-$wb['btn_start_txt'] = 'Inicio';
-$wb['btn_cancel_txt'] = 'Cancelar';
-$wb['resync_client_txt'] = 'Resincronizar Clientes';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
+$wb['btn_start_txt'] = 'Start';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/fi_resync.lng b/interface/web/tools/lib/lang/fi_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/fi_resync.lng
+++ b/interface/web/tools/lib/lang/fi_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/fr_resync.lng b/interface/web/tools/lib/lang/fr_resync.lng
index 2113530..97537c3 100644
--- a/interface/web/tools/lib/lang/fr_resync.lng
+++ b/interface/web/tools/lib/lang/fr_resync.lng
@@ -1,20 +1,45 @@
 <?php
-$wb['head_txt'] = 'Outil de Resynchronisation';
-$wb['legend_txt'] = 'Resynchroniser';
-$wb['Resynchroniser_sites_txt'] = 'Resynchroniser Sites web';
-$wb['Resynchroniser_ftp_txt'] = 'Resynchroniser utilisateurs FTP';
-$wb['Resynchroniser_shell_txt'] = 'Resynchroniser utilisateurs shell';
-$wb['Resynchroniser_cron_txt'] = 'Resynchroniser cronjobs';
-$wb['Resynchroniser_db_txt'] = 'Resynchroniser configuration clientdb';
-$wb['Resynchroniser_mailbox_txt'] = 'Resynchroniser Boites aux lettres';
-$wb['Resynchroniser_dkim_txt'] = 'Resynchroniser DKIM-Keys';
-$wb['Resynchroniser_dns_txt'] = 'Resynchroniser enregistrements DNS';
-$wb['btn_start_txt'] = 'Dérrer';
-$wb['btn_cancel_txt'] = 'Annuler';
-$wb['Resynchroniser_client_txt'] = 'Resynchroniser Enregisitrements Client';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
+$wb['btn_start_txt'] = 'Start';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/hr_resync.lng b/interface/web/tools/lib/lang/hr_resync.lng
index 8a97ae4..97537c3 100644
--- a/interface/web/tools/lib/lang/hr_resync.lng
+++ b/interface/web/tools/lib/lang/hr_resync.lng
@@ -1,16 +1,45 @@
 <?php
-$wb['head_txt'] = 'Sinkronizacija';
-$wb['legend_txt'] = 'Sinkroniziraj';
-$wb['resync_sites_txt'] = 'Sinkroniziraj web stranice';
-$wb['resync_ftp_txt'] = 'Sinkroniziraj FTP korisnike';
-$wb['resync_shell_txt'] = 'Sinkroniziraj shell korisnike';
-$wb['resync_cron_txt'] = 'Sinkroniziraj cron zadatke';
-$wb['resync_db_txt'] = 'Sinkroniziraj clientdb konfiguraciju';
-$wb['resync_mailbox_txt'] = 'Sinkroniziraj email sandučiće';
-$wb['resync_dns_txt'] = 'Sinkroniziraj DNS zapise';
-$wb['btn_start_txt'] = 'Pokreni';
-$wb['btn_cancel_txt'] = 'Odustani';
-$wb['resync_client_txt'] = 'Sinkroniziraj klijente';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
+$wb['btn_start_txt'] = 'Start';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
-
-
diff --git a/interface/web/tools/lib/lang/hu_resync.lng b/interface/web/tools/lib/lang/hu_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/hu_resync.lng
+++ b/interface/web/tools/lib/lang/hu_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/id_resync.lng b/interface/web/tools/lib/lang/id_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/id_resync.lng
+++ b/interface/web/tools/lib/lang/id_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/it_resync.lng b/interface/web/tools/lib/lang/it_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/it_resync.lng
+++ b/interface/web/tools/lib/lang/it_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/ja_resync.lng b/interface/web/tools/lib/lang/ja_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/ja_resync.lng
+++ b/interface/web/tools/lib/lang/ja_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/nl_resync.lng b/interface/web/tools/lib/lang/nl_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/nl_resync.lng
+++ b/interface/web/tools/lib/lang/nl_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/pl_resync.lng b/interface/web/tools/lib/lang/pl_resync.lng
index 77e656d..97537c3 100644
--- a/interface/web/tools/lib/lang/pl_resync.lng
+++ b/interface/web/tools/lib/lang/pl_resync.lng
@@ -1,19 +1,45 @@
 <?php
-$wb['head_txt'] = 'Resynchronizacja ustawień';
-$wb['legend_txt'] = 'Resynchronizacja';
-$wb['resync_sites_txt'] = 'Resynchronizacja stron www';
-$wb['resync_ftp_txt'] = 'Resynchronizacja kont FTP';
-$wb['resync_shell_txt'] = 'Resynchronizacja kont shell';
-$wb['resync_cron_txt'] = 'Resynchronizacja zadań cron';
-$wb['resync_db_txt'] = 'Resynchronizacja użytkowników bazy';
-$wb['resync_mailbox_txt'] = 'Resynchronizacja skrzynek e-mail';
-$wb['resync_dns_txt'] = 'Resynchronizacja rekordów DNS';
+$wb['head_txt'] = 'Resync Tool';
+$wb['legend_txt'] = 'Resync';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
-$wb['btn_cancel_txt'] = 'Anuluj';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/pt_resync.lng b/interface/web/tools/lib/lang/pt_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/pt_resync.lng
+++ b/interface/web/tools/lib/lang/pt_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/ro_resync.lng b/interface/web/tools/lib/lang/ro_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/ro_resync.lng
+++ b/interface/web/tools/lib/lang/ro_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/ru_resync.lng b/interface/web/tools/lib/lang/ru_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/ru_resync.lng
+++ b/interface/web/tools/lib/lang/ru_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/se_resync.lng b/interface/web/tools/lib/lang/se_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/se_resync.lng
+++ b/interface/web/tools/lib/lang/se_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/sk_resync.lng b/interface/web/tools/lib/lang/sk_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/sk_resync.lng
+++ b/interface/web/tools/lib/lang/sk_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_resync.lng b/interface/web/tools/lib/lang/tr_resync.lng
index 4e89bde..97537c3 100644
--- a/interface/web/tools/lib/lang/tr_resync.lng
+++ b/interface/web/tools/lib/lang/tr_resync.lng
@@ -1,19 +1,45 @@
 <?php
 $wb['head_txt'] = 'Resync Tool';
 $wb['legend_txt'] = 'Resync';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP-Accounts';
-$wb['resync_webdav_txt'] = 'Resync WebDAV-Users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync Client Database config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_mail_txt'] = 'Resync Maildomains';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['resync_vserver_txt'] = 'Resync vServer';
-$wb['resync_client_txt'] = 'Resync Client records';
-$wb['resync_firewall_txt'] = 'Resync Firewall';
-$wb['resync_no_server_txt'] = 'No active server found';
+$wb['resync_all_txt'] = 'All services';
+$wb['resync_sites_txt'] = 'Websites';
+$wb['resync_ftp_txt'] = 'FTP-Accounts';
+$wb['resync_webdav_txt'] = 'WebDAV-Users';
+$wb['resync_shell_txt'] = 'Shell users';
+$wb['resync_cron_txt'] = 'Cronjobs';
+$wb['resync_db_txt'] = 'Client Database config';
+$wb['resync_mailbox_txt'] = 'Mailboxes';
+$wb['resync_mail_txt'] = 'Maildomains';
+$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['resync_mailinglist_txt'] = 'Mailinglist';
+$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_vserver_txt'] = 'vServer';
+$wb['resync_client_txt'] = 'Client and reseller';
+$wb['all_active_txt'] = 'All active server';
+$wb['all_active_mail_txt'] = 'All active Mail-Server';
+$wb['all_active_web_txt'] = 'All active Web-Server';
+$wb['all_active_dns_txt'] = 'All active DNS-Server';
+$wb['all_active_file_txt'] = 'All active File-Server';
+$wb['all_active_db_txt'] = 'All active Database-Server';
+$wb['all_active_vserver_txt'] = 'All active vServer';
+$wb['do_sites_txt'] = 'Resynced Website';
+$wb['do_ftp_txt'] = 'Resynced FTP user';
+$wb['do_webdav_txt'] = 'Resynced WebDav user';
+$wb['do_shell_txt'] = 'Resynced Shell user';
+$wb['do_cron_txt'] = 'Resynced Cronjob';
+$wb['do_db_user_txt'] = 'Resynced Database User';
+$wb['do_db_txt'] = 'Resynced Database';
+$wb['do_mail_txt'] = 'Resynced Maildomain';
+$wb['do_mailbox_txt'] = 'Resynced Mailbox';
+$wb['do_mail_alias_txt'] = 'Resynced Alias';
+$wb['do_mail_access_txt'] = 'Resynced Mail access';
+$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
+$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
+$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
+$wb['do_dns_txt'] = 'Resynced DNS zone';
+$wb['do_vserver_txt'] = 'Resynced vServer';
+$wb['do_clients_txt'] = 'Resynced clients and reseller';
+$wb['no_results_txt'] = 'Nothing found';
 $wb['btn_start_txt'] = 'Start';
 $wb['btn_cancel_txt'] = 'Cancel';
 ?>
diff --git a/interface/web/tools/lib/menu.d/resync.menu.php b/interface/web/tools/lib/menu.d/resync.menu.php
index bc25fff..65a331f 100644
--- a/interface/web/tools/lib/menu.d/resync.menu.php
+++ b/interface/web/tools/lib/menu.d/resync.menu.php
@@ -9,8 +9,7 @@
 
 	$items[] = array( 'title'  => 'Resync',
 		'target'  => 'content',
-		'link' => 'tools/resync_show.php');
-
+		'link' => 'tools/resync.php');
 
 	$module['nav'][] = array( 'title' => 'Sync Tools',
 		'open'  => 1,
diff --git a/interface/web/tools/lib/module.conf.php b/interface/web/tools/lib/module.conf.php
index 853fd64..617ab0b 100644
--- a/interface/web/tools/lib/module.conf.php
+++ b/interface/web/tools/lib/module.conf.php
@@ -7,6 +7,7 @@
 $module['template']  = 'module.tpl.htm';
 $module['startpage']  = 'tools/index.php';
 $module['tab_width']    = '60';
+$module['order']    = '80';
 
 
 //**** Change User password
diff --git a/interface/web/tools/resync.php b/interface/web/tools/resync.php
new file mode 100644
index 0000000..e99e511
--- /dev/null
+++ b/interface/web/tools/resync.php
@@ -0,0 +1,561 @@
+<?php
+/*
+Copyright (c) 2014, Florian Schaal, info@schaal-24.de
+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/resync.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('admin');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	//* called during onShowEnd
+	private function create_list($server_rec, $server_type, $search) {
+
+		$server_count = 0;
+
+		//* we allow multiple search-pattern - convert string to array
+		if (!is_array($search)) {
+			$_search = $search;
+			$search=array();
+			$search[]=$_search;
+		}
+
+		foreach ($server_rec as $server) {
+			//* check the database for existing records
+			$server_data = $this->server_has_data($server_type, $server['server_id']);
+			foreach ($search as $needle) 
+				if (in_array($needle, $server_data) && strpos($options_servers, $server['server_name']) === false) {
+					$options_servers .= "<option value='$server[server_id]'>$server[server_name]</option>";
+					$server_count++;
+				}
+		}
+
+		return array($options_servers, $server_count);
+	}
+
+	//* called from create_list
+	private function server_has_data($type, $server) {
+
+		global $app;
+
+		$server_id = $app->functions->intval($server);
+
+		if($type == 'mail') {
+			$server_data = array (
+    			'mail_domain' => array (
+        			'index_field' => 'domain_id',
+        			'server_type' => 'mail',
+					'server_id' => $server_id,
+    			),
+    			'mail_mailinglist' => array (
+        			'index_field' =>  'mailinglist_id',
+        			'server_type' => 'mail',
+					'server_id' => $server_id,
+    			),
+    			'mail_user' => array (
+        			'index_field' =>  'mailuser_id',
+        			'server_type' => 'mail',
+					'server_id' => $server_id,
+    			),
+			);
+		}
+		if($type == 'mail_filter') {
+			$server_data = array (
+				'mail_access' => array (
+					'index_field' => 'access_id',
+        			'server_type' => 'mail',
+					'server_id' => $server_id,
+    			),
+				'mail_content_filter' => array (
+					'index_field' => 'content_filter_id',
+        			'server_type' => 'mail',
+    			),
+				'mail_user_filter' => array (
+					'index_field' => 'filter_id',
+        			'server_type' => 'mail',
+    			),
+			);
+		}
+		if($type == 'web'  ) {
+			$server_data = array (
+    			'web_domain' => array (
+        			'index_field' => 'domain_id',
+        			'server_type' => 'web',
+					'server_id' => $server_id,
+    			),
+    			'shell_user' => array (
+        			'index_field' => 'shell_user_id',
+        			'server_type' => 'web',
+					'server_id' => $server_id,
+    			),
+    			'cron' => array (
+        			'index_field' => 'id',
+        			'server_type' => 'cron',
+					'server_id' => $server_id,
+    			),
+    			'ftp_user' => array (
+        			'index_field' => 'ftp_user_id',
+        			'server_type' => 'web',
+					'server_id' => $server_id,
+    			),
+			);
+		}
+		if($type == 'dns' ) {
+			$server_data = array (
+				'dns_soa' => array (
+					'index_field' => 'id',
+					'server_type' => 'dns',
+					'server_id' => $server_id,
+				),
+			);
+		}
+		if($type == 'file' ) {
+			$server_data = array (
+    			'webdav_user' => array (
+        			'index_field' => 'webdav_user_id',
+        			'server_type' => 'file',
+					'server_id' => $server_id,
+    			),
+			);
+		}
+		if($type == 'db' ) {
+			$server_data = array (
+				'web_database' => array (
+					'index_field' => 'web_database_id',
+					'server_type' => 'db',
+					'server_id' => $server_id,
+				),
+			);
+		}
+		if($type == 'vserver' ) {
+			$server_data = array (
+				'openvz_vm' => array (
+					'index_field' => 'vm_id',
+					'server_type' => 'vserver',
+					'server_id' => $server_id,
+				),
+			);
+		}
+		//* proxy
+		//* firewall
+		$array_out = array();
+		foreach($server_data as $db_table => $data) {
+			$sql = @(isset($data['server_id']))?"SELECT * FROM ?? WHERE server_id = ?":"SELECT * FROM ??";
+			$records = $app->db->queryAllRecords($sql, $db_table, $server_id);
+			if (!empty($records)) array_push($array_out, $db_table);
+		}
+
+		return $array_out;
+	}
+
+	function onShowEnd() {
+		global $app;
+
+		//* fetch all-server
+		$server_rec =  $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		$server_count = 0;
+		foreach ($server_rec as $server) {
+			$options_servers .= "<option value='$server[server_id]'>$server[server_name]</option>";
+			$server_count++;
+		}
+		if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_txt']."</option>" . $options_servers;
+		$app->tpl->setVar('all_server_id', $options_servers);
+		unset($options_servers);
+
+		//* fetch mail-server
+		$mail_server_rec = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE mail_server = 1 AND active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		if (!empty($mail_server_rec)) {
+			$app->tpl->setVar('mail_server_found', 1);
+
+			//* mail-domain
+			$server_list = $this->create_list($mail_server_rec, 'mail', 'mail_domain');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_mail_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('mail_server_id', $options_servers);
+				$app->tpl->setVar('mail_domain_found', 1);
+				unset($options_servers);
+			}
+
+			//* mailbox
+			$server_list = $this->create_list($mail_server_rec, 'mail', 'mail_user');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_mail_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('mailbox_server_id', $options_servers);
+				$app->tpl->setVar('mail_user_found', 1);
+				unset($options_servers);
+			}
+
+			//* mailfilter
+			$server_list = $this->create_list($mail_server_rec, 'mail_filter', array('mail_access', 'mail_content_filter', 'mail_user_filter'));
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_mail_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('mailfilter_server_id', $options_servers);
+				$app->tpl->setVar('mail_filter_found', 1);
+				unset($options_servers);
+			}
+
+			//* mailinglist
+			$server_list = $this->create_list($mail_server_rec, 'mail', 'mail_mailinglist');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_mail_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('mailinglist_server_id', $options_servers);
+				$app->tpl->setVar('mailinglist_found', 1);
+				unset($options_servers);
+			}
+		}
+
+		//* fetch web-server
+		$web_server_rec = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE web_server = 1 AND active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		if (!empty($web_server_rec)) {
+			$app->tpl->setVar('web_server_found', 1);
+
+			//* web-domain
+			$server_list = $this->create_list($web_server_rec, 'web', 'web_domain');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_web_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('web_server_id', $options_servers);
+				$app->tpl->setVar('web_domain_found', 1);
+				unset($options_servers);
+			}
+
+			//* ftp-user
+			$server_list = $this->create_list($web_server_rec, 'web', 'ftp_user');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_web_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('ftp_server_id', $options_servers);
+				$app->tpl->setVar('ftp_user_found', 1);
+				unset($options_servers);
+			}
+
+			//* shell-user
+			$server_list = $this->create_list($web_server_rec, 'web', 'shell_user');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_web_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('shell_server_id', $options_servers);
+				$app->tpl->setVar('shell_user_found', 1);
+				unset($options_servers);
+			}
+
+			//* cron
+			$server_list = $this->create_list($web_server_rec, 'web', 'cron');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_web_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('cron_server_id', $options_servers);
+				$app->tpl->setVar('cron_found', 1);
+				unset($options_servers);
+			}
+		}
+
+		//* fetch dns-server
+		$dns_server_rec = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE dns_server = 1 AND active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		if (!empty($dns_server_rec)) {
+			$app->tpl->setVar('dns_server_found', 1);
+
+			$server_list = $this->create_list($dns_server_rec, 'dns', 'dns_soa');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_dns_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('dns_server_id', $options_servers);
+				$app->tpl->setVar('dns_soa_found', 1);
+				unset($options_servers);
+			}
+		}
+
+		//* fetch webdav-user
+		$file_server_rec = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE file_server = 1 AND active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		if (!empty($file_server_rec)) {
+			$app->tpl->setVar('file_server_found', 1);
+
+			$server_list = $this->create_list($file_server_rec, 'file', 'webdav_user');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_file_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('file_server_id', $options_servers);
+				$app->tpl->setVar('webdav_user_found', 1);
+				unset($options_servers);
+			}
+		}
+
+		//* fetch database-server
+		$db_server_rec = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE db_server = 1 AND active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		if (!empty($db_server_rec)) {
+			$app->tpl->setVar('db_server_found', 1);
+
+			$server_list = $this->create_list($db_server_rec, 'db', 'web_database');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_db_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('db_server_id', $options_servers);
+				$app->tpl->setVar('client_db_found', 1);
+				unset($options_servers);
+			}
+		}
+
+		//* fetch vserver
+		$v_server_rec = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE vserver_server = 1 AND active = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
+		if (!empty($db_server_rec)) {
+			$app->tpl->setVar('vserver_server_found', 1);
+
+			$server_list = $this->create_list($v_server_rec, 'vserver', 'openvz_vm');
+			$options_servers = $server_list[0];$server_count = $server_list[1];
+			unset($server_list);
+			if (isset($options_servers)) {	//* server with data found
+				if ($server_count > 1) $options_servers = "<option value='0'>".$app->tform->wordbook['all_active_vserver_txt']."</option>" . $options_servers;
+				$app->tpl->setVar('vserver_server_id', $options_servers);
+				$app->tpl->setVar('vserver_found', 1);
+				unset($options_servers);
+			}
+		}
+
+		parent::onShowEnd();
+	}
+			
+	//* fetch values during do_resync
+	private function query_server($db_table, $server_id, $server_type, $active=true, $opt='') {
+		global $app;
+
+		$server_name = array();
+		if ( $server_id == 0 ) { //* resync multiple server
+			$temp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE ?? = 1 AND active = 1 AND mirror_server_id = 0", $server_type."_server");
+			foreach ($temp as $server) {
+				$temp_id .= $server['server_id'].',';
+				$server_name[$server['server_id']] = $server['server_name'];
+			}
+		} else {
+			$temp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $server_id);
+			$server_name[$server_id] = $temp['server_name'];
+		}		
+		unset($temp);
+
+		if ( isset($temp_id) ) $server_id = rtrim($temp_id,',');
+		$sql = "SELECT * FROM ??";
+		if ($db_table != "mail_user_filter") $sql .= " WHERE server_id IN (".$server_id.") ";
+		$sql .= $opt;
+		if ($active) $sql .= " AND active = 'y'"; 
+		$records = $app->db->queryAllRecords($sql, $db_table);
+
+		return array($records, $server_name);
+	}			
+
+	private function do_resync($db_table, $index_field, $server_type, $server_id, $msg_field, $wordbook, $active=true) {
+        global $app;
+
+		$server_id = $app->functions->intval($server_id);
+		$rec = $this->query_server($db_table, $server_id, $server_type, $active);
+		$records = $rec[0];
+		$server_name = $rec[1];
+		$msg = '<b>'.$wordbook.'</b><br>';
+		if(!empty($records)) 
+			foreach($records as $rec) {
+				$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
+				if(!empty($rec[$msg_field])) $msg .= '['.$server_name[$rec['server_id']].'] '.$rec[$msg_field].'<br>';
+			}
+		else $msg .= $app->tform->wordbook['no_results_txt'].'<br>';
+
+		return $msg.'<br>';
+	}
+
+    function onSubmit() {
+        global $app;
+
+		//* all services
+		if($this->dataRecord['resync_all'] == 1) {
+			$this->dataRecord['resync_sites'] = 1;
+			$this->dataRecord['resync_ftp'] = 1;
+			$this->dataRecord['resync_webdav'] = 1;
+			$this->dataRecord['resync_shell'] = 1;
+			$this->dataRecord['resync_cron'] = 1;
+			$this->dataRecord['resync_db'] = 1;
+			$this->dataRecord['resync_mail'] = 1;
+			$this->dataRecord['resync_mailbox'] = 1;
+			$this->dataRecord['resync_mailfilter'] = 1;
+			$this->dataRecord['resync_mailinglist'] = 1;
+			$this->dataRecord['resync_vserver'] = 1;
+			$this->dataRecord['resync_dns'] = 1;
+			$this->dataRecord['resync_client'] = 1;
+			$this->dataRecord['web_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['ftp_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['webdav_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['shell_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['cron_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['db_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['mail_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['mailbox_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['verserver_server_id'] = $this->dataRecord['all_server_id'];
+			$this->dataRecord['dns_server_id'] = $this->dataRecord['all_server_id'];
+		}
+
+		//* websites
+		if($this->dataRecord['resync_sites'] == 1)
+			$msg .= $this->do_resync('web_domain', 'domain_id', 'web', $this->dataRecord['web_server_id'], 'domain', $app->tform->wordbook['do_sites_txt']);
+
+		//* ftp
+		if($this->dataRecord['resync_ftp'] == 1)
+			$msg .= $this->do_resync('ftp_user', 'ftp_user_id', 'web', $this->dataRecord['ftp_server_id'], 'username',  $app->tform->wordbook['do_ftp_txt']);
+
+		//* webdav
+		if($this->dataRecord['resync_webdav'] == 1) 
+			$msg .= $this->do_resync('webdav_user', 'webdav_user_id', 'file', $this->dataRecord['webdav_server_id'], 'username',  $app->tform->wordbook['do_webdav_txt']);
+
+		//* shell
+		if($this->dataRecord['resync_shell'] == 1) 
+			$msg .= $this->do_resync('shell_user', 'shell_user_id', 'web', $this->dataRecord['shell_server_id'], 'username',  $app->tform->wordbook['do_shell_txt']);
+
+		//* cron
+		if($this->dataRecord['resync_cron'] == 1) 
+			$msg .= $this->do_resync('cron', 'id', 'web', $this->dataRecord['cron_server_id'], 'command',  $app->tform->wordbook['do_cron_txt']);
+
+		//* database
+		if(isset($this->dataRecord['resync_db']) && $this->dataRecord['resync_db'] == 1) {
+			$msg .= $this->do_resync('web_database_user', 'database_user_id', 'db', $this->dataRecord['db_server_id'], 'database_user',  $app->tform->wordbook['do_db_user_txt'], false);
+			$msg .= $this->do_resync('web_database', 'database_id', 'db', $this->dataRecord['db_server_id'], 'database_name',  $app->tform->wordbook['do_db_txt']);
+		}
+
+		//* maildomains
+		if($this->dataRecord['resync_mail'] == 1) 
+			$msg .= $this->do_resync('mail_domain', 'domain_id', 'mail', $this->dataRecord['mail_server_id'], 'domain',  $app->tform->wordbook['do_mail_txt']);
+
+		//* mailbox
+		if($this->dataRecord['resync_mailbox'] == 1) {
+			$msg .= $this->do_resync('mail_user', 'mailuser_id', 'mail', $this->dataRecord['mailbox_server_id'], 'email',  $app->tform->wordbook['do_mailbox_txt'], false);
+			$msg .= $this->do_resync('mail_forwarding', 'forwarding_id', 'mail', $this->dataRecord['mailbox_server_id'], '',  $app->tform->wordbook['do_mail_alias_txt']);
+		}
+
+		//* mailfilter
+		if($this->dataRecord['resync_mailfilter'] == 1) {
+			$msg .= $this->do_resync('mail_access', 'access_id', 'mail', $this->dataRecord['mailbox_server_id'], '',  $app->tform->wordbook['do_mail_access_txt']);
+			$msg .= $this->do_resync('mail_content_filter', 'content_filter_id', 'mail', $this->dataRecord['mailbox_server_id'], '',  $app->tform->wordbook['do_mail_contentfilter_txt']);
+			$msg .= $this->do_resync('mail_user_filter', 'filter_id', 'mail', $this->dataRecord['mailbox_server_id'], '',  $app->tform->wordbook['do_mail_userfilter_txt'], false);
+		}
+
+		//* mailinglists
+		if($this->dataRecord['resync_mailinglist'] == 1) 
+			$msg .= $this->do_resync('mail_mailinglist', 'mailinglist_id', 'mail', $this->dataRecord['mail_server_id'], 'listname',  $app->tform->wordbook['do_mailinglist_txt'], false);
+
+		//* vserver
+		if($this->dataRecord['resync_vserver'] == 1) 
+			$msg .= $this->do_resync('openvz_vm', 'vm_id', 'vserver', $this->dataRecord['verserver_server_id'], 'hostname',  $app->tform->wordbook['do_vserver_txt']);
+
+		//* dns
+		if($this->dataRecord['resync_dns'] == 1) {
+			$rec=$this->query_server('dns_soa', $this->dataRecord['dns_server_id'], 'dns'); 
+			$soa_records = $rec[0];
+			$server_name = $rec[1];
+			unset($rec);
+			$msg .= '<b>'.$app->tform->wordbook['do_dns_txt'].'</b><br>';
+			if(is_array($soa_records) && !empty($soa_records)) 
+				foreach($soa_records as $soa_rec) {
+					$temp = $this->query_server('dns_rr', $soa_rec['server_id'], 'dns', true, "AND zone = ".$app->functions->intval($soa_rec['id']));
+					$rr_records = $temp[0];
+					if(!empty($rr_records)) {
+						foreach($rr_records as $rec) {
+							$new_serial = $app->validate_dns->increase_serial($rec['serial']);
+							$app->db->datalogUpdate('dns_rr', array("serial" => $new_serial), 'id', $rec['id']);
+						}
+					} else { 
+						$msg .= $app->tform->wordbook['no_results_txt'].'<br>';
+					}
+					$new_serial = $app->validate_dns->increase_serial($soa_rec['serial']);
+					$app->db->datalogUpdate('dns_soa', array("serial" => $new_serial), 'id', $soa_rec['id']);
+					$msg .= '['.$server_name[$soa_rec['server_id']].'] '.$soa_rec['origin'].' ('.count($rr_records).')<br>';
+				}
+			else $msg .= $app->tform->wordbook['no_results_txt'].'<br>'; 
+
+			$msg .= '<br>';
+        }
+
+		//* clients
+		if($this->dataRecord['resync_client'] == 1) {
+        	$db_table = 'client';
+        	$index_field = 'client_id';
+        	$records = $app->db->queryAllRecords("SELECT * FROM ??", $db_table);
+			$msg .= '<b>'.$app->tform->wordbook['do_clients_txt'].'</b><br>';
+			if(!empty($records)) {
+	        	$tform_def_file = '../client/form/client.tform.php';
+    	    	$app->uses('tpl,tform,tform_actions');
+        		$app->load('tform_actions');
+				foreach($records as $rec) {
+					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
+					$tmp = new tform_actions;
+					$tmp->id = $rec[$index_field];
+					$tmp->dataRecord = $rec;
+					$tmp->oldDataRecord = $rec;
+					$app->plugin->raiseEvent('client:client:on_after_update', $tmp);
+					$msg .= $rec['contact_name'].'<br>';
+					unset($tmp);
+				}
+			} else {
+				$msg .= $app->tform->wordbook['no_results_txt'].'<br>'; 
+			}
+			$msg .= '<br>';
+		}
+
+		echo $msg;
+    } //* end onSumbmit
+
+}
+
+$page = new page_action;
+$page->onLoad();
+?>
diff --git a/interface/web/tools/resync_do.php b/interface/web/tools/resync_do.php
deleted file mode 100644
index 0815737..0000000
--- a/interface/web/tools/resync_do.php
+++ /dev/null
@@ -1,383 +0,0 @@
-<?php
-/*
-Copyright (c) 2014, Florian Schaal, info@schaal-24.de
-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/resync.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('admin');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-    function onSubmit() {
-        global $app, $conf, $interfaceConf;
-
-		function query_server($table, $server_id, $server_type, $where = "WHERE active = 'y'", $active_only = true) {
-			global $app;
-			$server_name = array();
-			if ( $server_id <= 0 ) { //* resync multiple server
-				if ($active_only) {
-					$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE ".$server_type."_server = 1 AND active = 1 AND mirror_server_id = 0");
-				} else {
-					$tmp = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE ".$server_type."_server = 1 AND mirror_server_id = 0");
-				}
-				foreach ($tmp as $server) {
-					$tmp_id .= $server['server_id'].',';
-					$server_name[$server['server_id']] = $server['server_name'];
-				}
-			} else {
-				$temp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$server_id);
-				$server_name[$server_id] = $temp['server_name'];
-				unset($temp);
-			}
-				
-			if ( isset($tmp_id) ) $server_id = rtrim($tmp_id,',');
-
-			if ($active_only) {
-				$sql = "SELECT * FROM ".$table." ".$where." AND server_id IN (".$server_id.")"; 
-			} else { 
-				$sql = "SELECT * FROM ".$table." ".$where; 
-			}
-			$records = $app->db->queryAllRecords($sql);
-
-			return array($records, $server_name);
-		}			
-
-		//* websites
-		if(isset($this->dataRecord['resync_sites']) && $this->dataRecord['resync_sites'] == 1) {
-			$db_table = 'web_domain';
-			$index_field = 'domain_id';
-			$server_type = 'web';
-			$server_id = $app->functions->intval($this->dataRecord['web_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg = '<b>Resynced Website:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['domain'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* ftp
-		if(isset($this->dataRecord['resync_ftp']) && $this->dataRecord['resync_ftp'] == 1) {
-			$db_table = 'ftp_user';
-			$index_field = 'ftp_user_id';
-			$server_type = 'web';
-			$server_id = $app->functions->intval($this->dataRecord['ftp_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced FTP user:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['username'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* webdav
-		if(isset($this->dataRecord['resync_webdav']) && $this->dataRecord['resync_webdav'] == 1) {
-			$db_table = 'webdav_user';
-			$index_field = 'webdav_user_id';
-			$server_type = 'file';
-			$server_id = $app->functions->intval($this->dataRecord['webdav_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced WebDav-User</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['username'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* shell
-		if(isset($this->dataRecord['resync_shell']) && $this->dataRecord['resync_shell'] == 1) {
-			$db_table = 'shell_user';
-			$index_field = 'shell_user_id';
-			$server_type = 'web';
-			$server_id = $app->functions->intval($this->dataRecord['shell_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Shell user:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['username'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* cron
-		if(isset($this->dataRecord['resync_cron']) && $this->dataRecord['resync_cron'] == 1) {
-			$db_table = 'cron';
-			$index_field = 'id';
-			$server_type = 'web';
-			$server_id = $app->functions->intval($this->dataRecord['cron_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Cronjob:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['command'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* database
-		if(isset($this->dataRecord['resync_db']) && $this->dataRecord['resync_db'] == 1) {
-			$db_table = 'web_database_user';
-			$index_field = 'database_user_id';
-			$server_type = 'db';
-			$server_id = $app->functions->intval($this->dataRecord['db_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1');
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Database User:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['database_user'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-
-			$db_table = 'web_database';
-			$index_field = 'database_id';
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$msg .= '<b>Resynced Database:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['database_name'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-
-		}
-
-		//* maildomains
-		if(isset($this->dataRecord['resync_mail']) && $this->dataRecord['resync_mail'] == 1) {
-			$db_table = 'mail_domain';
-			$index_field = 'domain_id';
-			$server_type = 'mail';
-			$server_id = $app->functions->intval($this->dataRecord['mail_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Maildomain:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['domain'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* mailbox
-		if(isset($this->dataRecord['resync_mailbox']) && $this->dataRecord['resync_mailbox'] == 1) {
-			$db_table = 'mail_user';
-			$index_field = 'mailuser_id';
-			$server_type = 'mail';
-			$server_id = $app->functions->intval($this->dataRecord['mailbox_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1');
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Mailbox:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['email'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-
-			$db_table = 'mail_forwarding';
-			$index_field = 'forwarding_id';
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Alias</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* dns
-		if(isset($this->dataRecord['resync_dns']) && $this->dataRecord['resync_dns'] == 1) {
-			$db_table = 'dns_soa';
-			$index_field = 'id';
-			$server_type = 'dns';
-			$server_id = $app->functions->intval($this->dataRecord['dns_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type, "WHERE active = 'Y'");
-			$zone_records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced DNS zone</b><br>';
-			if(is_array($zone_records) && !empty($zone_records)) {
-				foreach($zone_records as $zone_rec) {
-					if ($server_id == -1) {
-						$temp = query_server('dns_rr', $server_id, $server_type, 'WHERE 1', false);
-						$records = $temp[0];
-						unset($temp);
-					} else {
-						$temp= query_server('dns_rr', $server_id, $server_type, "WHERE active = 'Y'");
-						$records = $temp[0];
-						unset($temp);
-					}
-					$rr_count = 0;
-					if (is_array($records)) {
-						foreach($records as $rec) {
-							$new_serial = $app->validate_dns->increase_serial($rec['serial']);
-							$app->db->datalogUpdate('dns_rr', "serial = '".$new_serial."'", 'id', $rec['id']);
-							$rr_count++;
-						}
-					} else { $msg .= 'no dns recordsesults<br>'; }
-					$new_serial = $app->validate_dns->increase_serial($zone_rec['serial']);
-					$app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone_rec['id']);
-					$msg .= $zone_rec['origin'].' on '.$server_name[$zone_rec['server_id']].' with '.$rr_count.' records<br>';
-				}
-			} else { $msg .= 'no results<br>'; }
-			$msg .= '<br>';
-        }
-
-		//* clients
-		if(isset($this->dataRecord['resync_client']) && $this->dataRecord['resync_client'] == 1) {
-        	$db_table = 'client';
-        	$index_field = 'client_id';
-        	$records = $app->db->queryAllRecords("SELECT * FROM ".$db_table);
-			$msg .= '<b>Resynced clients</b><br>';
-			if(is_array($records)) {
-	        	$tform_def_file = '../client/form/client.tform.php';
-    	    	$app->uses('tpl,tform,tform_actions');
-        		$app->load('tform_actions');
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$tmp = new tform_actions;
-					$tmp->id = $rec[$index_field];
-					$tmp->dataRecord = $rec;
-					$tmp->oldDataRecord = $rec;
-					$app->plugin->raiseEvent('client:client:on_after_update', $tmp);
-					$msg .= $rec['contact_name'].'<br>';
-					unset($tmp);
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* vserver
-		if(isset($this->dataRecord['resync_vserver']) && $this->dataRecord['resync_vserver'] == 1) {
-			$db_table = 'openvz_vm';
-			$index_field = 'vm_id';
-			$server_type = 'vserver';
-			$server_id = $app->functions->intval($this->dataRecord['vserver_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced vServer:</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-					$msg .= $rec['hostname'].' on '.$server_name[$rec['server_id']].'<br>';
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		//* firewall
-		if(isset($this->dataRecord['resync_firewall']) && $this->dataRecord['resync_firewall'] == 1) {
-			$db_table = 'iptables';
-			$index_field = 'iptables_id';
-			$server_type = 'firewall';
-			$server_id = $app->functions->intval($this->dataRecord['firewall_server_id']);
-			if ($server_id == -1) $tmp = query_server($db_table, $server_id, $server_type, 'WHERE 1', false); else $tmp = query_server($db_table, $server_id, $server_type);
-			$records = $tmp[0];
-			$server_name = $tmp[1];
-			unset($tmp);
-			$msg .= '<b>Resynced Firewall</b><br>';
-			if(is_array($records)) {
-				foreach($records as $rec) {
-					$app->db->datalogUpdate($db_table, $rec, $index_field, $rec[$index_field], true);
-				}
-			} else { $msg .= 'no results<bg>'; }
-			$msg .= '<br>';
-		}
-
-		echo $msg;
-    }
-
-}
-
-$page = new page_action;
-$page->onLoad();
-?>
diff --git a/interface/web/tools/resync_show.php b/interface/web/tools/resync_show.php
deleted file mode 100644
index b74515d..0000000
--- a/interface/web/tools/resync_show.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-/*
-Copyright (c) 2014, Florian Schaal, info@schaal-24.de
-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/resync.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('admin');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-
-	function get_servers($type) {
-		global $app;
-
-		$inactive_server = false;
-		$tmp = $app->db->queryAllRecords("SELECT server_id, server_name, active FROM server WHERE ".$type."_server = 1 AND mirror_server_id = 0 ORDER BY active DESC, server_name");
-		foreach ($tmp as $server) {
-			if ( $server['active'] == '0' ) {
-				$server['server_name'] .= ' [inactive]';
-				$inactive_server = true;
-			}
-			$options_servers .= "<option value='$server[server_id]'>$server[server_name]</option>";
-		}
-		if ( count ($tmp) > 1 ) {
-			$options_servers = "<option value='0'>all active $type-server</option>" . $options_servers;
-			if ($inactive_server) $options_servers .= "<option value='-1'>force all $type-server</option>";
-		}
-
-		return $options_servers;
-
-	}
-
-	function onShowEnd() {
-		global $app, $conf;
-
-		$servers = $this->get_servers('mail');
-		$app->tpl->setVar('mail_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('mail_server_found', 1);
-
-		$servers = $this->get_servers('web');
-		$app->tpl->setVar('web_server_id', $servers);
-		$app->tpl->setVar('ftp_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('web_server_found', 1);
-
-		$servers = $this->get_servers('dns');
-		$app->tpl->setVar('dns_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('dns_server_found', 1);
-
-		$servers = $this->get_servers('file');
-		$app->tpl->setVar('file_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('file_server_found', 1);
-
-		$servers = $this->get_servers('db');
-		$app->tpl->setVar('db_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('db_server_found', 1);
-
-		$servers = $this->get_servers('vserver');
-		$app->tpl->setVar('vserver_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('vserver_server_found', 1);
-
-		$servers = $this->get_servers('firewall');
-		$app->tpl->setVar('firewall_server_id', $servers);
-		if ( !empty($servers) ) $app->tpl->setVar('firewall_server_found', 1);
-
-		parent::onShowEnd();
-	}
-
-}
-
-$page = new page_action;
-$page->onLoad();
-
-?>
diff --git a/interface/web/tools/templates/dns_import_tupa.htm b/interface/web/tools/templates/dns_import_tupa.htm
index ca44696..6aadf71 100644
--- a/interface/web/tools/templates/dns_import_tupa.htm
+++ b/interface/web/tools/templates/dns_import_tupa.htm
@@ -1,50 +1,37 @@
 <h2><tmpl_var name="list_head_txt">Import DNS records from Tupa PowerDNS controlpanel</h2>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_tupa_import">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>PowerDNS Tupa import</legend>
-            <div class="ctrlHolder">
-                <p class="label">Tupa database hostname</p>
-                <div class="multiField">
-                    <input id="dbhost" type="text" value="{tmpl_var name='dbhost'}" name="dbhost" />
-                </div>
+
+        <legend>PowerDNS Tupa import</legend>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Tupa database hostname</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbhost" value="{tmpl_var name='dbhost'}" name="dbhost" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Tupa database name</p>
-                <div class="multiField">
-                    <input id="dbname" type="text" value="{tmpl_var name='dbname'}" name="dbname" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Tupa database name</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbname" value="{tmpl_var name='dbname'}" name="dbname" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Tupa database user</p>
-                <div class="multiField">
-                    <input id="dbuser" type="text" value="{tmpl_var name='dbuser'}" name="dbuser" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Tupa database user</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbuser" value="{tmpl_var name='dbuser'}" name="dbuser" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Tupa database password</p>
-                <div class="multiField">
-                    <input id="dbpassword" type="text" value="{tmpl_var name='dbpassword'}" name="dbpassword" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Tupa database password</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbpassword" value="{tmpl_var name='dbpassword'}" name="dbpassword" /></div>
             </div>                
-        </fieldset>
+        
 
         <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>
+            <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
         </tmpl_if>
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 		<input type="hidden" name="start" value="1">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="Import" onClick="submitForm('pageForm','tools/dns_import_tupa.php');"><span>Start</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('tools/index.php');"><span>Cancel</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="Import" data-submit-form="pageForm" data-form-action="tools/dns_import_tupa.php">Start</button>
+            <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="tools/index.php">Cancel</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/tools/templates/import_ispconfig.htm b/interface/web/tools/templates/import_ispconfig.htm
index f7b97e8..83d79e6 100644
--- a/interface/web/tools/templates/import_ispconfig.htm
+++ b/interface/web/tools/templates/import_ispconfig.htm
@@ -1,82 +1,68 @@
-<h2><tmpl_var name="head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_language_import">
   
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name="legend_txt"}</legend>
-            <div class="ctrlHolder">
-                <p class="label">Remote API URL</p>
-                <div class="multiField">
-                    <input id="remote_server" type="text" value="{tmpl_var name='remote_server'}" name="remote_server" /> (e.g. https://www.example.com:8080/remote/ )
-                </div>
+        <legend>{tmpl_var name="legend_txt"}</legend>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Remote API URL</label>
+                <div class="col-sm-9">
+                    <div class="col-sm-6"><input class="form-control" type="text" id="remote_server" value="{tmpl_var name='remote_server'}" name="remote_server" /></div><div class="col-sm-3 input-sm"> (e.g. https://www.example.com:8080/remote/ )
+                </div></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Remote User</p>
-                <div class="multiField">
-                    <input id="remote_user" type="text" value="{tmpl_var name='remote_user'}" name="remote_user" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Remote User</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="remote_user" value="{tmpl_var name='remote_user'}" name="remote_user" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Remote password</p>
-                <div class="multiField">
-                    <input id="remote_password" type="text" value="{tmpl_var name='remote_password'}" name="remote_password" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Remote password</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="remote_password" value="{tmpl_var name='remote_password'}" name="remote_password" /></div>
             </div>
-        </fieldset>
+        
     </div>
     <tmpl_if name="connected">
         <div class="pnl_formsarea">
-            <fieldset class="inlineLabels"><legend>{tmpl_var name="legend2_txt"}</legend>
-                <div class="ctrlHolder">
-                    <label for="mail_domain">{tmpl_var name='mail_domain_txt'}</label>
-                    <select name="mail_domain" id="mail_domain" class="selectInput">
+            <legend>{tmpl_var name="legend2_txt"}</legend>
+                <div class="form-group">
+                    <label for="mail_domain" class="col-sm-3 control-label">{tmpl_var name='mail_domain_txt'}</label>
+                    <div class="col-sm-9"><select name="mail_domain" id="mail_domain" class="form-control">
                         {tmpl_var name='mail_domain'}
-                    </select>
+                    </select></div>
                 </div>
-                <div class="ctrlHolder">
-                    <label for="client_group_id">{tmpl_var name='client_group_id_txt'}</label>
-                    <select name="client_group_id" id="client_group_id" class="selectInput">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name="import_mailbox_txt"}</p>
-                    <div class="multiField">
-                        <input id="import_mailbox" type="checkbox" value="1" name="import_mailbox" checked="checked" />
-                    </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name="import_mailbox_txt"}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_mailbox" value="1" name="import_mailbox" checked="checked" /></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name="import_user_filter_txt"}</p>
-                    <div class="multiField">
-                        <input id="import_user_filter" type="checkbox" value="1" name="import_user_filter" checked="checked" />
-                    </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name="import_user_filter_txt"}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_user_filter" value="1" name="import_user_filter" checked="checked" /></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name="import_spamfilter_txt"}</p>
-                    <div class="multiField">
-                        <input id="import_spamfilter" type="checkbox" value="1" name="import_spamfilter" checked="checked" />
-                    </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name="import_spamfilter_txt"}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_spamfilter" value="1" name="import_spamfilter" checked="checked" /></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name="import_alias_txt"}</p>
-                    <div class="multiField">
-                        <input id="import_alias" type="checkbox" value="1" name="import_alias" checked="checked" />
-                    </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name="import_alias_txt"}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_alias" value="1" name="import_alias" checked="checked" /></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name="import_forward_txt"}</p>
-                    <div class="multiField">
-                        <input id="import_forward" type="checkbox" value="1" name="import_forward" checked="checked" />
-                    </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name="import_forward_txt"}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_forward" value="1" name="import_forward" checked="checked" /></div>
                 </div>
-                <div class="ctrlHolder">
-                    <p class="label">{tmpl_var name="import_aliasdomain_txt"}</p>
-                    <div class="multiField">
-                        <input id="import_aliasdomain" type="checkbox" value="1" name="import_aliasdomain" checked="checked" />
-                    </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name="import_aliasdomain_txt"}</label>
+                    <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_aliasdomain" value="1" name="import_aliasdomain" checked="checked" /></div>
                 </div>
-            </fieldset>
+            
         </div>
     </tmpl_if>
 	 
@@ -84,20 +70,20 @@
         <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>
+        <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
     </tmpl_if>
 	
     <input type="hidden" name="remote_session_id" value="{tmpl_var name='remote_session_id'}">
     <input type="hidden" name="connected" value="{tmpl_var name='connected'}">
     <tmpl_if name="connected">
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="Import" onClick="submitForm('pageForm','tools/import_ispconfig.php');"><span>{tmpl_var name="btn_start_txt"}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('tools/index.php');"><span>{tmpl_var name="btn_cancel_txt"}</span></button>
-        </div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="Import" data-submit-form="pageForm" data-form-action="tools/import_ispconfig.php">{tmpl_var name="btn_start_txt"}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="tools/index.php">{tmpl_var name="btn_cancel_txt"}</button>
+        </div></div>
     <tmpl_else>
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="Import" onClick="submitForm('pageForm','tools/import_ispconfig.php');"><span>{tmpl_var name="btn_connect_txt"}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('tools/index.php');"><span>{tmpl_var name="btn_cancel_txt"}</span></button>
-        </div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="Import" data-submit-form="pageForm" data-form-action="tools/import_ispconfig.php">{tmpl_var name="btn_connect_txt"}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="tools/index.php">{tmpl_var name="btn_cancel_txt"}</button>
+        </div></div>
     </tmpl_if>
   </div>
\ No newline at end of file
diff --git a/interface/web/tools/templates/import_plesk.htm b/interface/web/tools/templates/import_plesk.htm
index 363d728..645913a 100644
--- a/interface/web/tools/templates/import_plesk.htm
+++ b/interface/web/tools/templates/import_plesk.htm
@@ -1,74 +1,53 @@
 <h2><tmpl_var name="list_head_txt">Import plesk panel data</h2>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_language_import">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Plesk data import</legend>
-            <div class="ctrlHolder">
-                <p class="label">Plesk database hostname</p>
-                <div class="multiField">
-                    <input id="dbhost" type="text" value="{tmpl_var name='dbhost'}" name="dbhost" />
-                </div>
+
+        <legend>Plesk data import</legend>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Plesk database hostname</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbhost" value="{tmpl_var name='dbhost'}" name="dbhost" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Plesk database name</p>
-                <div class="multiField">
-                    <input id="dbname" type="text" value="{tmpl_var name='dbname'}" name="dbname" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Plesk database name</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbname" value="{tmpl_var name='dbname'}" name="dbname" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Plesk database user</p>
-                <div class="multiField">
-                    <input id="dbuser" type="text" value="{tmpl_var name='dbuser'}" name="dbuser" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Plesk database user</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbuser" value="{tmpl_var name='dbuser'}" name="dbuser" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Plesk database password</p>
-                <div class="multiField">
-                    <input id="dbpassword" type="text" value="{tmpl_var name='dbpassword'}" name="dbpassword" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Plesk database password</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="dbpassword" value="{tmpl_var name='dbpassword'}" name="dbpassword" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Web content backup file (on this server, optional)</p>
-                <div class="multiField">
-                    <input id="webcontent" type="text" value="{tmpl_var name='webcontent'}" name="webcontent" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Web content backup file (on this server, optional)</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="webcontent" value="{tmpl_var name='webcontent'}" name="webcontent" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Maildir content backup file (on this server, optional)</p>
-                <div class="multiField">
-                    <input id="mailcontent" type="text" value="{tmpl_var name='mailcontent'}" name="mailcontent" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Maildir content backup file (on this server, optional)</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="mailcontent" value="{tmpl_var name='mailcontent'}" name="mailcontent" /></div>
             </div>
                 
-            <div class="ctrlHolder">
-                <p class="label">Import all data (that can be imported)</p>
-                <div class="multiField">
-                    <input id="start" type="checkbox" value="1" name="start" checked/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Import all data (that can be imported)</label>
+                <div class="col-sm-9"><input class="form-control" type="checkbox" id="start" value="1" name="start" checked/></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Import database contents (make sure the database user has the rights to do so)</p>
-                <div class="multiField">
-                    <input id="dbdata" type="checkbox" value="1" name="dbdata" checked/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Import database contents (make sure the database user has the rights to do so)</label>
+                <div class="col-sm-9"><input class="form-control" type="checkbox" id="dbdata" value="1" name="dbdata" checked/></div>
             </div>
-        </fieldset>
+        
 
         <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>
+            <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
         </tmpl_if>
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
             
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="Import" onClick="submitForm('pageForm','tools/import_plesk.php');"><span>Start</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('tools/index.php');"><span>Cancel</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="Import" data-submit-form="pageForm" data-form-action="tools/import_plesk.php">Start</button>
+            <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="tools/index.php">Cancel</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/tools/templates/import_vpopmail.htm b/interface/web/tools/templates/import_vpopmail.htm
index ade9476..749ce74 100644
--- a/interface/web/tools/templates/import_vpopmail.htm
+++ b/interface/web/tools/templates/import_vpopmail.htm
@@ -1,53 +1,45 @@
-<h2><tmpl_var name="head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
 <div class="panel panel_language_import">
   
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name="legend_txt"}</legend>
-            <div class="ctrlHolder">
-                <p class="label">Database Hostname</p>
-                <div class="multiField">
-                    <input id="db_hostname" type="text" value="{tmpl_var name='db_hostname'}" name="db_hostname" />
-                </div>
+        <legend>{tmpl_var name="legend_txt"}</legend>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Database Hostname</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="db_hostname" value="{tmpl_var name='db_hostname'}" name="db_hostname" /></div>
             </div>
-			<div class="ctrlHolder">
-                <p class="label">Database Name</p>
-                <div class="multiField">
-                    <input id="db_name" type="text" value="{tmpl_var name='db_name'}" name="db_name" />
-                </div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">Database Name</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="db_name" value="{tmpl_var name='db_name'}" name="db_name" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Database User</p>
-                <div class="multiField">
-                    <input id="db_user" type="text" value="{tmpl_var name='db_user'}" name="db_user" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Database User</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="db_user" value="{tmpl_var name='db_user'}" name="db_user" /></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">Database password</p>
-                <div class="multiField">
-                    <input id="db_password" type="text" value="{tmpl_var name='db_password'}" name="db_password" />
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">Database password</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="db_password" value="{tmpl_var name='db_password'}" name="db_password" /></div>
             </div>
-			<div class="ctrlHolder">
-                <p class="label">Server ID of local mailserver</p>
-                <div class="multiField">
-                    <input id="local_server_id" type="text" value="{tmpl_var name='local_server_id'}" name="local_server_id" />
-                </div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">Server ID of local mailserver</label>
+                <div class="col-sm-9"><input class="form-control" type="text" id="local_server_id" value="{tmpl_var name='local_server_id'}" name="local_server_id" /></div>
             </div>
-        </fieldset>
+        
     </div>
 	 
     <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>
+        <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
     </tmpl_if>
 	
     <input type="hidden" name="remote_session_id" value="{tmpl_var name='remote_session_id'}">
-        <div class="buttonHolder buttons">
-            <button class="positive iconstxt icoPositive" type="button" value="Import" onClick="submitForm('pageForm','tools/import_vpopmail.php');"><span>{tmpl_var name="btn_start_txt"}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="Cancel" onClick="loadContent('tools/index.php');"><span>{tmpl_var name="btn_cancel_txt"}</span></button>
-        </div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="Import" data-submit-form="pageForm" data-form-action="tools/import_vpopmail.php">{tmpl_var name="btn_start_txt"}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="tools/index.php">{tmpl_var name="btn_cancel_txt"}</button>
+        </div></div>
   </div>
diff --git a/interface/web/tools/templates/index.htm b/interface/web/tools/templates/index.htm
index 21147c9..951c43b 100644
--- a/interface/web/tools/templates/index.htm
+++ b/interface/web/tools/templates/index.htm
@@ -1,19 +1,21 @@
-<h2><tmpl_var name="page_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="page_head_txt"></h1>
+</div>
 <p><tmpl_var name="page_desc_txt"></p>
 
 <div class="panel panel_tools_interface">
 
     <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
             <h2 class="frmTextHead"></h2><p>&nbsp;</p>
             
-        </fieldset>
+        
         
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
             
-        <div class="buttonHolder buttons">
+        <div class="clear"><div class="right">
             &nbsp;
-        </div>
+        </div></div>
     </div>
   
 </div>
\ No newline at end of file
diff --git a/interface/web/tools/templates/interface_settings.htm b/interface/web/tools/templates/interface_settings.htm
index a9057c8..ccd5000 100644
--- a/interface/web/tools/templates/interface_settings.htm
+++ b/interface/web/tools/templates/interface_settings.htm
@@ -1,32 +1,29 @@
-<h2><tmpl_var name="page_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="page_head_txt"></h1>
+</div>
 <p><tmpl_var name="page_desc_txt"></p>
 
-<div class="panel panel_tools_interface">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
+        
             <!-- TODO: If user theme change is activated -->
-            <div class="ctrlHolder">
-                <label for="app_theme">{tmpl_var name='app_theme_txt'}</label>
-                <select name="app_theme" id="app_theme" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="app_theme" class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
+                <div class="col-sm-9"><select name="app_theme" id="app_theme" class="form-control">
                     {tmpl_var name='app_theme'}
-                </select>
+                </select></div>
             </div>
             <!-- TODO: Limit to activated modules -->
-            <div class="ctrlHolder">
-                <label for="startmodule">{tmpl_var name='startmodule_txt'}</label>
-                <select name="startmodule" id="startmodule" class="selectInput formLengthHalf">
+            <div class="form-group">
+                <label for="startmodule" class="col-sm-3 control-label">{tmpl_var name='startmodule_txt'}</label>
+                <div class="col-sm-9"><select name="startmodule" id="startmodule" class="form-control">
                     {tmpl_var name='startmodule'}
-                </select>
+                </select></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','tools/interface_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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/interface_settings.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/tools/templates/resync.htm b/interface/web/tools/templates/resync.htm
index 064dc6f..48e20cc 100644
--- a/interface/web/tools/templates/resync.htm
+++ b/interface/web/tools/templates/resync.htm
@@ -1,211 +1,134 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
-
-<div class="panel panel_mail_domain">
-<div class="pnl_formsarea">
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="web_server_found">
-				<input id="resync_sites" type="checkbox" value="1" name="resync_sites">
-				<label for="resync_sites">{tmpl_var name='resync_sites_txt'}</label>
-				<select name="web_server_id" id="web_server_id" class="selectInput">
-					{tmpl_var name='web_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_sites">{tmpl_var name="resync_sites_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
-		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="web_server_found">
-				<input id="resync_ftp" type="checkbox" value="1" name="resync_ftp">
-				<label for="resync_ftp">{tmpl_var name="resync_ftp_txt"}</label> 
-				<select name="ftp_server_id" id="ftp_server_id" class="selectInput">
-					{tmpl_var name='ftp_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_ftp">{tmpl_var name="resync_ftp_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
-		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="file_server_found">
-				<input id="resync_webdav" type="checkbox" value="1" name="resync_webdav">
-				<label for="resync_webdav">{tmpl_var name="resync_webdav_txt"}</label> 
-				<select name="webdav_server_id" id="webdav_server_id" class="selectInput">
-					{tmpl_var name='file_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_webdav">{tmpl_var name="resync_webdav_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
-		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="web_server_found">
-				<input id="resync_shell" type="checkbox" value="1" name="resync_shell">
-				<label for="resync_shell">{tmpl_var name="resync_shell_txt"}</label> 
-				<select name="shell_server_id" id="shell_server_id" class="selectInput">
-					{tmpl_var name='web_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_shell">{tmpl_var name="resync_shell_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
-		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="web_server_found">
-				<input id="resync_cron" type="checkbox" value="1" name="resync_cron">
-				<label for="resync_cron">{tmpl_var name="resync_cron_txt"}</label> 
-				<select name="cron_server_id" id="cron_server_id" class="selectInput">
-					{tmpl_var name='web_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_cron">{tmpl_var name="resync_cron_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
-		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="db_server_found">
-				<input id="resync_db" type="checkbox" value="1" name="resync_db">
-				<label for="resync_db">{tmpl_var name="resync_db_txt"}</label> 
-				<select name="db_server_id" id="db_server_id" class="selectInput">
-					{tmpl_var name='db_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_db">{tmpl_var name="resync_db_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
-		</div>
-	</fieldset>
 	
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="mail_server_found">
-				<input id="resync_mail" type="checkbox" value="1" name="resync_mail">
-				<label for="resync_mail">{tmpl_var name="resync_mail_txt"}</label> 
-				<select name="mail_server_id" id="mail_server_id" class="selectInput">
-					{tmpl_var name='mail_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_mail">{tmpl_var name="resync_mail_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
+<div class="form-group">
+	<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_all" value="1" name="resync_all"></div>
+	<label for="resync_all" class="col-sm-2 control-label">{tmpl_var name='resync_all_txt'}</label>
+	<div class="col-sm-3"><select name="all_server_id" id="all_server_id" class="form-control">{tmpl_var name='all_server_id'}</select></div>
+</div>
+
+<tmpl_if name="web_server_found">
+	<tmpl_if name="web_domain_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_sites" value="1" name="resync_sites"></div>
+			<label for="resync_sites" class="col-sm-2 control-label">{tmpl_var name='resync_sites_txt'}</label>
+			<div class="col-sm-3"><select name="web_server_id" id="web_server_id" class="form-control">{tmpl_var name='web_server_id'}</select></div>
 		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="mail_server_found">
-				<input id="resync_mailbox" type="checkbox" value="1" name="resync_mailbox">
-				<label for="resync_mailbox">{tmpl_var name="resync_mailbox_txt"}</label> 
-				<select name="mailbox_server_id" id="mailbox_server_id" class="selectInput">
-					{tmpl_var name='mail_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_mailbox">{tmpl_var name="resync_mailbox_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
+	</tmpl_if>
+	<tmpl_if name="ftp_user_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_ftp" value="1" name="resync_ftp"></div>
+			<label for="resync_ftp" class="col-sm-2 control-label">{tmpl_var name="resync_ftp_txt"}</label> 
+			<div class="col-sm-3"><select name="ftp_server_id" id="ftp_server_id" class="form-control">{tmpl_var name='ftp_server_id'}</select></div>
 		</div>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="dns_server_found">
-				<input id="resync_dns" type="checkbox" value="1" name="resync_dns">
-				<label for="resync_dns">{tmpl_var name="resync_dns_txt"}</label> 
-				<select name="dns_server_id" id="dns_server_id" class="selectInput">
-					{tmpl_var name='dns_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_dns">{tmpl_var name="resync_dns_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
+	</tmpl_if>
+	<tmpl_if name="shell_user_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_shell" value="1" name="resync_shell"></div>
+			<label for="resync_shell" class="col-sm-2 control-label">{tmpl_var name="resync_shell_txt"}</label> 
+			<div class="col-sm-3"><select name="shell_server_id" id="shell_server_id" class="form-control">{tmpl_var name='shell_server_id'}</select></div>
 		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="vserver_server_found">
-				<input id="resync_vserver" type="checkbox" value="1" name="resync_vserver">
-				<label for="resync_vserver">{tmpl_var name="resync_vserver_txt"}</label> 
-				<select name="vserver_server_id" id="vserver_server_id" class="selectInput">
-					{tmpl_var name='vserver_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_vserver">{tmpl_var name="resync_vserver_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
+	</tmpl_if>
+	<tmpl_if name="cron_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_cron" value="1" name="resync_cron"></div>
+			<label for="resync_cron" class="col-sm-2 control-label">{tmpl_var name="resync_cron_txt"}</label> 
+			<div class="col-sm-3"><select name="cron_server_id" id="cron_server_id" class="form-control">{tmpl_var name='cron_server_id'}</select></div>
 		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<tmpl_if name="firewall_server_found">
-				<input id="resync_firewall" type="checkbox" value="1" name="resync_firewall">
-				<label for="resync_firewall">{tmpl_var name="resync_firewall_txt"}</label> 
-				<select name="firewall_server_id" id="firewall_server_id" class="selectInput">
-					{tmpl_var name='firewall_server_id'}
-				</select>
-			<tmpl_else>
-				<label for="resync_firewall">{tmpl_var name="resync_firewall_txt"}</label> 
-				<span style="color:red">
-					<strong>{tmpl_var name="resync_no_server_txt"}</strong>
-				</span>
-			</tmpl_if>
+	</tmpl_if>
+</tmpl_if>
+	
+<tmpl_if name="file_server_found">
+	<tmpl_if name="webdav_user_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_webdav" value="1" name="resync_webdav"></div>
+			<label for="resync_webdav" class="col-sm-2 control-label">{tmpl_var name="resync_webdav_txt"}</label> 
+			<div class="col-sm-3"><select name="webdav_server_id" id="webdav_server_id" class="form-control">{tmpl_var name='file_server_id'}</select></div>
 		</div>
-	</fieldset>
-
-	<fieldset class="inlineLabels">
-		<div class="ctrlHolder">
-			<input id="resync_client" type="checkbox" value="1" name="resync_client">
-			<label for="resync_client">{tmpl_var name="resync_client_txt"}</label> 
+	</tmpl_if>
+</tmpl_if>
+	
+<tmpl_if name="db_server_found">
+	<tmpl_if name="client_db_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_db" value="1" name="resync_db"></div>
+			<label for="resync_db" class="col-sm-2 control-label">{tmpl_var name="resync_db_txt"}</label> 
+			<div class="col-sm-3"><select name="db_server_id" id="db_server_id" class="form-control">{tmpl_var name='db_server_id'}</select></div>
 		</div>
-	</fieldset>
+	</tmpl_if>
+</tmpl_if>
+	
+<tmpl_if name="mail_server_found">
+	<tmpl_if name="mail_domain_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_mail" value="1" name="resync_mail"></div>
+			<label for="resync_mail" class="col-sm-2 control-label">{tmpl_var name="resync_mail_txt"}</label> 
+			<div class="col-sm-3"><select name="mail_server_id" id="mail_server_id" class="form-control">{tmpl_var name='mail_server_id'}</select></div>
+		</div>
+	</tmpl_if>
+	<tmpl_if name="mail_user_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_mailbox" value="1" name="resync_mailbox"></div>
+			<label for="resync_mailbox" class="col-sm-2 control-label">{tmpl_var name="resync_mailbox_txt"}</label> 
+			<div class="col-sm-3"><select name="mailbox_server_id" id="mailbox_server_id" class="form-control">{tmpl_var name='mailbox_server_id'}</select></div>
+		</div>
+	</tmpl_if>
+	<tmpl_if name="mail_filter_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_mailfilter" value="1" name="resync_mailfilter"></div>
+			<label for="resync_mailfilter" class="col-sm-2 control-label">{tmpl_var name="resync_mailfilter_txt"}</label> 
+			<div class="col-sm-3"><select name="mailfilter_server_id" id="mailfilter_server_id" class="form-control">{tmpl_var name='mailfilter_server_id'}</select></div>
+		</div>
+	</tmpl_if>
+	<tmpl_if name="mailinglist_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_mailinglist" value="1" name="resync_mailinglist"></div>
+			<label for="resync_mailinglist" class="col-sm-2 control-label">{tmpl_var name="resync_mailinglist_txt"}</label> 
+			<div class="col-sm-3"><select name="mailinglist_server_id" id="mailinglist_server_id" class="form-control">{tmpl_var name='mailinglist_server_id'}</select></div>
+		</div>
+	</tmpl_if>
+</tmpl_if>
 
-	<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/resync_do.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/resync.php');">
-			<span>{tmpl_var name='btn_cancel_txt'}</span>
-		</button>
+<tmpl_if name="dns_server_found">
+	<tmpl_if name="dns_soa_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_dns" value="1" name="resync_dns"></div>
+			<label for="resync_dns" class="col-sm-2 control-label">{tmpl_var name="resync_dns_txt"}</label> 
+			<div class="col-sm-3"><select name="dns_server_id" id="dns_server_id" class="form-control">{tmpl_var name='dns_server_id'}</select></div>
+		</div>
+	</tmpl_if>
+</tmpl_if>
+	
+<tmpl_if name="vserver_server_found">
+	<tmpl_if name="vserver_found">
+		<div class="form-group">
+			<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_vserver" value="1" name="resync_vserver"></div>
+			<label for="resync_vserver" class="col-sm-2 control-label">{tmpl_var name="resync_vserver_txt"}</label> 
+			<div class="col-sm-3"><select name="vserver_server_id" id="vserver_server_id" class="form-control">{tmpl_var name='vserver_server_id'}</select></div>
+		</div>
+	</tmpl_if>
+</tmpl_if>
+	
+<tmpl_if name="firewall_server_found">
+	<div class="form-group">
+		<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_firewall" value="1" name="resync_firewall"></div>
+		<label for="resync_firewall" class="col-sm-2 control-label">{tmpl_var name="resync_firewall_txt"}</label> 
+		<div class="col-sm-3"><select name="firewall_server_id" id="firewall_server_id" class="form-control">{tmpl_var name='firewall_server_id'}</select></div>
 	</div>
+</tmpl_if>
+	
+<div class="form-group">
+	<div class="col-sm-1"><input class="form-control" type="checkbox" id="resync_client" value="1" name="resync_client"></div>
+	<label for="resync_client" class="col-sm-2 control-label">{tmpl_var name="resync_client_txt"}</label> 
 </div>
-</div>
+	
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+<div class="clear"><div class="right">
+	<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/resync.php">{tmpl_var name='btn_start_txt'}</button>
+	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/resync.php">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
 
diff --git a/interface/web/tools/templates/tpl_default.htm b/interface/web/tools/templates/tpl_default.htm
index fadcd36..656518e 100644
--- a/interface/web/tools/templates/tpl_default.htm
+++ b/interface/web/tools/templates/tpl_default.htm
@@ -1,21 +1,18 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_tools_tpl">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels">
-            <div class="ctrlHolder">
+        
+            <div class="form-group">
                 <p><tmpl_var name="no_settings_txt"></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','tools/tpl_default.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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+<!--            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/tpl_default.php">{tmpl_var name='btn_save_txt'}</button>-->
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/tools/templates/user_settings.htm b/interface/web/tools/templates/user_settings.htm
index d6f57d0..b493c03 100644
--- a/interface/web/tools/templates/user_settings.htm
+++ b/interface/web/tools/templates/user_settings.htm
@@ -1,39 +1,35 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <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" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
+        
+            <div class="form-group">
+                <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='passwort_txt'}</label>
+                <div class="col-sm-6"><input type="password" name="passwort" id="passwort" value="{tmpl_var name='passwort'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');"/></div><div class="col-sm-3 input-sm">&nbsp;</div><a href="javascript:void(0);" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</a>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='password_strength_txt'}</p>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
                 <div id="passBar"></div>
                 <p class="formHint"><span id="passText">&nbsp;</span></p>
             </div>
-            <div class="ctrlHolder">
-                <label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
-                <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" autocomplete="off"  onkeyup="checkPassMatch('passwort','repeat_password');" />
-            </div>
+            <div class="form-group">
+                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off"  onkeyup="checkPassMatch('passwort','repeat_password');" /></div></div>
             <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
             <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-            <div class="ctrlHolder">
-                <label for="language">{tmpl_var name='language_txt'}</label>
-                <select name="language" id="language" class="selectInput flags">
+            <div class="form-group">
+                <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
+                <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
                     {tmpl_var name='language'}
-                </select>
+                </select></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','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>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="tools/user_settings.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/tools/user_settings.php b/interface/web/tools/user_settings.php
index 02fc4f7..5754245 100644
--- a/interface/web/tools/user_settings.php
+++ b/interface/web/tools/user_settings.php
@@ -102,7 +102,7 @@
 		global $app;
 		
 		if($_POST['passwort'] != '') {
-			$tmp_user = $app->db->queryOneRecord("SELECT passwort FROM sys_user WHERE userid = '".$app->functions->intval($_SESSION['s']['user']['userid'])."'");
+			$tmp_user = $app->db->queryOneRecord("SELECT passwort FROM sys_user WHERE userid = ?", $_SESSION['s']['user']['userid']);
 			$_SESSION['s']['user']['passwort'] = $tmp_user['passwort'];
 			unset($tmp_user);
 		}
diff --git a/interface/web/vm/ajax_get_ip.php b/interface/web/vm/ajax_get_ip.php
index 6440077..3ff5c0d 100644
--- a/interface/web/vm/ajax_get_ip.php
+++ b/interface/web/vm/ajax_get_ip.php
@@ -38,8 +38,8 @@
 
 if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 
-	$sql = "SELECT ip_address FROM openvz_ip WHERE reserved = 'n' AND server_id = $server_id";
-	$ips = $app->db->queryAllRecords($sql);
+	$sql = "SELECT ip_address FROM openvz_ip WHERE reserved = 'n' AND server_id = ?";
+	$ips = $app->db->queryAllRecords($sql, $server_id);
 	$ip_select = "";
 	if(is_array($ips)) {
 		foreach( $ips as $ip) {
diff --git a/interface/web/vm/form/openvz_ip.tform.php b/interface/web/vm/form/openvz_ip.tform.php
index 181d641..e43b28d 100644
--- a/interface/web/vm/form/openvz_ip.tform.php
+++ b/interface/web/vm/form/openvz_ip.tform.php
@@ -77,10 +77,9 @@
 		'ip_address' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
-			'validators' => array (  0 => array ( 'type' => 'ISIPV4',
-					'errmsg'=> 'ip_error_wrong'),
-				1 => array ( 'type' => 'UNIQUE',
-					'errmsg'=> 'ip_error_unique'),
+			'validators' => array (
+				0 => array ( 'type' => 'ISIP', 'errmsg'=> 'ip_error_wrong'),
+				1 => array ( 'type' => 'UNIQUE', 'errmsg'=> 'ip_error_unique'),
 			),
 			'default' => '',
 			'value'  => '',
diff --git a/interface/web/vm/form/openvz_template.tform.php b/interface/web/vm/form/openvz_template.tform.php
index ea49e3a..fd67c99 100644
--- a/interface/web/vm/form/openvz_template.tform.php
+++ b/interface/web/vm/form/openvz_template.tform.php
@@ -459,6 +459,22 @@
 			'width'  => '30',
 			'maxlength' => '255'
 		),
+		'features' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'iptables' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/vm/form/openvz_vm.tform.php b/interface/web/vm/form/openvz_vm.tform.php
index 759ba2f..666d06c 100644
--- a/interface/web/vm/form/openvz_vm.tform.php
+++ b/interface/web/vm/form/openvz_vm.tform.php
@@ -306,6 +306,22 @@
 				'width'  => '30',
 				'maxlength' => '255'
 			),
+			'features' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'TEXT',
+				'default' => '',
+				'value'  => '',
+				'width'  => '30',
+				'maxlength' => '255'
+			),
+			'iptables' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'TEXT',
+				'default' => '',
+				'value'  => '',
+				'width'  => '30',
+				'maxlength' => '255'
+			),
 			//#################################
 			// ENDE Datatable fields
 			//#################################
diff --git a/interface/web/vm/lib/lang/ar_openvz_template.lng b/interface/web/vm/lib/lang/ar_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/ar_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ar_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ar_openvz_vm.lng b/interface/web/vm/lib/lang/ar_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/ar_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ar_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/bg_openvz_template.lng b/interface/web/vm/lib/lang/bg_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/bg_openvz_template.lng
+++ b/interface/web/vm/lib/lang/bg_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/bg_openvz_vm.lng b/interface/web/vm/lib/lang/bg_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/bg_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/bg_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_template.lng b/interface/web/vm/lib/lang/br_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/br_openvz_template.lng
+++ b/interface/web/vm/lib/lang/br_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_vm.lng b/interface/web/vm/lib/lang/br_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/br_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/br_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/cz_openvz_template.lng b/interface/web/vm/lib/lang/cz_openvz_template.lng
index cf926f6..7fff3b3 100644
--- a/interface/web/vm/lib/lang/cz_openvz_template.lng
+++ b/interface/web/vm/lib/lang/cz_openvz_template.lng
@@ -90,5 +90,7 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Šablona';
 $wb['Advanced'] = 'Pokročilý';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
 
diff --git a/interface/web/vm/lib/lang/cz_openvz_vm.lng b/interface/web/vm/lib/lang/cz_openvz_vm.lng
index b9043e4..c2c26d0 100644
--- a/interface/web/vm/lib/lang/cz_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/cz_openvz_vm.lng
@@ -37,5 +37,7 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Pokročilý';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
 
diff --git a/interface/web/vm/lib/lang/de_openvz_template.lng b/interface/web/vm/lib/lang/de_openvz_template.lng
index 329a106..0f0e3ae 100644
--- a/interface/web/vm/lib/lang/de_openvz_template.lng
+++ b/interface/web/vm/lib/lang/de_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages ist leer.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Erweitert';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/de_openvz_vm.lng b/interface/web/vm/lib/lang/de_openvz_vm.lng
index c773885..b41c65d 100644
--- a/interface/web/vm/lib/lang/de_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/de_openvz_vm.lng
@@ -37,4 +37,5 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver ist leer.';
 $wb['Virtual server'] = 'Virtueller Server';
 $wb['Advanced'] = 'Erweitert';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/el_openvz_template.lng b/interface/web/vm/lib/lang/el_openvz_template.lng
index afe2bcd..2f5c8f6 100644
--- a/interface/web/vm/lib/lang/el_openvz_template.lng
+++ b/interface/web/vm/lib/lang/el_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/el_openvz_vm.lng b/interface/web/vm/lib/lang/el_openvz_vm.lng
index 4c7950a..889d1f3 100644
--- a/interface/web/vm/lib/lang/el_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/el_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Το Nameserver(s) είναι κενό.';
 $wb['Virtual server'] = 'Εικονικός server';
 $wb['Advanced'] = 'Για προχωρημένους';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/en_openvz_template.lng b/interface/web/vm/lib/lang/en_openvz_template.lng
index e52165b..1d9d457 100644
--- a/interface/web/vm/lib/lang/en_openvz_template.lng
+++ b/interface/web/vm/lib/lang/en_openvz_template.lng
@@ -90,4 +90,7 @@
 $wb["swappages_error_empty"] = 'Swappages is empty.';
 $wb["Template"] = 'Template';
 $wb["Advanced"] = 'Advanced';
-?>
\ No newline at end of file
+$wb['features_txt'] = 'Features';
+$wb['features_txt'] = 'iptables';
+$wb["iptables_txt"] = "iptables";
+?>
diff --git a/interface/web/vm/lib/lang/en_openvz_vm.lng b/interface/web/vm/lib/lang/en_openvz_vm.lng
index ddd9903..d7ad26c 100644
--- a/interface/web/vm/lib/lang/en_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/en_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb["template_nameserver_error_empty"] = 'Nameserver(s) is empty.';
 $wb["Virtual server"] = 'Virtual server';
 $wb["Advanced"] = 'Advanced';
-?>
\ No newline at end of file
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
+?>
diff --git a/interface/web/vm/lib/lang/es_openvz_template.lng b/interface/web/vm/lib/lang/es_openvz_template.lng
index 0f73d40..d64c981 100644
--- a/interface/web/vm/lib/lang/es_openvz_template.lng
+++ b/interface/web/vm/lib/lang/es_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages esta vacío.';
 $wb['Template'] = 'Plantilla';
 $wb['Advanced'] = 'Avanzado';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/es_openvz_vm.lng b/interface/web/vm/lib/lang/es_openvz_vm.lng
index ce5eccb..495de6f 100644
--- a/interface/web/vm/lib/lang/es_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/es_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) está vacío.';
 $wb['Virtual server'] = 'Servidor virtual';
 $wb['Advanced'] = 'Avanzado';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/fi_openvz_template.lng b/interface/web/vm/lib/lang/fi_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/fi_openvz_template.lng
+++ b/interface/web/vm/lib/lang/fi_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/fi_openvz_vm.lng b/interface/web/vm/lib/lang/fi_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/fi_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/fi_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/fr_openvz_template.lng b/interface/web/vm/lib/lang/fr_openvz_template.lng
index d33091b..14655c0 100644
--- a/interface/web/vm/lib/lang/fr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/fr_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages est vide.';
 $wb['Template'] = 'Modèle';
 $wb['Advanced'] = 'Avancé';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/fr_openvz_vm.lng b/interface/web/vm/lib/lang/fr_openvz_vm.lng
index f3d69c1..9672848 100644
--- a/interface/web/vm/lib/lang/fr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/fr_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) est vide.';
 $wb['Virtual server'] = 'Serveur virtuel';
 $wb['Advanced'] = 'Avancé';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/hr_openvz_template.lng b/interface/web/vm/lib/lang/hr_openvz_template.lng
index cd2ad19..19a371f 100644
--- a/interface/web/vm/lib/lang/hr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/hr_openvz_template.lng
@@ -90,6 +90,8 @@
 $wb['swappages_error_empty'] = 'Swappages polje je prazno.';
 $wb['Template'] = 'Predložak';
 $wb['Advanced'] = 'Napredno';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
 
 
diff --git a/interface/web/vm/lib/lang/hr_openvz_vm.lng b/interface/web/vm/lib/lang/hr_openvz_vm.lng
index bebfd29..4be9932 100644
--- a/interface/web/vm/lib/lang/hr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/hr_openvz_vm.lng
@@ -37,6 +37,8 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(i) polje je prazno.';
 $wb['Virtual server'] = 'Virtualni server';
 $wb['Advanced'] = 'Napredno';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
 
 
diff --git a/interface/web/vm/lib/lang/hu_openvz_template.lng b/interface/web/vm/lib/lang/hu_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/hu_openvz_template.lng
+++ b/interface/web/vm/lib/lang/hu_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/hu_openvz_vm.lng b/interface/web/vm/lib/lang/hu_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/hu_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/hu_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/id_openvz_template.lng b/interface/web/vm/lib/lang/id_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/id_openvz_template.lng
+++ b/interface/web/vm/lib/lang/id_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/id_openvz_vm.lng b/interface/web/vm/lib/lang/id_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/id_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/id_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_template.lng b/interface/web/vm/lib/lang/it_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/it_openvz_template.lng
+++ b/interface/web/vm/lib/lang/it_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_vm.lng b/interface/web/vm/lib/lang/it_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/it_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/it_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ja_openvz_template.lng b/interface/web/vm/lib/lang/ja_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/ja_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ja_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ja_openvz_vm.lng b/interface/web/vm/lib/lang/ja_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/ja_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ja_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/nl_openvz_template.lng b/interface/web/vm/lib/lang/nl_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/nl_openvz_template.lng
+++ b/interface/web/vm/lib/lang/nl_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/nl_openvz_vm.lng b/interface/web/vm/lib/lang/nl_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/nl_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/nl_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/pl_openvz_template.lng b/interface/web/vm/lib/lang/pl_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/pl_openvz_template.lng
+++ b/interface/web/vm/lib/lang/pl_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/pl_openvz_vm.lng b/interface/web/vm/lib/lang/pl_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/pl_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/pl_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/pt_openvz_template.lng b/interface/web/vm/lib/lang/pt_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/pt_openvz_template.lng
+++ b/interface/web/vm/lib/lang/pt_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/pt_openvz_vm.lng b/interface/web/vm/lib/lang/pt_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/pt_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/pt_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ro_openvz_template.lng b/interface/web/vm/lib/lang/ro_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/ro_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ro_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ro_openvz_vm.lng b/interface/web/vm/lib/lang/ro_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/ro_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ro_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ru_openvz_template.lng b/interface/web/vm/lib/lang/ru_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/ru_openvz_template.lng
+++ b/interface/web/vm/lib/lang/ru_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/ru_openvz_vm.lng b/interface/web/vm/lib/lang/ru_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/ru_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/ru_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/se_openvz_template.lng b/interface/web/vm/lib/lang/se_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/se_openvz_template.lng
+++ b/interface/web/vm/lib/lang/se_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/se_openvz_vm.lng b/interface/web/vm/lib/lang/se_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/se_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/se_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/sk_openvz_template.lng b/interface/web/vm/lib/lang/sk_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/sk_openvz_template.lng
+++ b/interface/web/vm/lib/lang/sk_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/sk_openvz_vm.lng b/interface/web/vm/lib/lang/sk_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/sk_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/sk_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_template.lng b/interface/web/vm/lib/lang/tr_openvz_template.lng
index d285512..217747c 100644
--- a/interface/web/vm/lib/lang/tr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_template.lng
@@ -90,4 +90,6 @@
 $wb['swappages_error_empty'] = 'Swappages is empty.';
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_vm.lng b/interface/web/vm/lib/lang/tr_openvz_vm.lng
index f2be022..06a10d2 100644
--- a/interface/web/vm/lib/lang/tr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_vm.lng
@@ -37,4 +37,6 @@
 $wb['template_nameserver_error_empty'] = 'Nameserver(s) is empty.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
+$wb['features_txt'] = 'Features';
+$wb["iptables_txt"] = "iptables";
 ?>
diff --git a/interface/web/vm/lib/module.conf.php b/interface/web/vm/lib/module.conf.php
index a7e31bb..ee5e6b6 100644
--- a/interface/web/vm/lib/module.conf.php
+++ b/interface/web/vm/lib/module.conf.php
@@ -5,6 +5,7 @@
 $module['template']  = 'module.tpl.htm';
 $module['startpage']  = 'vm/openvz_vm_list.php';
 $module['tab_width']    = '';
+$module['order'] = '50';
 
 //**** Templates menu
 $items = array();
diff --git a/interface/web/vm/openvz_action.php b/interface/web/vm/openvz_action.php
index 6e090d7..757f55e 100644
--- a/interface/web/vm/openvz_action.php
+++ b/interface/web/vm/openvz_action.php
@@ -17,7 +17,7 @@
 
 if($vm_id == 0) die('Invalid VM ID');
 
-$vm = $app->db->queryOneRecord("SELECT server_id, veid FROM openvz_vm WHERE vm_id = $vm_id");
+$vm = $app->db->queryOneRecord("SELECT server_id, veid FROM openvz_vm WHERE vm_id = ?", $vm_id);
 $veid = $app->functions->intval($vm['veid']);
 $server_id = $app->functions->intval($vm['server_id']);
 
@@ -47,15 +47,8 @@
 
 	//* Start the virtual machine
 	$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-		"VALUES (".
-		(int)$server_id . ", ".
-		time() . ", ".
-		"'openvz_start_vm', ".
-		$veid.", ".
-		"'pending', ".
-		"''".
-		")";
-	$app->db->query($sql);
+		"VALUES (?, UNIX_TIMESTAMP(), 'openvz_start_vm', ?, 'pending', '')";
+	$app->db->query($sql, $server_id, $veid);
 
 	$app->tpl->setVar('msg', $wb['start_exec_txt']);
 	$options['start_option_enabled'] = 'checked="checked"';
@@ -64,15 +57,8 @@
 
 	//* Stop the virtual machine
 	$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-		"VALUES (".
-		(int)$server_id . ", ".
-		time() . ", ".
-		"'openvz_stop_vm', ".
-		$veid.", ".
-		"'pending', ".
-		"''".
-		")";
-	$app->db->query($sql);
+		"VALUES (?, UNIX_TIMESTAMP(), 'openvz_stop_vm', ?, 'pending', '')";
+	$app->db->query($sql, $server_id, $veid);
 
 	$app->tpl->setVar('msg', $wb['stop_exec_txt']);
 	$options['stop_option_enabled'] = 'checked="checked"';
@@ -81,15 +67,8 @@
 
 	//* Restart the virtual machine
 	$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-		"VALUES (".
-		(int)$server_id . ", ".
-		time() . ", ".
-		"'openvz_restart_vm', ".
-		$veid.", ".
-		"'pending', ".
-		"''".
-		")";
-	$app->db->query($sql);
+		"VALUES (?, UNIX_TIMESTAMP(), 'openvz_restart_vm', ?, 'pending', '')";
+	$app->db->query($sql, $server_id, $veid);
 
 	$app->tpl->setVar('msg', $wb['restart_exec_txt']);
 	$options['restart_option_enabled'] = 'checked="checked"';
@@ -104,30 +83,22 @@
 	}
 
 	//* Quote name
-	$ostemplate_name = $app->db->quote($ostemplate_name);
 
 	//* Check for duplicates
-	$tmp = $app->db->queryOneRecord("SELECT count(ostemplate_id) as number FROM openvz_ostemplate WHERE template_file = '$ostemplate_name'");
+	$tmp = $app->db->queryOneRecord("SELECT count(ostemplate_id) as number FROM openvz_ostemplate WHERE template_file = ?", $ostemplate_name);
 	if($tmp['number'] > 0) $error_msg .= $wb['ostemplate_name_unique_error'].'<br />';
 	unset($tmp);
 
 	if($error_msg == '') {
 		//* Create ostemplate action
 		$sql =  "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " .
-			"VALUES (".
-			(int)$server_id . ", ".
-			time() . ", ".
-			"'openvz_create_ostpl', ".
-			"'".$veid.":".$ostemplate_name."', ".
-			"'pending', ".
-			"''".
-			")";
-		$app->db->query($sql);
+			"VALUES (?, UNIX_TIMESTAMP(), 'openvz_create_ostpl', ?, 'pending', '')";
+		$app->db->query($sql, $server_id, $veid.":".$ostemplate_name);
 
 		//* Create a record in the openvz_ostemplate table
 		$sql = "INSERT INTO `openvz_ostemplate` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `template_file`, `server_id`, `allservers`, `active`, `description`)
-		VALUES(1, 1, 'riud', 'riud', '', '$ostemplate_name', '$ostemplate_name', $server_id, 'n', 'y', '')";
-		$app->db->query($sql);
+		VALUES(1, 1, 'riud', 'riud', '', ?, ?, ?, 'n', 'y', '')";
+		$app->db->query($sql, $ostemplate_name, $ostemplate_name, $server_id);
 
 		$app->tpl->setVar('msg', $wb['ostemplate_exec_txt']);
 		$options['ostemplate_option_enabled'] = 'checked="checked"';
diff --git a/interface/web/vm/openvz_template_edit.php b/interface/web/vm/openvz_template_edit.php
index ec520d0..097e55b 100644
--- a/interface/web/vm/openvz_template_edit.php
+++ b/interface/web/vm/openvz_template_edit.php
@@ -54,10 +54,7 @@
 	function onAfterInsert() {
 		global $app, $conf;
 
-		$guar_ram = $app->functions->intval($this->dataRecord['ram']*256);
-		$burst_ram = $app->functions->intval($this->dataRecord['ram_burst']*256);
-		$sql = "UPDATE openvz_template SET shmpages = '$guar_ram:$guar_ram',vmguarpages = '$guar_ram:$guar_ram', oomguarpages = '$guar_ram:$guar_ram',privvmpages = '$burst_ram:$burst_ram' WHERE template_id = $this->id";
-		$app->db->query($sql);
+		$this->onAfterUpdate();
 	}
 
 	function onAfterUpdate() {
@@ -65,8 +62,8 @@
 
 		$guar_ram = $app->functions->intval($this->dataRecord['ram']*256);
 		$burst_ram = $app->functions->intval($this->dataRecord['ram_burst']*256);
-		$sql = "UPDATE openvz_template SET shmpages = '$guar_ram:$guar_ram',vmguarpages = '$guar_ram:$guar_ram', oomguarpages = '$guar_ram:$guar_ram',privvmpages = '$burst_ram:$burst_ram' WHERE template_id = $this->id";
-		$app->db->query($sql);
+		$sql = "UPDATE openvz_template SET shmpages = ?,vmguarpages = ?, oomguarpages = ?,privvmpages = ? WHERE template_id = ?";
+		$app->db->query($sql, $guar_ram . ':' . $guar_ram, $guar_ram . ':' . $guar_ram, $guar_ram . ':' . $guar_ram, $burst_ram . ':' . $burst_ram, $this->id);
 	}
 
 }
diff --git a/interface/web/vm/openvz_vm_edit.php b/interface/web/vm/openvz_vm_edit.php
index bd7c1d2..07f6aaa 100644
--- a/interface/web/vm/openvz_vm_edit.php
+++ b/interface/web/vm/openvz_vm_edit.php
@@ -74,15 +74,15 @@
 
 			//* Get the limits of the client
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.limit_openvz_vm_template_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.limit_openvz_vm_template_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 			//* Fill the template_id field
 			if($client['limit_openvz_vm_template_id'] == 0) {
 				$sql = 'SELECT template_id,template_name FROM openvz_template WHERE 1 ORDER BY template_name';
 			} else {
-				$sql = 'SELECT template_id,template_name FROM openvz_template WHERE template_id = '.$app->functions->intval($client['limit_openvz_vm_template_id']).' ORDER BY template_name';
+				$sql = 'SELECT template_id,template_name FROM openvz_template WHERE template_id = ? ORDER BY template_name';
 			}
-			$records = $app->db->queryAllRecords($sql);
+			$records = $app->db->queryAllRecords($sql, $client['limit_openvz_vm_template_id']);
 			if(is_array($records)) {
 				foreach( $records as $rec) {
 					$selected = @($rec["template_id"] == $this->dataRecord["template_id"])?'SELECTED':'';
@@ -96,13 +96,13 @@
 
 			//* Get the limits of the client
 			$client_group_id = $_SESSION["s"]["user"]["default_group"];
-			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.limit_openvz_vm_template_id, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, client.limit_openvz_vm_template_id, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
 
 			//* Fill the client select field
-			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$app->functions->intval($client['client_id'])." ORDER BY client.company_name, client.contact_name, sys_group.name";
-			$records = $app->db->queryAllRecords($sql);
-			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ".$app->functions->intval($client['client_id']));
+			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
+			$records = $app->db->queryAllRecords($sql, $client['client_id']);
+			$tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
 			$client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
 			//$tmp_data_record = $app->tform->getDataRecord($this->id);
 			if(is_array($records)) {
@@ -117,9 +117,9 @@
 			if($client['limit_openvz_vm_template_id'] == 0) {
 				$sql = 'SELECT template_id,template_name FROM openvz_template WHERE 1 ORDER BY template_name';
 			} else {
-				$sql = 'SELECT template_id,template_name FROM openvz_template WHERE template_id = '.$app->functions->intval($client['limit_openvz_vm_template_id']).' ORDER BY template_name';
+				$sql = 'SELECT template_id,template_name FROM openvz_template WHERE template_id = ? ORDER BY template_name';
 			}
-			$records = $app->db->queryAllRecords($sql);
+			$records = $app->db->queryAllRecords($sql, $client['limit_openvz_vm_template_id']);
 			if(is_array($records)) {
 				foreach( $records as $rec) {
 					$selected = @($rec["template_id"] == $this->dataRecord["template_id"])?'SELECTED':'';
@@ -166,8 +166,8 @@
 			$tmp = $app->db->queryOneRecord('SELECT server_id FROM server WHERE vserver_server = 1 AND mirror_server_id = 0 ORDER BY server_name LIMIT 0,1');
 			$vm_server_id = $app->functions->intval($tmp['server_id']);
 		}
-		$sql = "SELECT ip_address FROM openvz_ip WHERE reserved = 'n' AND (vm_id = 0 or vm_id = '".$this->id."') AND server_id = ".$app->functions->intval($vm_server_id)." ORDER BY ip_address";
-		$ips = $app->db->queryAllRecords($sql);
+		$sql = "SELECT ip_address FROM openvz_ip WHERE reserved = 'n' AND (vm_id = 0 or vm_id = ?) AND server_id = ? ORDER BY ip_address";
+		$ips = $app->db->queryAllRecords($sql, $this->id, $vm_server_id);
 		$ip_select = "";
 		if(is_array($ips)) {
 			foreach( $ips as $ip) {
@@ -193,6 +193,7 @@
 		$trans = array("d" => "dd", "m" => "mm", "Y" => "yy");
 		$date_format = strtr($date_format, $trans);
 		$app->tpl->setVar("date_format", $date_format);
+		$app->tpl->setVar("conf_format_datetime_js", strtr($app->lng('conf_format_dateshort'), array('d' => 'dd', 'm' => 'mm', 'Y' => 'yyyy', 'y' => 'yy', 'H' => 'hh', 'h' => 'HH', 'i' => 'ii')));
 
 		$app->tpl->setVar("daynamesmin_su", $app->lng('daynamesmin_su'));
 		$app->tpl->setVar("daynamesmin_mo", $app->lng('daynamesmin_mo'));
diff --git a/interface/web/vm/templates/openvz.conf.tpl b/interface/web/vm/templates/openvz.conf.tpl
index 5bdd385..1cb4dc0 100644
--- a/interface/web/vm/templates/openvz.conf.tpl
+++ b/interface/web/vm/templates/openvz.conf.tpl
@@ -48,3 +48,5 @@
 # SWAPPAGES="{tmpl_var name='swappages'}"
 
 CAPABILITY="{tmpl_var name='capability'}"
+FEATURES="{tmpl_var name='features'}"
+IPTABLES="{tmpl_var name='iptables'}"
diff --git a/interface/web/vm/templates/openvz_action.htm b/interface/web/vm/templates/openvz_action.htm
index 00bb65e..2d95f9c 100644
--- a/interface/web/vm/templates/openvz_action.htm
+++ b/interface/web/vm/templates/openvz_action.htm
@@ -1,53 +1,42 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_language_import">
-  
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>{tmpl_var name="head_txt"} {tmpl_var name='veid'}</legend>
+
+        <legend>{tmpl_var name="head_txt"} {tmpl_var name='veid'}</legend>
             
             <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>
+                <div id="errorMsg"><h3><tmpl_var name="error_txt"></h3><ol><tmpl_var name="error"></ol></div>
             </tmpl_if>
                 
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='start_txt'}</p>
-                <div class="multiField">
-                    <input id="action" type="radio" value="start" name="action" {tmpl_var name='start_option_enabled'}/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='start_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="radio" id="action" value="start" name="action" {tmpl_var name='start_option_enabled'}/></div>
             </div>
                 
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='stop_txt'}</p>
-                <div class="multiField">
-                    <input id="action" type="radio" value="stop" name="action" {tmpl_var name='stop_option_enabled'}/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='stop_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="radio" id="action" value="stop" name="action" {tmpl_var name='stop_option_enabled'}/></div>
             </div>
                 
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='restart_txt'}</p>
-                <div class="multiField">
-                    <input id="action" type="radio" value="restart" name="action" {tmpl_var name='restart_option_enabled'}/>
-                </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='restart_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="radio" id="action" value="restart" name="action" {tmpl_var name='restart_option_enabled'}/></div>
             </div>
                 
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='ostemplate_txt'}</p>
-                <div class="multiField">
-                    <input style="float:left; margin-right:10px;" id="action" type="radio" value="ostemplate" name="action" {tmpl_var name='ostemplate_option_enabled'}/>
-                           <input name="ostemplate_name" size="30" maxlength="255" type="text" class="textInput" value="{tmpl_var name='ostemplate_name'}" onclick="$('[name=action]').filter('[value=ostemplate]').attr('checked','checked');" /> &nbsp;{tmpl_var name='ostemplate_desc_txt'}
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='ostemplate_txt'}</label>
+                <div class="col-sm-9"><input class="form-control" type="radio" style="float:left; margin-right:10px;" id="action" value="ostemplate" name="action" {tmpl_var name='ostemplate_option_enabled'}/></div><div class="col-sm-6"><input type="text" name="ostemplate_name" class="form-control" value="{tmpl_var name='ostemplate_name'}" onclick="$('[name=action]').filter('[value=ostemplate]').attr('checked','checked');" /></div><div class="col-sm-3 input-sm"> &nbsp;{tmpl_var name='ostemplate_desc_txt'}
                 </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','vm/openvz_action.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('vm/openvz_vm_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_action.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_vm_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_ip_edit.htm b/interface/web/vm/templates/openvz_ip_edit.htm
index ef0537d..2790669 100644
--- a/interface/web/vm/templates/openvz_ip_edit.htm
+++ b/interface/web/vm/templates/openvz_ip_edit.htm
@@ -1,43 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_openvz_ip">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>IP address</legend>
-            <div class="ctrlHolder">
-                <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                <select name="server_id" id="server_id" class="selectInput">
+        <legend>IP address</legend>
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </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" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="vm_id">{tmpl_var name='vm_id_txt'}</label>
-                <select name="vm_id" id="vm_id" class="selectInput" disabled="disabled">
+            <div class="form-group">
+                <label for="ip_address" class="col-sm-3 control-label">{tmpl_var name='ip_address_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="ip_address" id="ip_address" value="{tmpl_var name='ip_address'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="vm_id" class="col-sm-3 control-label">{tmpl_var name='vm_id_txt'}</label>
+                <div class="col-sm-9"><select name="vm_id" id="vm_id" class="form-control" disabled="disabled">
                     {tmpl_var name='vm_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='reserved_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='reserved_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='reserved'}
                 </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','vm/openvz_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('vm/openvz_ip_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_ip_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_ip_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
 <script language="JavaScript" type="text/javascript">
     var vm_id = jQuery('#vm_id').val();
     jQuery('#vm_id').attr({name: 'vm_id_disabled', id: 'vm_id_disabled'});
diff --git a/interface/web/vm/templates/openvz_ip_list.htm b/interface/web/vm/templates/openvz_ip_list.htm
index 378bd01..fd12694 100644
--- a/interface/web/vm/templates/openvz_ip_list.htm
+++ b/interface/web/vm/templates/openvz_ip_list.htm
@@ -1,47 +1,45 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_openvz_ip">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('vm/openvz_ip_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="vm/openvz_ip_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_vm_id" scope="col"><tmpl_var name="vm_id_txt"></th>
-                        <th class="tbl_col_ip_address" scope="col"><tmpl_var name="ip_address_txt"></th>
-                        <th class="tbl_col_reserved" scope="col"><tmpl_var name="reserved_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="vm_id"><tmpl_var name="vm_id_txt"></th>
+                        <th data-column="ip_address"><tmpl_var name="ip_address_txt"></th>
+                        <th data-column="reserved"><tmpl_var name="reserved_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_vm_id"><select name="search_vm_id">{tmpl_var name='search_vm_id'}</select></td>
-                        <td class="tbl_col_ip_address"><input type="text" name="search_ip_address" value="{tmpl_var name='search_ip_address'}" /></td>
-                        <td class="tbl_col_reserved"><select name="search_reserved">{tmpl_var name='search_reserved'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','vm/openvz_ip_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_vm_id">{tmpl_var name='search_vm_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_ip_address" value="{tmpl_var name='search_ip_address'}" /></td>
+                        <td><select class="form-control" name="search_reserved">{tmpl_var name='search_reserved'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="vm/openvz_ip_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('vm/openvz_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_vm_id"><a href="#" onclick="loadContent('vm/openvz_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="vm_id"}</a></td>
-                            <td class="tbl_col_ip_address"><a href="#" onclick="loadContent('vm/openvz_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ip_address"}</a></td>
-                            <td class="tbl_col_reserved"><a href="#" onclick="loadContent('vm/openvz_ip_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="reserved"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('vm/openvz_ip_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>
+                        <tr>
+                            <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="vm_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="reserved"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ip_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -53,11 +51,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
+                        <td colspan="5"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_ostemplate_edit.htm b/interface/web/vm/templates/openvz_ostemplate_edit.htm
index 8bcba15..642cf99 100644
--- a/interface/web/vm/templates/openvz_ostemplate_edit.htm
+++ b/interface/web/vm/templates/openvz_ostemplate_edit.htm
@@ -1,48 +1,43 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_openvz_ostemplate">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Domain</legend>
-            <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>
-            <div class="ctrlHolder">
-                <label for="template_file">{tmpl_var name='template_file_txt'}</label>
-                <input name="template_file" id="template_file" value="{tmpl_var name='template_file'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                <select name="server_id" id="server_id" class="selectInput">
+        <legend>Domain</legend>
+            <div class="form-group">
+                <label for="template_name" class="col-sm-3 control-label">{tmpl_var name='template_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="template_name" id="template_name" value="{tmpl_var name='template_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="template_file" class="col-sm-3 control-label">{tmpl_var name='template_file_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="template_file" id="template_file" value="{tmpl_var name='template_file'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
                     {tmpl_var name='server_id'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='allservers_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='allservers_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='allservers'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="description">{tmpl_var name='description_txt'}</label>
-                <textarea name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea>
+            <div class="form-group">
+                <label for="description" class="col-sm-3 control-label">{tmpl_var name='description_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea></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','vm/openvz_ostemplate_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('vm/openvz_ostemplate_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_ostemplate_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_ostemplate_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_ostemplate_list.htm b/interface/web/vm/templates/openvz_ostemplate_list.htm
index a4d0fc3..85f46e6 100644
--- a/interface/web/vm/templates/openvz_ostemplate_list.htm
+++ b/interface/web/vm/templates/openvz_ostemplate_list.htm
@@ -1,50 +1,48 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_openvz_ostemplate">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('vm/openvz_ostemplate_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="vm/openvz_ostemplate_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_ostemplate_id" scope="col"><tmpl_var name="ostemplate_id_txt"></th>
-                        <th class="tbl_col_template_name" scope="col"><tmpl_var name="template_name_txt"></th>
-                        <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
-                        <th class="tbl_col_allservers" scope="col"><tmpl_var name="allservers_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="ostemplate_id"><tmpl_var name="ostemplate_id_txt"></th>
+                        <th data-column="template_name"><tmpl_var name="template_name_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="allservers"><tmpl_var name="allservers_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_ostemplate_id"><input type="text" name="search_ostemplate_id" value="{tmpl_var name='search_ostemplate_id'}" /></td>
-                        <td class="tbl_col_template_name"><input type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_allservers"><select name="search_allservers">{tmpl_var name='search_allservers'}</select></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','vm/openvz_ostemplate_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_ostemplate_id" value="{tmpl_var name='search_ostemplate_id'}" /></td>
+                        <td><input class="form-control" type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_allservers">{tmpl_var name='search_allservers'}</select></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="vm/openvz_ostemplate_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_ostemplate_id"><a href="#" onclick="loadContent('vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ostemplate_id"}</a></td>
-                            <td class="tbl_col_template_name"><a href="#" onclick="loadContent('vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_name"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_allservers"><a href="#" onclick="loadContent('vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="allservers"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('vm/openvz_ostemplate_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>
+                        <tr>
+                            <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ostemplate_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="allservers"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ostemplate_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -56,11 +54,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="6"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_template_advanced_edit.htm b/interface/web/vm/templates/openvz_template_advanced_edit.htm
index 86e2807..4ef22d6 100644
--- a/interface/web/vm/templates/openvz_template_advanced_edit.htm
+++ b/interface/web/vm/templates/openvz_template_advanced_edit.htm
@@ -1,110 +1,90 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_openvz_template">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Advanced</legend>
-            <div class="ctrlHolder">
-                <label for="numproc">{tmpl_var name='numproc_txt'}</label>
-                <input name="numproc" id="numproc" value="{tmpl_var name='numproc'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numtcpsock">{tmpl_var name='numtcpsock_txt'}</label>
-                <input name="numtcpsock" id="numtcpsock" value="{tmpl_var name='numtcpsock'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numothersock">{tmpl_var name='numothersock_txt'}</label>
-                <input name="numothersock" id="numothersock" value="{tmpl_var name='numothersock'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="vmguarpages">{tmpl_var name='vmguarpages_txt'}</label>
-                <input name="vmguarpages" id="vmguarpages" value="{tmpl_var name='vmguarpages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="kmemsize">{tmpl_var name='kmemsize_txt'}</label>
-                <input name="kmemsize" id="kmemsize" value="{tmpl_var name='kmemsize'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="tcpsndbuf">{tmpl_var name='tcpsndbuf_txt'}</label>
-                <input name="tcpsndbuf" id="tcpsndbuf" value="{tmpl_var name='tcpsndbuf'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="tcprcvbuf">{tmpl_var name='tcprcvbuf_txt'}</label>
-                <input name="tcprcvbuf" id="tcprcvbuf" value="{tmpl_var name='tcprcvbuf'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="othersockbuf">{tmpl_var name='othersockbuf_txt'}</label>
-                <input name="othersockbuf" id="othersockbuf" value="{tmpl_var name='othersockbuf'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="dgramrcvbuf">{tmpl_var name='dgramrcvbuf_txt'}</label>
-                <input name="dgramrcvbuf" id="dgramrcvbuf" value="{tmpl_var name='dgramrcvbuf'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="oomguarpages">{tmpl_var name='oomguarpages_txt'}</label>
-                <input name="oomguarpages" id="oomguarpages" value="{tmpl_var name='oomguarpages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="privvmpages">{tmpl_var name='privvmpages_txt'}</label>
-                <input name="privvmpages" id="privvmpages" value="{tmpl_var name='privvmpages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="lockedpages">{tmpl_var name='lockedpages_txt'}</label>
-                <input name="lockedpages" id="lockedpages" value="{tmpl_var name='lockedpages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="shmpages">{tmpl_var name='shmpages_txt'}</label>
-                <input name="shmpages" id="shmpages" value="{tmpl_var name='shmpages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="physpages">{tmpl_var name='physpages_txt'}</label>
-                <input name="physpages" id="physpages" value="{tmpl_var name='physpages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numfile">{tmpl_var name='numfile_txt'}</label>
-                <input name="numfile" id="numfile" value="{tmpl_var name='numfile'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="avnumproc">{tmpl_var name='avnumproc_txt'}</label>
-                <input name="avnumproc" id="avnumproc" value="{tmpl_var name='avnumproc'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numflock">{tmpl_var name='numflock_txt'}</label>
-                <input name="numflock" id="numflock" value="{tmpl_var name='numflock'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numpty">{tmpl_var name='numpty_txt'}</label>
-                <input name="numpty" id="numpty" value="{tmpl_var name='numpty'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numsiginfo">{tmpl_var name='numsiginfo_txt'}</label>
-                <input name="numsiginfo" id="numsiginfo" value="{tmpl_var name='numsiginfo'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="dcachesize">{tmpl_var name='dcachesize_txt'}</label>
-                <input name="dcachesize" id="dcachesize" value="{tmpl_var name='dcachesize'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="numiptent">{tmpl_var name='numiptent_txt'}</label>
-                <input name="numiptent" id="numiptent" value="{tmpl_var name='numiptent'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="swappages">{tmpl_var name='swappages_txt'}</label>
-                <input name="swappages" id="swappages" value="{tmpl_var name='swappages'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="capability">{tmpl_var name='capability_txt'}</label>
-                <input name="capability" id="capability" value="{tmpl_var name='capability'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-        </fieldset>
+        <legend>Advanced</legend>
+            <div class="form-group">
+                <label for="numproc" class="col-sm-3 control-label">{tmpl_var name='numproc_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numproc" id="numproc" value="{tmpl_var name='numproc'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numtcpsock" class="col-sm-3 control-label">{tmpl_var name='numtcpsock_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numtcpsock" id="numtcpsock" value="{tmpl_var name='numtcpsock'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numothersock" class="col-sm-3 control-label">{tmpl_var name='numothersock_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numothersock" id="numothersock" value="{tmpl_var name='numothersock'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="vmguarpages" class="col-sm-3 control-label">{tmpl_var name='vmguarpages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="vmguarpages" id="vmguarpages" value="{tmpl_var name='vmguarpages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="kmemsize" class="col-sm-3 control-label">{tmpl_var name='kmemsize_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="kmemsize" id="kmemsize" value="{tmpl_var name='kmemsize'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="tcpsndbuf" class="col-sm-3 control-label">{tmpl_var name='tcpsndbuf_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="tcpsndbuf" id="tcpsndbuf" value="{tmpl_var name='tcpsndbuf'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="tcprcvbuf" class="col-sm-3 control-label">{tmpl_var name='tcprcvbuf_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="tcprcvbuf" id="tcprcvbuf" value="{tmpl_var name='tcprcvbuf'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="othersockbuf" class="col-sm-3 control-label">{tmpl_var name='othersockbuf_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="othersockbuf" id="othersockbuf" value="{tmpl_var name='othersockbuf'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dgramrcvbuf" class="col-sm-3 control-label">{tmpl_var name='dgramrcvbuf_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dgramrcvbuf" id="dgramrcvbuf" value="{tmpl_var name='dgramrcvbuf'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="oomguarpages" class="col-sm-3 control-label">{tmpl_var name='oomguarpages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="oomguarpages" id="oomguarpages" value="{tmpl_var name='oomguarpages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="privvmpages" class="col-sm-3 control-label">{tmpl_var name='privvmpages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="privvmpages" id="privvmpages" value="{tmpl_var name='privvmpages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="lockedpages" class="col-sm-3 control-label">{tmpl_var name='lockedpages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="lockedpages" id="lockedpages" value="{tmpl_var name='lockedpages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="shmpages" class="col-sm-3 control-label">{tmpl_var name='shmpages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="shmpages" id="shmpages" value="{tmpl_var name='shmpages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="physpages" class="col-sm-3 control-label">{tmpl_var name='physpages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="physpages" id="physpages" value="{tmpl_var name='physpages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numfile" class="col-sm-3 control-label">{tmpl_var name='numfile_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numfile" id="numfile" value="{tmpl_var name='numfile'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="avnumproc" class="col-sm-3 control-label">{tmpl_var name='avnumproc_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="avnumproc" id="avnumproc" value="{tmpl_var name='avnumproc'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numflock" class="col-sm-3 control-label">{tmpl_var name='numflock_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numflock" id="numflock" value="{tmpl_var name='numflock'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numpty" class="col-sm-3 control-label">{tmpl_var name='numpty_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numpty" id="numpty" value="{tmpl_var name='numpty'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numsiginfo" class="col-sm-3 control-label">{tmpl_var name='numsiginfo_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numsiginfo" id="numsiginfo" value="{tmpl_var name='numsiginfo'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="dcachesize" class="col-sm-3 control-label">{tmpl_var name='dcachesize_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="dcachesize" id="dcachesize" value="{tmpl_var name='dcachesize'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="numiptent" class="col-sm-3 control-label">{tmpl_var name='numiptent_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="numiptent" id="numiptent" value="{tmpl_var name='numiptent'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="swappages" class="col-sm-3 control-label">{tmpl_var name='swappages_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="swappages" id="swappages" value="{tmpl_var name='swappages'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="capability" class="col-sm-3 control-label">{tmpl_var name='capability_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="capability" id="capability" value="{tmpl_var name='capability'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="features" class="col-sm-3 control-label">{tmpl_var name='features_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="features" id="features" value="{tmpl_var name='features'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="iptables" class="col-sm-3 control-label">{tmpl_var name='iptables_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="iptables" id="iptables" value="{tmpl_var name='iptables'}" class="form-control" /></div></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','vm/openvz_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('vm/openvz_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/vm/templates/openvz_template_edit.htm b/interface/web/vm/templates/openvz_template_edit.htm
index e26bdf9..d60efa2 100644
--- a/interface/web/vm/templates/openvz_template_edit.htm
+++ b/interface/web/vm/templates/openvz_template_edit.htm
@@ -1,74 +1,69 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_openvz_template">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Template</legend>
-            <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>
-            <div class="ctrlHolder">
-                <label for="diskspace">{tmpl_var name='diskspace_txt'}</label>
-                <input name="diskspace" id="diskspace" value="{tmpl_var name='diskspace'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /> &nbsp;GB
-            </div>
-            <div class="ctrlHolder">
-                <label for="ram">{tmpl_var name='ram_txt'}</label>
-                <input name="ram" id="ram" value="{tmpl_var name='ram'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /> &nbsp;MB
-            </div>
-            <div class="ctrlHolder">
-                <label for="ram_burst">{tmpl_var name='ram_burst_txt'}</label>
-                <input name="ram_burst" id="ram_burst" value="{tmpl_var name='ram_burst'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /> &nbsp;MB
-            </div>
-            <div class="ctrlHolder">
-                <label for="cpu_units">{tmpl_var name='cpu_units_txt'}</label>
-                <input name="cpu_units" id="cpu_units" value="{tmpl_var name='cpu_units'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(8 - 500000)
-            </div>
-            <div class="ctrlHolder">
-                <label for="cpu_num">{tmpl_var name='cpu_num_txt'}</label>
-                <input name="cpu_num" id="cpu_num" value="{tmpl_var name='cpu_num'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(1 - 64)
-            </div>
-            <div class="ctrlHolder">
-                <label for="cpu_limit">{tmpl_var name='cpu_limit_txt'}</label>
-                <input name="cpu_limit" id="cpu_limit" value="{tmpl_var name='cpu_limit'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(10 - 6400)
-            </div>
-            <div class="ctrlHolder">
-                <label for="io_priority">{tmpl_var name='io_priority_txt'}</label>
-                <input name="io_priority" id="io_priority" value="{tmpl_var name='io_priority'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(0 - 7)
-            </div>
-            <div class="ctrlHolder">
-                <label for="hostname">{tmpl_var name='hostname_txt'}</label>
-                <input name="hostname" id="hostname" value="{tmpl_var name='hostname'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='create_dns_txt'}</p>
-                <div class="multiField">
+        <legend>Template</legend>
+            <div class="form-group">
+                <label for="template_name" class="col-sm-3 control-label">{tmpl_var name='template_name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="template_name" id="template_name" value="{tmpl_var name='template_name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="diskspace" class="col-sm-3 control-label">{tmpl_var name='diskspace_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="diskspace" id="diskspace" value="{tmpl_var name='diskspace'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;GB
+            </div></div>
+            <div class="form-group">
+                <label for="ram" class="col-sm-3 control-label">{tmpl_var name='ram_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="ram" id="ram" value="{tmpl_var name='ram'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;MB
+            </div></div>
+            <div class="form-group">
+                <label for="ram_burst" class="col-sm-3 control-label">{tmpl_var name='ram_burst_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="ram_burst" id="ram_burst" value="{tmpl_var name='ram_burst'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;MB
+            </div></div>
+            <div class="form-group">
+                <label for="cpu_units" class="col-sm-3 control-label">{tmpl_var name='cpu_units_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cpu_units" id="cpu_units" value="{tmpl_var name='cpu_units'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(8 - 500000)
+            </div></div>
+            <div class="form-group">
+                <label for="cpu_num" class="col-sm-3 control-label">{tmpl_var name='cpu_num_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cpu_num" id="cpu_num" value="{tmpl_var name='cpu_num'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(1 - 64)
+            </div></div>
+            <div class="form-group">
+                <label for="cpu_limit" class="col-sm-3 control-label">{tmpl_var name='cpu_limit_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cpu_limit" id="cpu_limit" value="{tmpl_var name='cpu_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(10 - 6400)
+            </div></div>
+            <div class="form-group">
+                <label for="io_priority" class="col-sm-3 control-label">{tmpl_var name='io_priority_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="io_priority" id="io_priority" value="{tmpl_var name='io_priority'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(0 - 7)
+            </div></div>
+            <div class="form-group">
+                <label for="hostname" class="col-sm-3 control-label">{tmpl_var name='hostname_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="hostname" id="hostname" value="{tmpl_var name='hostname'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='create_dns_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='create_dns'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="nameserver">{tmpl_var name='nameserver_txt'}</label>
-                <input name="nameserver" id="nameserver" value="{tmpl_var name='nameserver'}" size="30" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='nameserver_desc_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="nameserver" class="col-sm-3 control-label">{tmpl_var name='nameserver_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="nameserver" id="nameserver" value="{tmpl_var name='nameserver'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='nameserver_desc_txt'}
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="description">{tmpl_var name='description_txt'}</label>
-                <textarea name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea>
+            <div class="form-group">
+                <label for="description" class="col-sm-3 control-label">{tmpl_var name='description_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea></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','vm/openvz_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('vm/openvz_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_template_list.htm b/interface/web/vm/templates/openvz_template_list.htm
index 359af7c..5ec0cb7 100644
--- a/interface/web/vm/templates/openvz_template_list.htm
+++ b/interface/web/vm/templates/openvz_template_list.htm
@@ -1,41 +1,39 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_openvz_template">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('vm/openvz_template_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="vm/openvz_template_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
-                        <th class="tbl_col_template_name" scope="col"><tmpl_var name="template_name_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="template_name"><tmpl_var name="template_name_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_template_name"><input type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','vm/openvz_template_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><input class="form-control" type="text" name="search_template_name" value="{tmpl_var name='search_template_name'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="vm/openvz_template_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('vm/openvz_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_template_name"><a href="#" onclick="loadContent('vm/openvz_template_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_name"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoDelete" href="javascript: del_record('vm/openvz_template_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>
+                        <tr>
+                            <td><a href="#" data-load-content="vm/openvz_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -47,11 +45,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
+                        <td colspan="3"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-    
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_vm_advanced_edit.htm b/interface/web/vm/templates/openvz_vm_advanced_edit.htm
index 0226eda..83bbb3d 100644
--- a/interface/web/vm/templates/openvz_vm_advanced_edit.htm
+++ b/interface/web/vm/templates/openvz_vm_advanced_edit.htm
@@ -1,64 +1,68 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_openvz_vm">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Advanced</legend>
-            <div class="ctrlHolder">
-                <label for="veid">{tmpl_var name='veid_txt'}</label>
-                <input name="veid" id="veid" value="{tmpl_var name='veid'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='create_dns_txt'}</p>
-                <div class="multiField">
+        <legend>Advanced</legend>
+            <div class="form-group">
+                <label for="veid" class="col-sm-3 control-label">{tmpl_var name='veid_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="veid" id="veid" value="{tmpl_var name='veid'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='create_dns_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='create_dns'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="diskspace">{tmpl_var name='diskspace_txt'}</label>
-                <input name="diskspace" id="diskspace" value="{tmpl_var name='diskspace'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /> &nbsp;GB
-            </div>
-            <div class="ctrlHolder">
-                <label for="ram">{tmpl_var name='ram_txt'}</label>
-                <input name="ram" id="ram" value="{tmpl_var name='ram'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /> &nbsp;MB
-            </div>
-            <div class="ctrlHolder">
-                <label for="ram_burst">{tmpl_var name='ram_burst_txt'}</label>
-                <input name="ram_burst" id="ram_burst" value="{tmpl_var name='ram_burst'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /> &nbsp;MB
-            </div>
-            <div class="ctrlHolder">
-                <label for="cpu_units">{tmpl_var name='cpu_units_txt'}</label>
-                <input name="cpu_units" id="cpu_units" value="{tmpl_var name='cpu_units'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(8 - 500000)
-            </div>
-            <div class="ctrlHolder">
-                <label for="cpu_num">{tmpl_var name='cpu_num_txt'}</label>
-                <input name="cpu_num" id="cpu_num" value="{tmpl_var name='cpu_num'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(1 - 64)
-            </div>
-            <div class="ctrlHolder">
-                <label for="cpu_limit">{tmpl_var name='cpu_limit_txt'}</label>
-                <input name="cpu_limit" id="cpu_limit" value="{tmpl_var name='cpu_limit'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(10 - 6400)
-            </div>
-            <div class="ctrlHolder">
-                <label for="io_priority">{tmpl_var name='io_priority_txt'}</label>
-                <input name="io_priority" id="io_priority" value="{tmpl_var name='io_priority'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" />&nbsp;(0 - 7)
-            </div>
-            <div class="ctrlHolder">
-                <label for="nameserver">{tmpl_var name='nameserver_txt'}</label>
-                <input name="nameserver" id="nameserver" value="{tmpl_var name='nameserver'}" size="30" maxlength="255" type="text" class="textInput" />&nbsp;{tmpl_var name='nameserver_desc_txt'}
-            </div>
-            <div class="ctrlHolder">
-                <label for="capability">{tmpl_var name='capability_txt'}</label>
-                <input name="capability" id="capability" value="{tmpl_var name='capability'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-        </fieldset>
+            <div class="form-group">
+                <label for="diskspace" class="col-sm-3 control-label">{tmpl_var name='diskspace_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="diskspace" id="diskspace" value="{tmpl_var name='diskspace'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;GB
+            </div></div>
+            <div class="form-group">
+                <label for="ram" class="col-sm-3 control-label">{tmpl_var name='ram_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="ram" id="ram" value="{tmpl_var name='ram'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;MB
+            </div></div>
+            <div class="form-group">
+                <label for="ram_burst" class="col-sm-3 control-label">{tmpl_var name='ram_burst_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="ram_burst" id="ram_burst" value="{tmpl_var name='ram_burst'}" class="form-control" /></div><div class="col-sm-3 input-sm"> &nbsp;MB
+            </div></div>
+            <div class="form-group">
+                <label for="cpu_units" class="col-sm-3 control-label">{tmpl_var name='cpu_units_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cpu_units" id="cpu_units" value="{tmpl_var name='cpu_units'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(8 - 500000)
+            </div></div>
+            <div class="form-group">
+                <label for="cpu_num" class="col-sm-3 control-label">{tmpl_var name='cpu_num_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cpu_num" id="cpu_num" value="{tmpl_var name='cpu_num'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(1 - 64)
+            </div></div>
+            <div class="form-group">
+                <label for="cpu_limit" class="col-sm-3 control-label">{tmpl_var name='cpu_limit_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="cpu_limit" id="cpu_limit" value="{tmpl_var name='cpu_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(10 - 6400)
+            </div></div>
+            <div class="form-group">
+                <label for="io_priority" class="col-sm-3 control-label">{tmpl_var name='io_priority_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="io_priority" id="io_priority" value="{tmpl_var name='io_priority'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;(0 - 7)
+            </div></div>
+            <div class="form-group">
+                <label for="nameserver" class="col-sm-3 control-label">{tmpl_var name='nameserver_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="nameserver" id="nameserver" value="{tmpl_var name='nameserver'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='nameserver_desc_txt'}
+            </div></div>
+            <div class="form-group">
+                <label for="capability" class="col-sm-3 control-label">{tmpl_var name='capability_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="capability" id="capability" value="{tmpl_var name='capability'}" class="form-control" />
+			</div></div>
+            <div class="form-group">
+                <label for="features" class="col-sm-3 control-label">{tmpl_var name='features_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="features" id="features" value="{tmpl_var name='features'}" class="form-control" />
+			</div></div>
+            <div class="form-group">
+                <label for="iptables" class="col-sm-3 control-label">{tmpl_var name='iptables_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="iptables" id="iptables" value="{tmpl_var name='iptables'}" class="form-control" />
+			</div></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','vm/openvz_vm_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('vm/openvz_vm_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_vm_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_vm_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/vm/templates/openvz_vm_edit.htm b/interface/web/vm/templates/openvz_vm_edit.htm
index 446cd1e..c2e0cb6 100644
--- a/interface/web/vm/templates/openvz_vm_edit.htm
+++ b/interface/web/vm/templates/openvz_vm_edit.htm
@@ -1,107 +1,98 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-<div class="panel panel_openvz_vm">
 
-    <div class="pnl_formsarea">
-        <fieldset class="inlineLabels"><legend>Settings</legend>
+        <legend>Settings</legend>
             <tmpl_if name="is_admin">
-                <div class="ctrlHolder">
+                <div class="form-group">
                     <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled">{tmpl_var name='server_id_txt'}</label>
-                        <select name="server_id_disabled" id="server_id_disabled" class="selectInput" disabled="disabled">
+                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
                             {tmpl_var name='server_id'}
-                        </select>
+                        </select></div>
                         <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
                     <tmpl_else>
-                            <label for="server_id">{tmpl_var name='server_id_txt'}</label>
-                            <select name="server_id" id="server_id" class="selectInput" onChange="loadOptionInto('ip_address','vm/ajax_get_ip.php?server_id='+document.getElementById('server_id').value)">
+                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control" onChange="ISPConfig.loadOptionInto('ip_address','vm/ajax_get_ip.php?server_id='+document.getElementById('server_id').value)">
                                 {tmpl_var name='server_id'}
-                            </select>
+                            </select></div>
                     </tmpl_if>
                 </div>
-                <div class="ctrlHolder">
-                    <label for="client_group_id">{tmpl_var name='client_group_id_txt'}</label>
-                    <select name="client_group_id" id="client_group_id" class="selectInput">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </div>
             </tmpl_if>
             <tmpl_if name="is_reseller">
-                <div class="ctrlHolder">
-                    <label for="client_group_id">{tmpl_var name='client_group_id_txt'}</label>
-                    <select name="client_group_id" id="client_group_id" class="selectInput">
+                <div class="form-group">
+                    <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_group_id_txt'}</label>
+                    <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
                         {tmpl_var name='client_group_id'}
-                    </select>
+                    </select></div>
                 </div>
             </tmpl_if>
             <tmpl_if name="edit_disabled">
-                <div class="ctrlHolder">
-                    <label for="ostemplate_id_disabled">{tmpl_var name='ostemplate_id_txt'}</label>
-                    <select name="ostemplate_id_disabled" id="ostemplate_id_disabled" class="selectInput" disabled="disabled">
+                <div class="form-group">
+                    <label for="ostemplate_id_disabled" class="col-sm-3 control-label">{tmpl_var name='ostemplate_id_txt'}</label>
+                    <div class="col-sm-9"><select name="ostemplate_id_disabled" id="ostemplate_id_disabled" class="form-control" disabled="disabled">
                         {tmpl_var name='ostemplate_id'}
-                    </select>
+                    </select></div>
                 </div>
                 <input type="hidden" name="ostemplate_id" value="{tmpl_var name='ostemplate_id_value'}">
             <tmpl_else>
-                <div class="ctrlHolder">
-                    <label for="ostemplate_id">{tmpl_var name='ostemplate_id_txt'}</label>
-                    <select name="ostemplate_id" id="ostemplate_id" class="selectInput">
+                <div class="form-group">
+                    <label for="ostemplate_id" class="col-sm-3 control-label">{tmpl_var name='ostemplate_id_txt'}</label>
+                    <div class="col-sm-9"><select name="ostemplate_id" id="ostemplate_id" class="form-control">
                         {tmpl_var name='ostemplate_id'}
-                    </select>
+                    </select></div>
                 </div>
             </tmpl_if>
-            <div class="ctrlHolder">
-                <label for="template_id">{tmpl_var name='template_id_txt'}</label>
-                <select name="template_id" id="template_id" class="selectInput">
+            <div class="form-group">
+                <label for="template_id" class="col-sm-3 control-label">{tmpl_var name='template_id_txt'}</label>
+                <div class="col-sm-9"><select name="template_id" id="template_id" class="form-control">
                     {tmpl_var name='template_id_select'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="ip_address">{tmpl_var name='ip_address_txt'}</label>
-                <select name="ip_address" id="ip_address" class="selectInput">
+            <div class="form-group">
+                <label for="ip_address" class="col-sm-3 control-label">{tmpl_var name='ip_address_txt'}</label>
+                <div class="col-sm-9"><select name="ip_address" id="ip_address" class="form-control">
                     {tmpl_var name='ip_address'}
-                </select>
+                </select></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="hostname">{tmpl_var name='hostname_txt'}</label>
-                <input name="hostname" id="hostname" value="{tmpl_var name='hostname'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <label for="vm_password">{tmpl_var name='vm_password_txt'}</label>
-                <input name="vm_password" id="vm_password" value="{tmpl_var name='vm_password'}" size="30" maxlength="255" type="text" class="textInput" />
-            </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='start_boot_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label for="hostname" class="col-sm-3 control-label">{tmpl_var name='hostname_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="hostname" id="hostname" value="{tmpl_var name='hostname'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="vm_password" class="col-sm-3 control-label">{tmpl_var name='vm_password_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="vm_password" id="vm_password" value="{tmpl_var name='vm_password'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='start_boot_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='start_boot'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <p class="label">{tmpl_var name='active_txt'}</p>
-                <div class="multiField">
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
                     {tmpl_var name='active'}
                 </div>
             </div>
-            <div class="ctrlHolder">
-                <label for="active_until_date">{tmpl_var name='active_until_date_txt'}</label>
-                <input name="active_until_date" id="active_until_date" value="{tmpl_var name='active_until_date'}" size="30" maxlength="255" type="text" class="textInput formLengthDate" />
+            <div class="form-group">
+                <label for="active_until_date" class="col-sm-3 control-label">{tmpl_var name='active_until_date_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="active_until_date" id="active_until_date" value="{tmpl_var name='active_until_date'}" class="form-control" data-input-element="date" data-date-format="{tmpl_var name='conf_format_datetime_js'}" /></div></div>
+            <div class="form-group">
+                <label for="description" class="col-sm-3 control-label">{tmpl_var name='description_txt'}</label>
+                <div class="col-sm-9"><textarea class="form-control" name="description" id="description" rows='5' cols='30' style='height:60px;'>{tmpl_var name='description'}</textarea></div>
             </div>
-            <div class="ctrlHolder">
-                <label for="description">{tmpl_var name='description_txt'}</label>
-                <textarea name="description" id="description" rows='5' cols='30' style='height:60px;'>{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','vm/openvz_vm_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('vm/openvz_vm_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
-        </div>
-    </div>
-  
-</div>
-<script language="JavaScript" type="text/javascript">
-    jQuery( "#active_until_date" ).datepicker({ dateFormat: '<tmpl_var name="date_format">', changeMonth: true, changeYear: true, yearRange: '-100:+100', dayNamesMin: ['<tmpl_var name="daynamesmin_su">','<tmpl_var name="daynamesmin_mo">','<tmpl_var name="daynamesmin_tu">','<tmpl_var name="daynamesmin_we">','<tmpl_var name="daynamesmin_th">','<tmpl_var name="daynamesmin_fr">','<tmpl_var name="daynamesmin_sa">'], dayNames: ['<tmpl_var name="daynames_sunday">','<tmpl_var name="daynames_monday">','<tmpl_var name="daynames_tuesday">','<tmpl_var name="daynames_wednesday">','<tmpl_var name="daynames_thursday">','<tmpl_var name="daynames_friday">','<tmpl_var name="daynames_saturday">'], monthNamesShort: ['<tmpl_var name="monthnamesshort_jan">','<tmpl_var name="monthnamesshort_feb">','<tmpl_var name="monthnamesshort_mar">','<tmpl_var name="monthnamesshort_apr">','<tmpl_var name="monthnamesshort_may">','<tmpl_var name="monthnamesshort_jun">','<tmpl_var name="monthnamesshort_jul">','<tmpl_var name="monthnamesshort_aug">','<tmpl_var name="monthnamesshort_sep">','<tmpl_var name="monthnamesshort_oct">','<tmpl_var name="monthnamesshort_nov">','<tmpl_var name="monthnamesshort_dec">'], nextText: '<tmpl_var name="datepicker_nextText">', prevText: '<tmpl_var name="datepicker_prevText">', firstDay: 1 });	
-</script>
\ No newline at end of file
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="vm/openvz_vm_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="vm/openvz_vm_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_vm_list.htm b/interface/web/vm/templates/openvz_vm_list.htm
index d525f38..516b536 100644
--- a/interface/web/vm/templates/openvz_vm_list.htm
+++ b/interface/web/vm/templates/openvz_vm_list.htm
@@ -1,57 +1,55 @@
-<h2><tmpl_var name="list_head_txt"></h2>
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
 
-<div class="panel panel_list_openvz_vm">
 
-    <div class="pnl_toolsarea">
-        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
-            <div class="buttons">
-                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('vm/openvz_vm_edit.php');">
-                    <span>{tmpl_var name="add_new_record_txt"}</span>
-                </button>
-            </div>
-        </fieldset>
-    </div>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+            
+                <button class="btn btn-default formbutton-success" type="button" data-load-content="vm/openvz_vm_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+            
+        
 
-    <div class="pnl_listarea">
-        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
-            <table class="list">
-                <thead>
-                    <tr class="caption">
-                        <th class="tbl_col_veid" scope="col"><tmpl_var name="veid_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_ostemplate_id" scope="col"><tmpl_var name="ostemplate_id_txt"></th>
-                        <th class="tbl_col_template_id" scope="col"><tmpl_var name="template_id_txt"></th>
-                        <th class="tbl_col_hostname" scope="col"><tmpl_var name="hostname_txt"></th>
-                        <th class="tbl_col_ip_address" scope="col"><tmpl_var name="ip_address_txt"></th>
-                        <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+    
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th data-column="veid"><tmpl_var name="veid_txt"></th>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="ostemplate_id"><tmpl_var name="ostemplate_id_txt"></th>
+                        <th data-column="template_id"><tmpl_var name="template_id_txt"></th>
+                        <th data-column="hostname"><tmpl_var name="hostname_txt"></th>
+                        <th data-column="ip_address"><tmpl_var name="ip_address_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
-                    <tr class="filter">
-                        <td class="tbl_col_veid"><input type="text" name="search_veid" value="{tmpl_var name='search_veid'}" /></td>
-                        <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
-                        <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td class="tbl_col_ostemplate_id"><select name="search_ostemplate_id">{tmpl_var name='search_ostemplate_id'}</select></td>
-                        <td class="tbl_col_template_id"><select name="search_template_id">{tmpl_var name='search_template_id'}</select></td>
-                        <td class="tbl_col_hostname"><input type="text" name="search_hostname" value="{tmpl_var name='search_hostname'}" /></td>
-                        <td class="tbl_col_ip_address"><input type="text" name="search_ip_address" value="{tmpl_var name='search_ip_address'}" /></td>
-                        <td class="tbl_col_buttons">
-                            <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','vm/openvz_vm_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    <tr>
+                        <td><input class="form-control" type="text" name="search_veid" value="{tmpl_var name='search_veid'}" /></td>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><select class="form-control" name="search_ostemplate_id">{tmpl_var name='search_ostemplate_id'}</select></td>
+                        <td><select class="form-control" name="search_template_id">{tmpl_var name='search_template_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_hostname" value="{tmpl_var name='search_hostname'}" /></td>
+                        <td><input class="form-control" type="text" name="search_ip_address" value="{tmpl_var name='search_ip_address'}" /></td>
+                        <td class="text-right">
+                            <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="vm/openvz_vm_list.php"><span class="icon icon-filter"></span></button>
                         </td>
                     </tr>
                 </thead>
                 <tbody>
                     <tmpl_loop name="records">
-                        <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td class="tbl_col_veid"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="veid"}</a></td>
-                            <td class="tbl_col_active"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
-                            <td class="tbl_col_server_id"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
-                            <td class="tbl_col_ostemplate_id"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ostemplate_id"}</a></td>
-                            <td class="tbl_col_template_id"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="template_id"}</a></td>
-                            <td class="tbl_col_hostname"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="hostname"}</a></td>
-                            <td class="tbl_col_ip_address"><a href="#" onclick="loadContent('vm/openvz_vm_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ip_address"}</a></td>
-                            <td class="tbl_col_buttons">
-                                <a class="button icons16 icoAction" href="javascript: loadContent('vm/openvz_action.php?id={tmpl_var name='id'}');"><span>Action</span></a>
-                                <a class="button icons16 icoDelete" href="javascript: del_record('vm/openvz_vm_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>
+                        <tr>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="veid"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ostemplate_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_id"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="hostname"}</a></td>
+                            <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
+                            <td class="text-right">
+                                <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="vm/openvz_action.php?id={tmpl_var name='id'}"><span class="icon icon-action"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_vm_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
@@ -63,11 +61,10 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
+                        <td colspan="8"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
-        </fieldset>
-    </div>
-
-</div>
\ No newline at end of file
+</div>
+        
+    
\ No newline at end of file
diff --git a/remoting_client/API-docs/mail_user_backup.html b/remoting_client/API-docs/mail_user_backup.html
new file mode 100644
index 0000000..896ed92
--- /dev/null
+++ b/remoting_client/API-docs/mail_user_backup.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISCPConfig 3 API Functions</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>mail_user_backup(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$action_type</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Adds a new backup / restore task. Please note: <em>$action_type</em> <!-- is either <em>backup_download_mail</em> or --> must be <em>backup_restore_mail</em></p>
+<br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$action_type</span></p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns <em>TRUE</em> if successfull or <em>FALSE</em> if failure.</p>
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/mail_user_backup_list.html b/remoting_client/API-docs/mail_user_backup_list.html
new file mode 100644
index 0000000..9ad9db8
--- /dev/null
+++ b/remoting_client/API-docs/mail_user_backup_list.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISCPConfig 3 API Functions</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>mail_user_backup_list(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Gets list of all available mail backups. If no $primary_id (mail-domain-id) is given, all mail backups available on this server are read.</p>
+<br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id (mail-domain-id)</span></p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns array of all available backups.</p>
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index e0eebb0..917c6ba 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -169,6 +169,8 @@
 <p><a href="mail_user_filter_delete.html" target="content">mail_user_filter_delete</a></p>
 <p><a href="mail_user_filter_get.html" target="content">mail_user_filter_get</a></p>
 <p><a href="mail_user_filter_update.html" target="content">mail_user_filter_update</a></p>
+<p><a href="mail_user_backup_list.html" target="content">mail_user_backup_list</a></p>
+<p><a href="mail_user_backup.html" target="content">mail_user_backup</a></p>
 <p><a href="mail_whitelist_add.html" target="content">mail_whitelist_add</a></p>
 <p><a href="mail_whitelist_delete.html" target="content">mail_whitelist_delete</a></p>
 <p><a href="mail_whitelist_get.html" target="content">mail_whitelist_get</a></p>
@@ -196,6 +198,15 @@
 <h3>S</h3>
 <p><a href="server_get.html" target="content">server_get</a></p>
 <p><a href="server_get_serverid_by_ip.html" target="content">server_get_serverid_by_ip</a></p>
+<p><a href="sites_aps_available_packages_list.html" target="content">sites_aps_available_packages_list</a></p>
+<p><a href="sites_aps_get_package_details.html" target="content">sites_aps_get_package_details</a></p>
+<p><a href="sites_aps_get_package_file.html" target="content">sites_aps_get_package_file</a></p>
+<p><a href="sites_aps_get_package_settings.html" target="content">sites_aps_get_package_settings</a></p>
+<p><a href="sites_aps_install_package.html" target="content">sites_aps_install_package</a></p>
+<p><a href="sites_aps_instance_get.html" target="content">sites_aps_instance_get</a></p>
+<p><a href="sites_aps_instance_delete.html" target="content">sites_aps_instance_delete</a></p>
+<p><a href="sites_aps_instance_settings_get.html" target="content">sites_aps_instance_settings_get</a></p>
+<p><a href="sites_aps_update_package_list.html" target="content">sites_aps_update_package_list</a></p>
 <p><a href="sites_cron_add.html" target="content">sites_cron_add</a></p>
 <p><a href="sites_cron_delete.html" target="content">sites_cron_delete</a></p>
 <p><a href="sites_cron_get.html" target="content">sites_cron_get</a></p>
@@ -226,7 +237,7 @@
 <p><a href="sites_web_domain_get.html" target="content">sites_web_domain_get</a></p>
 <p><a href="sites_web_domain_set_status.html" target="content">sites_web_domain_set_status</a></p>
 <p><a href="sites_web_domain_update.html" target="content">sites_web_domain_update</a></p>
- p><a href="sites_web_domain_backup_list.html" target="content">sites_web_domain_backup_list</a></p>
+<p><a href="sites_web_domain_backup_list.html" target="content">sites_web_domain_backup_list</a></p>
 <p><a href="sites_web_domain_backup.html" target="content">sites_web_domain_backup</a></p>
 <p><a href="sites_web_subdomain_add.html" target="content">sites_web_subdomain_add</a></p>
 <p><a href="sites_web_subdomain_delete.html" target="content">sites_web_subdomain_delete</a></p>
diff --git a/remoting_client/API-docs/sites_aps_available_packages_list.html b/remoting_client/API-docs/sites_aps_available_packages_list.html
new file mode 100644
index 0000000..1d069de
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_available_packages_list.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_available_packages_list(<span class="var">$session_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Reads all available packages with state PACKAGE_ENABLED. If set param all_packages to true, also includes PACKAGE_LOCKED.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> all_packages&nbsp;&nbsp;(<span class="paratype">boolean</span>) </p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns array with all selected package records.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_get_package_details.html b/remoting_client/API-docs/sites_aps_get_package_details.html
new file mode 100644
index 0000000..56049d8
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_get_package_details.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_get_package_details(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Gets all possible details for selected package.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns array with all details of selected package.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_get_package_file.html b/remoting_client/API-docs/sites_aps_get_package_file.html
new file mode 100644
index 0000000..9a6472d
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_get_package_file.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_get_package_file(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$filename</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Gets the file with given name (like screenshots or icon) of the selected package. Use sites_aps_get_package_details to get all available files of this package.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$filename</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns base64_encoded file content of selected file.<br />Use the followoing example code to save file content over remote api:<br /><span class="var">file_put_contents($file, base64_decode(sites_aps_get_package_file($session_id, $primary_id, $filename)));</span></p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_get_package_settings.html b/remoting_client/API-docs/sites_aps_get_package_settings.html
new file mode 100644
index 0000000..4a47c9b
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_get_package_settings.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_get_package_settings(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Gets all possible settings for selected package.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns array with all settings of selected package.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_install_package.html b/remoting_client/API-docs/sites_aps_install_package.html
new file mode 100644
index 0000000..340dc82
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_install_package.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_install_package(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Starts installation of the selected package in given main_domains webfolder.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> main_domain&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>) </p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns new instance id or false.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_instance_delete.html b/remoting_client/API-docs/sites_aps_instance_delete.html
new file mode 100644
index 0000000..654a3c5
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_instance_delete.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_instance_delete(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Starts deletion of the selected APS instance. If param keep_database is set true, database will not be deleted.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> keep_database&nbsp;&nbsp;(<span class="paratype">boolean</span>) </p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns true if deletion is started.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_instance_get.html b/remoting_client/API-docs/sites_aps_instance_get.html
new file mode 100644
index 0000000..64bfbe5
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_instance_get.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_instance_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Gets record of given instance id.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns record of APS instance.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_instance_settings_get.html b/remoting_client/API-docs/sites_aps_instance_settings_get.html
new file mode 100644
index 0000000..bf793d8
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_instance_settings_get.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_instance_settings_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Gets record of given instance ids settings.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns record of APS instance settings.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/sites_aps_update_package_list.html b/remoting_client/API-docs/sites_aps_update_package_list.html
new file mode 100644
index 0000000..e581a72
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_update_package_list.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_update_package_list(<span class="var">$session_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Update available package list. Starts the ApsCrawler in server mode. May take a while.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> always true</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/examples/dns_a_add.php b/remoting_client/examples/dns_a_add.php
index 6bcb33c..b669daa 100644
--- a/remoting_client/examples/dns_a_add.php
+++ b/remoting_client/examples/dns_a_add.php
@@ -23,7 +23,7 @@
 		'type' => 'a',
 		'data' => '192.168.1.88',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_aaaa_add.php b/remoting_client/examples/dns_aaaa_add.php
index 4ee460b..eff4148 100644
--- a/remoting_client/examples/dns_aaaa_add.php
+++ b/remoting_client/examples/dns_aaaa_add.php
@@ -23,7 +23,7 @@
 		'type' => 'aaaa',
 		'data' => '3ffe:b00:c18:3::a',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_alias_add.php b/remoting_client/examples/dns_alias_add.php
index 5b1c684..dd8a4da 100644
--- a/remoting_client/examples/dns_alias_add.php
+++ b/remoting_client/examples/dns_alias_add.php
@@ -23,7 +23,7 @@
 		'type' => 'alias',
 		'data' => 'hostmachine',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_cname_add.php b/remoting_client/examples/dns_cname_add.php
index 2d70ca6..7731a54 100644
--- a/remoting_client/examples/dns_cname_add.php
+++ b/remoting_client/examples/dns_cname_add.php
@@ -23,7 +23,7 @@
 		'type' => 'cname',
 		'data' => 'hostmachine',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_hinfo_add.php b/remoting_client/examples/dns_hinfo_add.php
index a0a8c47..106c790 100644
--- a/remoting_client/examples/dns_hinfo_add.php
+++ b/remoting_client/examples/dns_hinfo_add.php
@@ -23,7 +23,7 @@
 		'type' => 'hinfo',
 		'data' => '"Pentium Pro" Linux',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_mx_add.php b/remoting_client/examples/dns_mx_add.php
index b1e9617..d083821 100644
--- a/remoting_client/examples/dns_mx_add.php
+++ b/remoting_client/examples/dns_mx_add.php
@@ -23,7 +23,7 @@
 		'type' => 'mx',
 		'data' => 'mail',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_ns_add.php b/remoting_client/examples/dns_ns_add.php
index d650d2a..381041a 100644
--- a/remoting_client/examples/dns_ns_add.php
+++ b/remoting_client/examples/dns_ns_add.php
@@ -23,7 +23,7 @@
 		'type' => 'ns',
 		'data' => 'ns1',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_ptr_add.php b/remoting_client/examples/dns_ptr_add.php
index 6d4ccab..a2dbdf5 100644
--- a/remoting_client/examples/dns_ptr_add.php
+++ b/remoting_client/examples/dns_ptr_add.php
@@ -23,7 +23,7 @@
 		'type' => 'ptr',
 		'data' => 'webmaster.test.int.',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_rp_add.php b/remoting_client/examples/dns_rp_add.php
index a30b703..27329bb 100644
--- a/remoting_client/examples/dns_rp_add.php
+++ b/remoting_client/examples/dns_rp_add.php
@@ -23,7 +23,7 @@
 		'type' => 'rp',
 		'data' => 'webmaster.test.int. contactinfo.test.int',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_srv_add.php b/remoting_client/examples/dns_srv_add.php
index 75c7df4..6270db7 100644
--- a/remoting_client/examples/dns_srv_add.php
+++ b/remoting_client/examples/dns_srv_add.php
@@ -23,7 +23,7 @@
 		'type' => 'srv',
 		'data' => '0 9 server.test.int.',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_txt_add.php b/remoting_client/examples/dns_txt_add.php
index 4ce025e..90f0609 100644
--- a/remoting_client/examples/dns_txt_add.php
+++ b/remoting_client/examples/dns_txt_add.php
@@ -23,7 +23,7 @@
 		'type' => 'txt',
 		'data' => 'any text can go here',
 		'aux' => '0',
-		'ttl' => '86400',
+		'ttl' => '3600',
 		'active' => 'y',
 		'stamp' => 'CURRENT_TIMESTAMP',
 		'serial' => '1',
diff --git a/remoting_client/examples/dns_zone_add.php b/remoting_client/examples/dns_zone_add.php
index 6772409..62937c0 100644
--- a/remoting_client/examples/dns_zone_add.php
+++ b/remoting_client/examples/dns_zone_add.php
@@ -25,8 +25,8 @@
 		'refresh' => '28800',
 		'retry' => '7200',
 		'expire' => '604800',
-		'minimum' => '86400',
-		'ttl' => '86400',
+		'minimum' => '3600',
+		'ttl' => '3600',
 		'active' => 'y',
 		'xfer' => '',
 		'also_notify' => '',
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index bc6c6bc..7d6d665 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -10,11 +10,17 @@
 <VirtualHost {tmpl_var name='apps_vhost_ip'}:{tmpl_var name='apps_vhost_port'}>
   ServerAdmin webmaster@localhost
   {tmpl_var name='apps_vhost_servername'}
-  
+
   <FilesMatch "\.ph(p3?|tml)$">
     SetHandler None
   </FilesMatch>
-  
+
+  {tmpl_if name="enable_spdy" op="==" value="y"}
+  <IfModule spdy_module>
+	SpdyEnabled on
+  </IfModule>
+  {/tmpl_if}
+
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
diff --git a/server/conf/bastille-firewall.cfg.master b/server/conf/bastille-firewall.cfg.master
index b2b6536..9080f4e 100644
--- a/server/conf/bastille-firewall.cfg.master
+++ b/server/conf/bastille-firewall.cfg.master
@@ -75,7 +75,7 @@
 # use the "\" continuation character (so Bastille can change the
 # values if it is run more than once)
 TRUSTED_IFACES="lo"                                        # MINIMAL/SAFEST
-PUBLIC_IFACES="eth+ ppp+ slip+ venet+ bond+"                        # SAFEST
+PUBLIC_IFACES="eth+ ppp+ slip+ venet+ bond+ en+"                        # SAFEST
 INTERNAL_IFACES=""                                # SAFEST
 
 
diff --git a/server/conf/hhvm_monit.master b/server/conf/hhvm_monit.master
new file mode 100644
index 0000000..91642c5
--- /dev/null
+++ b/server/conf/hhvm_monit.master
@@ -0,0 +1,3 @@
+check process hhvm_{SYSTEM_USER} with pidfile /var/run/hhvm/hhvm_{SYSTEM_USER}.pid
+   start program = "/etc/init.d/hhvm_{SYSTEM_USER} restart"
+   stop  program = "/etc/init.d/hhvm_{SYSTEM_USER} stop"
\ No newline at end of file
diff --git a/server/conf/hhvm_starter.master b/server/conf/hhvm_starter.master
index 57f9324..a4cac46 100644
--- a/server/conf/hhvm_starter.master
+++ b/server/conf/hhvm_starter.master
@@ -31,17 +31,35 @@
 		esac
 	fi
 	
+	if [[ -S /var/run/mysqld/mysqld.sock && ! -S /tmp/mysql.sock ]] ; then
+		ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock ;
+	fi
+	
 	umask 017
 	sudo -u {SYSTEM_USER} touch /var/run/hhvm/hhvm_{SYSTEM_USER}.pid
+	
+	BASEINIFILE=""
+	if [[ -e "/etc/hhvm/php.ini" ]] ; then
+		BASEINIFILE="--config /etc/hhvm/php.ini" ;
+	fi
+	
 	INIFILE=""
 	if [[ -e "/var/www/conf/{SYSTEM_USER}/php.ini" ]] ; then
-		INIFILE="-vServer.IniFile=/var/www/conf/{SYSTEM_USER}/php.ini" ;
+		INIFILE="--config /var/www/conf/{SYSTEM_USER}/php.ini" ;
 	elif [[ -e "/etc/php5/hhvm/php.ini" ]] ; then
-		INIFILE="-vServer.IniFile=/etc/php5/hhvm/php.ini" ;
+		INIFILE="--config /etc/php5/hhvm/php.ini" ;
+	elif [[ -e "/etc/php5/fpm/php.ini" ]] ; then
+		INIFILE="--config /etc/php5/fpm/php.ini" ;
 	elif [[ -e "/etc/php5/cgi/php.ini" ]] ; then
-		INIFILE="-vServer.IniFile=/etc/php5/cgi/php.ini" ;
+		INIFILE="--config /etc/php5/cgi/php.ini" ;
 	fi
-	/usr/bin/hhvm --mode daemon -vServer.Type=fastcgi --user {SYSTEM_USER} -vServer.FileSocket=/var/run/hhvm/hhvm.{SYSTEM_USER}.sock -vLog.Level=Warning -vLog.UseLogFile=false -vRepo.Central.Path=/var/run/hhvm/hhvm.{SYSTEM_USER}.hhbc -vServer.FixPathInfo=true $INIFILE -vPidFile=/var/run/hhvm/hhvm_{SYSTEM_USER}.pid & echo $! > /var/run/hhvm/hhvm_{SYSTEM_USER}.pid
+	
+	CUSTOMINIFILE=""
+	if [[ -e "/etc/hhvm/{SYSTEM_USER}.ini" ]] ; then
+		CUSTOMINIFILE="--config /etc/hhvm/{SYSTEM_USER}.ini" ;
+	fi
+	
+	/usr/bin/hhvm --mode daemon -vServer.Type=fastcgi --user {SYSTEM_USER} -vServer.FileSocket=/var/run/hhvm/hhvm.{SYSTEM_USER}.sock -vLog.Level=Warning -vLog.UseLogFile=false -vRepo.Central.Path=/var/run/hhvm/hhvm.{SYSTEM_USER}.hhbc -vServer.FixPathInfo=false $BASEINIFILE $INIFILE $CUSTOMINIFILE -vPidFile=/var/run/hhvm/hhvm_{SYSTEM_USER}.pid & echo $! > /var/run/hhvm/hhvm_{SYSTEM_USER}.pid
 }
 
 do_stop()
diff --git a/server/conf/metronome_conf_global.master b/server/conf/metronome_conf_global.master
new file mode 100644
index 0000000..71920ca
--- /dev/null
+++ b/server/conf/metronome_conf_global.master
@@ -0,0 +1,48 @@
+pidfile = "/var/run/metronome/metronome.pid";
+metronome_max_files_soft = 200000;
+metronome_max_files_hard = 300000;
+plugin_paths = {
+        "/usr/lib/metronome/isp-modules",
+};
+use_libevent = true;
+log = {
+        debug = "/var/log/metronome/metronome.dbg",
+        info = "/var/log/metronome/metronome.log",
+        error = "/var/log/metronome/metronome.err",
+};
+use_ipv6 = {tmpl_var name='ipv6'};
+http_ports = {
+        {tmpl_var name='port_http'},
+};
+https_ports = {
+        {tmpl_var name='port_https'},
+};
+pastebin_ports = {
+        {tmpl_var name='port_pastebin'},
+};
+bosh_ports = {
+        {tmpl_var name='port_bosh'},
+};
+admins = {
+{tmpl_var name='server_admins'}
+};
+modules_enabled = {
+{tmpl_var name='modules_enabled'}
+};
+modules_disabled = {
+};
+bosh_max_inactivity = {tmpl_var name='bosh_timeout'};
+consider_bosh_secure = true;
+cross_domain_bosh = true;
+allow_registration = true;
+-- TODO generate ssl key during setup
+ssl = {
+        key = "/etc/metronome/certs/localhost.key",
+        certificate = "/etc/metronome/certs/localhost.cert",
+};
+c2s_require_encryption = false;
+s2s_secure = true;
+s2s_insecure_domains = {
+        "gmail.com",
+};
+authentication = "internal_plain";
\ No newline at end of file
diff --git a/server/conf/metronome_conf_host.master b/server/conf/metronome_conf_host.master
new file mode 100644
index 0000000..179d533
--- /dev/null
+++ b/server/conf/metronome_conf_host.master
@@ -0,0 +1,135 @@
+VirtualHost "{tmpl_var name='domain'}"
+    enabled = {tmpl_var name='active'};
+    authentication = "external";
+    external_auth_command = "/usr/lib/metronome/isp-modules/mod_auth_external/authenticate_isp.sh";
+    allow_registration = {tmpl_var name='public_registration'};
+    <tmpl_if name='registration_url' op='!=' value=''>
+        registration_url = "{tmpl_var name='registration_url'}";
+        registration_text = "{tmpl_var name='registration_message'}";
+    </tmpl_if>
+        no_registration_whitelist = true;
+
+        modules_enabled = {
+                "roster",
+                "private",
+                "vcard",
+                "privacy",
+                "pep",
+<tmpl_if name='public_registration' op='==' value='true'>
+                "register",
+<tmpl_elseif name='registration_url' op='!=' value=''>
+                "register_redirect",
+</tmpl_if>
+                "admin_adhoc",
+        };
+        disco_items = {
+<tmpl_if name='use_muc' op='==' value='true'>
+                {
+                        "muc.{tmpl_var name='domain'}",
+                        "{tmpl_var name='muc_name'}",
+                },
+</tmpl_if>
+<tmpl_if name='use_pubsub' op='==' value='true'>
+                {
+                        "pubsub.{tmpl_var name='domain'}",
+                        "{tmpl_var name='domain'} Publish/Subscribe",
+                },
+</tmpl_if>
+<tmpl_if name='use_proxy' op='==' value='true'>
+                {
+                        "proxy.{tmpl_var name='domain'}",
+                        "{tmpl_var name='domain'} Bytestream Proxy",
+                },
+</tmpl_if>
+<tmpl_if name='use_vjud' op='==' value='true'>
+                {
+                        "vjud.{tmpl_var name='domain'}",
+                        "{tmpl_var name='domain'} User Directory",
+                },
+</tmpl_if>
+        };
+
+        admins = {
+{tmpl_var name='domain_admins'}
+        };
+<tmpl_if name='ssl_cert' op='==' value='true'>
+        ssl = {
+                key = "/etc/metronome/certs/{tmpl_var name='domain'}.key",
+                certificate = "/etc/metronome/certs/{tmpl_var name='domain'}.cert",
+        };
+</tmpl_if>
+
+<tmpl_if name='use_proxy' op='==' value='true'>
+VirtualHost "anon.{tmpl_var name='domain'}"
+        enabled = true;
+        authentication = "anonymous";
+        allow_anonymous_multiresourcing = true;
+        anonymous_jid_gentoken = "{tmpl_var name='domain'} Anonymous User";
+        admins = {
+        };
+</tmpl_if>
+
+
+<tmpl_if name='use_muc' op='==' value='true'>
+Component "muc.{tmpl_var name='domain'}" "muc"
+        modules_enabled = {
+                "muc_limits",
+                "muc_log",
+<tmpl_if name='use_archive' op='==' value='true'>
+                "muc_log_http",
+</tmpl_if>
+<tmpl_if name='use_pastebin' op='==' value='true'>
+                "pastebin",
+</tmpl_if>
+        };
+        muc_event_rate = 0.7;
+        muc_burst_factor = 13;
+        muc_log_presences = false;
+<tmpl_if name='use_archive' op='==' value='true'>
+        muc_log_http_config = {
+                show_join = {tmpl_var name='archive_join'},
+                show_status = {tmpl_var name='archive_status'},
+                theme = "metronome",
+                url_base = "logs",
+        };
+</tmpl_if>
+<tmpl_if name='use_pastebin' op='==' value='true'>
+        pastebin_path = "/pastes/";
+        pastebin_expire_after = {tmpl_var name='pastebin_expire'};
+        pastebin_trigger = "{tmpl_var name='pastebin_trigger'}";
+</tmpl_if>
+        name = "{tmpl_var name='muc_name'}";
+        restrict_room_creation = "{tmpl_var name='muc_restrict_room_creation'}";
+        admins = {
+{tmpl_var name='muc_admins'}
+        };
+</tmpl_if>
+
+
+<tmpl_if name='use_pubsub' op='==' value='true'>
+Component "pubsub.{tmpl_var name='domain'}" "pubsub"
+        name = "{tmpl_var name='domain'} Publish/Subscribe";
+        unrestricted_node_creation = false;
+</tmpl_if>
+
+<tmpl_if name='use_proxy' op='==' value='true'>
+Component "proxy.{tmpl_var name='domain'}" "proxy65"
+        proxy65_acl = {
+                "{tmpl_var name='domain'}",
+        };
+        proxy65_interfaces = {
+                "*",
+                "::",
+        };
+        proxy65_ports = {
+                5000,
+        };
+</tmpl_if>
+
+
+<tmpl_if name='use_vjud' op='==' value='true'>
+Component "vjud.{tmpl_var name='domain'}" "vjud"
+        ud_disco_name = "{tmpl_var name='domain'} User Directory";
+        synchronize_to_host_vcards = "{tmpl_var name='domain'}";
+        vjud_mode = "{tmpl_var name='vjud_opt_mode'}";
+</tmpl_if>
\ No newline at end of file
diff --git a/server/conf/metronome_conf_main.master b/server/conf/metronome_conf_main.master
new file mode 100644
index 0000000..1103ca4
--- /dev/null
+++ b/server/conf/metronome_conf_main.master
@@ -0,0 +1,3 @@
+Include "/etc/metronome/global.cfg.lua"
+Include "/etc/metronome/hosts/*.lua"
+Include "/etc/metronome/status.cfg.lua"
diff --git a/server/conf/metronome_conf_ssl.master b/server/conf/metronome_conf_ssl.master
new file mode 100644
index 0000000..73ab3a8
--- /dev/null
+++ b/server/conf/metronome_conf_ssl.master
@@ -0,0 +1,72 @@
+oid_section = new_oids
+
+[ new_oids ]
+
+# RFC 3920 section 5.1.1 defines this OID
+xmppAddr = 1.3.6.1.5.5.7.8.5
+
+# RFC 4985 defines this OID
+SRVName  = 1.3.6.1.5.5.7.8.7
+
+[ req ]
+
+default_bits       = 4096
+default_keyfile    = {tmpl_var name='domain'}.key
+distinguished_name = distinguished_name
+req_extensions     = v3_extensions
+x509_extensions    = v3_extensions
+
+# ask about the DN?
+prompt = no
+
+[ distinguished_name ]
+
+commonName             = {tmpl_var name='domain'}
+countryName            = {tmpl_var name='ssl_country'}
+localityName           = {tmpl_var name='ssl_locality'}
+organizationName       = {tmpl_var name='ssl_organisation'}
+organizationalUnitName = {tmpl_var name='ssl_organisation_unit'}
+emailAddress           = {tmpl_var name='ssl_email'}
+
+[ v3_extensions ]
+
+# for certificate requests (req_extensions)
+# and self-signed certificates (x509_extensions)
+
+basicConstraints = CA:FALSE
+keyUsage         = digitalSignature,keyEncipherment
+extendedKeyUsage = serverAuth,clientAuth
+subjectAltName   = @subject_alternative_name
+
+[ subject_alternative_name ]
+
+# See http://tools.ietf.org/html/draft-ietf-xmpp-3920bis#section-13.7.1.2 for more info.
+
+DNS.0       =                                           {tmpl_var name='domain'}
+otherName.0 =                 xmppAddr;FORMAT:UTF8,UTF8:{tmpl_var name='domain'}
+otherName.1 =            SRVName;IA5STRING:_xmpp-client.{tmpl_var name='domain'}
+otherName.2 =            SRVName;IA5STRING:_xmpp-server.{tmpl_var name='domain'}
+
+DNS.1       =                                       muc.{tmpl_var name='domain'}
+otherName.3 =             xmppAddr;FORMAT:UTF8,UTF8:muc.{tmpl_var name='domain'}
+otherName.4 =        SRVName;IA5STRING:_xmpp-server.muc.{tmpl_var name='domain'}
+
+DNS.2       =                                    pubsub.{tmpl_var name='domain'}
+otherName.5 =          xmppAddr;FORMAT:UTF8,UTF8:pubsub.{tmpl_var name='domain'}
+otherName.6 =     SRVName;IA5STRING:_xmpp-server.pubsub.{tmpl_var name='domain'}
+
+DNS.3       =                                      anon.{tmpl_var name='domain'}
+otherName.7 =            xmppAddr;FORMAT:UTF8,UTF8:anon.{tmpl_var name='domain'}
+otherName.8 =       SRVName;IA5STRING:_xmpp-server.anon.{tmpl_var name='domain'}
+
+DNS.4       =                                      xmpp.{tmpl_var name='domain'}
+otherName.9 =            xmppAddr;FORMAT:UTF8,UTF8:xmpp.{tmpl_var name='domain'}
+otherName.10=       SRVName;IA5STRING:_xmpp-server.xmpp.{tmpl_var name='domain'}
+
+DNS.5       =                                     proxy.{tmpl_var name='domain'}
+otherName.11=           xmppAddr;FORMAT:UTF8,UTF8:proxy.{tmpl_var name='domain'}
+otherName.12=      SRVName;IA5STRING:_xmpp-server.proxy.{tmpl_var name='domain'}
+
+DNS.6       =                                      vjud.{tmpl_var name='domain'}
+otherName.13=            xmppAddr;FORMAT:UTF8,UTF8:vjud.{tmpl_var name='domain'}
+otherName.14=       SRVName;IA5STRING:_xmpp-server.vjud.{tmpl_var name='domain'}
\ No newline at end of file
diff --git a/server/conf/metronome_conf_status.master b/server/conf/metronome_conf_status.master
new file mode 100644
index 0000000..daa8205
--- /dev/null
+++ b/server/conf/metronome_conf_status.master
@@ -0,0 +1,12 @@
+Component "xmpp.{tmpl_var name='domain'}" "http"
+        modules_enabled = {
+                "server_status",
+                "webpresence"
+        };
+        server_status_basepath = "/xmppd/";
+        server_status_show_hosts = {
+{tmpl_var name='status_hosts'}
+        };
+        server_status_show_comps = {
+{tmpl_var name='status_comps'}
+        };
\ No newline at end of file
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 222bf29..040af21 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -5,10 +5,10 @@
 </tmpl_if>
 		
 <tmpl_if name='ssl_enabled'>
-        listen <tmpl_var name='ip_address'>:443 ssl;
+        listen <tmpl_var name='ip_address'>:443 ssl{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:443 ssl;
+        listen [<tmpl_var name='ipv6_address'>]:443 ssl{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 </tmpl_if>
         ssl_certificate <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.crt;
         ssl_certificate_key <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.key;
@@ -192,6 +192,54 @@
         <tmpl_var name='nginx_directive'>
 </tmpl_loop>
 
+<tmpl_if name='enable_pagespeed' op='==' value='y'>
+        pagespeed on;
+        pagespeed FileCachePath /var/ngx_pagespeed_cache;
+        <tmpl_if name='ssl_enabled'>pagespeed FetchHttps enable,allow_self_signed;</tmpl_if>
+
+
+        # let's speed up PageSpeed by storing it in the super duper fast memcached
+        pagespeed MemcachedThreads 1;
+        pagespeed MemcachedServers "localhost:11211";
+
+        # Filter settings
+        pagespeed RewriteLevel CoreFilters;
+        pagespeed EnableFilters collapse_whitespace,remove_comments;
+
+        #  Ensure requests for pagespeed optimized resources go to the pagespeed
+        #  handler and no extraneous headers get set.
+        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
+                add_header "" "";
+                access_log off;
+        }
+        location ~ "^/ngx_pagespeed_static/" {
+                access_log off;
+        }
+        location ~ "^/ngx_pagespeed_beacon$" {
+                access_log off;
+        }
+        location /ngx_pagespeed_statistics {
+                allow 127.0.0.1;
+                deny all;
+                access_log off;
+        }
+        location /ngx_pagespeed_global_statistics {
+                allow 127.0.0.1;
+                deny all;
+                access_log off;
+        }
+        location /ngx_pagespeed_message {
+                allow 127.0.0.1;
+                deny all;
+                access_log off;
+        }
+        location /pagespeed_console {
+                allow 127.0.0.1;
+                deny all;
+                access_log off;
+        }
+</tmpl_if>
+
 <tmpl_loop name="basic_auth_locations">
         location <tmpl_var name='htpasswd_location'> { ##merge##
                 auth_basic "Members Only";
@@ -242,4 +290,4 @@
         }
 </tmpl_if>
 }
-</tmpl_loop>
\ No newline at end of file
+</tmpl_loop>
diff --git a/server/conf/php-cgi-starter.master b/server/conf/php-cgi-starter.master
index be30993..03d0554 100644
--- a/server/conf/php-cgi-starter.master
+++ b/server/conf/php-cgi-starter.master
@@ -4,6 +4,10 @@
 export PHPRC="<tmpl_var name='php_ini_path'>"
 </tmpl_if>
 
+export TMP=<tmpl_var name='document_root'>/tmp
+export TMPDIR=<tmpl_var name='document_root'>/tmp
+export TEMP=<tmpl_var name='document_root'>/tmp
+
 exec <tmpl_var name='php_cgi_bin'> \
 -d open_basedir=<tmpl_var name='open_basedir'> \
 -d upload_tmp_dir=<tmpl_var name='document_root'>/tmp \
diff --git a/server/conf/php-fcgi-starter.master b/server/conf/php-fcgi-starter.master
index 92edf86..679f1b2 100644
--- a/server/conf/php-fcgi-starter.master
+++ b/server/conf/php-fcgi-starter.master
@@ -9,6 +9,9 @@
 # export PHP_FCGI_CHILDREN
 PHP_FCGI_MAX_REQUESTS=<tmpl_var name='php_fcgi_max_requests'>
 export PHP_FCGI_MAX_REQUESTS
+export TMP=<tmpl_var name='document_root'>/tmp
+export TMPDIR=<tmpl_var name='document_root'>/tmp
+export TEMP=<tmpl_var name='document_root'>/tmp
 exec <tmpl_var name='php_fcgi_bin'> \
 <tmpl_if name="security_level" op="==" value="20"> -d open_basedir="<tmpl_var name='open_basedir'>" \
 -d disable_functions="" \
diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master
index 7f5c8e1..d7a3478 100644
--- a/server/conf/php_fpm_pool.conf.master
+++ b/server/conf/php_fpm_pool.conf.master
@@ -28,6 +28,10 @@
 
 chdir = /
 
+env[TMP] = <tmpl_var name='document_root'>/tmp
+env[TMPDIR] = <tmpl_var name='document_root'>/tmp
+env[TEMP] = <tmpl_var name='document_root'>/tmp
+
 <tmpl_if name='security_level' op='==' value='20'>
 <tmpl_var name='enable_php_open_basedir'>php_admin_value[open_basedir] = <tmpl_var name='php_open_basedir'>
 php_admin_value[session.save_path] = <tmpl_var name='document_root'>/tmp
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 955b18a..279cbc5 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -53,11 +53,21 @@
 <tmpl_if name='ssl_enabled'>
 		SSLEngine on
 		SSLProtocol All -SSLv2 -SSLv3
+		SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
+		SSLHonorCipherOrder     on
+		<IfModule mod_headers.c>
+		Header always add Strict-Transport-Security "max-age=15768000"
+		</IfModule>
 		SSLCertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.crt
 		SSLCertificateKeyFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.key
 <tmpl_if name='has_bundle_cert'>
 		<tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
 		SSLCertificateChainFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.bundle
+		</tmpl_if>
+		<tmpl_if name='apache_version' op='>=' value='2.4' format='version'>
+		SSLUseStapling on
+		SSLStaplingResponderTimeout 5
+		SSLStaplingReturnResponderErrors off
 		</tmpl_if>
 </tmpl_if>
 </tmpl_if>
@@ -204,6 +214,9 @@
 <tmpl_if name='php' op='==' value='mod'>
 		# mod_php enabled
 		AddType application/x-httpd-php .php .php3 .php4 .php5
+		SetEnv TMP <tmpl_var name='document_root'>/tmp
+		SetEnv TMPDIR <tmpl_var name='document_root'>/tmp
+		SetEnv TEMP <tmpl_var name='document_root'>/tmp
 		php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fwebmaster@<tmpl_var name='domain'>"
 		php_admin_value upload_tmp_dir <tmpl_var name='document_root'>/tmp
 		php_admin_value session.save_path <tmpl_var name='document_root'>/tmp
@@ -336,13 +349,13 @@
 				Alias /php5-fcgi {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
 <tmpl_if name='use_tcp'>
                 FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization
+                <IfModule mod_proxy_fcgi.c>
+			ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
+                </IfModule>
 </tmpl_if>
 <tmpl_if name='use_socket'>
                 FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket <tmpl_var name='fpm_socket'> -pass-header Authorization
 </tmpl_if>
-		</IfModule>
-		<IfModule mod_proxy_fcgi.c>
-			ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
 		</IfModule>
 </tmpl_if>
 
diff --git a/server/cron.php b/server/cron.php
index 7a43d04..c197da9 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -74,7 +74,7 @@
 			unset($cronjob);
 			continue;
 		}
-		print 'Included ' . $class_name . ' from ' . $file_path . ' -> will now run job.' . "\n";
+		print 'Included ' . $class_name . ' from ' . $path . '/' . $f . ' -> will now run job.' . "\n";
 
 		$cronjob->run();
 
diff --git a/server/cron.sh b/server/cron.sh
index 4aff859..3670e68 100644
--- a/server/cron.sh
+++ b/server/cron.sh
@@ -10,4 +10,8 @@
 fi
 
 cd /usr/local/ispconfig/server
-/usr/bin/php -q /usr/local/ispconfig/server/cron.php
+/usr/bin/php -q \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d open_basedir= \
+    /usr/local/ispconfig/server/cron.php
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index a9d47a5..dd8be5a 100755
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -51,7 +51,7 @@
 					*/
 
 			if($conf['dbmaster_host'] != '' && ($conf['dbmaster_host'] != $conf['db_host'] || ($conf['dbmaster_host'] == $conf['db_host'] && $conf['dbmaster_database'] != $conf['db_database']))) {
-				$this->dbmaster = new db($conf['dbmaster_host'], $conf['dbmaster_user'], $conf['dbmaster_password'], $conf['dbmaster_database']);
+				$this->dbmaster = new db($conf['dbmaster_host'], $conf['dbmaster_user'], $conf['dbmaster_password'], $conf['dbmaster_database'], $conf['dbmaster_port']);
 			} else {
 				$this->dbmaster = $this->db;
 			}
@@ -151,19 +151,18 @@
 			if(isset($this->dbmaster)) {
 				$server_id = $conf['server_id'];
 				$loglevel = $priority;
-				$tstamp = time();
-				$message = $this->dbmaster->quote($msg);
+				$message = $msg;
 				$datalog_id = (isset($this->modules->current_datalog_id) && $this->modules->current_datalog_id > 0)?$this->modules->current_datalog_id:0;
 				if($datalog_id > 0) {
-					$tmp_rec = $this->dbmaster->queryOneRecord("SELECT count(syslog_id) as number FROM sys_log WHERE datalog_id = $datalog_id AND loglevel = ".LOGLEVEL_ERROR);
+					$tmp_rec = $this->dbmaster->queryOneRecord("SELECT count(syslog_id) as number FROM sys_log WHERE datalog_id = ? AND loglevel = ?", $datalog_id, LOGLEVEL_ERROR);
 					//* Do not insert duplicate errors into the web log.
 					if($tmp_rec['number'] == 0) {
-						$sql = "INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES ('$server_id',$datalog_id,'$loglevel','$tstamp','$message')";
-						$this->dbmaster->query($sql);
+						$sql = "INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES (?, ?, ?, UNIX_TIMESTAMP(), ?)";
+						$this->dbmaster->query($sql, $server_id, $datalog_id, $loglevel, $message);
 					}
 				} else {
-					$sql = "INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES ('$server_id',0,'$loglevel','$tstamp','$message')";
-					$this->dbmaster->query($sql);
+					$sql = "INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES (?, 0, ?, UNIX_TIMESTAMP(), ?)";
+					$this->dbmaster->query($sql, $server_id, $loglevel, $message);
 				}
 			}
 
diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 089c7ab..5270a5a 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -259,18 +259,15 @@
 
 		// Get the domain name to use for the installation
 		// Would be possible in one query too, but we use 2 for easier debugging
-		$main_domain = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings
-            WHERE name = 'main_domain' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$main_domain = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_domain' AND instance_id = ?", $task['instance_id']);
 		$this->domain = $main_domain['value'];
 
 		// Get the document root
-		$domain_res = $app->db->queryOneRecord("SELECT document_root, web_folder, type FROM web_domain
-            WHERE domain = '".$app->db->quote($this->domain)."';");
+		$domain_res = $app->db->queryOneRecord("SELECT document_root, web_folder, type FROM web_domain WHERE domain = ?", $this->domain);
 		$this->document_root = $domain_res['document_root'];
 
 		// Get the sub location
-		$location_res = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings
-            WHERE name = 'main_location' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$location_res = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_location' AND instance_id = ?", $task['instance_id']);
 		$this->sublocation = $location_res['value'];
 
 		// Make sure the document_root ends with /
@@ -309,74 +306,26 @@
 		$db_id = parent::getXPathValue($sxe, '//db:id');
 		if(empty($db_id)) return; // No database needed
 
-		/* WARNING: if this will ever be uncommented please check the updated prefix handling for user and db names!!!
-         *
-        // Set the database owner to the domain owner
-        // ISPConfig identifies the owner by the sys_groupid (not sys_userid!)
-        // so sys_userid can be set to any value
-        $perm = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM web_domain
-            WHERE domain = '".$this->domain."';");
-        $task['sys_groupid'] = $perm['sys_groupid'];
-        $serverid = $perm['server_id'];
-
-        // Get the database prefix and db user prefix
-        $app->uses('getconf');
-        $global_config = $app->getconf->get_global_config('sites');
-        $dbname_prefix = str_replace('[CLIENTID]', '', $global_config['dbname_prefix']);
-        $dbuser_prefix = str_replace('[CLIENTID]', '', $global_config['dbuser_prefix']);
-        $this->dbhost = DB_HOST; // Taken from config.inc.php
-        if(empty($this->dbhost)) $this->dbhost = 'localhost'; // Just to ensure any hostname... ;)
-
-        $this->newdb_name = $dbname_prefix.$task['CustomerID'].'aps'.$task['InstanceID'];
-        $this->newdb_user = $dbuser_prefix.$task['CustomerID'].'aps'.$task['InstanceID'];
-        $dbpw_res = $app->db->queryOneRecord("SELECT Value FROM aps_instances_settings
-            WHERE Name = 'main_database_password' AND InstanceID = '".$app->db->quote($task['InstanceID'])."';");
-        $newdb_pw = $dbpw_res['Value'];
-
-        // In any case delete an existing database (install and removal procedure)
-        $app->db->query('DROP DATABASE IF EXISTS `'.$app->db->quote($this->newdb_name).'`;');
-        // Delete an already existing database with this name
-        $app->db->query("DELETE FROM web_database WHERE database_name = '".$app->db->quote($this->newdb_name)."';");
-
-
-        // Create the new database and assign it to a user
-        if($this->handle_type == 'install')
-        {
-            $app->db->query('CREATE DATABASE IF NOT EXISTS `'.$app->db->quote($this->newdb_name).'`;');
-            $app->db->query('GRANT ALL PRIVILEGES ON '.$app->db->quote($this->newdb_name).'.* TO '.$app->db->quote($this->newdb_user).'@'.$app->db->quote($this->dbhost).' IDENTIFIED BY \'password\';');
-            $app->db->query('SET PASSWORD FOR '.$app->db->quote($this->newdb_user).'@'.$app->db->quote($this->dbhost).' = PASSWORD(\''.$newdb_pw.'\');');
-            $app->db->query('FLUSH PRIVILEGES;');
-
-            // Add the new database to the customer databases
-            // Assumes: charset = utf8
-            $app->db->query('INSERT INTO web_database (sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id,
-                type, database_name, database_user, database_password, database_charset, remote_access, remote_ips, active)
-                VALUES ('.$task['sys_userid'].', '.$task['sys_groupid'].', "'.$task['sys_perm_user'].'", "'.$task['sys_perm_group'].'",
-                "'.$task['sys_perm_other'].'", '.$app->db->quote($serverid).', "mysql", "'.$app->db->quote($this->newdb_name).'",
-                "'.$app->db->quote($this->newdb_user).'", "'.$app->db->quote($newdb_pw).'", "utf8", "n", "", "y");');
-        }
-		*/
-
 		$mysqlver_res = $app->db->queryOneRecord('SELECT VERSION() as ver;');
 		$mysqlver = $mysqlver_res['ver'];
 
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_password' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_password' AND instance_id = ?", $task['instance_id']);
 		$newdb_pw = $tmp['value'];
 
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_host' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_host' AND instance_id = ?", $task['instance_id']);
 		$newdb_host = $tmp['value'];
 
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_name' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_name' AND instance_id = ?", $task['instance_id']);
 		$newdb_name = $tmp['value'];
 
-		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_login' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_login' AND instance_id = ?", $task['instance_id']);
 		$newdb_login = $tmp['value'];
 		
 		/* Test if the new mysql connection is laready working to ensure that db servers in multiserver
 		   setups get enough time to create the database */
 		if($this->handle_type == 'install') {
 			for($n = 1; $n < 15; $n++) {
-				$link = mysql_connect($newdb_host, $newdb_login, $newdb_pw);
+				$link = mysqli_connect($newdb_host, $newdb_login, $newdb_pw);
 				if (!$link) {
 					unset($link);
 					sleep(5);
@@ -470,10 +419,8 @@
 				$this->processMappings($mapping, $mapping_url, $this->local_installpath);
 
 				// Set the appropriate file owner
-				$main_domain = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings
-                    WHERE name = 'main_domain' AND instance_id = '".$app->db->quote($task['instance_id'])."';");
-				$owner_res = $app->db->queryOneRecord("SELECT system_user, system_group FROM web_domain
-                        WHERE domain = '".$app->db->quote($main_domain['value'])."';");
+				$main_domain = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_domain' AND instance_id = ?", $task['instance_id']);
+				$owner_res = $app->db->queryOneRecord("SELECT system_user, system_group FROM web_domain WHERE domain = ?", $main_domain['value']);
 				$this->file_owner_user = $owner_res['system_user'];
 				$this->file_owner_group = $owner_res['system_group'];
 				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
@@ -486,8 +433,7 @@
 		}
 		catch(Exception $e)
 		{
-			$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_ERROR.'"
-                WHERE id = "'.$app->db->quote($task['instance_id']).'";');
+			$app->dbmaster->query('UPDATE aps_instances SET instance_status = ? WHERE id = ?', INSTANCE_ERROR, $task['instance_id']);
 			$app->log($e->getMessage(), 1);
 			return false;
 		}
@@ -506,8 +452,7 @@
 	{
 		global $app;
 
-		$userdata = $app->db->queryAllRecords("SELECT name, value FROM aps_instances_settings
-            WHERE instance_id = '".$app->db->quote($task['instance_id'])."';");
+		$userdata = $app->db->queryAllRecords("SELECT name, value FROM aps_instances_settings WHERE instance_id = ?", $task['instance_id']);
 		if(empty($userdata)) return false;
 
 		foreach($userdata as $data)
@@ -555,6 +500,7 @@
 			curl_setopt($conn[$i], CURLOPT_TIMEOUT, 0);
 			curl_setopt($conn[$i], CURLOPT_FAILONERROR, 1);
 			curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1);
+			curl_setopt($conn[$i], CURLOPT_SSL_VERIFYPEER, 0);
 
 			curl_multi_add_handle($mh, $conn[$i]);
 		}
@@ -627,15 +573,13 @@
 					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
 				}
 
-				$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_SUCCESS.'"
-                    WHERE id = "'.$app->db->quote($task['instance_id']).'";');
+				$app->dbmaster->query('UPDATE aps_instances SET instance_status = ? WHERE id = ?', INSTANCE_SUCCESS, $task['instance_id']);
 			}
 		}
 
 		catch(Exception $e)
 		{
-			$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_ERROR.'"
-                WHERE id = "'.$app->db->quote($task['instance_id']).'";');
+			$app->dbmaster->query('UPDATE aps_instances SET instance_status = ? WHERE id = ?', INSTANCE_ERROR, $task['instance_id']);
 			$app->log($e->getMessage(), 1);
 			return false;
 		}
@@ -674,15 +618,7 @@
 		else return false;
 
 		// Get all instance metadata
-		/*
-        $task = $app->db->queryOneRecord("SELECT * FROM aps_instances AS i
-            INNER JOIN aps_packages AS p ON i.package_id = p.id
-            INNER JOIN client AS c ON i.customer_id = c.client_id
-            WHERE i.id = ".$instanceid.";");
-		*/
-		$task = $app->db->queryOneRecord("SELECT * FROM aps_instances AS i
-            INNER JOIN aps_packages AS p ON i.package_id = p.id
-            WHERE i.id = ".$instanceid.";");
+		$task = $app->db->queryOneRecord("SELECT * FROM aps_instances AS i INNER JOIN aps_packages AS p ON i.package_id = p.id WHERE i.id = ?", $instanceid);
 		if(!$task) return false;  // formerly: throw new Exception('The InstanceID doesn\'t exist.');
 		if(!isset($task['instance_id'])) $task['instance_id'] = $instanceid;
 
@@ -697,6 +633,7 @@
 			curl_setopt($ch, CURLOPT_TIMEOUT, 0);
 			curl_setopt($ch, CURLOPT_FAILONERROR, 1);
 			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
 			if(curl_exec($ch) === false) $app->log(curl_error($ch), 1);
 			fclose($fh);
 			curl_close($ch);
@@ -719,8 +656,7 @@
 		// Check if the meta file is existing
 		if(!$metafile)
 		{
-			$app->dbmaster->query('UPDATE aps_instances SET instance_status = "'.INSTANCE_ERROR.'"
-                WHERE id = "'.$app->db->quote($task['instance_id']).'";');
+			$app->dbmaster->query('UPDATE aps_instances SET instance_status = ? WHERE id = ?', INSTANCE_ERROR, $task['instance_id']);
 			$app->log('Unable to find the meta data file of package '.$task['path'], 1);
 			return false;
 		}
@@ -753,11 +689,11 @@
 		// Finally delete the instance entry + settings
 		if($this->handle_type == 'delete')
 		{
-			$app->db->query('DELETE FROM aps_instances WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-			$app->db->query('DELETE FROM aps_instances_settings WHERE instance_id = "'.$app->db->quote($task['instance_id']).'";');
+			$app->db->query('DELETE FROM aps_instances WHERE id = ?', $task['instance_id']);
+			$app->db->query('DELETE FROM aps_instances_settings WHERE instance_id = ?', $task['instance_id']);
 			if ($app->dbmaster != $app->db) {
-				$app->dbmaster->query('DELETE FROM aps_instances WHERE id = "'.$app->db->quote($task['instance_id']).'";');
-				$app->dbmaster->query('DELETE FROM aps_instances_settings WHERE instance_id = "'.$app->db->quote($task['instance_id']).'";');
+				$app->dbmaster->query('DELETE FROM aps_instances WHERE id = ?', $task['instance_id']);
+				$app->dbmaster->query('DELETE FROM aps_instances_settings WHERE instance_id = ?', $task['instance_id']);
 			}
 		}
 
diff --git a/server/lib/classes/cron.d/100-mailbox_stats.inc.php b/server/lib/classes/cron.d/100-mailbox_stats.inc.php
index 7508490..9778b2f 100644
--- a/server/lib/classes/cron.d/100-mailbox_stats.inc.php
+++ b/server/lib/classes/cron.d/100-mailbox_stats.inc.php
@@ -32,6 +32,9 @@
 
 	// job schedule
 	protected $_schedule = '0 0 * * *';
+	protected $mailbox_traffic = array();
+	protected $mail_boxes = array();
+	protected $mail_rewrites = array();
 
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
@@ -57,8 +60,8 @@
 		//######################################################################################################
 
 		$parse_mail_log = false;
-		$sql = "SELECT mailuser_id,maildir FROM mail_user WHERE server_id = ".$conf['server_id'];
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT mailuser_id,maildir FROM mail_user WHERE server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 		if(count($records) > 0) $parse_mail_log = true;
 
 		foreach($records as $rec) {
@@ -82,16 +85,17 @@
 				// Save the traffic stats in the sql database
 				$tstamp = date('Y-m');
 
-				$sql = "SELECT * FROM mail_traffic WHERE month = '$tstamp' AND mailuser_id = ".$rec['mailuser_id'];
-				$tr = $app->dbmaster->queryOneRecord($sql);
+				$sql = "SELECT * FROM mail_traffic WHERE month = '$tstamp' AND mailuser_id = ?";
+				$tr = $app->dbmaster->queryOneRecord($sql, $rec['mailuser_id']);
 
 				$mail_traffic += $tr['traffic'];
 				if($tr['traffic_id'] > 0) {
-					$sql = "UPDATE mail_traffic SET traffic = $mail_traffic WHERE traffic_id = ".$tr['traffic_id'];
+					$sql = "UPDATE mail_traffic SET traffic = ? WHERE traffic_id = ?";
+					$app->dbmaster->query($sql, $mail_traffic, $tr['traffic_id']);
 				} else {
-					$sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES ('$tstamp',".$rec['mailuser_id'].",$mail_traffic)";
+					$sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES (?,?,?)";
+					$app->dbmaster->query($sql, $tstamp, $rec['mailuser_id'], $mail_traffic);
 				}
-				$app->dbmaster->query($sql);
 				//echo $sql;
 
 			}
@@ -140,13 +144,13 @@
 				}
 			}
 
-			$sql = "SELECT email FROM mail_user WHERE server_id = ".$conf['server_id'];
-			$records = $app->db->queryAllRecords($sql);
+			$sql = "SELECT email FROM mail_user WHERE server_id = ?";
+			$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 			foreach($records as $record) {
 				$mail_boxes[] = $record['email'];
 			}
-			$sql = "SELECT source, destination FROM mail_forwarding WHERE server_id = ".$conf['server_id'];
-			$records = $app->db->queryAllRecords($sql);
+			$sql = "SELECT source, destination FROM mail_forwarding WHERE server_id = ?";
+			$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 			foreach($records as $record) {
 				$targets = preg_split('/[\n,]+/', $record['destination']);
 				foreach($targets as $target) {
@@ -163,7 +167,7 @@
 			$cur_line = false;
 
 			if(file_exists($state_file)) {
-				$prev_line = parse_mail_log_line(trim(file_get_contents($state_file)));
+				$prev_line = $this->parse_mail_log_line(trim(file_get_contents($state_file)));
 				//if($prev_line) echo "continuing from previous run, log position: " . $prev_line['message-id'] . " at " . strftime('%d.%m.%Y %H:%M:%S', $prev_line['timestamp']) . "\n";
 			}
 
@@ -174,7 +178,8 @@
 				while($line = fgets($fp, 8192)) {
 					$l++;
 					//if($l % 1000 == 0) echo "\rline $l";
-					$cur_line = parse_mail_log_line($line);
+					$cur_line = $this->parse_mail_log_line($line);
+					//print_r($cur_line);
 					if(!$cur_line) continue;
 
 					if($prev_line) {
@@ -189,9 +194,13 @@
 						}
 					}
 
-					add_mailbox_traffic($mailbox_traffic, $cur_line['from'], $cur_line['size']);
+					$this->add_mailbox_traffic($cur_line['from'], $cur_line['size']);
+					//echo "1\n";
+					//print_r($this->mailbox_traffic);
 					foreach($cur_line['to'] as $to) {
-						add_mailbox_traffic($mailbox_traffic, $to, $cur_line['size']);
+						$this->add_mailbox_traffic($to, $cur_line['size']);
+						//echo "2\n";
+						//print_r($this->mailbox_traffic);
 					}
 					$last_line = $line; // store for the state file
 				}
@@ -206,7 +215,7 @@
 				while($line = fgets($fp, 8192)) {
 					$l++;
 					//if($l % 1000 == 0) echo "\rline $l";
-					$cur_line = parse_mail_log_line($line);
+					$cur_line = $this->parse_mail_log_line($line);
 					if(!$cur_line) continue;
 
 					if($prev_line) {
@@ -231,20 +240,21 @@
 
 			// Save the traffic stats in the sql database
 			$tstamp = date('Y-m');
-			$sql = "SELECT mailuser_id,email FROM mail_user WHERE server_id = ".$conf['server_id'];
-			$records = $app->db->queryAllRecords($sql);
+			$sql = "SELECT mailuser_id,email FROM mail_user WHERE server_id = ?";
+			$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 			foreach($records as $rec) {
 				if(array_key_exists($rec['email'], $mailbox_traffic)) {
-					$sql = "SELECT * FROM mail_traffic WHERE month = '$tstamp' AND mailuser_id = ".$rec['mailuser_id'];
-					$tr = $app->dbmaster->queryOneRecord($sql);
+					$sql = "SELECT * FROM mail_traffic WHERE month = ? AND mailuser_id = ?";
+					$tr = $app->dbmaster->queryOneRecord($sql, $tstamp, $rec['mailuser_id']);
 
 					$mail_traffic = $tr['traffic'] + $mailbox_traffic[$rec['email']];
 					if($tr['traffic_id'] > 0) {
-						$sql = "UPDATE mail_traffic SET traffic = $mail_traffic WHERE traffic_id = ".$tr['traffic_id'];
+						$sql = "UPDATE mail_traffic SET traffic = ? WHERE traffic_id = ?";
+						$app->dbmaster->query($sql, $mail_traffic, $tr['traffic_id']);
 					} else {
-						$sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES ('$tstamp',".$rec['mailuser_id'].",$mail_traffic)";
+						$sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES (?,?,?)";
+						$app->dbmaster->query($sql, $tstamp, $rec['mailuser_id'], $mail_traffic);
 					}
-					$app->dbmaster->query($sql);
 					//echo $sql;
 				}
 			}
@@ -263,6 +273,41 @@
 
 		parent::onAfterRun();
 	}
+	
+	private function parse_mail_log_line($line) {
+		//Oct 31 17:35:48 mx01 amavis[32014]: (32014-05) Passed CLEAN, [IPv6:xxxxx] [IPv6:xxxxx] <xxx@yyyy> -> <aaaa@bbbb>, Message-ID: <xxxx@yyyyy>, mail_id: xxxxxx, Hits: -1.89, size: 1591, queued_as: xxxxxxx, 946 ms
+
+		if(preg_match('/^(\w+\s+\d+\s+\d+:\d+:\d+)\s+[^ ]+\s+amavis.* <([^>]+)>\s+->\s+((<[^>]+>,)+) .*Message-ID:\s+<([^>]+)>.* size:\s+(\d+),.*$/', $line, $matches) == false) return false;
+
+		$timestamp = strtotime($matches[1]);
+		if(!$timestamp) return false;
+
+		$to = array();
+		$recipients = explode(',', $matches[3]);
+		foreach($recipients as $recipient) {
+			$recipient = substr($recipient, 1, -1);
+			if(!$recipient || $recipient == $matches[2]) continue;
+			$to[] = $recipient;
+		}
+		return array('line' => $line, 'timestamp' => $timestamp, 'size' => $matches[6], 'from' => $matches[2], 'to' => $to, 'message-id' => $matches[5]);
+	}
+	
+	private function add_mailbox_traffic($address, $traffic) {
+
+		$address = strtolower($address);
+
+		if(in_array($address, $this->mail_boxes) == true) {
+			if(!isset($this->mailbox_traffic[$address])) $this->mailbox_traffic[$address] = 0;
+			$this->mailbox_traffic[$address] += $traffic;
+		} elseif(array_key_exists($address, $this->mail_rewrites)) {
+			foreach($this->mail_rewrites[$address] as $address) {
+				if(!isset($this->mailbox_traffic[$address])) $this->mailbox_traffic[$address] = 0;
+				$this->mailbox_traffic[$address] += $traffic;
+			}
+		} else {
+			// this is not a local address - skip it
+		}
+	}
 
 }
 
diff --git a/server/lib/classes/cron.d/100-monitor_clamav_log.inc.php b/server/lib/classes/cron.d/100-monitor_clamav_log.inc.php
index 25f7448..208161c 100644
--- a/server/lib/classes/cron.d/100-monitor_clamav_log.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_clamav_log.inc.php
@@ -82,14 +82,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
@@ -158,14 +152,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_cpu.inc.php b/server/lib/classes/cron.d/100-monitor_cpu.inc.php
index 3cbf5b1..f570eeb 100644
--- a/server/lib/classes/cron.d/100-monitor_cpu.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_cpu.inc.php
@@ -111,14 +111,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_database_size.inc.php b/server/lib/classes/cron.d/100-monitor_database_size.inc.php
index c03b82d..3e9cecf 100644
--- a/server/lib/classes/cron.d/100-monitor_database_size.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_database_size.inc.php
@@ -78,7 +78,7 @@
 		$state = 'ok';
 
 		/** Fetch the data of all databases into an array */
-		$databases = $app->db->queryAllRecords("SELECT database_name, sys_groupid FROM web_database WHERE server_id = $server_id GROUP BY sys_groupid, database_name ASC");
+		$databases = $app->db->queryAllRecords("SELECT database_name, sys_groupid FROM web_database WHERE server_id = ? GROUP BY sys_groupid, database_name ASC", $server_id);
 
 		if(is_array($databases) && !empty($databases)) {
 
@@ -98,14 +98,8 @@
 
 			//* Insert the data into the database
 			$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-				'VALUES (' .
-				$res['server_id'] . ', ' .
-				"'" . $app->dbmaster->quote($res['type']) . "', " .
-				'UNIX_TIMESTAMP(), ' .
-				"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-				"'" . $res['state'] . "'" .
-				')';
-			$app->dbmaster->query($sql);
+				'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+			$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 			//* The new data is written, now we can delete the old one
 			$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_disk_usage.inc.php b/server/lib/classes/cron.d/100-monitor_disk_usage.inc.php
index 2af4041..eb92c2d 100644
--- a/server/lib/classes/cron.d/100-monitor_disk_usage.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_disk_usage.inc.php
@@ -142,14 +142,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
index 5d0c7a0..75014c3 100644
--- a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
@@ -75,7 +75,7 @@
 		//* The state of the email_quota.
 		$state = 'ok';
 
-		$mailboxes = $app->db->queryAllRecords("SELECT email,maildir FROM mail_user WHERE server_id = $server_id");
+		$mailboxes = $app->db->queryAllRecords("SELECT email,maildir FROM mail_user WHERE server_id = ?", $server_id);
 		if(is_array($mailboxes)) {
 
 			//* with dovecot we can use doveadm instead of 'du -s'
@@ -134,14 +134,8 @@
          * Insert the data into the database
          */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php b/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php
index ffc93a4..5c4ba80 100644
--- a/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_fail2ban.inc.php
@@ -102,14 +102,8 @@
          * Insert the data into the database
          */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_hd_quota.inc.php b/server/lib/classes/cron.d/100-monitor_hd_quota.inc.php
index 888dd15..a4971eb 100644
--- a/server/lib/classes/cron.d/100-monitor_hd_quota.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_hd_quota.inc.php
@@ -134,14 +134,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_iptables.inc.php b/server/lib/classes/cron.d/100-monitor_iptables.inc.php
index a5a1c26..1ad11d9 100644
--- a/server/lib/classes/cron.d/100-monitor_iptables.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_iptables.inc.php
@@ -107,14 +107,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_ispconfig_log.inc.php b/server/lib/classes/cron.d/100-monitor_ispconfig_log.inc.php
index 1df3b02..0f29b0c 100644
--- a/server/lib/classes/cron.d/100-monitor_ispconfig_log.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_ispconfig_log.inc.php
@@ -82,14 +82,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
@@ -123,14 +117,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_ispconfig_version.inc.php b/server/lib/classes/cron.d/100-monitor_ispconfig_version.inc.php
index e24a4cb..0b44065 100644
--- a/server/lib/classes/cron.d/100-monitor_ispconfig_version.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_ispconfig_version.inc.php
@@ -85,14 +85,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_mail_log.inc.php b/server/lib/classes/cron.d/100-monitor_mail_log.inc.php
index d5613a1..5c41105 100644
--- a/server/lib/classes/cron.d/100-monitor_mail_log.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_mail_log.inc.php
@@ -88,14 +88,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
@@ -122,14 +116,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
@@ -156,14 +144,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_mail_queue.inc.php b/server/lib/classes/cron.d/100-monitor_mail_queue.inc.php
index b1f7089..b259904 100644
--- a/server/lib/classes/cron.d/100-monitor_mail_queue.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_mail_queue.inc.php
@@ -113,14 +113,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_mem_usage.inc.php b/server/lib/classes/cron.d/100-monitor_mem_usage.inc.php
index 05b196a..7356747 100644
--- a/server/lib/classes/cron.d/100-monitor_mem_usage.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_mem_usage.inc.php
@@ -99,14 +99,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_mongodb.inc.php b/server/lib/classes/cron.d/100-monitor_mongodb.inc.php
index 23f3171..244cb65 100644
--- a/server/lib/classes/cron.d/100-monitor_mongodb.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_mongodb.inc.php
@@ -102,14 +102,8 @@
          * Insert the data into the database
          */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_openvz.inc.php b/server/lib/classes/cron.d/100-monitor_openvz.inc.php
index 08d155f..30b51b4 100644
--- a/server/lib/classes/cron.d/100-monitor_openvz.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_openvz.inc.php
@@ -86,14 +86,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
@@ -158,14 +152,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_os_version.inc.php b/server/lib/classes/cron.d/100-monitor_os_version.inc.php
index b9978ea..3876621 100644
--- a/server/lib/classes/cron.d/100-monitor_os_version.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_os_version.inc.php
@@ -87,14 +87,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_raid.inc.php b/server/lib/classes/cron.d/100-monitor_raid.inc.php
index 86a6908..439ab8c 100644
--- a/server/lib/classes/cron.d/100-monitor_raid.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_raid.inc.php
@@ -240,14 +240,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php b/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php
index 5d99d7f..d5beee7 100644
--- a/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_rkhunter.inc.php
@@ -102,14 +102,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_server.inc.php b/server/lib/classes/cron.d/100-monitor_server.inc.php
index 6ceb584..5a053f4 100644
--- a/server/lib/classes/cron.d/100-monitor_server.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_server.inc.php
@@ -108,14 +108,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_services.inc.php b/server/lib/classes/cron.d/100-monitor_services.inc.php
index 3235ee7..2c169a2 100644
--- a/server/lib/classes/cron.d/100-monitor_services.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_services.inc.php
@@ -67,14 +67,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_syslog.inc.php b/server/lib/classes/cron.d/100-monitor_syslog.inc.php
index b621121..c101de0 100644
--- a/server/lib/classes/cron.d/100-monitor_syslog.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_syslog.inc.php
@@ -70,7 +70,7 @@
 		 * is there any warning or error for this server?
 		 */
 		$state = 'ok';
-		$dbData = $app->dbmaster->queryAllRecords('SELECT loglevel FROM sys_log WHERE server_id = ' . $server_id . ' AND loglevel > 0');
+		$dbData = $app->dbmaster->queryAllRecords('SELECT loglevel FROM sys_log WHERE server_id = ? AND loglevel > 0', $server_id);
 		if (is_array($dbData)) {
 			foreach ($dbData as $item) {
 				if ($item['loglevel'] == 1)
@@ -93,14 +93,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
@@ -127,14 +121,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/100-monitor_system_update.inc.php b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
index 33c5c1f..35338dc 100644
--- a/server/lib/classes/cron.d/100-monitor_system_update.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_system_update.inc.php
@@ -187,14 +187,8 @@
 		 * Insert the data into the database
 		 */
 		$sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
-			'VALUES (' .
-			$res['server_id'] . ', ' .
-			"'" . $app->dbmaster->quote($res['type']) . "', " .
-			'UNIX_TIMESTAMP(), ' .
-			"'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
-			"'" . $res['state'] . "'" .
-			')';
-		$app->dbmaster->query($sql);
+			'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
+		$app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
 
 		/* The new data is written, now we can delete the old one */
 		$this->_tools->delOldRecords($res['type'], $res['server_id']);
diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php
index 9803a89..ea0c64f 100644
--- a/server/lib/classes/cron.d/150-awstats.inc.php
+++ b/server/lib/classes/cron.d/150-awstats.inc.php
@@ -54,8 +54,8 @@
 		// Create awstats statistics
 		//######################################################################################################
 
-		$sql = "SELECT domain_id, domain, document_root, web_folder, type, system_user, system_group, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') and stats_type = 'awstats' AND server_id = ".$conf['server_id'];
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT domain_id, domain, document_root, web_folder, type, system_user, system_group, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') and stats_type = 'awstats' AND server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 
@@ -65,7 +65,7 @@
 
 			$log_folder = 'log';
 			if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
-				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id']));
+				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
 				if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
 				$log_folder .= '/' . $subdomain_host;
@@ -89,8 +89,8 @@
 
 			if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);
 
-			$sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR type = 'subdomain') AND parent_domain_id = ".$rec['domain_id'];
-			$aliases = $app->db->queryAllRecords($sql);
+			$sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR type = 'subdomain') AND parent_domain_id = ?";
+			$aliases = $app->db->queryAllRecords($sql, $rec['domain_id']);
 			$aliasdomain = '';
 
 			if(is_array($aliases)) {
diff --git a/server/lib/classes/cron.d/150-webalizer.inc.php b/server/lib/classes/cron.d/150-webalizer.inc.php
index 1f9a921..b850003 100644
--- a/server/lib/classes/cron.d/150-webalizer.inc.php
+++ b/server/lib/classes/cron.d/150-webalizer.inc.php
@@ -79,8 +79,8 @@
 		}
 
 
-		$sql = "SELECT domain_id, domain, document_root, web_folder, type, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') and stats_type = 'webalizer' AND server_id = ".$conf['server_id'];
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT domain_id, domain, document_root, web_folder, type, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') and stats_type = 'webalizer' AND server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 
 		foreach($records as $rec) {
 			//$yesterday = date('Ymd',time() - 86400);
@@ -88,7 +88,7 @@
 
 			$log_folder = 'log';
 			if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
-				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id']));
+				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
 				if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
 				$log_folder .= '/' . $subdomain_host;
diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index a802ff9..98dd662 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -60,8 +60,8 @@
 		// Manage and compress web logfiles and create traffic statistics
 		//######################################################################################################
 
-		$sql = "SELECT domain_id, domain, type, document_root, web_folder, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') AND server_id = ".$conf['server_id'];
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT domain_id, domain, type, document_root, web_folder, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') AND server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 		foreach($records as $rec) {
 
 			//* create traffic statistics based on yesterdays access log file
@@ -69,7 +69,7 @@
 
 			$log_folder = 'log';
 			if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
-				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id']));
+				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
 				if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
 				$log_folder .= '/' . $subdomain_host;
@@ -89,16 +89,14 @@
 
 				//* Insert / update traffic in master database
 				$traffic_date = date('Y-m-d', time() - 86400);
-				$tmp = $app->dbmaster->queryOneRecord("select hostname from web_traffic where hostname='".$rec['domain']."' and traffic_date='".$traffic_date."'");
+				$tmp = $app->dbmaster->queryOneRecord("select hostname from web_traffic where hostname=? and traffic_date=?", $rec['domain'], $traffic_date);
 				if(is_array($tmp) && count($tmp) > 0) {
-					$sql = "update web_traffic set traffic_bytes=traffic_bytes+"
-						. $total_bytes
-						. " where hostname='" . $rec['domain']
-						. "' and traffic_date='" . $traffic_date . "'";
+					$sql = "UPDATE web_traffic SET traffic_bytes=traffic_bytes + ? WHERE hostname = ? AND traffic_date = ?";
+					$app->dbmaster->query($sql, $total_bytes, $rec['domain'], $traffic_date);
 				} else {
-					$sql = "insert into web_traffic (hostname, traffic_date, traffic_bytes) values ('".$rec['domain']."', '".$traffic_date."', '".$total_bytes."')";
+					$sql = "INSERT INTO web_traffic (hostname, traffic_date, traffic_bytes) VALUES (?, ?, ?)";
+					$app->dbmaster->query($sql, $rec['domain'], $traffic_date, $total_bytes);
 				}
-				$app->dbmaster->query($sql);
 
 				fclose($handle);
 			}
@@ -197,8 +195,8 @@
 		// Cleanup website tmp directories
 		//######################################################################################################
 
-		$sql = "SELECT domain_id, domain, document_root, system_user FROM web_domain WHERE server_id = ".$conf['server_id'];
-		$records = $app->db->queryAllRecords($sql);
+		$sql = "SELECT domain_id, domain, document_root, system_user FROM web_domain WHERE server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 		$app->uses('system');
 		if(is_array($records)) {
 			foreach($records as $rec){
@@ -225,8 +223,8 @@
              * if they are NOT ok, the server will try to process them in 1 minute and so the
              * error appears again after 1 minute. So it is no problem to delete the old one!
              */
-			$sql = "DELETE FROM sys_log WHERE tstamp < " . $tstamp . " AND server_id != 0";
-			$app->dbmaster->query($sql);
+			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id != 0";
+			$app->dbmaster->query($sql, $tstamp);
 
 			/*
              * Delete all remote-actions "done" and older than 7 days
@@ -236,11 +234,8 @@
 			$sql = "SELECT max(action_id) FROM sys_remoteaction";
 			$res = $app->dbmaster->queryOneRecord($sql);
 			$maxId = $res['max(action_id)'];
-			$sql =  "DELETE FROM sys_remoteaction " .
-				"WHERE tstamp < " . $tstamp . " " .
-				" AND action_state = 'ok' " .
-				" AND action_id <" . intval($maxId);
-			$app->dbmaster->query($sql);
+			$sql =  "DELETE FROM sys_remoteaction WHERE tstamp < ? AND action_state = 'ok' AND action_id < ?";
+			$app->dbmaster->query($sql, $tstamp, $maxId);
 
 			/*
              * The sys_datalog is more difficult.
@@ -270,14 +265,10 @@
 			foreach($records as $server) {
 				$tmp_server_id = intval($server['server_id']);
 				if($tmp_server_id > 0) {
-					$sql =  "DELETE FROM sys_datalog " .
-						"WHERE tstamp < " . $tstamp .
-						" AND server_id = " . intval($server['server_id']) .
-						" AND datalog_id < " . intval($server['updated']) .
-						" AND datalog_id < " . intval($maxId);
+					$sql =  "DELETE FROM sys_datalog WHERE tstamp < ? AND server_id = ? AND datalog_id < ? AND datalog_id < ?";
+					//  echo $sql . "\n";
+					$app->dbmaster->query($sql, $tstamp, $server['server_id'], $server['updated'], $maxId);
 				}
-				//  echo $sql . "\n";
-				$app->dbmaster->query($sql);
 			}
 		}
 
diff --git a/server/lib/classes/cron.d/300-quota_notify.inc.php b/server/lib/classes/cron.d/300-quota_notify.inc.php
index f18394c..d250fe7 100644
--- a/server/lib/classes/cron.d/300-quota_notify.inc.php
+++ b/server/lib/classes/cron.d/300-quota_notify.inc.php
@@ -49,6 +49,11 @@
 
 	public function onRunJob() {
 		global $app, $conf;
+		
+		/* used for all monitor cronjobs */
+		$app->load('monitor_tools');
+		$this->_tools = new monitor_tools();
+		/* end global section for monitor cronjobs */
 
 		//######################################################################################################
 		// enforce traffic quota (run only on the "master-server")
@@ -69,26 +74,12 @@
 					$web_traffic_quota = $rec['traffic_quota'];
 					$domain = $rec['domain'];
 
-					// get the client
-					/*
-                    $client_group_id = $rec["sys_groupid"];
-                    $client = $app->db->queryOneRecord("SELECT limit_traffic_quota,parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
-                    $reseller = $app->db->queryOneRecord("SELECT limit_traffic_quota FROM client WHERE client_id = ".intval($client['parent_client_id']));
-
-                    $client_traffic_quota = intval($client['limit_traffic_quota']);
-                    $reseller_traffic_quota = intval($reseller['limit_traffic_quota']);
-                    */
-
 					//* get the traffic
 					$tmp = $app->db->queryOneRecord("SELECT SUM(traffic_bytes) As total_traffic_bytes FROM web_traffic WHERE traffic_date like '$current_month%' AND hostname = '$domain'");
 					$web_traffic = round($tmp['total_traffic_bytes']/1024/1024);
 
-					//* Website is over quota, we will disable it
-					/*if( ($web_traffic_quota > 0 && $web_traffic > $web_traffic_quota) ||
-                        ($client_traffic_quota > 0 && $web_traffic > $client_traffic_quota) ||
-                        ($reseller_traffic_quota > 0 && $web_traffic > $reseller_traffic_quota)) {*/
 					if($web_traffic_quota > 0 && $web_traffic > $web_traffic_quota) {
-						$app->dbmaster->datalogUpdate('web_domain', "traffic_quota_lock = 'y',active = 'n'", 'domain_id', $rec['domain_id']);
+						$app->dbmaster->datalogUpdate('web_domain', array("traffic_quota_lock" => 'y', "active" => 'n'), 'domain_id', $rec['domain_id']);
 						$app->log('Traffic quota for '.$rec['domain'].' exceeded. Disabling website.', LOGLEVEL_DEBUG);
 
 						//* Send traffic notifications
@@ -106,7 +97,7 @@
 							//* Send email to client
 							if($web_config['overtraffic_notify_client'] == 'y') {
 								$client_group_id = $rec["sys_groupid"];
-								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 								if($client['email'] != '') {
 									$recipients[] = $client['email'];
 								}
@@ -118,7 +109,7 @@
 					} else {
 						//* unlock the website, if traffic is lower then quota
 						if($rec['traffic_quota_lock'] == 'y') {
-							$app->dbmaster->datalogUpdate('web_domain', "traffic_quota_lock = 'n',active = 'y'", 'domain_id', $rec['domain_id']);
+							$app->dbmaster->datalogUpdate('web_domain', array("traffic_quota_lock" => 'n', "active" => 'y'), 'domain_id', $rec['domain_id']);
 							$app->log('Traffic quota for '.$rec['domain'].' ok again. Re-enabling website.', LOGLEVEL_DEBUG);
 						}
 					}
@@ -206,7 +197,7 @@
 					// send notifications only if 90% or more of the quota are used
 					if($used_ratio < 0.9) {
 						// reset notification date
-						if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_domain', "last_quota_notification = NULL", 'domain_id', $rec['domain_id']);
+						if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_domain', array("last_quota_notification" => null), 'domain_id', $rec['domain_id']);
 
 						// send notification - everything ok again
 						if($rec['last_quota_notification'] && $web_config['overquota_notify_onok'] == 'y' && ($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y')) {
@@ -227,7 +218,7 @@
 							//* Send email to client
 							if($web_config['overquota_notify_client'] == 'y') {
 								$client_group_id = $rec["sys_groupid"];
-								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 								if($client['email'] != '') {
 									$recipients[] = $client['email'];
 								}
@@ -243,7 +234,7 @@
 
 						//* Send quota notifications
 						if(($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y') && $send_notification == true) {
-							$app->dbmaster->datalogUpdate('web_domain', "last_quota_notification = CURDATE()", 'domain_id', $rec['domain_id']);
+							$app->dbmaster->datalogUpdate('web_domain', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'domain_id', $rec['domain_id']);
 
 							$placeholders = array('{domain}' => $rec['domain'],
 								'{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'),
@@ -262,7 +253,7 @@
 							//* Send email to client
 							if($web_config['overquota_notify_client'] == 'y') {
 								$client_group_id = $rec["sys_groupid"];
-								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 								if($client['email'] != '') {
 									$recipients[] = $client['email'];
 								}
@@ -335,7 +326,7 @@
 					// send notifications only if 90% or more of the quota are used
 					if($used_ratio < 0.9) {
 						// reset notification date
-						if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('mail_user', "last_quota_notification = NULL", 'mailuser_id', $rec['mailuser_id']);
+						if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('mail_user', array("last_quota_notification" => null), 'mailuser_id', $rec['mailuser_id']);
 
 						// send notification - everything ok again
 						if($rec['last_quota_notification'] && $mail_config['overquota_notify_onok'] == 'y' && ($mail_config['overquota_notify_admin'] == 'y' || $mail_config['overquota_notify_client'] == 'y')) {
@@ -355,7 +346,7 @@
 							//* Send email to client
 							if($mail_config['overquota_notify_client'] == 'y') {
 								$client_group_id = $rec["sys_groupid"];
-								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 								if($client['email'] != '') {
 									$recipients[] = $client['email'];
 								}
@@ -372,7 +363,7 @@
 						elseif($mail_config['overquota_notify_freq'] > 0 && $rec['notified_before'] >= $mail_config['overquota_notify_freq']) $send_notification = true;
 
 						if(($mail_config['overquota_notify_admin'] == 'y' || $mail_config['overquota_notify_client'] == 'y') && $send_notification == true) {
-							$app->dbmaster->datalogUpdate('mail_user', "last_quota_notification = CURDATE()", 'mailuser_id', $rec['mailuser_id']);
+							$app->dbmaster->datalogUpdate('mail_user', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'mailuser_id', $rec['mailuser_id']);
 
 							$placeholders = array('{email}' => $rec['email'],
 								'{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'),
@@ -390,7 +381,7 @@
 							//* Send email to client
 							if($mail_config['overquota_notify_client'] == 'y') {
 								$client_group_id = $rec["sys_groupid"];
-								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								$client = $app->db->queryOneRecord("SELECT client.email FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 								if($client['email'] != '') {
 									$recipients[] = $client['email'];
 								}
@@ -427,7 +418,7 @@
 			}
 
 			//* get databases
-			$database_records = $app->db->queryAllRecords("SELECT database_id,sys_groupid,database_name,database_quota,last_quota_notification,DATEDIFF(CURDATE(), last_quota_notification) as `notified_before` FROM web_database;");
+			$database_records = $app->db->queryAllRecords("SELECT database_id,sys_groupid,database_name,database_quota,last_quota_notification,DATEDIFF(CURDATE(), last_quota_notification) as `notified_before` FROM web_database");
 
 			if(is_array($database_records) && !empty($database_records) && is_array($monitor_data) && !empty($monitor_data)) {
 				//* check database-quota
@@ -442,7 +433,7 @@
 
 							if ($monitor['database_name'] == $database) {
 								//* get the client
-								$client = $app->db->queryOneRecord("SELECT client.username, client.email FROM web_database, sys_group, client WHERE web_database.sys_groupid = sys_group.groupid AND sys_group.client_id = client.client_id AND web_database.database_name='".$database."'");
+								$client = $app->db->queryOneRecord("SELECT client.username, client.email FROM web_database, sys_group, client WHERE web_database.sys_groupid = sys_group.groupid AND sys_group.client_id = client.client_id AND web_database.database_name=?", $database);
 
 								//* check quota
 								if ($quota > 0) $used_ratio = $monitor['size'] / $quota;
@@ -452,9 +443,9 @@
 								if($used_ratio > 0.9) {
 
 									//* reset notification date
-									if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_database', "last_quota_notification = NULL", 'database_id', $rec['database_id']);
+									if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_database', array("last_quota_notification" => null), 'database_id', $rec['database_id']);
 
-									$app->dbmaster->datalogUpdate('web_database', "last_quota_notification = CURDATE()", 'database_id', $rec['database_id']);
+									$app->dbmaster->datalogUpdate('web_database', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'database_id', $rec['database_id']);
 
 									// send notification - everything ok again
 									if($rec['last_quota_notification'] && $web_config['overquota_notify_onok'] == 'y' && ($web_config['overquota_db_notify_admin'] == 'y' || $web_config['overquota_db_notify_client'] == 'y')) {
@@ -489,7 +480,7 @@
 
 								//* Send quota notifications
 								if(($web_config['overquota_db_notify_admin'] == 'y' || $web_config['overquota_db_notify_client'] == 'y') && $send_notification == true) {
-									$app->dbmaster->datalogUpdate('web_database', "last_quota_notification = CURDATE()", 'database_id', $rec['database_id']);
+									$app->dbmaster->datalogUpdate('web_database', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'database_id', $rec['database_id']);
 									$placeholders = array(
 										'{database_name}' => $rec['database_name'],
 										'{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'),
diff --git a/server/lib/classes/cron.d/400-openvz.inc.php b/server/lib/classes/cron.d/400-openvz.inc.php
index 18f4598..5eba8d2 100644
--- a/server/lib/classes/cron.d/400-openvz.inc.php
+++ b/server/lib/classes/cron.d/400-openvz.inc.php
@@ -55,14 +55,12 @@
 		//######################################################################################################
 
 		if ($app->dbmaster == $app->db) {
-			$current_date = date('Y-m-d');
-
 			//* Check which virtual machines have to be deactivated
-			$sql = "SELECT * FROM openvz_vm WHERE active = 'y' AND active_until_date != '0000-00-00' AND active_until_date < '$current_date'";
+			$sql = "SELECT * FROM openvz_vm WHERE active = 'y' AND active_until_date != '0000-00-00' AND active_until_date < CURDATE()";
 			$records = $app->db->queryAllRecords($sql);
 			if(is_array($records)) {
 				foreach($records as $rec) {
-					$app->dbmaster->datalogUpdate('openvz_vm', "active = 'n'", 'vm_id', $rec['vm_id']);
+					$app->dbmaster->datalogUpdate('openvz_vm', array("active" => 'n'), 'vm_id', $rec['vm_id']);
 					$app->log('Virtual machine active date expired. Disabling VM '.$rec['veid'], LOGLEVEL_DEBUG);
 				}
 			}
diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index abca144..a9fa3f9 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -51,6 +51,7 @@
 		global $app, $conf;
 
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+		$global_config = $app->getconf->get_global_config('sites');
 		$backup_dir = $server_config['backup_dir'];
 		$backup_mode = $server_config['backup_mode'];
 		if($backup_mode == '') $backup_mode = 'userzip';
@@ -71,22 +72,15 @@
 			} else {
 				chmod(escapeshellcmd($backup_dir), $backup_dir_permissions);
 			}
-			
-			//* mount backup directory, if necessary
-			$run_backups = true;
-			$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
-			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($backup_dir)){
-					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-					sleep(1);
-					if(!$app->system->is_mounted($backup_dir)) $run_backups = false;
-				}
-			}
-
+            $run_backups = true;
+            //* mount backup directory, if necessary
+            if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $run_backups = false;
 			if($run_backups){
+				$web_array = array();
+				
 				//* backup only active domains
-				$sql = "SELECT * FROM web_domain WHERE server_id = '".$conf['server_id']."' AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y'";
-				$records = $app->db->queryAllRecords($sql);
+				$sql = "SELECT * FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y'";
+				$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 				if(is_array($records)) {
 					foreach($records as $rec) {
 
@@ -97,6 +91,7 @@
 							$web_user = $rec['system_user'];
 							$web_group = $rec['system_group'];
 							$web_id = $rec['domain_id'];
+							if(!in_array($web_id, $web_array)) $web_array[] = $web_id;
 							$web_backup_dir = $backup_dir.'/web'.$web_id;
 							if(!is_dir($web_backup_dir)) mkdir($web_backup_dir, 0750);
 							chmod($web_backup_dir, 0750);
@@ -131,16 +126,19 @@
 							}
 							if($retval == 0 || ($backup_mode != 'userzip' && $retval == 1) || ($backup_mode == 'userzip' && $retval == 12)) { // tar can return 1, zip can return 12(due to harmless warings) and still create valid backups  
 								if(is_file($web_backup_dir.'/'.$web_backup_file)){
-									chown($web_backup_dir.'/'.$web_backup_file, 'root');
-									chgrp($web_backup_dir.'/'.$web_backup_file, 'root');
+									$backupusername = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_user : 'root';
+									$backupgroup = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_group : 'root';
+									chown($web_backup_dir.'/'.$web_backup_file, $backupusername);
+									chgrp($web_backup_dir.'/'.$web_backup_file, $backupgroup);
 									chmod($web_backup_dir.'/'.$web_backup_file, 0750);
 
 									//* Insert web backup record in database
-									//$insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",".$web_id.",'web','".$backup_mode."',".time().",'".$app->db->quote($web_backup_file)."')";
-									//$app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id');
-									$sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",".$web_id.",'web','".$backup_mode."',".time().",'".$app->db->quote($web_backup_file)."')";
-									$app->db->query($sql);
-									if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+									$filesize = filesize($web_backup_dir.'/'.$web_backup_file);
+									$sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, tstamp, filename, filesize) VALUES (?, ?, ?, ?, ?, ?, ?)";
+									$app->db->query($sql, $conf['server_id'], $web_id, 'web', $backup_mode, time(), $web_backup_file, $filesize);
+									if($app->db->dbHost != $app->dbmaster->dbHost) 
+										$app->dbmaster->query($sql, $conf['server_id'], $web_id, 'web', $backup_mode, time(), $web_backup_file, $filesize);
+									unset($filesize);
 								}
 							} else {
 								if(is_file($web_backup_dir.'/'.$web_backup_file)) unlink($web_backup_dir.'/'.$web_backup_file);
@@ -162,14 +160,10 @@
 
 							for ($n = $backup_copies; $n <= 10; $n++) {
 								if(isset($files[$n]) && is_file($web_backup_dir.'/'.$files[$n])) {
-									unlink($web_backup_dir.'/'.$files[$n]);
-									//$sql = "SELECT backup_id FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = $web_id AND filename = '".$app->db->quote($files[$n])."'";
-									//$tmp = $app->dbmaster->queryOneRecord($sql);
-									//$app->dbmaster->datalogDelete('web_backup', 'backup_id', $tmp['backup_id']);
-									//$sql = "DELETE FROM web_backup WHERE backup_id = ".intval($tmp['backup_id']);
-									$sql = "DELETE FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = $web_id AND filename = '".$app->db->quote($files[$n])."'";
-									$app->db->query($sql);
-									if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+									$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+									$app->db->query($sql, $conf['server_id'], $web_id, $files[$n]);
+									if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'],  $web_id, $files[$n]);
+									@unlink($web_backup_dir.'/'.$files[$n]);
 								}
 							}
 
@@ -199,16 +193,15 @@
 							$web_backup_dir = realpath($backup_dir.'/web'.$web_id);
 							if(is_dir($web_backup_dir)) {
 								exec('sudo -u '.escapeshellarg($web_user).' rm -f '.escapeshellarg($web_backup_dir.'/*'));
-								$sql = "DELETE FROM web_backup WHERE server_id = ".intval($conf['server_id'])." AND parent_domain_id = ".intval($web_id);
-								$app->db->query($sql);
-								if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+								$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ?";
+								$app->db->query($sql, $conf['server_id'], $web_id);
+								if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $web_id);
 							}
 						}
 					}
 				}
 
-				$sql = "SELECT * FROM web_database WHERE server_id = ".$conf['server_id']." AND backup_interval != 'none' AND backup_interval != ''";
-				$records = $app->db->queryAllRecords($sql);
+				$records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND backup_interval != 'none' AND backup_interval != ''", $conf['server_id']);
 				if(is_array($records)) {
 
 					include 'lib/mysql_clientdb.conf';
@@ -219,18 +212,27 @@
 						if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
 
 							$web_id = $rec['parent_domain_id'];
+							if(!in_array($web_id, $web_array)) $web_array[] = $web_id;
 							$db_backup_dir = $backup_dir.'/web'.$web_id;
 							if(!is_dir($db_backup_dir)) mkdir($db_backup_dir, 0750);
 							chmod($db_backup_dir, 0750);
-							chown($db_backup_dir, 'root');
-							chgrp($db_backup_dir, 'root');
+							$backupusername = 'root';
+							$backupgroup = 'root';
+							if ($global_config['backups_include_into_web_quota'] == 'y') {
+								$sql = "SELECT * FROM web_domain WHERE domain_id = ".$rec['parent_domain_id'];
+								$webdomain = $app->db->queryOneRecord($sql);
+								$backupusername = $webdomain['system_user'];
+								$backupgroup = $webdomain['system_group'];
+							}
+							chown($db_backup_dir, $backupusername);
+							chgrp($db_backup_dir, $backupgroup);
 
 							//* Do the mysql database backup with mysqldump
 							$db_id = $rec['database_id'];
 							$db_name = $rec['database_name'];
 							$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
 							//$command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-							$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
+							$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --max_allowed_packet=512M --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
 							exec($command, $tmp_output, $retval);
 
 							//* Compress the backup with gzip
@@ -243,11 +245,12 @@
 									chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir));
 
 									//* Insert web backup record in database
-									//$insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
-									//$app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id');
-									$sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
-									$app->db->query($sql);
-									if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+									$filesize = filesize($db_backup_dir.'/'.$db_backup_file.'.gz');
+									$sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, tstamp, filename, filesize) VALUES (?, ?, ?, ?, ?, ?, ?)";
+									$app->db->query($sql, $conf['server_id'], $web_id, 'mysql', 'sqlgz', time(), $db_backup_file.'.gz', $filesize);
+									if($app->db->dbHost != $app->dbmaster->dbHost) 
+										$app->dbmaster->query($sql, $conf['server_id'], $web_id, 'mysql', 'sqlgz', time(), $db_backup_file.'.gz', $filesize);
+									unset($filesize);
 								}
 							} else {
 								if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')) unlink($db_backup_dir.'/'.$db_backup_file.'.gz');
@@ -261,7 +264,7 @@
 							$dir_handle = dir($db_backup_dir);
 							$files = array();
 							while (false !== ($entry = $dir_handle->read())) {
-								if($entry != '.' && $entry != '..' && preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($db_backup_dir.'/'.$entry)) {
+								if($entry != '.' && $entry != '..' && preg_match('/^db_('.$db_name.')_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($db_backup_dir.'/'.$entry)) {
 									if(array_key_exists($matches[1], $files) == false) $files[$matches[1]] = array();
 									$files[$matches[1]][] = $entry;
 								}
@@ -273,13 +276,10 @@
 								rsort($filelist);
 								for ($n = $backup_copies; $n <= 10; $n++) {
 									if(isset($filelist[$n]) && is_file($db_backup_dir.'/'.$filelist[$n])) {
-										unlink($db_backup_dir.'/'.$filelist[$n]);
-										//$sql = "SELECT backup_id FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = $web_id AND filename = '".$app->db->quote($filelist[$n])."'";
-										//$tmp = $app->dbmaster->queryOneRecord($sql);
-										//$sql = "DELETE FROM web_backup WHERE backup_id = ".intval($tmp['backup_id']);
-										$sql = "DELETE FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = $web_id AND filename = '".$app->db->quote($filelist[$n])."'";
-										$app->db->query($sql);
-										if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+										$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+										$app->db->query($sql, $conf['server_id'], $web_id, $filelist[$n]);
+										if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $web_id, $filelist[$n]);
+										@unlink($db_backup_dir.'/'.$filelist[$n]);
 									}
 								}
 							}
@@ -296,17 +296,63 @@
 				}
 
 				// remove non-existing backups from database
-				$backups = $app->db->queryAllRecords("SELECT * FROM web_backup WHERE server_id = ".$conf['server_id']);
+				$backups = $app->db->queryAllRecords("SELECT * FROM web_backup WHERE server_id = ?", $conf['server_id']);
 				if(is_array($backups) && !empty($backups)){
 					foreach($backups as $backup){
 						$backup_file = $backup_dir.'/web'.$backup['parent_domain_id'].'/'.$backup['filename'];
 						if(!is_file($backup_file)){
-							$sql = "DELETE FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$backup['parent_domain_id']." AND filename = '".$backup['filename']."'";
-							$app->db->query($sql);
-							if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+							$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+							$app->db->query($sql, $conf['server_id'], $backup['parent_domain_id'], $backup['filename']);
 						}
 					}
 				}
+				if($app->db->dbHost != $app->dbmaster->dbHost){
+					$backups = $app->dbmaster->queryAllRecords("SELECT * FROM web_backup WHERE server_id = ?", $conf['server_id']);
+					if(is_array($backups) && !empty($backups)){
+						foreach($backups as $backup){
+							$backup_file = $backup_dir.'/web'.$backup['parent_domain_id'].'/'.$backup['filename'];
+							if(!is_file($backup_file)){
+								$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+								$app->dbmaster->query($sql, $conf['server_id'], $backup['parent_domain_id'], $backup['filename']);
+							}
+						}
+					}
+				}
+				
+				// garbage collection (non-existing databases)
+				if(is_array($web_array) && !empty($web_array)){
+					foreach($web_array as $tmp_web_id){
+						$tmp_backup_dir = $backup_dir.'/web'.$tmp_web_id;
+						if(is_dir($tmp_backup_dir)){
+							$dir_handle = dir($tmp_backup_dir);
+							$files = array();
+							while (false !== ($entry = $dir_handle->read())) {
+								if($entry != '.' && $entry != '..' && preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($tmp_backup_dir.'/'.$entry)) {
+
+									$tmp_db_name = $matches[1];
+									$tmp_database = $app->db->queryOneRecord("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ? AND database_name = ?", $conf['server_id'], $tmp_web_id, $tmp_db_name);
+
+									if(is_array($tmp_database) && !empty($tmp_database)){
+										if($tmp_database['backup_interval'] == 'none' || intval($tmp_database['backup_copies']) == 0){
+											@unlink($tmp_backup_dir.'/'.$entry);
+											$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+											$app->db->query($sql, $conf['server_id'], $tmp_web_id, $entry);
+											if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $tmp_web_id, $entry);
+										}
+									} else {
+										@unlink($tmp_backup_dir.'/'.$entry);
+										$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+										$app->db->query($sql, $conf['server_id'], $tmp_web_id, $entry);
+										if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $tmp_web_id, $entry);
+									}
+								}
+							}
+							$dir_handle->close();
+						}
+					}
+				}
+				//* end run_backups
+				if( $server_config['backup_dir_is_mount'] == 'y' ) $app->system->umount_backup_dir($backup_dir);
 			} else {
 				//* send email to admin that backup directory could not be mounted
 				$global_config = $app->getconf->get_global_config('mail');
@@ -317,6 +363,27 @@
 				}
 			}
 		}
+		
+		// delete files from backup download dir (/var/www/example.com/backup)
+		unset($records, $entry, $files);
+		$sql = "SELECT * FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y'";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
+		if(is_array($records)) {
+			foreach($records as $rec) {
+				$backup_download_dir = $rec['document_root'].'/backup';
+				if(is_dir($backup_download_dir)){
+					$dir_handle = dir($backup_download_dir);
+					$files = array();
+					while (false !== ($entry = $dir_handle->read())) {
+						if($entry != '.' && $entry != '..' && is_file($backup_download_dir.'/'.$entry)) {
+							// delete files older than 3 days
+							if(time() - filemtime($backup_download_dir.'/'.$entry) >= 60*60*24*3) @unlink($backup_download_dir.'/'.$entry);
+						}
+					}
+					$dir_handle->close();
+				}
+			}
+		}
 
 		parent::onRunJob();
 	}
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index 8740c55..89cb167 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -31,6 +31,7 @@
 
 	// job schedule
 	protected $_schedule = '0 0 * * *';
+	private $tmp_backup_dir = '';
 
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
@@ -51,7 +52,8 @@
 
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-
+		$global_config = $app->getconf->get_global_config('sites');
+		
 		$backup_dir = $server_config['backup_dir'];
 		$backup_dir_permissions =0750;
 
@@ -59,19 +61,11 @@
 		if($backup_mode == '') $backup_mode = 'userzip';
 
 		if($backup_dir != '') {
-			//* mount backup directory, if necessary
 			$run_backups = true;
-			$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
-			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($backup_dir)){
-					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-					sleep(1);
-					if(!$app->system->is_mounted($backup_dir)) $run_backups = false;
-				}
-			}
+			//* mount backup directory, if necessary
+			if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $run_backups = false;
 
-			$sql = "SELECT * FROM mail_user WHERE server_id = '".intval($conf['server_id'])."' AND maildir <> ''";
-			$records = $app->db->queryAllRecords($sql);
+			$records = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ? AND maildir != ''", intval($conf['server_id']));
 
 			if(is_array($records) && $run_backups) {
 				if(!is_dir($backup_dir)) {
@@ -83,45 +77,98 @@
 				foreach($records as $rec) {
 					//* Do the mailbox backup
 					if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
-						$email = $rec['email'][1];
-						$sql="SELECT * FROM mail_domain WHERE domain = ?" . $app->db->quote(explode("@",$email))."'";
-						unset($email);
-						$domain_rec=$app->db->queryOneRecord($sql);
+						$email = $rec['email'];
+						$temp = explode("@",$email);
+						$domain = $temp[1];
+						unset($temp);;
+						$domain_rec=$app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain = ?", $domain);
+						
+						$backupusername = 'root';
+						$backupgroup = 'root';
+						if ($global_config['backups_include_into_web_quota'] == 'y') {
+							// this only works, if mail and webdomains are on the same server
+							// find webdomain fitting to maildomain
+							$sql = "SELECT * FROM web_domain WHERE domain = ?";
+							$webdomain = $app->db->queryOneRecord($sql, $domain_rec['domain']);
+							// if this is not also the website, find website now
+							if ($webdomain && ($webdomain['parent_domain_id'] != 0)) {
+								do {
+									$sql = "SELECT * FROM web_domain WHERE domain_id = ?";
+									$webdomain = $app->db->queryOneRecord($sql, $webdomain['parent_domain_id']);
+								} while ($webdomain && ($webdomain['parent_domain_id'] != 0));
+							}
+							// if webdomain is found, change username/group now
+							if ($webdomain) {
+								$backupusername = $webdomain['system_user'];
+								$backupgroup = $webdomain['system_group'];
+							}
+						}						
 
 						$mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
 						if(!is_dir($mail_backup_dir)) mkdir($mail_backup_dir, 0750);
 						chmod($mail_backup_dir, $backup_dir_permissions);
+						chown($mail_backup_dir, $backupusername);
+						chgrp($mail_backup_dir, $backupgroup);
 
 						$mail_backup_file = 'mail'.$rec['mailuser_id'].'_'.date('Y-m-d_H-i');
 
-						$domain_dir=explode('/',$rec['maildir']); 
-						$_temp=array_pop($domain_dir);unset($_temp);
-						$domain_dir=implode('/',$domain_dir);
-						
-						$parts=explode('/',$rec['maildir']);
-						$source_dir=array_pop($parts);
-						unset($parts);
-
-						//* create archives
-						if($backup_mode == 'userzip') {
-							$mail_backup_file.='.zip';
-							exec('cd '.$domain_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b /tmp -r '.$source_dir.' > /dev/nul', $tmp_output, $retval);
-						} else {
-							/* Create a tar.gz backup */
-							$mail_backup_file.='.tar.gz';
-							exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$domain_dir.' '.$source_dir), $tmp_output, $retval);
+						// in case of mdbox -> create backup with doveadm before zipping
+						if ($rec['maildir_format'] == 'mdbox') {
+							if (empty($this->tmp_backup_dir)) $this->tmp_backup_dir = $rec['maildir'];
+							// Create temporary backup-mailbox
+							exec("su -c 'dsync backup -u \"".$rec["email"]."\" mdbox:".$this->tmp_backup_dir."/backup'", $tmp_output, $retval);
+		
+							if($backup_mode == 'userzip') {
+								$mail_backup_file.='.zip';
+								exec('cd '.$this->tmp_backup_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b /tmp -r backup > /dev/null && rm -rf backup', $tmp_output, $retval);
+							}
+							else {
+								$mail_backup_file.='.tar.gz';
+								exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$this->tmp_backup_dir.' backup && rm -rf '.$this->tmp_backup_dir.'/backup'), $tmp_output, $retval);
+							}
+							
+							if ($retval != 0) {
+								// Cleanup
+								if (file_exists($this->tmp_backup_dir.'/backup')) exec('rm -rf '.$this->tmp_backup_dir.'/backup');
+							}
 						}
+						else {
+							$domain_dir=explode('/',$rec['maildir']);
+							$_temp=array_pop($domain_dir);unset($_temp);
+							$domain_dir=implode('/',$domain_dir);
+							
+							$parts=explode('/',$rec['maildir']);
+							$source_dir=array_pop($parts);
+							unset($parts);
+							
+							//* create archives
+							if($backup_mode == 'userzip') {
+								$mail_backup_file.='.zip';
+								exec('cd '.$domain_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b /tmp -r '.$source_dir.' > /dev/null', $tmp_output, $retval);
+							} else {
+								/* Create a tar.gz backup */
+								$mail_backup_file.='.tar.gz';
+								exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$domain_dir.' '.$source_dir), $tmp_output, $retval);
+							}
+						}
+						
 						if($retval == 0){
-							chown($mail_backup_dir.'/'.$mail_backup_file, 'root');
-							chgrp($mail_backup_dir.'/'.$mail_backup_file, 'root');
+							chown($mail_backup_dir.'/'.$mail_backup_file, $backupusername);
+							chgrp($mail_backup_dir.'/'.$mail_backup_file, $backupgroup);
 							chmod($mail_backup_dir.'/'.$mail_backup_file, 0640);
 							/* Insert mail backup record in database */
-							$sql = "INSERT INTO mail_backup (server_id,parent_domain_id,mailuser_id,backup_mode,tstamp,filename,filesize) VALUES (".$conf['server_id'].",".$domain_rec['domain_id'].",".$rec['mailuser_id'].",'".$backup_mode."',".time().",'".$app->db->quote($mail_backup_file)."','".$app->functions->formatBytes(filesize($mail_backup_dir.'/'.$mail_backup_file))."')";
-							$app->db->query($sql);	
-							if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+							$filesize = filesize($mail_backup_dir.'/'.$mail_backup_file);
+							$sql = "INSERT INTO mail_backup (server_id, parent_domain_id, mailuser_id, backup_mode, tstamp, filename, filesize) VALUES (?, ?, ?, ?, ?, ?, ?)";
+							$app->db->query($sql, $conf['server_id'], $domain_rec['domain_id'], $rec['mailuser_id'], $backup_mode, time(), $mail_backup_file, $filesize);	
+							if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $domain_rec['domain_id'], $rec['mailuser_id'], $backup_mode, time(), $mail_backup_file, $filesize);
+							unset($filesize);
 						} else {
 							/* Backup failed - remove archive */
 							if(is_file($mail_backup_dir.'/'.$mail_backup_file)) unlink($mail_backup_dir.'/'.$mail_backup_file);
+							// And remove backup-mdbox
+							if ($rec['maildir_format'] == 'mdbox') {
+								if(file_exists($rec['maildir'].'/backup'))  exec("su -c 'rm -rf ".$rec['maildir']."/backup'");
+							}
 							$app->log($mail_backup_file.' NOK:'.implode('',$tmp_output), LOGLEVEL_DEBUG);
 						}
 						/* Remove old backups */
@@ -138,9 +185,9 @@
 						for ($n = $backup_copies; $n <= 10; $n++) {
 							if(isset($files[$n]) && is_file($mail_backup_dir.'/'.$files[$n])) {
 								unlink($mail_backup_dir.'/'.$files[$n]);
-								$sql = "DELETE FROM mail_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$domain_rec['domain_id']." AND filename = '".$app->db->quote($files[$n])."'";
-								$app->db->query($sql);
-								if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+								$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+								$app->db->query($sql, $conf['server_id'], $domain_rec['domain_id'], $files[$n]);
+								if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $domain_rec['domain_id'], $files[$n]);
 							}
 						}
 						unset($files);
@@ -149,9 +196,9 @@
 					/* Remove inactive backups */
 					if($rec['backup_interval'] == 'none') {
 						/* remove backups from db */
-						$sql = "DELETE FROM mail_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$domain_rec['domain_id']." AND mailuser_id = ".$rec['mailuser_id'];
-						$app->db->query($sql);
-						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+						$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND mailuser_id = ?";
+						$app->db->query($sql, $conf['server_id'], $domain_rec['domain_id'], $rec['mailuser_id']);
+						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $domain_rec['domain_id'], $rec['mailuser_id']);
 						/* remove archives */
 						$mail_backup_dir = $backup_dir.'/mail'.$rec['domain_id'];	
 						$mail_backup_file = 'mail'.$rec['mailuser_id'].'_*';
@@ -162,7 +209,8 @@
 						}
 					}
 				}
-			}
+				if( $server_config['backup_dir_is_mount'] == 'y' ) $app->system->umount_backup_dir($backup_dir);
+			} //* end run_backups
 		}
 
 		parent::onRunJob();
diff --git a/server/lib/classes/cron.d/600-cleanup.inc.php b/server/lib/classes/cron.d/600-cleanup.inc.php
index 8222fe5..e55c259 100644
--- a/server/lib/classes/cron.d/600-cleanup.inc.php
+++ b/server/lib/classes/cron.d/600-cleanup.inc.php
@@ -58,8 +58,8 @@
 			$records = $app->db->queryAllRecords("SELECT s.instance_id, s.name, s.value FROM `aps_instances_settings` as s INNER JOIN `aps_instances` as i ON (i.id = s.instance_id) WHERE s.value != '' AND s.name IN ('main_database_password', 'admin_password') AND i.instance_status > 1");
 			if(is_array($records)) {
 				foreach($records as $rec) {
-					$tmp = $app->db->queryOneRecord("SELECT id FROM aps_instances_settings WHERE instance_id = '".$app->db->quote($rec['instance_id'])."' AND name = '".$app->db->quote($rec['name'])."'");
-					$app->db->datalogUpdate('aps_instances_settings', "value = ''", 'id', $tmp['id']);
+					$tmp = $app->db->queryOneRecord("SELECT id FROM aps_instances_settings WHERE instance_id = ? AND name = ?", $rec['instance_id'], $rec['name']);
+					$app->db->datalogUpdate('aps_instances_settings', array("value" => ''), 'id', $tmp['id']);
 				}
 			}
 		}
diff --git a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
new file mode 100644
index 0000000..181dd51
--- /dev/null
+++ b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
@@ -0,0 +1,77 @@
+<?php
+
+/*
+Copyright (c) 2015, Dominik Müller, Profi Webdesign
+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 cronjob_purge_mailboxes extends cronjob {
+
+	// should run before quota notify and backup
+	// quota notify and backup is both '0 0 * * *' 
+	
+	// job schedule
+	protected $_schedule = '30 23 * * *';
+
+	/* this function is optional if it contains no custom code */
+	public function onPrepare() {
+		global $app;
+
+		parent::onPrepare();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onBeforeRun() {
+		global $app;
+
+		return parent::onBeforeRun();
+	}
+
+	public function onRunJob() {
+		global $app, $conf;
+
+		$sql = "SELECT email FROM mail_user WHERE maildir_format = 'mdbox' AND server_id = ".$server_id;
+		$records = $app->db->queryAllRecords($sql);
+		
+		if(is_array($records)) {
+			foreach($records as $rec){
+				exec("su -c 'doveadm purge -u \"".$rec["email"]."\"'");
+			}
+		}
+
+		parent::onRunJob();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onAfterRun() {
+		global $app;
+
+		parent::onAfterRun();
+	}
+
+}
+
+?>
diff --git a/server/lib/classes/cronjob.inc.php b/server/lib/classes/cronjob.inc.php
index 7fe90c2..03e36e7 100644
--- a/server/lib/classes/cronjob.inc.php
+++ b/server/lib/classes/cronjob.inc.php
@@ -76,7 +76,7 @@
 		// check the run time and values for this job
 
 		// get previous run data
-		$data = $app->db->queryOneRecord("SELECT `last_run`, `next_run`, `running` FROM `sys_cron` WHERE `name` = '" . $app->db->quote(get_class($this)) . "'");
+		$data = $app->db->queryOneRecord("SELECT `last_run`, `next_run`, `running` FROM `sys_cron` WHERE `name` = ?", get_class($this));
 		if($data) {
 			if($data['last_run']) $this->_last_run = $data['last_run'];
 			if($data['next_run']) $this->_next_run = $data['next_run'];
@@ -90,7 +90,7 @@
 				$next_run = $app->cron->getNextRun(ISPConfigDateTime::dbtime());
 				$this->_next_run = $next_run;
 
-				$app->db->query("REPLACE INTO `sys_cron` (`name`, `last_run`, `next_run`, `running`) VALUES ('" . $app->db->quote(get_class($this)) . "', " . ($this->_last_run ? "'" . $app->db->quote($this->_last_run) . "'" : "NULL") . ", " . ($next_run === false ? "NULL" : "'" . $app->db->quote($next_run) . "'") . ", " . ($this->_running == true ? "1" : "0") . ")");
+				$app->db->query("REPLACE INTO `sys_cron` (`name`, `last_run`, `next_run`, `running`) VALUES (?, ?, ?, ?)", get_class($this), ($this->_last_run ? $this->_last_run : "#NULL#"), ($next_run === false ? "#NULL#" : $next_run . "'"), ($this->_running == true ? "1" : "0"));
 			}
 		}
 	}
@@ -131,7 +131,7 @@
 
 		print "Jobs next run is now " . $next_run . "\n";
 
-		$app->db->query("REPLACE INTO `sys_cron` (`name`, `last_run`, `next_run`, `running`) VALUES ('" . $app->db->quote(get_class($this)) . "', NOW(), " . ($next_run === false ? "NULL" : "'" . $app->db->quote($next_run) . "'") . ", 1)");
+		$app->db->query("REPLACE INTO `sys_cron` (`name`, `last_run`, `next_run`, `running`) VALUES (?, NOW(), ?, 1)", get_class($this), ($next_run === false ? "#NULL#" : $next_run));
 		return true;
 	}
 
@@ -154,7 +154,7 @@
 		global $app;
 
 		print "Called onCompleted() for class " . get_class($this) . "\n";
-		$app->db->query("UPDATE `sys_cron` SET `running` = 0 WHERE `name` = '" . $app->db->quote(get_class($this)) . "'");
+		$app->db->query("UPDATE `sys_cron` SET `running` = 0 WHERE `name` = ?", get_class($this));
 	}
 
 }
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 51cad86..bf43519 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -36,6 +36,7 @@
 	private $_iConnId;
 
 	private $dbHost = '';  // hostname of the MySQL server
+	private $dbPort = '';  // port of the MySQL server
 	private $dbName = '';  // logical database name on that server
 	private $dbUser = '';  // database authorized user
 	private $dbPass = '';  // user's password
@@ -54,17 +55,20 @@
 	private $autoCommit = 1;    // Autocommit Transactions
 	private $currentRow;  // current row number
 	public $errorNumber = 0; // last error number
+	*/
 	public $errorMessage = ''; // last error message
+	/*
 	private $errorLocation = '';// last error location
 	private $isConnected = false; // needed to know if we have a valid mysqli object from the constructor
 	////
 	*/
 
 	// constructor
-	public function __construct($host = NULL , $user = NULL, $pass = NULL, $database = NULL) {
+	public function __construct($host = NULL , $user = NULL, $pass = NULL, $database = NULL, $port = NULL) {
 		global $app, $conf;
 
 		$this->dbHost = $host ? $host  : $conf['db_host'];
+		$this->dbPort = $port ? $port : $conf['db_port'];
 		$this->dbName = $database ? $database : $conf['db_database'];
 		$this->dbUser = $user ? $user : $conf['db_user'];
 		$this->dbPass = $pass ? $pass : $conf['db_password'];
@@ -72,13 +76,13 @@
 		$this->dbNewLink = $conf['db_new_link'];
 		$this->dbClientFlags = $conf['db_client_flags'];
 
-		$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+		$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, (int)$this->dbPort);
 		$try = 0;
 		while((!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5) {
 			if($try > 0) sleep(1);
 
 			$try++;
-			$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass);
+			$this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, (int)$this->dbPort);
 		}
 
 		if(!is_object($this->_iConnId) || mysqli_connect_error()) {
@@ -86,7 +90,7 @@
 			$this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!');
 			return false;
 		}
-		if(!((bool)mysqli_query( $this->_iConnId, "USE $this->dbName"))) {
+		if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) {
 			$this->close();
 			$this->_sqlerror('Datenbank nicht gefunden / Database not found');
 			return false;
@@ -132,8 +136,10 @@
 				if($iPos2 !== false && ($iPos === false || $iPos2 <= $iPos)) {
 					$sTxt = $this->escape($sValue);
 
-					if(strpos($sTxt, '.') !== false) $sTxt = preg_replace('/^(.+)\.(.+)$/', '`$1`.`$2`', $sTxt);
-					else $sTxt = '`' . $sTxt . '`';
+					if(strpos($sTxt, '.') !== false) {
+						$sTxt = preg_replace('/^(.+)\.(.+)$/', '`$1`.`$2`', $sTxt);
+						$sTxt = str_replace('.`*`', '.*', $sTxt);
+					} else $sTxt = '`' . $sTxt . '`';
 
 					$sQuery = substr_replace($sQuery, $sTxt, $iPos2, 2);
 					$iPos2 += strlen($sTxt);
@@ -141,13 +147,17 @@
 				} else {
 					if(is_int($sValue) || is_float($sValue)) {
 						$sTxt = $sValue;
-					} elseif(is_string($sValue) && (strcmp($sValue, '#NULL#') == 0)) {
+					} elseif(is_null($sValue) || (is_string($sValue) && (strcmp($sValue, '#NULL#') == 0))) {
 						$sTxt = 'NULL';
 					} elseif(is_array($sValue)) {
-						$sTxt = '';
-						foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\'';
-						$sTxt = '(' . substr($sTxt, 1) . ')';
-						if($sTxt == '()') $sTxt = '(0)';
+						if(isset($sValue['SQL'])) {
+							$sTxt = $sValue['SQL'];
+						} else {
+							$sTxt = '';
+							foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\'';
+							$sTxt = '(' . substr($sTxt, 1) . ')';
+							if($sTxt == '()') $sTxt = '(0)';
+						}
 					} else {
 						$sTxt = '\'' . $this->escape($sValue) . '\'';
 					}
@@ -176,7 +186,7 @@
 	private function _query($sQuery = '') {
 		global $app;
 
-		if($this->isConnected == false) return false;
+		//if($this->isConnected == false) return false;
 		if ($sQuery == '') {
 			$this->_sqlerror('Keine Anfrage angegeben / No query given');
 			return false;
@@ -187,7 +197,7 @@
 			$try++;
 			$ok = mysqli_ping($this->_iConnId);
 			if(!$ok) {
-				if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) {
+				if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort)) {
 					if($this->errorNumber == '111') {
 						// server is not available
 						if($try > 9) {
@@ -390,6 +400,35 @@
 
 
 	/**
+	 * check if a utf8 string is valid
+	 *
+	 * @access public
+	 * @param string  $string the string to check
+	 * @return bool true if it is valid utf8, false otherwise
+	 */
+	private function check_utf8($str) {
+		$len = strlen($str);
+		for($i = 0; $i < $len; $i++){
+			$c = ord($str[$i]);
+			if ($c > 128) {
+				if (($c > 247)) return false;
+				elseif ($c > 239) $bytes = 4;
+				elseif ($c > 223) $bytes = 3;
+				elseif ($c > 191) $bytes = 2;
+				else return false;
+				if (($i + $bytes) > $len) return false;
+				while ($bytes > 1) {
+					$i++;
+					$b = ord($str[$i]);
+					if ($b < 128 || $b > 191) return false;
+					$bytes--;
+				}
+			}
+		}
+		return true;
+	} // end of check_utf8
+
+	/**
 	 * Escape a string for usage in a query
 	 *
 	 * @access public
@@ -405,16 +444,16 @@
 			$sString = '';
 		}
 
-		/*$cur_encoding = mb_detect_encoding($sString);
+		$cur_encoding = mb_detect_encoding($sString);
 		if($cur_encoding != "UTF-8") {
 			if($cur_encoding != 'ASCII') {
-				$app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_WARN);
+				$app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_INFO);
 				if($cur_encoding) $sString = mb_convert_encoding($sString, 'UTF-8', $cur_encoding);
 				else $sString = mb_convert_encoding($sString, 'UTF-8');
 			}
-		} elseif(!PXBase::check_utf8($sString)) {
+		} elseif(!$this->check_utf8($sString)) {
 			$sString = utf8_encode($sString);
-		}*/
+		}
 
 		if($this->_iConnId) return mysqli_real_escape_string($this->_iConnId, $sString);
 		else return addslashes($sString);
@@ -430,6 +469,7 @@
 
 		$mysql_error = (is_object($this->_iConnId) ? mysqli_error($this->_iConnId) : mysqli_connect_error());
 		$mysql_errno = (is_object($this->_iConnId) ? mysqli_errno($this->_iConnId) : mysqli_connect_errno());
+		$this->errorMessage = $mysql_error;
 
 		//$sAddMsg .= getDebugBacktrace();
 
@@ -586,20 +626,27 @@
 		if(is_array($insert_data)) {
 			$key_str = '';
 			$val_str = '';
+			$params = array($tablename);
+			$v_params = array();
 			foreach($insert_data as $key => $val) {
-				$key_str .= "`".$key ."`,";
-				$val_str .= "'".$this->escape($val)."',";
+				$key_str .= '??,';
+				$params[] = $key;
+				
+				$val_str .= '?,';
+				$v_params[] = $val;
 			}
 			$key_str = substr($key_str, 0, -1);
 			$val_str = substr($val_str, 0, -1);
 			$insert_data_str = '('.$key_str.') VALUES ('.$val_str.')';
+			$this->query("INSERT INTO ?? $insert_data_str", true, $params + $v_params);
 		} else {
+			/* TODO: deprecate this method! */
 			$insert_data_str = $insert_data;
+			$this->query("INSERT INTO ?? $insert_data_str", $tablename);
+			$app->log("deprecated use of passing values to datalogInsert() - table " . $tablename, 1);
 		}
-		/* TODO: reduce risk of insert_data_str! */
-
+		
 		$old_rec = array();
-		$this->query("INSERT INTO ?? $insert_data_str", $tablename);
 		$index_value = $this->insertID();
 		$new_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ? = ?", $tablename, $index_field, $index_value);
 		$this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec);
@@ -614,17 +661,24 @@
 		$old_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ?? = ?", $tablename, $index_field, $index_value);
 
 		if(is_array($update_data)) {
+			$params = array($tablename);
 			$update_data_str = '';
 			foreach($update_data as $key => $val) {
-				$update_data_str .= "`".$key ."` = '".$this->escape($val)."',";
+				$update_data_str .= '?? = ?,';
+				$params[] = $key;
+				$params[] = $val;
 			}
+			$params[] = $index_field;
+			$params[] = $index_value;
 			$update_data_str = substr($update_data_str, 0, -1);
+			$this->query("UPDATE ?? SET $update_data_str WHERE ?? = ?", true, $params);
 		} else {
+			/* TODO: deprecate this method! */
 			$update_data_str = $update_data;
+			$this->query("UPDATE ?? SET $update_data_str WHERE ?? = ?", $tablename, $index_field, $index_value);
+			$app->log("deprecated use of passing values to datalogUpdate() - table " . $tablename, 1);
 		}
-		/* TODO: reduce risk of update_data_str */
 
-		$this->query("UPDATE ?? SET $update_data_str WHERE ?? = ?", $tablename, $index_field, $index_value);
 		$new_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ?? = ?", $tablename, $index_field, $index_value);
 		$this->datalogSave($tablename, 'UPDATE', $index_field, $index_value, $old_rec, $new_rec, $force_update);
 
@@ -647,7 +701,7 @@
 	public function datalogError($errormsg) {
 		global $app;
 
-		if(isset($app->modules->current_datalog_id) && $app->modules->current_datalog_id > 0) $this->query("UPDATE sys_datalog set error = '".$this->quote($errormsg)."' WHERE datalog_id = ".$app->modules->current_datalog_id);
+		if(isset($app->modules->current_datalog_id) && $app->modules->current_datalog_id > 0) $this->query("UPDATE sys_datalog set error = ? WHERE datalog_id = ?", $errormsg, $app->modules->current_datalog_id);
 
 		return true;
 	}
diff --git a/server/lib/classes/functions.inc.php b/server/lib/classes/functions.inc.php
index be55503..5632a58 100644
--- a/server/lib/classes/functions.inc.php
+++ b/server/lib/classes/functions.inc.php
@@ -237,7 +237,7 @@
 		}
 
 		$ips = array();
-		$results = $app->db->queryAllRecords("SELECT ip_address AS ip FROM server_ip WHERE ip_type = '".$type."'");
+		$results = $app->db->queryAllRecords("SELECT ip_address AS ip FROM server_ip WHERE ip_type = ?", $type);
 		if(!empty($results) && is_array($results)){
 			foreach($results as $result){
 				if(preg_match($regex, $result['ip'])) $ips[] = $result['ip'];
diff --git a/server/lib/classes/getconf.inc.php b/server/lib/classes/getconf.inc.php
index 768ea2c..2c20971 100644
--- a/server/lib/classes/getconf.inc.php
+++ b/server/lib/classes/getconf.inc.php
@@ -38,7 +38,7 @@
 		if(!is_array($this->config[$server_id])) {
 			$app->uses('ini_parser');
 			$server_id = intval($server_id);
-			$server = $app->db->queryOneRecord('SELECT config FROM server WHERE server_id = '.$server_id);
+			$server = $app->db->queryOneRecord('SELECT config FROM server WHERE server_id = ?', $server_id);
 			$this->config[$server_id] = $app->ini_parser->parse_ini_string(stripslashes($server['config']));
 		}
 
diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php
index 194bf4f..e5ccaaf 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -85,12 +85,12 @@
 		//* If its a multiserver setup
 		if($app->db->dbHost != $app->dbmaster->dbHost || ($app->db->dbHost == $app->dbmaster->dbHost && $app->db->dbName != $app->dbmaster->dbName)) {
 			if($conf['mirror_server_id'] > 0) {
-				$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ".$conf['last_datalog_id']." AND (server_id = ".$conf['server_id']." OR server_id = ".$conf['mirror_server_id']." OR server_id = 0) ORDER BY datalog_id LIMIT 0,1000";
+				$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ? AND (server_id = ? OR server_id = ? OR server_id = 0) ORDER BY datalog_id LIMIT 0,1000";
 			} else {
-				$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ".$conf['last_datalog_id']." AND (server_id = ".$conf['server_id']." OR server_id = 0) ORDER BY datalog_id LIMIT 0,1000";
+				$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ? AND (server_id = ? OR server_id = 0) ORDER BY datalog_id LIMIT 0,1000";
 			}
 
-			$records = $app->dbmaster->queryAllRecords($sql);
+			$records = $app->dbmaster->queryAllRecords($sql, $conf['last_datalog_id'], $conf['server_id'], $conf['mirror_server_id']);
 			foreach($records as $d) {
 
 				//** encode data to utf-8 and unserialize it
@@ -133,46 +133,38 @@
 						$idx = explode(':', $d['dbidx']);
 						$tmp_sql1 = '';
 						$tmp_sql2 = '';
+						$f_params = array($d['dbtable']);
+						$params = array();
 						foreach($data['new'] as $fieldname => $val) {
-							$tmp_sql1 .= "`$fieldname`,";
-							$tmp_sql2 .= "'".$app->db->quote($val)."',";
+							$tmp_sql1 .= "??,";
+							$tmp_sql2 .= "?,";
+							$f_params[] = $fieldname;
+							$params[] = $val;
 						}
+						$params = $f_params + $params;
+						unset($f_params);
+						
 						$tmp_sql1 = substr($tmp_sql1, 0, -1);
 						$tmp_sql2 = substr($tmp_sql2, 0, -1);
 						//$tmp_sql1 .= "$idx[0]";
 						//$tmp_sql2 .= "$idx[1]";
-						$sql = "REPLACE INTO $d[dbtable] ($tmp_sql1) VALUES ($tmp_sql2)";
+						$sql = "REPLACE INTO ?? ($tmp_sql1) VALUES ($tmp_sql2)";
 						$app->db->errorNumber = 0;
 						$app->db->errorMessage = '';
-						$app->db->query($sql);
+						$app->db->query($sql, true, $params);
+						unset($params);
 						if($app->db->errorNumber > 0) {
 							$replication_error = true;
 							$app->log("Replication failed. Error: (" . $d['dbtable'] . ") in MySQL server: (".$app->db->dbHost.") " . $app->db->errorMessage . " # SQL: " . $sql, LOGLEVEL_ERROR);
 						}
 						$app->log('Replicated from master: '.$sql, LOGLEVEL_DEBUG);
 					}
-					/*
-					if($d["action"] == 'u') {
-						$sql = "UPDATE $d[dbtable] SET ";
-						foreach($data['new'] as $fieldname => $val) {
-							$sql .= "`$fieldname` = '$val',";
-						}
-						$sql = substr($sql,0,-1);
-						$idx = explode(":",$d["dbidx"]);
-						$sql .= " WHERE $idx[0] = $idx[1]";
-						$app->db->query($sql);
-						if($app->db->errorNumber > 0) {
-							$replication_error = true;
-							$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
-						}
-						$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
-					}
-					*/
+					
 					if($d['action'] == 'd') {
 						$idx = explode(':', $d['dbidx']);
-						$sql = "DELETE FROM $d[dbtable] ";
-						$sql .= " WHERE $idx[0] = $idx[1]";
-						$app->db->query($sql);
+						$sql = "DELETE FROM ?? ";
+						$sql .= " WHERE ?? = ?";
+						$app->db->query($sql, $d['dbtable'], $idx[0], $idx[1]);
 						if($app->db->errorNumber > 0) {
 							$replication_error = true;
 							$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql, LOGLEVEL_ERROR);
@@ -183,12 +175,12 @@
 
 					if($replication_error == false) {
 						if(is_array($data['old']) || is_array($data['new'])) {
-							$app->db->query("UPDATE server SET updated = ".$d["datalog_id"]." WHERE server_id = ".$conf['server_id']);
+							$app->db->query("UPDATE server SET updated = ? WHERE server_id = ?", $d["datalog_id"], $conf['server_id']);
 							$this->raiseTableHook($d['dbtable'], $d['action'], $data);
 						} else {
 							$app->log('Data array was empty for datalog_id '.$d['datalog_id'], LOGLEVEL_WARN);
 						}
-						$app->dbmaster->query("UPDATE server SET updated = ".$d["datalog_id"]." WHERE server_id = ".$conf['server_id']);
+						$app->dbmaster->query("UPDATE server SET updated = ? WHERE server_id = ?", $d["datalog_id"], $conf['server_id']);
 						$app->log('Processed datalog_id '.$d['datalog_id'], LOGLEVEL_DEBUG);
 					} else {
 						$app->log('Error in Replication, changes were not processed.', LOGLEVEL_ERROR);
@@ -205,23 +197,14 @@
 
 			//* if we have a single server setup
 		} else {
-			$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ".$conf['last_datalog_id']." AND (server_id = ".$conf['server_id']." OR server_id = 0) ORDER BY datalog_id LIMIT 0,1000";
-			$records = $app->db->queryAllRecords($sql);
+			$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ? AND (server_id = ? OR server_id = 0) ORDER BY datalog_id LIMIT 0,1000";
+			$records = $app->db->queryAllRecords($sql, $conf['last_datalog_id'], $conf['server_id']);
 			foreach($records as $d) {
 
 				//** encode data to utf-8 to be able to unserialize it and then unserialize it
 				if(!$data = unserialize(stripslashes($d['data']))) {
 					$data = unserialize($d['data']);
 				}
-				//** decode data back to current locale
-				/*
-				foreach($data['old'] as $key => $val) {
-					$data['old'][$key] = utf8_decode($val);
-				}
-				foreach($data['new'] as $key => $val) {
-					$data['new'][$key] = utf8_decode($val);
-				}
-				*/
 
 				//* Data on a single server is never mirrored
 				$data['mirrored'] = false;
@@ -232,9 +215,7 @@
 				} else {
 					$app->log('Data array was empty for datalog_id '.$d['datalog_id'], LOGLEVEL_WARN);
 				}
-				//$app->db->query("DELETE FROM sys_datalog WHERE datalog_id = ".$rec["datalog_id"]);
-				//$app->log("Deleting sys_datalog ID ".$rec["datalog_id"],LOGLEVEL_DEBUG);
-				$app->db->query("UPDATE server SET updated = ".$d['datalog_id']." WHERE server_id = ".$conf['server_id']);
+				$app->db->query("UPDATE server SET updated = ? WHERE server_id = ?", $d['datalog_id'], $conf['server_id']);
 				$app->log('Processed datalog_id '.$d['datalog_id'], LOGLEVEL_DEBUG);
 			}
 		}
@@ -251,11 +232,11 @@
 		//* SQL query to get all pending actions
 		$sql = "SELECT action_id, action_type, action_param " .
 			"FROM sys_remoteaction " .
-			"WHERE server_id = " . $server_id . " ".
-			" AND  action_id > " . intval($maxid_remote_action) . " ".
+			"WHERE server_id = ? ".
+			" AND  action_id > ? ".
 			"ORDER BY action_id";
 
-		$actions = $app->dbmaster->queryAllRecords($sql);
+		$actions = $app->dbmaster->queryAllRecords($sql, $server_id, $maxid_remote_action);
 
 		if(is_array($actions)) {
 			foreach($actions as $action) {
@@ -265,9 +246,9 @@
 
 				//* Update the action state
 				$sql = "UPDATE sys_remoteaction " .
-					"SET action_state = '" . $app->dbmaster->quote($state) . "' " .
-					"WHERE action_id = " . intval($action['action_id']);
-				$app->dbmaster->query($sql);
+					"SET action_state = ? " .
+					"WHERE action_id = ?";
+				$app->dbmaster->query($sql, $state, $action['action_id']);
 
 				/*
 				* Then save the maxid for the next time...
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 50eb45b..4e25d38 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -62,6 +62,9 @@
 				$mainver = array_filter($mainver);
 				$mainver = current($mainver).'.'.next($mainver);
 				switch ($mainver){
+				case "15.04":
+					$relname = "(Vivid Vervet)";
+					break;
 				case "14.10":
 					$relname = "(Utopic Unicorn)";
 					break;
@@ -147,6 +150,11 @@
 			} elseif (strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') {
 				$distname = 'Debian';
 				$distver = 'Wheezy/Sid';
+				$distid = 'debian60';
+				$distbaseid = 'debian';
+			} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
+				$distname = 'Debian';
+				$distver = 'Jessie';
 				$distid = 'debian60';
 				$distbaseid = 'debian';
 			} else {
@@ -259,7 +267,7 @@
 		$server_id = intval($conf['server_id']);
 
 		/**  get the "active" Services of the server from the DB */
-		$services = $app->db->queryOneRecord('SELECT * FROM server WHERE server_id = ' . $server_id);
+		$services = $app->db->queryOneRecord('SELECT * FROM server WHERE server_id = ?', $server_id);
 		/*
 		 * If the DB is down, we have to set the db to "yes".
 		 * If we don't do this, then the monitor will NOT monitor, that the db is down and so the
@@ -670,12 +678,12 @@
 		 */
 		$sql = 'DELETE FROM monitor_data ' .
 			'WHERE ' .
-			'  type =' . "'" . $app->dbmaster->quote($type) . "' " .
+			'  type = ?' .
 			'AND ' .
-			'  created < ' . $old . ' ' .
+			'  created < ? ' .
 			'AND ' .
-			'  server_id = ' . $serverId;
-		$app->dbmaster->query($sql);
+			'  server_id = ?';
+		$app->dbmaster->query($sql, $type, $old, $serverId);
 	}
 
 	public function send_notification_email($template, $placeholders, $recipients) {
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 952df1a..98fc51f 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1801,6 +1801,36 @@
 		return $return_var == 0 ? true : false;
 	}
 
+	function mount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh'){
+		$mounted = true;
+		if ( 	is_file($mount_cmd) &&
+				is_executable($mount_cmd) &&
+				fileowner($mount_cmd) === 0
+		) {
+			if (!$this->is_mounted($backup_dir)){
+				exec($mount_cmd);
+				sleep(1);
+				if (!$this->is_mounted($backup_dir)) $mounted = false;
+			}
+		} else $mounted = false;
+
+		return $mounted;
+	}
+
+	function umount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_umount.sh'){
+		if ( 	is_file($mount_cmd) &&
+				is_executable($mount_cmd) &&
+				fileowner($mount_cmd) === 0
+		) {
+			if ($this->is_mounted($backup_dir)){
+				exec($mount_cmd);
+				sleep(1);
+			}
+		}
+
+        return $this->is_mounted($backup_dir) == 0 ? true : false;
+	}
+
 	function getinitcommand($servicename, $action, $init_script_directory = ''){
 		global $conf;
 		// upstart
diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php
index 0864953..807de50 100644
--- a/server/mods-available/remoteaction_core_module.inc.php
+++ b/server/mods-available/remoteaction_core_module.inc.php
@@ -62,10 +62,8 @@
 		 * 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);
+		$sql = "UPDATE sys_remoteaction SET action_state = ? WHERE action_id = ?";
+		$app->dbmaster->query($sql, $state, $id);
 
 		/*
 		 * Then save the maxid for the next time...
@@ -103,12 +101,8 @@
 		/*
 		 * 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);
+		$sql = "SELECT action_id, action_type, action_param FROM sys_remoteaction WHERE server_id = ? AND action_id > ? ORDER BY action_id";
+		$actions = $app->dbmaster->queryAllRecords($sql, $server_id, $maxid_remote_action);
 
 		/*
 		 * process all actions
diff --git a/server/mods-available/xmpp_module.inc.php b/server/mods-available/xmpp_module.inc.php
new file mode 100644
index 0000000..aace256
--- /dev/null
+++ b/server/mods-available/xmpp_module.inc.php
@@ -0,0 +1,130 @@
+<?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 xmpp_module {
+
+    var $module_name = 'xmpp_module';
+    var $class_name = 'xmpp_module';
+    var $actions_available = array(
+        'xmpp_domain_insert',
+        'xmpp_domain_update',
+        'xmpp_domain_delete',
+        'xmpp_user_insert',
+        'xmpp_user_update',
+        'xmpp_user_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']['xmpp'] == 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('xmpp_domain', 'xmpp_module', 'process');
+        $app->services->registerService('metronome', 'xmpp_module', 'reloadXMPP');
+        $app->services->registerService('metronome', 'xmpp_module', 'restartXMPP');
+
+    }
+
+    /*
+     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 'xmpp_domain':
+                if($action == 'i') $app->plugins->raiseEvent('xmpp_domain_insert', $data);
+                if($action == 'u') $app->plugins->raiseEvent('xmpp_domain_update', $data);
+                if($action == 'd') $app->plugins->raiseEvent('xmpp_domain_delete', $data);
+                break;
+            case 'xmpp_user':
+                if($action == 'i') $app->plugins->raiseEvent('xmpp_user_insert', $data);
+                if($action == 'u') $app->plugins->raiseEvent('xmpp_user_update', $data);
+                if($action == 'd') $app->plugins->raiseEvent('xmpp_user_delete', $data);
+                break;
+        } // end switch
+    } // end function
+
+
+    function restartXMPP($action = 'restart') {
+        global $app, $conf;
+
+        // load the server configuration options
+        $app->uses('getconf,system');
+
+        $daemon = 'metronome';
+
+        $retval = array('output' => '', 'retval' => 0);
+        if($action == 'restart') {
+            $cmd = $app->system->getinitcommand($daemon, 'restart');
+        } else {
+            $cmd = $app->system->getinitcommand($daemon, 'reload');
+        }
+        exec($cmd.' 2>&1', $retval['output'], $retval['retval']);
+        $app->log("Restarting xmpp: $cmd", LOGLEVEL_DEBUG);
+        return $retval;
+    }
+} // end class
+
+?>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index e6ca66f..e518f45 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -108,23 +108,27 @@
          * php_version -> php ini path that changed (additional php versions)
          */
 
+		$param = '';
 		$qrystr = "SELECT * FROM web_domain WHERE custom_php_ini != ''";
 		if($data['mode'] == 'mod') {
 			$qrystr .= " AND php = 'mod'";
 		} elseif($data['mode'] == 'fast-cgi') {
 			$qrystr .= " AND php = 'fast-cgi'";
 			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . "'";
+				$qrystr .= " AND fastcgi_php_version LIKE ?";
+				$param = '%:' . $data['php_version'];
 			}
 		} elseif($data['mode'] == 'php-fpm') {
 			$qrystr .= " AND php = 'php-fpm'";
 			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . ":%'";
+				$qrystr .= " AND fastcgi_php_version LIKE ?";
+				$param = '%:' . $data['php_version'] . ':%';
 			}
 		} elseif($data['mode'] == 'hhvm') {
 			$qrystr .= " AND php = 'hhvm'";
 			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . ":%'";
+				$qrystr .= " AND fastcgi_php_version LIKE ?";
+				$param = '%:' . $data['php_version'] . ':%';
 			}
 		} else {
 			$qrystr .= " AND php != 'mod' AND php != 'fast-cgi'";
@@ -132,7 +136,7 @@
 
 
 		//** Get all the webs
-		$web_domains = $app->db->queryAllRecords($qrystr);
+		$web_domains = $app->db->queryAllRecords($qrystr, $param);
 		foreach($web_domains as $web_data) {
 			$custom_php_ini_dir = $web_config['website_basedir'].'/conf/'.$web_data['system_user'];
 			$web_folder = 'web';
@@ -157,6 +161,26 @@
 			if($master_php_ini_path != '' && substr($master_php_ini_path, -7) == 'php.ini' && is_file($master_php_ini_path)) {
 				$php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n";
 			}
+			
+			if(intval($web_data['directive_snippets_id']) > 0){
+				$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($web_data['directive_snippets_id']));
+				if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
+					$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
+					if(is_array($required_php_snippets) && !empty($required_php_snippets)){
+						foreach($required_php_snippets as $required_php_snippet){
+							$required_php_snippet = intval($required_php_snippet);
+							if($required_php_snippet > 0){
+								$php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+								$php_snippet['snippet'] = trim($php_snippet['snippet']);
+								if($php_snippet['snippet'] != ''){
+									$web_data['custom_php_ini'] .= "\n".$php_snippet['snippet'];
+								}
+							}
+						}
+					}
+				}
+			}
+		
 			$php_ini_content .= str_replace("\r", '', trim($web_data['custom_php_ini']));
 			$app->system->file_put_contents($custom_php_ini_dir.'/php.ini', $php_ini_content);
 			$app->log('Info: rewrote custom php.ini for web ' . $web_data['domain_id'] . ' (' . $web_data['domain'] . ').', LOGLEVEL_DEBUG);
@@ -303,15 +327,15 @@
 			$app->system->chmod($key_file2, 0400);
 			@$app->system->unlink($config_file);
 			@$app->system->unlink($rand_file);
-			$ssl_request = $app->db->quote($app->system->file_get_contents($csr_file));
-			$ssl_cert = $app->db->quote($app->system->file_get_contents($crt_file));
-			$ssl_key2 = $app->db->quote($app->system->file_get_contents($key_file2));
+			$ssl_request = $app->system->file_get_contents($csr_file);
+			$ssl_cert = $app->system->file_get_contents($crt_file);
+			$ssl_key2 = $app->system->file_get_contents($key_file2);
 			/* Update the DB of the (local) Server */
-			$app->db->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'");
-			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->db->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key2, $data['new']['domain']);
+			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			/* Update also the master-DB of the Server-Farm */
-			$app->dbmaster->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'");
-			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key2, $data['new']['domain']);
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 		}
 
 		//* Save a SSL certificate to disk
@@ -355,18 +379,18 @@
 				$app->system->file_put_contents($key_file2, $data["new"]["ssl_key"]);
 				$app->system->chmod($key_file2, 0400);
 			} else {
-				$ssl_key2 = $app->db->quote($app->system->file_get_contents($key_file2));
+				$ssl_key2 = $app->system->file_get_contents($key_file2);
 				/* Update the DB of the (local) Server */
-				$app->db->query("UPDATE web_domain SET ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'");
+				$app->db->query("UPDATE web_domain SET ssl_key = ? WHERE domain = ?", $ssl_key2, $data['new']['domain']);
 				/* Update also the master-DB of the Server-Farm */
-				$app->dbmaster->query("UPDATE web_domain SET ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'");
+				$app->dbmaster->query("UPDATE web_domain SET ssl_key = ? WHERE domain = ?", $ssl_key2, $data['new']['domain']);
 			}
 
 			/* Update the DB of the (local) Server */
-			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 
 			/* Update also the master-DB of the Server-Farm */
-			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			$app->log('Saving SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
 		}
 
@@ -386,11 +410,11 @@
 			$app->system->unlink($crt_file);
 			$app->system->unlink($bundle_file);
 			/* Update the DB of the (local) Server */
-			$app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data['new']['domain']."'");
-			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = ?", $data['new']['domain']);
+			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			/* Update also the master-DB of the Server-Farm */
-			$app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data['new']['domain']."'");
-			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = ?", $data['new']['domain']);
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			$app->log('Deleting SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
 		}
 
@@ -420,7 +444,7 @@
 
 			// If the parent_domain_id has been changed, we will have to update the old site as well.
 			if($this->action == 'update' && $data['new']['parent_domain_id'] != $data['old']['parent_domain_id']) {
-				$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$old_parent_domain_id." AND active = 'y'");
+				$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ? AND active = ?', $old_parent_domain_id, 'y');
 				$data['new'] = $tmp;
 				$data['old'] = $tmp;
 				$this->action = 'update';
@@ -428,7 +452,7 @@
 			}
 
 			// This is not a vhost, so we need to update the parent record instead.
-			$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$new_parent_domain_id." AND active = 'y'");
+			$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ? AND active = ', $new_parent_domain_id, 'y');
 			$data['new'] = $tmp;
 			$data['old'] = $tmp;
 			$this->action = 'update';
@@ -466,7 +490,7 @@
 		$old_log_folder = 'log';
 		if($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') {
 			// new one
-			$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($data['new']['parent_domain_id']));
+			$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['new']['parent_domain_id']);
 			$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['new']['domain']);
 			if($subdomain_host == '') $subdomain_host = 'web'.$data['new']['domain_id'];
 			$web_folder = $data['new']['web_folder'];
@@ -475,7 +499,7 @@
 			
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
-				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id']));
+				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']);
 				if($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id'];
 				$old_web_folder = $data['old']['web_folder'];
@@ -529,7 +553,7 @@
 		if($this->action == 'update' && $data['new']['document_root'] != $data['old']['document_root']) {
 
 			//* Get the old client ID
-			$old_client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = '.intval($data['old']['sys_groupid']));
+			$old_client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = ?', $data['old']['sys_groupid']);
 			$old_client_id = intval($old_client['client_id']);
 			unset($old_client);
 
@@ -671,7 +695,7 @@
 		$app->system->web_folder_protection($data['new']['document_root'], true);
 
 		// Get the client ID
-		$client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = '.intval($data['new']['sys_groupid']));
+		$client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = ?', $data['new']['sys_groupid']);
 		$client_id = intval($client['client_id']);
 		unset($client);
 
@@ -1004,6 +1028,26 @@
 				$php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n";
 			}
 			$php_ini_content .= str_replace("\r", '', trim($data['new']['custom_php_ini']));
+			
+			if(intval($data['new']['directive_snippets_id']) > 0){
+				$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+				if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
+					$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
+					if(is_array($required_php_snippets) && !empty($required_php_snippets)){
+						foreach($required_php_snippets as $required_php_snippet){
+							$required_php_snippet = intval($required_php_snippet);
+							if($required_php_snippet > 0){
+								$php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+								$php_snippet['snippet'] = trim($php_snippet['snippet']);
+								if($php_snippet['snippet'] != ''){
+									$php_ini_content .= "\n".$php_snippet['snippet'];
+								}
+							}
+						}
+					}
+				}
+			}
+		
 			$app->system->file_put_contents($custom_php_ini_dir.'/php.ini', $php_ini_content);
 		} else {
 			$has_custom_php_ini = false;
@@ -1030,6 +1074,12 @@
 		$vhost_data['custom_php_ini_dir'] = escapeshellcmd($custom_php_ini_dir);
 
 		// Custom Apache directives
+		if(intval($data['new']['directive_snippets_id']) > 0){
+			$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", $data['new']['directive_snippets_id']);
+			if(isset($snippet['snippet'])){
+				$vhost_data['apache_directives'] = $snippet['snippet'];
+			}
+		}
 		// Make sure we only have Unix linebreaks
 		$vhost_data['apache_directives'] = str_replace("\r\n", "\n", $vhost_data['apache_directives']);
 		$vhost_data['apache_directives'] = str_replace("\r", "\n", $vhost_data['apache_directives']);
@@ -1131,7 +1181,7 @@
 		$auto_alias = $web_config['website_autoalias'];
 		if($auto_alias != '') {
 			// get the client username
-			$client = $app->db->queryOneRecord("SELECT `username` FROM `client` WHERE `client_id` = '" . intval($client_id) . "'");
+			$client = $app->db->queryOneRecord("SELECT `username` FROM `client` WHERE `client_id` = ?", $client_id);
 			$aa_search = array('[client_id]', '[website_id]', '[client_username]', '[website_domain]');
 			$aa_replace = array($client_id, $data['new']['domain_id'], $client['username'], $data['new']['domain']);
 			$auto_alias = str_replace($aa_search, $aa_replace, $auto_alias);
@@ -1142,7 +1192,7 @@
 		}
 
 		// get alias domains (co-domains and subdomains)
-		$aliases = $app->db->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = '.$data['new']['domain_id']." AND active = 'y' AND (type != 'vhostsubdomain' AND type != 'vhostalias')");
+		$aliases = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ? AND active = 'y' AND (type != 'vhostsubdomain' AND type != 'vhostalias')", $data['new']['domain_id']);
 		$alias_seo_redirects = array();
 		switch($data['new']['subdomain']) {
 		case 'www':
@@ -1373,6 +1423,7 @@
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
+		$pool_dir = trim($pool_dir);
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
 		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
@@ -1786,7 +1837,7 @@
 		$log_folder = 'log';
 		$web_folder = '';
 		if($data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
-			$tmp = $app->db->queryOneRecord('SELECT `domain`,`document_root` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id']));
+			$tmp = $app->db->queryOneRecord('SELECT `domain`,`document_root` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
 			if($tmp['domain'] != ''){
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']);
 			} else {
@@ -1858,7 +1909,7 @@
 		if($data['old']['type'] != 'vhost' && $data['old']['type'] != 'vhostsubdomain' && $data['old']['type'] != 'vhostalias' && $data['old']['parent_domain_id'] > 0) {
 			//* This is a alias domain or subdomain, so we have to update the website instead
 			$parent_domain_id = intval($data['old']['parent_domain_id']);
-			$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$parent_domain_id." AND active = 'y'");
+			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $parent_domain_id);
 			$data['new'] = $tmp;
 			$data['old'] = $tmp;
 			$this->action = 'update';
@@ -1912,7 +1963,7 @@
 						} else {
 							// read all vhost subdomains and alias with same parent domain
 							$used_paths = array();
-							$tmp = $app->db->queryAllRecords("SELECT `web_folder` FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ".intval($data['old']['parent_domain_id'])." AND domain_id != ".intval($data['old']['domain_id']));
+							$tmp = $app->db->queryAllRecords("SELECT `web_folder` FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ? AND domain_id != ?", $data['old']['parent_domain_id'], $data['old']['domain_id']);
 							foreach($tmp as $tmprec) {
 								// we normalize the folder entries because we need to compare them
 								$tmp_folder = preg_replace('/[\/]{2,}/', '/', $tmprec['web_folder']); // replace / occuring multiple times
@@ -1994,7 +2045,7 @@
 				$app->log('Removing website: '.$docroot, LOGLEVEL_DEBUG);
 
 				// Delete the symlinks for the sites
-				$client = $app->db->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = '.intval($data['old']['sys_groupid']));
+				$client = $app->db->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = ?', $data['old']['sys_groupid']);
 				$client_id = intval($client['client_id']);
 				unset($client);
 				$tmp_symlinks_array = explode(':', $web_config['website_symlinks']);
@@ -2048,25 +2099,19 @@
 			if($data['old']['type'] == 'vhost') {
 				$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 				$backup_dir = $server_config['backup_dir'];
-				//* mount backup directory, if necessary
 				$mount_backup = true;
-				$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
 				if($server_config['backup_dir'] != '' && $server_config['backup_delete'] == 'y') {
-					if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-						if(!$app->system->is_mounted($backup_dir)){
-							exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-							sleep(1);
-							if(!$app->system->is_mounted($backup_dir)) $mount_backup = false;
-						}
-					}
+					//* mount backup directory, if necessary
+					if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
+
 					if($mount_backup){
 						$web_backup_dir = $backup_dir.'/web'.$data_old['domain_id'];
 						//** do not use rm -rf $web_backup_dir because database(s) may exits
 						exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*');
 						//* cleanup database
-						$sql = "DELETE FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$data_old['domain_id']." AND filename LIKE 'web".$data_old['domain_id']."_%'";
-						$app->db->query($sql);
-						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename LIKE ?";
+						$app->db->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
+						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
 
 						$app->log('Deleted the web backup files', LOGLEVEL_DEBUG);
 					}
@@ -2089,7 +2134,7 @@
 		$tpl = new tpl();
 		$tpl->newTemplate('apache_ispconfig.conf.master');
 		$tpl->setVar('apache_version', $app->system->getapacheversion());
-		$records = $app->db->queryAllRecords('SELECT * FROM server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
+		$records = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ? AND virtualhost = 'y'", $conf['server_id']);
 
 		$records_out= array();
 		if(is_array($records)) {
@@ -2135,8 +2180,8 @@
 			$folder_id = $data['new']['web_folder_id'];
 		}
 
-		$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ".intval($folder_id));
-		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($folder['parent_domain_id']));
+		$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ?", $folder_id);
+		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $folder['parent_domain_id']);
 
 		if(!is_array($folder) or !is_array($website)) {
 			$app->log('Not able to retrieve folder or website record.', LOGLEVEL_DEBUG);
@@ -2171,19 +2216,6 @@
 			$app->system->chgrp($folder_path.'.htpasswd', $website['system_group']);
 			$app->log('Created file '.$folder_path.'.htpasswd', LOGLEVEL_DEBUG);
 		}
-
-		/*
-		$auth_users = $app->db->queryAllRecords("SELECT * FROM web_folder_user WHERE active = 'y' AND web_folder_id = ".intval($folder_id));
-		$htpasswd_content = '';
-		if(is_array($auth_users) && !empty($auth_users)){
-			foreach($auth_users as $auth_user){
-				$htpasswd_content .= $auth_user['username'].':'.$auth_user['password']."\n";
-			}
-		}
-		$htpasswd_content = trim($htpasswd_content);
-		@file_put_contents($folder_path.'.htpasswd', $htpasswd_content);
-		$app->log('Changed .htpasswd file: '.$folder_path.'.htpasswd',LOGLEVEL_DEBUG);
-		*/
 
 		if(($data['new']['username'] != $data['old']['username'] || $data['new']['active'] == 'n') && $data['old']['username'] != '') {
 			$app->system->removeLine($folder_path.'.htpasswd', $data['old']['username'].':');
@@ -2235,7 +2267,7 @@
 		$folder_id = $data['old']['web_folder_id'];
 
 		$folder = $data['old'];
-		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($folder['parent_domain_id']));
+		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $folder['parent_domain_id']);
 
 		if(!is_array($folder) or !is_array($website)) {
 			$app->log('Not able to retrieve folder or website record.', LOGLEVEL_DEBUG);
@@ -2290,7 +2322,7 @@
 	function web_folder_update($event_name, $data) {
 		global $app, $conf;
 
-		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
+		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 
 		if(!is_array($website)) {
 			$app->log('Not able to retrieve folder or website record.', LOGLEVEL_DEBUG);
@@ -2450,7 +2482,7 @@
 			/*
 			 * Get additional informations
 			*/
-			$sitedata = $app->db->queryOneRecord('SELECT document_root, domain, system_user, system_group FROM web_domain WHERE domain_id = ' . $data['new']['parent_domain_id']);
+			$sitedata = $app->db->queryOneRecord('SELECT document_root, domain, system_user, system_group FROM web_domain WHERE domain_id = ?', $data['new']['parent_domain_id']);
 			$documentRoot = $sitedata['document_root'];
 			$domain = $sitedata['domain'];
 			$user = $sitedata['system_user'];
@@ -2538,7 +2570,7 @@
 			/*
 			 * Get additional informations
 			*/
-			$sitedata = $app->db->queryOneRecord('SELECT document_root, domain FROM web_domain WHERE domain_id = ' . $data['old']['parent_domain_id']);
+			$sitedata = $app->db->queryOneRecord('SELECT document_root, domain FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
 			$documentRoot = $sitedata['document_root'];
 			$domain = $sitedata['domain'];
 
@@ -2768,23 +2800,70 @@
 		} else {
 			$content = file_get_contents($conf['rootpath'] . '/conf/hhvm_starter.master');
 		}
+		if(file_exists($conf['rootpath'] . '/conf-custom/hhvm_monit.master')) {
+			$monit_content = file_get_contents($conf['rootpath'] . '/conf-custom/hhvm_monit.master');
+		} else {
+			$monit_content = file_get_contents($conf['rootpath'] . '/conf/hhvm_monit.master');
+		}
 		
-		if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm') {
+		if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm' || $data['new']['custom_php_ini'] != $data['old']['custom_php_ini']) {
+		
+			// Custom php.ini settings
+			$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
+			if(intval($data['new']['directive_snippets_id']) > 0){
+				$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+				if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
+					$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
+					if(is_array($required_php_snippets) && !empty($required_php_snippets)){
+						foreach($required_php_snippets as $required_php_snippet){
+							$required_php_snippet = intval($required_php_snippet);
+							if($required_php_snippet > 0){
+								$php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+								$php_snippet['snippet'] = trim($php_snippet['snippet']);
+								if($php_snippet['snippet'] != ''){
+									$custom_php_ini_settings .= "\n".$php_snippet['snippet'];
+								}
+							}
+						}
+					}
+				}
+			}
+			if($custom_php_ini_settings != ''){
+				// Make sure we only have Unix linebreaks
+				$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
+				$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
+				file_put_contents('/etc/hhvm/'.$data['new']['system_user'].'.ini', $custom_php_ini_settings);
+			} else {
+				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+			}
+			
 			$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
 			file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
 			exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
 			exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
 			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' start >/dev/null 2>&1');
+			
+			$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
+			file_put_contents('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'], $monit_content);
+			exec('/etc/init.d/monit restart >/dev/null 2>&1');
+			
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
 			exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
-			unlink('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' >/dev/null 2>&1');
+			unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
+			if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+			
+			if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'])){
+				unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
+				exec('/etc/init.d/monit restart >/dev/null 2>&1');
+			}
 		}
 	}
 
 	//* Update the PHP-FPM pool configuration file
 	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir) {
 		global $app, $conf;
+		$pool_dir = trim($pool_dir);
 		//$reload = false;
 
 		if($data['new']['php'] == 'php-fpm'){
@@ -2873,6 +2952,26 @@
 		// Custom php.ini settings
 		$final_php_ini_settings = array();
 		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
+		
+		if(intval($data['new']['directive_snippets_id']) > 0){
+			$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'apache' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+			if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
+				$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
+				if(is_array($required_php_snippets) && !empty($required_php_snippets)){
+					foreach($required_php_snippets as $required_php_snippet){
+						$required_php_snippet = intval($required_php_snippet);
+						if($required_php_snippet > 0){
+							$php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+							$php_snippet['snippet'] = trim($php_snippet['snippet']);
+							if($php_snippet['snippet'] != ''){
+								$custom_php_ini_settings .= "\n".$php_snippet['snippet'];
+							}
+						}
+					}
+				}
+			}
+		}
+		
 		if($custom_php_ini_settings != ''){
 			// Make sure we only have Unix linebreaks
 			$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
@@ -2916,7 +3015,7 @@
 		unset($tpl);
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -2925,9 +3024,10 @@
 				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
-		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".$conf["server_id"]);
+		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $conf["server_id"]);
 		if(is_array($php_versions) && !empty($php_versions)){
 			foreach($php_versions as $php_version){
+				$php_version['php_fpm_pool_dir'] = trim($php_version['php_fpm_pool_dir']);
 				if(substr($php_version['php_fpm_pool_dir'], -1) != '/') $php_version['php_fpm_pool_dir'] .= '/';
 				if($php_version['php_fpm_pool_dir'] != $pool_dir){
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
@@ -2968,6 +3068,7 @@
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
+		$pool_dir = trim($pool_dir);
 
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['old']['domain_id'];
@@ -2980,7 +3081,7 @@
 		}
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -2989,9 +3090,10 @@
 				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
-		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".$data['old']['server_id']);
+		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $data['old']['server_id']);
 		if(is_array($php_versions) && !empty($php_versions)){
 			foreach($php_versions as $php_version){
+				$php_version['php_fpm_pool_dir'] = trim($php_version['php_fpm_pool_dir']);
 				if(substr($php_version['php_fpm_pool_dir'], -1) != '/') $php_version['php_fpm_pool_dir'] .= '/';
 				if($php_version['php_fpm_pool_dir'] != $pool_dir){
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 42c1d77..cb9911d 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -53,7 +53,9 @@
 		//* Register for actions
 		$app->plugins->registerAction('backup_download', $this->plugin_name, 'backup_action');
 		$app->plugins->registerAction('backup_restore', $this->plugin_name, 'backup_action');
-
+		//$app->plugins->registerAction('backup_download_mail', $this->plugin_name, 'backup_action_mail');
+		$app->plugins->registerAction('backup_restore_mail', $this->plugin_name, 'backup_action_mail');
+		
 	}
 
 	//* Do a backup action
@@ -61,47 +63,25 @@
 		global $app, $conf;
 
 		$backup_id = intval($data);
-		$backup = $app->dbmaster->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = $backup_id");
-		$mail_backup = $app->dbmaster->queryOneRecord("SELECT * FROM mail_backup WHERE backup_id = $backup_id");
+		$backup = $app->dbmaster->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = ?", $backup_id);
 
 		if(is_array($backup)) {
 
 			$app->uses('ini_parser,file,getconf,system');
 
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$backup['parent_domain_id']);
+			$web = $app->dbmaster->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $backup['parent_domain_id']);
 			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 			$backup_dir = $server_config['backup_dir'].'/web'.$web['domain_id'];
 			
-			//* mount backup directory, if necessary
-			/*
 			$backup_dir_is_ready = true;
-			$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
-			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($server_config['backup_dir'])){
-					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-					sleep(1);
-					if(!$app->system->is_mounted($server_config['backup_dir'])) $backup_dir_is_ready = false;
-				}
-			}*/
-			$backup_dir_is_ready = true;
-			$backup_dir_mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
-			if(	$server_config['backup_dir_is_mount'] == 'y' && 
-				is_file($backup_dir_mount_cmd) && 
-				is_executable($backup_dir_mount_cmd) &&
-				fileowner($backup_dir_mount_cmd) === 0
-			){
-				if(!$app->system->is_mounted($backup_dir)){
-					exec($backup_dir_mount_cmd);
-					sleep(1);
-					if(!$app->system->is_mounted($server_config['backup_dir'])) $backup_dir_is_ready = false;
-				}
-			}
+            //* mount backup directory, if necessary
+            if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($server_config['backup_dir']) ) $backup_dir_is_ready = false;
 
 			if($backup_dir_is_ready){
 				//* Make backup available for download
 				if($action_name == 'backup_download') {
 					//* Copy the backup file to the backup folder of the website
-					if(file_exists($backup_dir.'/'.$backup['filename']) && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
+					if(file_exists($backup_dir.'/'.$backup['filename']) && file_exists($web['document_root'].'/backup/') && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
 						copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
 						chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
 						$app->log('cp '.$backup_dir.'/'.$backup['filename'].' '.$web['document_root'].'/backup/'.$backup['filename'], LOGLEVEL_DEBUG);
@@ -176,71 +156,7 @@
 						}
 					}
 				}
-			} else {
-				$app->log('Backup directory not ready.', LOGLEVEL_DEBUG);
-			}
-		//* Restore a mail backup - florian@schaal-24.de
-		} elseif (is_array($mail_backup) && $action_name == 'backup_restore') {
-			$app->uses('ini_parser,file,getconf');
-
-			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-			$backup_dir = $server_config['backup_dir'];
-
-			//* mount backup directory, if necessary
-			$backup_dir_is_ready = true;
-			$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
-			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($backup_dir)){
-					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-					sleep(1);
-					if(!$app->system->is_mounted($backup_dir)) $backup_dir_is_ready = false;
-				}
-			}
-			
-			if($backup_dir_is_ready){
-				$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-				$domain_rec = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain_id = ".intval($mail_backup['parent_domain_id']));
-
-				$backup_dir = $server_config['backup_dir'].'/mail'.$domain_rec['domain_id'];
-				$mail_backup_file = $backup_dir.'/'.$mail_backup['filename'];
-
-				$sql = "SELECT * FROM mail_user WHERE server_id = '".$conf['server_id']."' AND mailuser_id = ".intval($mail_backup['mailuser_id']);
-				$record = $app->db->queryOneRecord($sql);
-
-				//* strip mailbox from maildir
-				$domain_dir=explode('/',$record['maildir']);
-				$_temp=array_pop($domain_dir);unset($_temp);
-				$domain_dir=implode('/',$domain_dir);
-
-				if(!is_dir($domain_dir)) {
-					mkdir($domain_dir, 0700); //* never create the full path
-					chown($domain_dir, $mail_config['mailuser_name']);
-					chgrp($domain_dir, $mail_config['mailuser_group']);
-				}
-
-				if(file_exists($mail_backup_file) && $record['homedir'] != '' && $record['homedir'] != '/' && !stristr($mail_backup_file,'..') && !stristr($mail_backup_file,'etc') && $mail_config['homedir_path'] == $record['homedir'] && is_dir($domain_dir)) {
-					if($mail_backup['backup_mode'] == 'userzip') {
-						copy($mail_backup_file, $domain_dir.'/'.$mail_backup['filename']);
-						chgrp($domain_dir.'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
-						$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($domain_dir.'/'.$mail_backup['filename']).' -d '.escapeshellarg($domain_dir).' 2> /dev/null';
-						exec($command,$tmp_output, $retval);
-						unlink($domain_dir.'/'.$mail_backup['filename']);
-						if($retval == 0){
-							$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
-						} else {
-							$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
-						}
-					}
-					if($mail_backup['backup_mode'] == 'rootgz') {
-						$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($domain_dir);
-						exec($command,$tmp_output, $retval);
-						if($retval == 0){
-							$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
-						} else {
-							$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
-						}
-					}
-				}
+				if( $server_config['backup_dir_is_mount'] == 'y' ) $app->system->umount_backup_dir($backup_dir);
 			} else {
 				$app->log('Backup directory not ready.', LOGLEVEL_DEBUG);
 			}
@@ -251,6 +167,120 @@
 		return 'ok';
 	}
 
+	//* Restore a mail backup - florian@schaal-24.de
+	public function backup_action_mail($action_name, $data) {
+		global $app, $conf;
+	
+		$backup_id = intval($data);
+		$mail_backup = $app->dbmaster->queryOneRecord("SELECT * FROM mail_backup WHERE backup_id = ?", $backup_id);
+	
+		if (is_array($mail_backup) && $action_name == 'backup_restore_mail') {
+			$app->uses('ini_parser,file,getconf');
+	
+			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+			$backup_dir = $server_config['backup_dir'];
+			$backup_dir_is_ready = true;
+	
+			//* mount backup directory, if necessary
+			if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $backup_dir_is_ready = false;
+	
+			if($backup_dir_is_ready){
+				$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+				$domain_rec = $app->db->queryOneRecord("SELECT * FROM mail_domain WHERE domain_id = ?", $mail_backup['parent_domain_id']);
+			
+				$backup_dir = $server_config['backup_dir'].'/mail'.$domain_rec['domain_id'];
+				$mail_backup_file = $backup_dir.'/'.$mail_backup['filename'];
+			
+				$sql = "SELECT * FROM mail_user WHERE server_id = ? AND mailuser_id = ?";
+				$record = $app->db->queryOneRecord($sql, $conf['server_id'], $mail_backup['mailuser_id']);
+			
+				//* strip mailbox from maildir
+				$domain_dir=explode('/',$record['maildir']);
+				$_temp=array_pop($domain_dir);unset($_temp);
+				$domain_dir=implode('/',$domain_dir);
+			
+				if(!is_dir($domain_dir)) {
+					mkdir($domain_dir, 0700); //* never create the full path
+					chown($domain_dir, $mail_config['mailuser_name']);
+					chgrp($domain_dir, $mail_config['mailuser_group']);
+				}
+				if (!is_dir($record['maildir'])) {
+					mkdir($record['maildir'], 0700); //* never create the full path
+					chown($record['maildir'], $mail_config['mailuser_name']);
+					chgrp($record['maildir'], $mail_config['mailuser_group']);
+				}
+			
+				if(file_exists($mail_backup_file) && $record['homedir'] != '' && $record['homedir'] != '/' && !stristr($mail_backup_file,'..') && !stristr($mail_backup_file,'etc') && $mail_config['homedir_path'] == $record['homedir'] && is_dir($domain_dir) && is_dir($record['maildir'])) {
+					if ($record['maildir_format'] == 'mdbox') {
+						$retval = -1;
+						// First unzip backupfile to local backup-folder
+						if($mail_backup['backup_mode'] == 'userzip') {
+							copy($mail_backup_file, $record['maildir'].'/'.$mail_backup['filename']);
+							chgrp($record['maildir'].'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
+							$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($record['maildir'].'/'.$mail_backup['filename']).' -d '.escapeshellarg($record['maildir']).' 2> /dev/null';
+							exec($command,$tmp_output, $retval);
+							unlink($record['maildir'].'/'.$mail_backup['filename']);
+						}
+						if($mail_backup['backup_mode'] == 'rootgz') {
+							$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($record['maildir']);
+							exec($command,$tmp_output, $retval);
+						}
+						
+						if($retval == 0) {
+							// Now import backup-mailbox into special backup-folder
+							$backupname = "backup-".date("Y-m-d", $mail_backup['tstamp']);
+							exec("doveadm mailbox create -u \"".$record["email"]."\" $backupname");
+							exec("doveadm import -u \"".$record["email"]."\" mdbox:".$record['maildir']."/backup $backupname all", $tmp_output, $retval);
+							exec("for f in `doveadm mailbox list -u \"".$record["email"]."\" $backupname*`; do doveadm mailbox subscribe -u \"".$record["email"]."\" \$f; done", $tmp_output, $retval);
+							exec('rm -rf '.$record['maildir'].'/backup');
+						}
+						
+						if($retval == 0){
+							$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
+						} else {
+							// cleanup
+							if (file_exists($record['maildir'].'/'.$mail_backup['filename'])) unlink($record['maildir'].'/'.$mail_backup['filename']);
+							if (file_exists($record['maildir']."/backup")) exec('rm -rf '.$record['maildir']."/backup");
+							
+							$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
+						}
+					}
+					else {
+						if($mail_backup['backup_mode'] == 'userzip') {
+							copy($mail_backup_file, $domain_dir.'/'.$mail_backup['filename']);
+							chgrp($domain_dir.'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
+							$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($domain_dir.'/'.$mail_backup['filename']).' -d '.escapeshellarg($domain_dir).' 2> /dev/null';
+							exec($command,$tmp_output, $retval);
+							unlink($domain_dir.'/'.$mail_backup['filename']);
+							if($retval == 0){
+								$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
+							} else {
+								$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
+							}
+						}
+						if($mail_backup['backup_mode'] == 'rootgz') {
+							$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($domain_dir);
+							exec($command,$tmp_output, $retval);
+							if($retval == 0){
+								$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
+							} else {
+								$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
+							}
+						}
+					}
+				}
+				if( $server_config['backup_dir_is_mount'] == 'y' ) $app->system->umount_backup_dir($backup_dir);
+			} else {
+				$app->log('Backup directory not ready.', LOGLEVEL_DEBUG);
+			}
+		} else {
+			$app->log('No backup with ID '.$backup_id.' found.', LOGLEVEL_DEBUG);
+		}
+
+		return 'ok';
+	}
+			
+				
 } // end class
 
 ?>			
diff --git a/server/plugins-available/bind_dlz_plugin.inc.php b/server/plugins-available/bind_dlz_plugin.inc.php
index 63abcc4..89954cc 100644
--- a/server/plugins-available/bind_dlz_plugin.inc.php
+++ b/server/plugins-available/bind_dlz_plugin.inc.php
@@ -34,7 +34,7 @@
 CREATE TABLE IF NOT EXISTS `records` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `zone` varchar(255) NOT NULL,
-  `ttl` int(11) NOT NULL default '86400',
+  `ttl` int(11) NOT NULL default '3600',
   `type` varchar(255) NOT NULL,
   `host` varchar(255) NOT NULL default '@',
   `mx_priority` int(11) default NULL,
@@ -121,7 +121,7 @@
 
 		$origin = substr($data["new"]["origin"], 0, -1);
 		$ispconfig_id = $data["new"]["id"];
-		$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$ispconfig_id);
+		$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $ispconfig_id);
 
 		$ttl = $data["new"]["ttl"];
 
@@ -129,8 +129,7 @@
 		//$_db->dbName = 'named';
 
 		$app->db->query("INSERT INTO named.records (zone, ttl, type, primary_ns, resp_contact, serial, refresh, retry, expire, minimum, ispconfig_id) VALUES ".
-			"('$origin', $ttl, 'SOA', '{$data["new"]["ns"]}', '{$data["new"]["mbox"]}', '{$serial["serial"]}', '{$serial["refresh"]}'," .
-			"'{$serial["retry"]}', '{$serial["expire"]}', '{$serial["minimum"]}', $ispconfig_id)");
+			"(?, ?, 'SOA', ?, ?, ?, ?, ?, ?, ?, ?)", $origin, $ttl, $data["new"]["ns"], $data["new"]["mbox"], $serial["serial"], $serial["refresh"], $serial["retry"], $serial["expire"], $serial["minimum"], $ispconfig_id);
 		//unset($_db);
 	}
 
@@ -149,16 +148,14 @@
 			{
 				$origin = substr($data["new"]["origin"], 0, -1);
 				$ispconfig_id = $data["new"]["id"];
-				$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$ispconfig_id);
+				$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $ispconfig_id);
 
 				$ttl = $data["new"]["ttl"];
 
 				//$_db = clone $app->db;
 				//$_db->dbName = 'named';
 
-				$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, primary_ns = '{$data["new"]["ns"]}', resp_contact = '{$data["new"]["mbox"]}', ".
-					"serial = '{$serial["serial"]}', refresh = '{$serial["refresh"]}', retry = '{$serial["retry"]}', expire = '{$serial["expire"]}', ".
-					"minimum = '{$serial["minimum"]}' WHERE ispconfig_id = ".$data["new"]["id"]." AND type = 'SOA'");
+				$app->db->query("UPDATE named.records SET zone = ?, ttl = ?, primary_ns = ?, resp_contact = ?, serial = ?, refresh = ?, retry = ?, expire = ?, minimum = ? WHERE ispconfig_id = ? AND type = 'SOA'", $origin, $ttl, $data["new"]["ns"], $data["new"]["mbox"], $serial["serial"], $serial["refresh"], $serial["retry"], $serial["expire"], $serial["minimum"], $data["new"]["id"]);
 				//unset($_db);
 			}
 			else
@@ -166,7 +163,7 @@
 				$this->soa_insert($event_name, $data);
 				$ispconfig_id = $data["new"]["id"];
 
-				if ($records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = $ispconfig_id AND active = 'Y'"))
+				if ($records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = ? AND active = 'Y'", $ispconfig_id))
 				{
 					foreach($records as $record)
 					{
@@ -188,7 +185,7 @@
 		//$_db = clone $app->db;
 		//$_db->dbName = 'named';
 
-		$app->db->query( "DELETE FROM named.dns_records WHERE zone = '".substr($data['old']['origin'], 0, -1)."'");
+		$app->db->query( "DELETE FROM named.dns_records WHERE zone = ?", substr($data['old']['origin'], 0, -1));
 		//unset($_db);
 	}
 
@@ -197,7 +194,7 @@
 		global $app, $conf;
 		if($data["new"]["active"] != 'Y') return;
 
-		$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data["new"]["zone"]);
+		$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data["new"]["zone"]);
 		$origin = substr($zone["origin"], 0, -1);
 		$ispconfig_id = $data["new"]["id"];
 
@@ -251,13 +248,13 @@
 
 		if ($type == 'MX') {
 			$app->db->query("INSERT INTO named.records (zone, ttl, type, host, mx_priority, data, ispconfig_id)".
-				" VALUES ('$origin', $ttl, '$type', '$name', {$data["new"]["aux"]}, '$content', $ispconfig_id)");
+				" VALUES (?, ?, ?, ?, ?, ?, ?)", $origin, $ttl, $type, $name, $data["new"]["aux"], $content, $ispconfig_id);
 		} elseif ($type == 'SRV') {
 			$app->db->query("INSERT INTO named.records (zone, ttl, type, data, ispconfig_id)".
-				" VALUES ('$origin', $ttl, '$type', '{$data["new"]["aux"]} $content', $ispconfig_id)");
+				" VALUES (?, ?, ?, ?, ?)", $origin, $ttl, $type, $data["new"]["aux"] . ' ' . $content, $ispconfig_id);
 		} else {
 			$app->db->query("INSERT INTO named.records (zone, ttl, type, host, data, ispconfig_id)".
-				" VALUES ('$origin', $ttl, '$type', '$name', '$content', $ispconfig_id)");
+				" VALUES (?, ?, ?, ?, ?, ?)", $origin, $ttl, $type, $name, $content, $ispconfig_id);
 		}
 
 		//unset($_db);
@@ -276,7 +273,7 @@
 		{
 			if ($data["old"]["active"] == 'Y')
 			{
-				$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data["new"]["zone"]);
+				$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data["new"]["zone"]);
 				$origin = substr($zone["origin"], 0, -1);
 				$ispconfig_id = $data["new"]["id"];
 
@@ -328,14 +325,11 @@
 				//$_db->dbName = 'named';
 
 				if ($type == 'MX') {
-					$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', host = '$name', mx_priority = $prio, ".
-						"data = '$content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+					$app->db->query("UPDATE named.records SET zone = ?, ttl = ?, type = ?, host = ?, mx_priority = ?, data = ? WHERE ispconfig_id = ? AND type != 'SOA'", $origin, $ttl, $type, $name, $prio, $content, $ispconfig_id);
 				} elseif ($type == 'SRV') {
-					$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', ".
-						"data = '$prio $content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+					$app->db->query("UPDATE named.records SET zone = ?, ttl = ?, type = ?, data = ? WHERE ispconfig_id = ? AND type != 'SOA'", $origin, $ttl, $type, $prio . ' ' . $content, $ispconfig_id);
 				} else {
-					$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', host = '$name', ".
-						"data = '$content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+					$app->db->query("UPDATE named.records SET zone = ?, ttl = ?, type = ?, host = ?, data = ? WHERE ispconfig_id = ? AND type != 'SOA'", $origin, $ttl, $type, $name, $content, $ispconfig_id);
 				}
 
 				//unset($_db);
@@ -351,7 +345,7 @@
 		//$_db = clone $app->db;
 		//$_db->dbName = 'named';
 
-		$app->db->query( "DELETE FROM named.dns_records WHERE type != 'SOA' AND zone = '".substr($data['old']['origin'], 0, -1)."'");
+		$app->db->query( "DELETE FROM named.dns_records WHERE type != 'SOA' AND zone = ?", substr($data['old']['origin'], 0, -1));
 		//unset($_db);
 	}
 
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index 2f7f932..bb65eef 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -102,7 +102,7 @@
 			$zone = $data['new'];
 			$tpl->setVar($zone);
 
-			$records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = ".$zone['id']." AND active = 'Y'");
+			$records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = ? AND active = 'Y'", $zone['id']);
 			if(is_array($records) && !empty($records)){
 				for($i=0;$i<sizeof($records);$i++){
 					if($records[$i]['ttl'] == 0) $records[$i]['ttl'] = '';
@@ -117,7 +117,7 @@
 
 			//TODO : change this when distribution information has been integrated into server record
 			if (file_exists('/etc/gentoo-release')) {
-				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
+				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
 			}
 			else {
 				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
@@ -151,7 +151,7 @@
 		if($data['old']['origin'] != $data['new']['origin']) {
 			//TODO : change this when distribution information has been integrated into server record
 			if (file_exists('/etc/gentoo-release')) {
-				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
+				$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 			}
 			else {
 				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
@@ -281,7 +281,7 @@
 		global $app, $conf;
 
 		//* Get the data of the soa and call soa_update
-		$tmp = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data['new']['zone']);
+		$tmp = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data['new']['zone']);
 		$data["new"] = $tmp;
 		$data["old"] = $tmp;
 		$this->action = 'update';
@@ -293,7 +293,7 @@
 		global $app, $conf;
 
 		//* Get the data of the soa and call soa_update
-		$tmp = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data['new']['zone']);
+		$tmp = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data['new']['zone']);
 		$data["new"] = $tmp;
 		$data["old"] = $tmp;
 		$this->action = 'update';
@@ -305,7 +305,7 @@
 		global $app, $conf;
 
 		//* Get the data of the soa and call soa_update
-		$tmp = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".intval($data['old']['zone']));
+		$tmp = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data['old']['zone']);
 		$data["new"] = $tmp;
 		$data["old"] = $tmp;
 		$this->action = 'update';
@@ -319,18 +319,10 @@
 		global $app, $conf;
 
 		//* Only write the master file for the current server
-		$tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify, update_acl FROM dns_soa WHERE active = 'Y' AND server_id=".$conf["server_id"]);
+		$tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify, update_acl FROM dns_soa WHERE active = 'Y' AND server_id=?", $conf["server_id"]);
 		$zones = array();
 
 		//* Check if the current zone that triggered this function has at least one NS record
-		/* Has been replaced by a better zone check
-		$rec_num = $app->db->queryOneRecord("SELECT count(id) as ns FROM dns_rr WHERE type = 'NS' AND zone = ".intval($data['new']['id'])." AND active = 'Y'");
-		if($rec_num['ns'] == 0) {
-			$exclude_zone = $data['new']['origin'];
-		} else {
-			$exclude_zone = '';
-		}
-		*/
 
 		//TODO : change this when distribution information has been integrated into server record
 		if (file_exists('/etc/gentoo-release')) {
@@ -370,7 +362,7 @@
 		$tpl->setLoop('zones', $zones);
 
 		//* And loop through the secondary zones, but only for the current server
-		$tmps_sec = $app->db->queryAllRecords("SELECT origin, xfer, ns FROM dns_slave WHERE active = 'Y' AND server_id=".$conf["server_id"]);
+		$tmps_sec = $app->db->queryAllRecords("SELECT origin, xfer, ns FROM dns_slave WHERE active = 'Y' AND server_id=?", $conf["server_id"]);
 		$zones_sec = array();
 
 		foreach($tmps_sec as $tmp) {
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index 4c95b83..c652f29 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -76,7 +76,7 @@
 		}
 
 		//* get data from web
-		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `domain` FROM `web_domain` WHERE `domain_id` = ".intval($data["new"]["parent_domain_id"]));
+		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `domain` FROM `web_domain` WHERE `domain_id` = ?", $data["new"]["parent_domain_id"]);
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
@@ -155,7 +155,7 @@
 			return 0;
 		}
 		//* get data from web
-		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `domain` FROM `web_domain` WHERE `domain_id` = ".intval($data["new"]["parent_domain_id"]));
+		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `domain` FROM `web_domain` WHERE `domain_id` = ?", $data["new"]["parent_domain_id"]);
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
@@ -333,7 +333,7 @@
 		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
 
 		// Get the parent website of this shell user
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$this->data['new']['parent_domain_id']);
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->data['new']['parent_domain_id']);
 
 		//* If the security level is set to high
 		if($web_config['security_level'] == 20 && is_array($web)) {
diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index 9bda433..7d3c138 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -92,7 +92,7 @@
 		}
 
 		//* get data from web
-		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ".intval($data["new"]["parent_domain_id"]));
+		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ?", $data["new"]["parent_domain_id"]);
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
@@ -105,7 +105,7 @@
 		}
 		
 		// Get the client ID
-		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["new"]["sys_groupid"]));
+		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $data["new"]["sys_groupid"]);
 		$client_id = intval($client["client_id"]);
 		unset($client);
 
@@ -161,14 +161,14 @@
 		global $app, $conf;
 
 		//* get data from web
-		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ".intval($data["old"]["parent_domain_id"]));
+		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ?", $data["old"]["parent_domain_id"]);
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
 		}
 
 		// Get the client ID
-		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["old"]["sys_groupid"]));
+		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $data["old"]["sys_groupid"]);
 		$client_id = intval($client["client_id"]);
 		unset($client);
 
@@ -196,7 +196,7 @@
 		$chr_cmd_count = 0;
 
 		//* read all active cron jobs from database and write them to file
-		$cron_jobs = $app->db->queryAllRecords("SELECT c.`run_min`, c.`run_hour`, c.`run_mday`, c.`run_month`, c.`run_wday`, c.`command`, c.`type`, c.`log`, `web_domain`.`domain` as `domain` FROM `cron` as c INNER JOIN `web_domain` ON `web_domain`.`domain_id` = c.`parent_domain_id` WHERE c.`parent_domain_id` = ".intval($this->parent_domain["domain_id"]) . " AND c.`active` = 'y'");
+		$cron_jobs = $app->db->queryAllRecords("SELECT c.`run_min`, c.`run_hour`, c.`run_mday`, c.`run_month`, c.`run_wday`, c.`command`, c.`type`, c.`log`, `web_domain`.`domain` as `domain` FROM `cron` as c INNER JOIN `web_domain` ON `web_domain`.`domain_id` = c.`parent_domain_id` WHERE c.`parent_domain_id` = ? AND c.`active` = 'y'", $this->parent_domain["domain_id"]);
 		if($cron_jobs && count($cron_jobs) > 0) {
 			foreach($cron_jobs as $job) {
 				if($job['run_month'] == '@reboot') {
@@ -210,7 +210,7 @@
 				$log_root = '';
 				if($job['log'] == 'y') {
 					if($job['type'] != 'chrooted') $log_root = $this->parent_domain['document_root'];
-					$log_root .= '/log';
+					$log_root .= '/private';
 					
 					$log_target = '>>' . $log_root . '/cron.log 2>>' . $log_root . '/cron_error.log';
 					$log_wget_target = $log_root . '/cron_wget.log';
diff --git a/server/plugins-available/firewall_plugin.inc.php b/server/plugins-available/firewall_plugin.inc.php
index 2cca769..d3538cc 100644
--- a/server/plugins-available/firewall_plugin.inc.php
+++ b/server/plugins-available/firewall_plugin.inc.php
@@ -38,7 +38,7 @@
 	public function onInstall() {
 		global $conf;
 
-		if($conf['bastille']['installed'] = true && $conf['services']['firewall'] == true) {
+		if($conf['bastille']['installed'] == true && $conf['services']['firewall'] == true) {
 			return true;
 		} else {
 			return false;
diff --git a/server/plugins-available/ftpuser_base_plugin.inc.php b/server/plugins-available/ftpuser_base_plugin.inc.php
index d469361..484a0f7 100644
--- a/server/plugins-available/ftpuser_base_plugin.inc.php
+++ b/server/plugins-available/ftpuser_base_plugin.inc.php
@@ -74,7 +74,7 @@
 		if(!is_dir($data['new']['dir'])) {
 			$app->log("FTP User directory '".$data['new']['dir']."' does not exist. Creating it now.", LOGLEVEL_DEBUG);
 
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 
 			//* Check if the resulting path is inside the docroot
 			if(substr($data['new']['dir'], 0, strlen($web['document_root'])) != $web['document_root']) {
@@ -100,7 +100,7 @@
 		if(!is_dir($data['new']['dir'])) {
 			$app->log("FTP User directory '".$data['new']['dir']."' does not exist. Creating it now.", LOGLEVEL_DEBUG);
 
-			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
+			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 
 			//* Check if the resulting path is inside the docroot
 			if(substr($data['new']['dir'], 0, strlen($web['document_root'])) != $web['document_root']) {
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 5ac0951..caec01a 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -98,10 +98,10 @@
 			if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
 				$app->log('Map uid to linux-user',LOGLEVEL_DEBUG);
 				$email_parts = explode('@',$data['new']['email']);
-				$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain = '".$app->db->quote($email_parts[1])."'");
+				$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain = ?", $email_parts[1]);
 				if ($webdomain) {
 					while (($webdomain['system_user'] == null) && ($webdomain['parent_domain_id'] != 0)) {
-						$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain_id = '".$webdomain['parent_domain_id']."'");
+						$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain_id = ?", $webdomain['parent_domain_id']);
 					}
 					$app->log($data['new']['server_id'].' == '.$webdomain['server_id'],LOGLEVEL_DEBUG);
 
@@ -118,7 +118,7 @@
 		$app->log('Mailuser uid: '.$data['new']['uid'].', gid: '.$data['new']['gid'],LOGLEVEL_DEBUG);
 
 		// update DB if values changed
-		$app->db->query("UPDATE mail_user SET uid = ".$data['new']['uid'].", gid = ".$data['new']['gid']." WHERE mailuser_id = ".$data['new']['mailuser_id']);
+		$app->db->query("UPDATE mail_user SET uid = ?, gid = ? WHERE mailuser_id = ?", $data['new']['uid'], $data['new']['gid'], $data['new']['mailuser_id']);
 
 		// now get names of uid and gid
 		$user = $app->system->getuser($data['new']['uid']);
@@ -130,67 +130,80 @@
 			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 		}
 
-		// Dovecot uses a different mail layout with a separate 'Maildir' subdirectory.
-		if($mail_config['pop3_imap_daemon'] == 'dovecot') {
-			//exec("su -c 'mkdir -p ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			$app->system->mkdirpath($maildomain_path, 0700, $user, $group);
-			$app->log('Created Directory: '.$maildomain_path, LOGLEVEL_DEBUG);
-			$maildomain_path .= '/Maildir';
+		if ($data['new']['maildir_format'] == 'mdbox') {
+			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" INBOX'");
+			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Sent'");
+			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Trash'");
+			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Junk'");
+			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Drafts'");
+			
+			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" INBOX'");
+			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Sent'");
+			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Trash'");
+			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Junk'");
+			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Drafts'");
 		}
-
-		//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
-		if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
-			if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-			exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
-			$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
-		}
-
-		//* Create the maildir, if it doesn not exist, set permissions, set quota.
-		if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
-
-			//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			$app->system->maildirmake($maildomain_path, $user, '', $group);
-
-			//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
-			if($mail_config['pop3_imap_daemon'] != 'dovecot') {
-				if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
-				$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+		else {
+			// Dovecot uses a different mail layout with a separate 'Maildir' subdirectory.
+			if($mail_config['pop3_imap_daemon'] == 'dovecot') {
+				$app->system->mkdirpath($maildomain_path, 0700, $user, $group);
+				$app->log('Created Directory: '.$maildomain_path, LOGLEVEL_DEBUG);
+				$maildomain_path .= '/Maildir';
+			}
+					
+			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
+			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
+				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
+				exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
+				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+			}
+	
+			//* Create the maildir, if it doesn not exist, set permissions, set quota.
+			if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
+	
+				//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				$app->system->maildirmake($maildomain_path, $user, '', $group);
+	
+				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
+				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
+					if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
+					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+				}
+			}
+	
+			if(!is_dir($data['new']['maildir'].'/.Sent')) {
+				//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
+			}
+			if(!is_dir($data['new']['maildir'].'/.Drafts')) {
+				//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
+			}
+			if(!is_dir($data['new']['maildir'].'/.Trash')) {
+				//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
+			}
+			if(!is_dir($data['new']['maildir'].'/.Junk')) {
+				//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
+			}
+	
+			// Set permissions now recursive
+			exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
+			$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
+	
+			//* Set the maildir quota
+			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
+				if($data['new']['quota'] > 0) {
+					if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
+					$app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
+				}
 			}
 		}
-
-		if(!is_dir($data['new']['maildir'].'/.Sent')) {
-			//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
-		}
-		if(!is_dir($data['new']['maildir'].'/.Drafts')) {
-			//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
-		}
-		if(!is_dir($data['new']['maildir'].'/.Trash')) {
-			//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
-		}
-		if(!is_dir($data['new']['maildir'].'/.Junk')) {
-			//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
-		}
-
-		// Set permissions now recursive
-		exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
-		$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
-
-		//* Set the maildir quota
-		if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
-			if($data['new']['quota'] > 0) {
-				if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
-				$app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
-			}
-		}
-		
 
 		//* Send the welcome email message
 		if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) {
@@ -252,6 +265,9 @@
 		}
 		*/
 
+		// Maildir-Format must not be changed on this way !!
+		$data['new']['maildir_format'] = $data['old']['maildir_format'];
+		
 		$maildomain_path = $data['new']['maildir'];
 		$tmp_basepath = $data['new']['maildir'];
 		$tmp_basepath_parts = explode('/', $tmp_basepath);
@@ -264,10 +280,10 @@
 			if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
 				$app->log('Map uid to linux-user',LOGLEVEL_DEBUG);
 				$email_parts = explode('@',$data['new']['email']);
-				$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain = '".$app->db->quote($email_parts[1])."'");
+				$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain = ?", $email_parts[1]);
 				if ($webdomain) {
 					while ($webdomain['parent_domain_id'] != 0) {
-						$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain_id = '".$webdomain['parent_domain_id']."'");
+						$webdomain = $app->db->queryOneRecord("SELECT domain_id, server_id, system_user, parent_domain_id FROM web_domain WHERE domain_id = ?", $webdomain['parent_domain_id']);
 					}
 					$app->log($data['new']['server_id'].' == '.$webdomain['server_id'],LOGLEVEL_DEBUG);
 
@@ -284,7 +300,7 @@
 		$app->log('Mailuser uid: '.$data['new']['uid'].', gid: '.$data['new']['gid'],LOGLEVEL_DEBUG);
 
 		// update DB if values changed
-		$app->db->query("UPDATE mail_user SET uid = ".$data['new']['uid'].", gid = ".$data['new']['gid']." WHERE mailuser_id = ".$data['new']['mailuser_id']);
+		$app->db->query("UPDATE mail_user SET uid = ?, gid = ? WHERE mailuser_id = ?", $data['new']['uid'], $data['new']['gid'], $data['new']['mailuser_id']);
 
 		$user = $app->system->getuser($data['new']['uid']);
 		$group = $app->system->getgroup($data['new']['gid']);
@@ -296,84 +312,115 @@
 			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 		}
 
-		// Dovecot uses a different mail layout with a separate 'Maildir' subdirectory.
-		if($mail_config['pop3_imap_daemon'] == 'dovecot') {
-			$app->system->mkdirpath($maildomain_path, 0700, $user, $group);
-			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
-			$maildomain_path .= '/Maildir';
+		if ($data['new']['maildir_format'] == 'mdbox') {
+			// Move mailbox, if domain has changed and delete old mailbox
+			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
+				if(is_dir($data['new']['maildir'])) {
+					exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
+					//rmdir($data['new']['maildir']);
+				}
+				exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
+				// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
+				// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
+				// rmdir($data['old']['maildir']);
+				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
+			}
+				
+			//* Create the maildir, if it doesn not exist, set permissions, set quota.
+			if(!is_dir($data['new']['maildir'].'/mdbox')) {
+				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" INBOX'");
+				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Sent'");
+				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Trash'");
+				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Junk'");
+				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Drafts'");
+					
+				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" INBOX'");
+				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Sent'");
+				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Trash'");
+				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Junk'");
+				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Drafts'");
+			}
 		}
-
-		//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
-		if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
-			if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-			exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
-			$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
-		}
-
-		//* Create the maildir, if it doesn not exist, set permissions, set quota.
-		if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
-			//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log("Created Maildir "."su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, '', $group);
-
-			//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
-			if($mail_config['pop3_imap_daemon'] != 'dovecot') {
+		else {
+			// Dovecot uses a different mail layout with a separate 'Maildir' subdirectory.
+			if($mail_config['pop3_imap_daemon'] == 'dovecot') {
+				$app->system->mkdirpath($maildomain_path, 0700, $user, $group);
+				$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
+				$maildomain_path .= '/Maildir';
+			}
+	
+			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
+			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
+				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
+				exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
+				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+			}
+	
+			//* Create the maildir, if it doesn not exist, set permissions, set quota.
+			if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
+				//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log("Created Maildir "."su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, '', $group);
+	
+				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
+				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
+					if($data['new']['quota'] > 0) {
+						if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
+						$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+					} else {
+						if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
+						$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
+					}
+				}
+			}
+	
+			if(!is_dir($data['new']['maildir'].'/.Sent')) {
+				//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
+			}
+			if(!is_dir($data['new']['maildir'].'/.Drafts')) {
+				//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
+			}
+			if(!is_dir($data['new']['maildir'].'/.Trash')) {
+				//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
+			}
+			if(!is_dir($data['new']['maildir'].'/.Junk')) {
+				//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
+				//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
+				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
+			}
+	
+			// Set permissions now recursive
+			exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
+			$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
+	
+			// Move mailbox, if domain has changed and delete old mailbox
+			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
+				if(is_dir($data['new']['maildir'])) {
+					exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
+					//rmdir($data['new']['maildir']);
+				}
+				exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
+				// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
+				// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
+				// rmdir($data['old']['maildir']);
+				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
+			}
+			//This is to fix the maildrop quota not being rebuilt after the quota is changed.
+			// Courier Layout
+			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
-					if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
-					$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
+					$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
 				} else {
 					if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
 					$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
 				}
-			}
-		}
-
-		if(!is_dir($data['new']['maildir'].'/.Sent')) {
-			//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
-		}
-		if(!is_dir($data['new']['maildir'].'/.Drafts')) {
-			//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
-		}
-		if(!is_dir($data['new']['maildir'].'/.Trash')) {
-			//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
-		}
-		if(!is_dir($data['new']['maildir'].'/.Junk')) {
-			//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-			//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
-			$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
-		}
-
-		// Set permissions now recursive
-		exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
-		$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
-
-		// Move mailbox, if domain has changed and delete old mailbox
-		if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
-			if(is_dir($data['new']['maildir'])) {
-				exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
-				//rmdir($data['new']['maildir']);
-			}
-			exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
-			// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
-			// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
-			// rmdir($data['old']['maildir']);
-			$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
-		}
-		//This is to fix the maildrop quota not being rebuilt after the quota is changed.
-		// Courier Layout
-		if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
-			if($data['new']['quota'] > 0) {
-				if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
-				$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
-			} else {
-				if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
-				$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
 			}
 		}
 	}
@@ -398,31 +445,24 @@
 		//* Delete the mail-backups
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		$backup_dir = $server_config['backup_dir'];
-		//* mount backup directory, if necessary
 		$mount_backup = true;
-		$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
 		if($server_config['backup_dir'] != '' && $maildir_path_deleted && $server_config['backup_delete'] == 'y') {
-			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($backup_dir)){
-					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-					sleep(1);
-					if(!$app->system->is_mounted($backup_dir)) $mount_backup = false;
-				}
-			}
+			//* mount backup directory, if necessary
+			if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
 			if($mount_backup){
-				$sql = "SELECT * FROM mail_domain WHERE domain = '".explode("@",$data['old']['email'])[1]."'";
-				$domain_rec = $app->db->queryOneRecord($sql);
-				$mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
-				$mail_backup_files = 'mail'.$data['old']['mailuser_id'];
-				exec(escapeshellcmd('rm -f '.$mail_backup_dir.'/'.$mail_backup_files).'*');
-				//* cleanup database
-				$sql = "DELETE FROM mail_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$domain_rec['domain_id']." AND mailuser_id = ".$data['old']['mailuser_id'];
-				$app->db->query($sql);
-				if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+				$sql = "SELECT * FROM mail_domain WHERE domain = ?";
+				$domain_rec = $app->db->queryOneRecord($sql, explode("@",$data['old']['email'])[1]);
+				if (is_array($domain_rec)) {
+					$mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
+					$mail_backup_files = 'mail'.$data['old']['mailuser_id'];
+					exec(escapeshellcmd('rm -f '.$mail_backup_dir.'/'.$mail_backup_files).'*');
+					//* cleanup database
+					$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND mailuser_id = ?";
+					$app->db->query($sql, $conf['server_id'], $domain_rec['domain_id'], $data['old']['mailuser_id']);
+					if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $domain_rec['domain_id'], $data['old']['mailuser_id']);
 
-				$app->log('Deleted the mail backups for: '.$data['old']['email'], LOGLEVEL_DEBUG);
-				
-				
+					$app->log('Deleted the mail backups for: '.$data['old']['email'], LOGLEVEL_DEBUG);
+				}
 			}
 		}
 	}
@@ -430,7 +470,6 @@
 	function domain_delete($event_name, $data) {
 		global $app, $conf;
 
-		// get the config
 		$app->uses("getconf");
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
@@ -457,24 +496,17 @@
 		//* Delete the mail-backups
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		$backup_dir = $server_config['backup_dir'];
-		//* mount backup directory, if necessary
 		$mount_backup = true;
-		$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
 		if($server_config['backup_dir'] != '' && $maildomain_path_deleted && $server_config['backup_delete'] == 'y'){
-			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($backup_dir)){
-					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
-					sleep(1);
-					if(!$app->system->is_mounted($backup_dir)) $mount_backup = false;
-				}
-			}
+			//* mount backup directory, if necessary
+			if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
 			if($mount_backup){
 				$mail_backup_dir = $backup_dir.'/mail'.$data['old']['domain_id'];
 				exec(escapeshellcmd('rm -rf '.$mail_backup_dir));
 				//* cleanup database
-				$sql = "DELETE FROM mail_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$data['old']['domain_id'];
-				$app->db->query($sql);
-				if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql);
+				$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ?";
+				$app->db->query($sql, $conf['server_id'], $data['old']['domain_id']);
+				if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $domain_rec['domain_id']);
 
 				$app->log('Deleted the mail backup directory: '.$mail_backup_dir, LOGLEVEL_DEBUG);
 			}
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index 3e00ada..7ded684 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -75,9 +75,9 @@
 	 */
 	function get_amavis_config() {
 		$pos_config=array(
-			'/etc/amavisd.conf',
 			'/etc/amavisd.conf/50-user',
 			'/etc/amavis/conf.d/50-user',
+			'/etc/amavisd.conf',
 			'/etc/amavisd/amavisd.conf'
 		);
 		$amavis_configfile='';
@@ -143,7 +143,12 @@
 					mkdir($mail_config['dkim_path'], 0755, true);
 					$app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'], LOGLEVEL_WARNING);
 				}
-            }
+            } else {
+				if (!$app->system->checkpath($mail_config['dkim_path'])) {
+					$app->log('Unable to write DKIM settings - invalid DKIM-Path (symlink?)', LOGLEVEL_ERROR);
+					$check=false;
+				}
+			}
 
 			if (!is_writeable($mail_config['dkim_path'])) {
 				$app->log('DKIM Path '.$mail_config['dkim_path'].' not writeable.', LOGLEVEL_ERROR);
@@ -320,7 +325,7 @@
 					$this->remove_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'], $data['new']['domain']);
 				}
 			} else {
-				$app->log('Error saving the DKIM Private-key for '.$data['new']['domain'].' - DKIM is not enabled for the domain.', LOGLEVEL_ERROR);
+				$app->log('Error saving the DKIM Private-key for '.$data['new']['domain'].' - DKIM is not enabled for the domain.', LOGLEVEL_DEBUG);
 			}
 		}
 	}
@@ -364,44 +369,46 @@
 	 */
 	function domain_dkim_update($event_name, $data) {
 		global $app;
-		if ($this->check_system($data)) {
-			/* maildomain disabled */
-			if ($data['new']['active'] == 'n' && $data['old']['active'] == 'y' && $data['new']['dkim']=='y') {
-				$app->log('Maildomain '.$data['new']['domain'].' disabled - remove DKIM-settings', LOGLEVEL_DEBUG);
-				$this->remove_dkim($data['new']);
-			}
-			/* maildomain re-enabled */
-			if ($data['new']['active'] == 'y' && $data['old']['active'] == 'n' && $data['new']['dkim']=='y') 
-				$this->add_dkim($data);
-
-			/* maildomain active - only dkim changes */
-			if ($data['new']['active'] == 'y' && $data['old']['active'] == 'y') {
-				/* dkim disabled */
-				if ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'n') {
+		if($data['new']['dkim'] == 'y' || $data['old']['dkim'] == 'y'){
+			if ($this->check_system($data)) {
+				/* maildomain disabled */
+				if ($data['new']['active'] == 'n' && $data['old']['active'] == 'y' && $data['new']['dkim']=='y') {
+					$app->log('Maildomain '.$data['new']['domain'].' disabled - remove DKIM-settings', LOGLEVEL_DEBUG);
 					$this->remove_dkim($data['new']);
 				}
-				/* dkim enabled */
-				elseif ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'y') {
+				/* maildomain re-enabled */
+				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'n' && $data['new']['dkim']=='y') 
 					$this->add_dkim($data);
-				}
-				/* new private-key */
-				if ($data['new']['dkim_private'] != $data['old']['dkim_private'] && $data['new']['dkim'] == 'y') {
-					$this->add_dkim($data);
-				}
-				/* new selector */
-				if ($data['new']['dkim_selector'] != $data['old']['dkim_selector'] && $data['new']['dkim'] == 'y') {
-					$this->add_dkim($data);
-				}
-				/* new domain-name */
-				if ($data['new']['domain'] != $data['old']['domain']) {
-					$this->remove_dkim($data['old']);
-					$this->add_dkim($data);
-				}
-			}
 
-			/* resync */
-			if ($data['new']['active'] == 'y' && $data['new'] == $data['old']) {
-				$this->add_dkim($data);
+				/* maildomain active - only dkim changes */
+				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'y') {
+					/* dkim disabled */
+					if ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'n') {
+						$this->remove_dkim($data['new']);
+					}
+					/* dkim enabled */
+					elseif ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'y') {
+						$this->add_dkim($data);
+					}
+					/* new private-key */
+					if ($data['new']['dkim_private'] != $data['old']['dkim_private'] && $data['new']['dkim'] == 'y') {
+						$this->add_dkim($data);
+					}
+					/* new selector */
+					if ($data['new']['dkim_selector'] != $data['old']['dkim_selector'] && $data['new']['dkim'] == 'y') {
+						$this->add_dkim($data);
+					}
+					/* new domain-name */
+					if ($data['new']['domain'] != $data['old']['domain']) {
+						$this->remove_dkim($data['old']);
+						$this->add_dkim($data);
+					}
+				}
+
+				/* resync */
+				if ($data['new']['active'] == 'y' && $data['new'] == $data['old'] && $data['new']['dkim']=='y') {
+					$this->add_dkim($data);
+				}
 			}
 		}
 	}
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 6e591a6..a6f9ae5 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -165,8 +165,8 @@
 			$tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]);
 
 			//* Set alias addresses for autoresponder
-			$sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = '".$app->db->quote($data["new"]["email"])."'";
-			$records = $app->db->queryAllRecords($sql);
+			$sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = ?";
+			$records = $app->db->queryAllRecords($sql, $data["new"]["email"]);
 
 			$addresses = array();
 			$addresses[] = $data["new"]["email"];
@@ -181,8 +181,8 @@
 			$alias_addresses = array();
 
 			$email_parts = explode('@', $data["new"]["email"]);
-			$sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = '@".$app->db->quote($email_parts[1])."'";
-			$records = $app->db->queryAllRecords($sql);
+			$sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = ?";
+			$records = $app->db->queryAllRecords($sql, '@'.$email_parts[1]);
 			if(is_array($records) && count($records) > 0) {
 				$app->log("Found " . count($records) . " records (aliasdomains).", LOGLEVEL_DEBUG);
 				foreach($records as $rec) {
@@ -216,18 +216,22 @@
 			if ( ! is_dir($data["new"]["maildir"].'/sieve/') ) {
 				$app->system->mkdirpath($data["new"]["maildir"].'/sieve/', 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 			}
-			file_put_contents($sieve_file, $tpl->grab());
-			exec('chown '.$mail_config['mailuser_name'].':'.$mail_config['mailuser_group'].' '.escapeshellcmd($sieve_file));
 
-			chown($sieve_file_isp,$mail_config['mailuser_name']);
-			chgrp($sieve_file_isp,$mail_config['mailuser_group']);
+			file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file", LOGLEVEL_WARN);
+			if ( is_file($sieve_file_isp) ) {
+				$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
+				$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
+			}
 			chdir($data["new"]["maildir"]);
 			//* create symlink to activate sieve script
 			symlink("sieve/ispconfig.sieve", ".sieve")  or $app->log("Unable to create symlink to active sieve filter", LOGLEVEL_WARN);
 			if (is_link(".sieve")) {
-				lchown(".sieve",$mail_config['mailuser_name']);
-				lchgrp(".sieve",$mail_config['mailuser_group']);
+				$app->system->chown(".sieve",$mail_config['mailuser_name'],true);
+				$app->system->chgrp(".sieve",$mail_config['mailuser_group'],true);
 			}
+			$app->system->chown($sieve_file,$mail_config['mailuser_name'],true);
+			$app->system->chgrp($sieve_file,$mail_config['mailuser_group'],true);
+
 			unset($tpl);
 
 		}
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index acf4eb9..9ebb2aa 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -78,7 +78,7 @@
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 
-		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$app->db->quote($data["new"]['mailinglist_id']));
+		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 
 	}
 
@@ -91,7 +91,7 @@
 		if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') {
 			exec("nohup /usr/lib/mailman/bin/change_pw -l ".escapeshellcmd($data["new"]["listname"])." -p ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 &");
 			exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
-			$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$app->db->quote($data["new"]['mailinglist_id']));
+			$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 		}
 		
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
diff --git a/server/plugins-available/mongo_clientdb_plugin.inc.php b/server/plugins-available/mongo_clientdb_plugin.inc.php
index 2f38112..b4d274c 100644
--- a/server/plugins-available/mongo_clientdb_plugin.inc.php
+++ b/server/plugins-available/mongo_clientdb_plugin.inc.php
@@ -500,8 +500,8 @@
 				return;
 			}
 
-			$db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = '" . intval($data['new']['database_user_id']) . "'");
-			$db_ro_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = '" . intval($data['new']['database_ro_user_id']) . "'");
+			$db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = ?", $data['new']['database_user_id']);
+			$db_ro_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = ?", $data['new']['database_ro_user_id']);
 
 			$user = $db_user['database_user'];
 			$password = $db_user['database_password_mongo'];
@@ -573,8 +573,8 @@
 				return;
 			}
 
-			$db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = '" . intval($data['new']['database_user_id']) . "'");
-			$db_ro_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = '" . intval($data['new']['database_ro_user_id']) . "'");
+			$db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = ?", $data['new']['database_user_id']);
+			$db_ro_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = ?", $data['new']['database_ro_user_id']);
 
 			$user = $db_user['database_user'];
 			$password = $db_user['database_password_mongo'];
@@ -600,7 +600,7 @@
 				} else {
 				// selected user has changed -> drop old one
 				if ($data['new']['database_user_id'] != $data['old']['database_user_id']) {
-					$old_db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = '" . intval($data['old']['database_user_id']) . "'");
+					$old_db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = ?", $data['old']['database_user_id']);
 
 					if ((bool) $old_db_user) {
 						if ($old_db_user['database_user'] == 'root') {
@@ -613,7 +613,7 @@
 
 				// selected read-only user has changed -> drop old one
 				if ($data['new']['database_ro_user_id'] != $data['old']['database_ro_user_id']) {
-					$old_db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = '" . intval($data['old']['database_ro_user_id']) . "'");
+					$old_db_user = $app->db->queryOneRecord("SELECT `database_user`, `database_password_mongo` FROM `web_database_user` WHERE `database_user_id` = ?", $data['old']['database_ro_user_id']);
 
 					if ((bool) $old_db_user) {
 						if ($old_db_user['database_user'] == 'root') {
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index 6145db0..146e17a 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -195,7 +195,7 @@
 			}
 
 			//* Create the new database
-			if ($link->query('CREATE DATABASE '.$link->escape_string($data['new']['database_name']).$query_charset_table)) {
+			if ($link->query('CREATE DATABASE `'.$link->escape_string($data['new']['database_name']).'`'.$query_charset_table)) {
 				$app->log('Created MySQL database: '.$data['new']['database_name'], LOGLEVEL_DEBUG);
 			} else {
 				$app->log('Unable to create the database: '.$link->error, LOGLEVEL_WARNING);
diff --git a/server/plugins-available/network_settings_plugin.inc.php b/server/plugins-available/network_settings_plugin.inc.php
index 46242d9..13dbf3c 100644
--- a/server/plugins-available/network_settings_plugin.inc.php
+++ b/server/plugins-available/network_settings_plugin.inc.php
@@ -101,7 +101,7 @@
 				$network_tpl->setVar('broadcast', $this->broadcast($server_config['ip_address'], $server_config['netmask']));
 				$network_tpl->setVar('network', $this->network($server_config['ip_address'], $server_config['netmask']));
 
-				$records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = ".intval($conf['server_id']) . ' ORDER BY server_ip_id ASC');
+				$records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = ? ORDER BY server_ip_id ASC", $conf['server_id']);
 				$ip_records = array();
 				$additionl_ip_records = 0;
 				$n = 0;
@@ -179,7 +179,7 @@
 				$network_tpl->setVar('gateway', $server_config['gateway']);
 				$network_tpl->setVar('broadcast', $this->broadcast($server_config['ip_address'], $server_config['netmask']));
 
-				$records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = ".intval($conf['server_id']) . " order by ip_address");
+				$records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = ? order by ip_address", $conf['server_id']);
 				$ip_records = array();
 				$additionl_ip_records = 0;
 				$n = 0;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 77ac10a..ef48adb 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -208,15 +208,15 @@
 			$app->system->chmod($key_file2, 0400);
 			@$app->system->unlink($config_file);
 			@$app->system->unlink($rand_file);
-			$ssl_request = $app->db->quote($app->system->file_get_contents($csr_file));
-			$ssl_cert = $app->db->quote($app->system->file_get_contents($crt_file));
-			$ssl_key2 = $app->db->quote($app->system->file_get_contents($key_file2));
+			$ssl_request = $app->system->file_get_contents($csr_file);
+			$ssl_cert = $app->system->file_get_contents($crt_file);
+			$ssl_key2 = $app->system->file_get_contents($key_file2);
 			/* Update the DB of the (local) Server */
-			$app->db->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'");
-			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->db->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key2, $data['new']['domain']);
+			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			/* Update also the master-DB of the Server-Farm */
-			$app->dbmaster->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key2' WHERE domain = '".$data['new']['domain']."'");
-			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key2, $data['new']['domain']);
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 		}
 
 		//* Save a SSL certificate to disk
@@ -263,10 +263,10 @@
 				unset($crt_file_contents);
 			}
 			/* Update the DB of the (local) Server */
-			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 
 			/* Update also the master-DB of the Server-Farm */
-			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			$app->log('Saving SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
 		}
 
@@ -286,11 +286,11 @@
 			$app->system->unlink($crt_file);
 			//$app->system->unlink($bundle_file);
 			/* Update the DB of the (local) Server */
-			$app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data['new']['domain']."'");
-			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = ?", $data['new']['domain']);
+			$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			/* Update also the master-DB of the Server-Farm */
-			$app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data['new']['domain']."'");
-			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+			$app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = ?", $data['new']['domain']);
+			$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
 			$app->log('Deleting SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
 		}
 
@@ -326,7 +326,7 @@
 
 			// If the parent_domain_id has been changed, we will have to update the old site as well.
 			if($this->action == 'update' && $data['new']['parent_domain_id'] != $data['old']['parent_domain_id']) {
-				$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$old_parent_domain_id." AND active = 'y'");
+				$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $old_parent_domain_id);
 				$data['new'] = $tmp;
 				$data['old'] = $tmp;
 				$this->action = 'update';
@@ -334,7 +334,7 @@
 			}
 
 			// This is not a vhost, so we need to update the parent record instead.
-			$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$new_parent_domain_id." AND active = 'y'");
+			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $new_parent_domain_id);
 			$data['new'] = $tmp;
 			$data['old'] = $tmp;
 			$this->action = 'update';
@@ -374,7 +374,7 @@
 		$old_log_folder = 'log';
 		if($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') {
 			// new one
-			$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($data['new']['parent_domain_id']));
+			$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['new']['parent_domain_id']);
 			$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['new']['domain']);
 			if($subdomain_host == '') $subdomain_host = 'web'.$data['new']['domain_id'];
 			$web_folder = $data['new']['web_folder'];
@@ -383,7 +383,7 @@
 			
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
-				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id']));
+				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']);
 				if($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id'];
 				$old_web_folder = $data['old']['web_folder'];
@@ -437,7 +437,7 @@
 		if($this->action == 'update' && $data['new']['document_root'] != $data['old']['document_root']) {
 
 			//* Get the old client ID
-			$old_client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = '.intval($data['old']['sys_groupid']));
+			$old_client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = ?', $data['old']['sys_groupid']);
 			$old_client_id = intval($old_client['client_id']);
 			unset($old_client);
 
@@ -576,7 +576,7 @@
 		$app->system->web_folder_protection($data['new']['document_root'], true);
 
 		// Get the client ID
-		$client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = '.intval($data['new']['sys_groupid']));
+		$client = $app->dbmaster->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = ?', $data['new']['sys_groupid']);
 		$client_id = intval($client['client_id']);
 		unset($client);
 
@@ -959,6 +959,7 @@
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
+		$pool_dir = trim($pool_dir);
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
 		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
@@ -1089,7 +1090,27 @@
 
 		// Custom nginx directives
 		$final_nginx_directives = array();
-		$nginx_directives = $data['new']['nginx_directives'];
+		if(intval($data['new']['directive_snippets_id']) > 0){
+			$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", $data['new']['directive_snippets_id']);
+			if(isset($snippet['snippet'])){
+				$nginx_directives = $snippet['snippet'];
+			} else {
+				$nginx_directives = $data['new']['nginx_directives'];
+			}
+			if($data['new']['enable_pagespeed'] == 'y'){
+				// if PageSpeed is already enabled, don't add configuration again
+				if(stripos($nginx_directives, 'pagespeed') !== false){
+					$vhost_data['enable_pagespeed'] = false;
+				} else {
+					$vhost_data['enable_pagespeed'] = true;
+				}
+			} else {
+				$vhost_data['enable_pagespeed'] = false;
+			}
+		} else {
+			$nginx_directives = $data['new']['nginx_directives'];
+			$vhost_data['enable_pagespeed'] = false;
+		}
 		// Make sure we only have Unix linebreaks
 		$nginx_directives = str_replace("\r\n", "\n", $nginx_directives);
 		$nginx_directives = str_replace("\r", "\n", $nginx_directives);
@@ -1327,7 +1348,7 @@
 		$auto_alias = $web_config['website_autoalias'];
 		if($auto_alias != '') {
 			// get the client username
-			$client = $app->db->queryOneRecord("SELECT `username` FROM `client` WHERE `client_id` = '" . intval($client_id) . "'");
+			$client = $app->db->queryOneRecord("SELECT `username` FROM `client` WHERE `client_id` = ?", $client_id);
 			$aa_search = array('[client_id]', '[website_id]', '[client_username]', '[website_domain]');
 			$aa_replace = array($client_id, $data['new']['domain_id'], $client['username'], $data['new']['domain']);
 			$auto_alias = str_replace($aa_search, $aa_replace, $auto_alias);
@@ -1347,7 +1368,7 @@
 		}
 
 		// get alias domains (co-domains and subdomains)
-		$aliases = $app->db->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = '.$data['new']['domain_id']." AND active = 'y' AND (type != 'vhostsubdomain' AND type != 'vhostalias')");
+		$aliases = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ? AND active = 'y' AND (type != 'vhostsubdomain' AND type != 'vhostalias')", $data['new']['domain_id']);
 		$alias_seo_redirects = array();
 		if(is_array($aliases)) {
 			foreach($aliases as $alias) {
@@ -1796,7 +1817,7 @@
 		$log_folder = 'log';
 		$web_folder = '';
 		if($data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
-			$tmp = $app->db->queryOneRecord('SELECT `domain`,`document_root` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id']));
+			$tmp = $app->db->queryOneRecord('SELECT `domain`,`document_root` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
 			if($tmp['domain'] != ''){
 				$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']);
 			} else {
@@ -1868,7 +1889,7 @@
 		if($data['old']['type'] != 'vhost' && $data['old']['type'] != 'vhostsubdomain' && $data['old']['type'] != 'vhostalias' && $data['old']['parent_domain_id'] > 0) {
 			//* This is a alias domain or subdomain, so we have to update the website instead
 			$parent_domain_id = intval($data['old']['parent_domain_id']);
-			$tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$parent_domain_id." AND active = 'y'");
+			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $parent_domain_id);
 			$data['new'] = $tmp;
 			$data['old'] = $tmp;
 			$this->action = 'update';
@@ -1922,7 +1943,7 @@
 						} else {
 							// read all vhost subdomains with same parent domain
 							$used_paths = array();
-							$tmp = $app->db->queryAllRecords("SELECT `web_folder` FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ".intval($data['old']['parent_domain_id'])." AND domain_id != ".intval($data['old']['domain_id']));
+							$tmp = $app->db->queryAllRecords("SELECT `web_folder` FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ? AND domain_id != ?", $data['old']['parent_domain_id'], $data['old']['domain_id']);
 							foreach($tmp as $tmprec) {
 								// we normalize the folder entries because we need to compare them
 								$tmp_folder = preg_replace('/[\/]{2,}/', '/', $tmprec['web_folder']); // replace / occuring multiple times
@@ -2005,7 +2026,7 @@
 				$app->log('Removing website: '.$docroot, LOGLEVEL_DEBUG);
 
 				// Delete the symlinks for the sites
-				$client = $app->db->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = '.intval($data['old']['sys_groupid']));
+				$client = $app->db->queryOneRecord('SELECT client_id FROM sys_group WHERE sys_group.groupid = ?', $data['old']['sys_groupid']);
 				$client_id = intval($client['client_id']);
 				unset($client);
 				$tmp_symlinks_array = explode(':', $web_config['website_symlinks']);
@@ -2046,6 +2067,28 @@
 				$this->awstats_delete($data, $web_config);
 			}
 
+			//* Delete the web-backups
+			if($data['old']['type'] == 'vhost') {
+				$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+				$backup_dir = $server_config['backup_dir'];
+				$mount_backup = true;
+				if($server_config['backup_dir'] != '' && $server_config['backup_delete'] == 'y') {
+					//* mount backup directory, if necessary
+					if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
+					if($mount_backup){
+						$web_backup_dir = $backup_dir.'/web'.$data_old['domain_id'];
+						//** do not use rm -rf $web_backup_dir because database(s) may exits
+						exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*');
+						//* cleanup database
+						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename LIKE ?";
+						$app->db->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
+						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
+
+						$app->log('Deleted the web backup files', LOGLEVEL_DEBUG);
+					}
+				}
+			}
+
 			$app->services->restartServiceDelayed('httpd', 'reload');
 
 		}
@@ -2071,8 +2114,8 @@
 			$folder_id = $data['new']['web_folder_id'];
 		}
 
-		$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ".intval($folder_id));
-		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($folder['parent_domain_id']));
+		$folder = $app->db->queryOneRecord("SELECT * FROM web_folder WHERE web_folder_id = ?", $folder_id);
+		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $folder['parent_domain_id']);
 
 		if(!is_array($folder) or !is_array($website)) {
 			$app->log('Not able to retrieve folder or website record.', LOGLEVEL_DEBUG);
@@ -2108,19 +2151,6 @@
 			$app->log('Created file '.$folder_path.'.htpasswd', LOGLEVEL_DEBUG);
 		}
 
-		/*
-		$auth_users = $app->db->queryAllRecords("SELECT * FROM web_folder_user WHERE active = 'y' AND web_folder_id = ".intval($folder_id));
-		$htpasswd_content = '';
-		if(is_array($auth_users) && !empty($auth_users)){
-			foreach($auth_users as $auth_user){
-				$htpasswd_content .= $auth_user['username'].':'.$auth_user['password']."\n";
-			}
-		}
-		$htpasswd_content = trim($htpasswd_content);
-		@file_put_contents($folder_path.'.htpasswd', $htpasswd_content);
-		$app->log('Changed .htpasswd file: '.$folder_path.'.htpasswd',LOGLEVEL_DEBUG);
-		*/
-
 		if(($data['new']['username'] != $data['old']['username'] || $data['new']['active'] == 'n') && $data['old']['username'] != '') {
 			$app->system->removeLine($folder_path.'.htpasswd', $data['old']['username'].':');
 			$app->log('Removed user: '.$data['old']['username'], LOGLEVEL_DEBUG);
@@ -2149,7 +2179,7 @@
 		$folder_id = $data['old']['web_folder_id'];
 
 		$folder = $data['old'];
-		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($folder['parent_domain_id']));
+		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $folder['parent_domain_id']);
 
 		if(!is_array($folder) or !is_array($website)) {
 			$app->log('Not able to retrieve folder or website record.', LOGLEVEL_DEBUG);
@@ -2186,7 +2216,7 @@
 	function web_folder_update($event_name, $data) {
 		global $app, $conf;
 
-		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
+		$website = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 
 		if(!is_array($website)) {
 			$app->log('Not able to retrieve folder or website record.', LOGLEVEL_DEBUG);
@@ -2255,7 +2285,7 @@
 		//$app->load('tpl');
 		//$tpl = new tpl();
 		//$tpl->newTemplate('nginx_http_authentication.auth.master');
-		$website_auth_locations = $app->db->queryAllRecords("SELECT * FROM web_folder WHERE active = 'y' AND parent_domain_id = ".intval($website['domain_id']));
+		$website_auth_locations = $app->db->queryAllRecords("SELECT * FROM web_folder WHERE active = 'y' AND parent_domain_id = ?", $website['domain_id']);
 		$basic_auth_locations = array();
 		if(is_array($website_auth_locations) && !empty($website_auth_locations)){
 			foreach($website_auth_locations as $website_auth_location){
@@ -2337,23 +2367,70 @@
 		} else {
 			$content = file_get_contents($conf['rootpath'] . '/conf/hhvm_starter.master');
 		}
+		if(file_exists($conf['rootpath'] . '/conf-custom/hhvm_monit.master')) {
+			$monit_content = file_get_contents($conf['rootpath'] . '/conf-custom/hhvm_monit.master');
+		} else {
+			$monit_content = file_get_contents($conf['rootpath'] . '/conf/hhvm_monit.master');
+		}
 		
-		if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm') {
+		if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm' || $data['new']['custom_php_ini'] != $data['old']['custom_php_ini']) {
+
+			// Custom php.ini settings
+			$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
+			if(intval($data['new']['directive_snippets_id']) > 0){
+				$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+				if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
+					$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
+					if(is_array($required_php_snippets) && !empty($required_php_snippets)){
+						foreach($required_php_snippets as $required_php_snippet){
+							$required_php_snippet = intval($required_php_snippet);
+							if($required_php_snippet > 0){
+								$php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+								$php_snippet['snippet'] = trim($php_snippet['snippet']);
+								if($php_snippet['snippet'] != ''){
+									$custom_php_ini_settings .= "\n".$php_snippet['snippet'];
+								}
+							}
+						}
+					}
+				}
+			}
+			if($custom_php_ini_settings != ''){
+				// Make sure we only have Unix linebreaks
+				$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
+				$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
+				file_put_contents('/etc/hhvm/'.$data['new']['system_user'].'.ini', $custom_php_ini_settings);
+			} else {
+				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+			}
+		
 			$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
 			file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
 			exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
 			exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
-			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' start >/dev/null 2>&1');
+			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
+			
+			$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
+			file_put_contents('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'], $monit_content);
+			exec('/etc/init.d/monit restart >/dev/null 2>&1');
+			
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
 			exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
-			unlink('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' >/dev/null 2>&1');
+			unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
+			if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
+			
+			if(is_file('/etc/monit/conf.d/hhvm_' . $data['new']['system_user'])){
+				unlink('/etc/monit/conf.d/hhvm_' . $data['new']['system_user']);
+				exec('/etc/init.d/monit restart >/dev/null 2>&1');
+			}
 		}
 	}
 
 	//* Update the PHP-FPM pool configuration file
 	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir) {
 		global $app, $conf;
+		$pool_dir = trim($pool_dir);
 		/*
 		if(trim($data['new']['fastcgi_php_version']) != ''){
 			$default_php_fpm = false;
@@ -2443,6 +2520,26 @@
 		// Custom php.ini settings
 		$final_php_ini_settings = array();
 		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
+		
+		if(intval($data['new']['directive_snippets_id']) > 0){
+			$snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'nginx' AND active = 'y' AND customer_viewable = 'y'", intval($data['new']['directive_snippets_id']));
+			if(isset($snippet['required_php_snippets']) && trim($snippet['required_php_snippets']) != ''){
+				$required_php_snippets = explode(',', trim($snippet['required_php_snippets']));
+				if(is_array($required_php_snippets) && !empty($required_php_snippets)){
+					foreach($required_php_snippets as $required_php_snippet){
+						$required_php_snippet = intval($required_php_snippet);
+						if($required_php_snippet > 0){
+							$php_snippet = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ? AND type = 'php' AND active = 'y'", $required_php_snippet);
+							$php_snippet['snippet'] = trim($php_snippet['snippet']);
+							if($php_snippet['snippet'] != ''){
+								$custom_php_ini_settings .= "\n".$php_snippet['snippet'];
+							}
+						}
+					}
+				}
+			}
+		}
+		
 		if($custom_php_ini_settings != ''){
 			// Make sure we only have Unix linebreaks
 			$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
@@ -2486,7 +2583,7 @@
 		unset($tpl);
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -2495,9 +2592,10 @@
 				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
-		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".$conf["server_id"]);
+		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $conf["server_id"]);
 		if(is_array($php_versions) && !empty($php_versions)){
 			foreach($php_versions as $php_version){
+				$php_version['php_fpm_pool_dir'] = trim($php_version['php_fpm_pool_dir']);
 				if(substr($php_version['php_fpm_pool_dir'], -1) != '/') $php_version['php_fpm_pool_dir'] .= '/';
 				if($php_version['php_fpm_pool_dir'] != $pool_dir){
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
@@ -2534,6 +2632,7 @@
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
+		$pool_dir = trim($pool_dir);
 
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['old']['domain_id'];
@@ -2544,7 +2643,7 @@
 		}
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -2553,9 +2652,10 @@
 				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
-		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ".$data['old']['server_id']);
+		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $data['old']['server_id']);
 		if(is_array($php_versions) && !empty($php_versions)){
 			foreach($php_versions as $php_version){
+				$php_version['php_fpm_pool_dir'] = trim($php_version['php_fpm_pool_dir']);
 				if(substr($php_version['php_fpm_pool_dir'], -1) != '/') $php_version['php_fpm_pool_dir'] .= '/';
 				if($php_version['php_fpm_pool_dir'] != $pool_dir){
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
diff --git a/server/plugins-available/nginx_reverseproxy_plugin.inc.php b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
index 1f68649..b5881db 100644
--- a/server/plugins-available/nginx_reverseproxy_plugin.inc.php
+++ b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
@@ -70,7 +70,7 @@
 
 			// If the parent_domain_id has been chenged, we will have to update the old site as well.
 			if($this->action == 'update' && $data['new']['parent_domain_id'] != $data['old']['parent_domain_id']) {
-				$tmp = $app->dbmaster->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$old_parent_domain_id." AND active = 'y'");
+				$tmp = $app->dbmaster->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $old_parent_domain_id);
 				$data['new'] = $tmp;
 				$data['old'] = $tmp;
 				$this->action = 'update';
@@ -78,7 +78,7 @@
 			}
 
 			// This is not a vhost, so we need to update the parent record instead.
-			$tmp = $app->dbmaster->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$new_parent_domain_id." AND active = 'y'");
+			$tmp = $app->dbmaster->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $new_parent_domain_id);
 			$data['new'] = $tmp;
 			$data['old'] = $tmp;
 			$this->action = 'update';
@@ -130,7 +130,7 @@
 
 
 		// get alias domains (co-domains and subdomains)
-		$aliases = $app->dbmaster->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = '.$data['new']['domain_id']." AND (type != 'vhostsubdomain' OR type != 'vhostalias') AND active = 'y'");
+		$aliases = $app->dbmaster->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ? AND (type != 'vhostsubdomain' OR type != 'vhostalias') AND active = 'y'", $data['new']['domain_id']);
 		$server_alias = array();
 		switch($data['new']['subdomain']) {
 		case 'www':
@@ -243,7 +243,7 @@
 
 		//* Save a SSL certificate to disk
 		if($data["new"]["ssl_action"] == 'save') {
-			$web = $app->masterdb->queryOneRecord("select wd.document_root, sp.ip_address from web_domain wd INNER JOIN server_ip sp USING(server_id) WHERE domain = '".$data['new']['domain']."'");
+			$web = $app->masterdb->queryOneRecord("select wd.document_root, sp.ip_address from web_domain wd INNER JOIN server_ip sp USING(server_id) WHERE domain = ?", $data['new']['domain']);
 
 			$src_ssl_dir = $web["document_root"]."/ssl";
 			//$domain = $data["new"]["ssl_domain"];
diff --git a/server/plugins-available/openvz_plugin.inc.php b/server/plugins-available/openvz_plugin.inc.php
index a50c3de..d6abced 100644
--- a/server/plugins-available/openvz_plugin.inc.php
+++ b/server/plugins-available/openvz_plugin.inc.php
@@ -85,7 +85,7 @@
 			return;
 		}
 
-		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ".$data['new']['ostemplate_id']);
+		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ?", $data['new']['ostemplate_id']);
 		$ostemplate = escapeshellcmd($tmp['template_file']);
 		unset($tmp);
 
diff --git a/server/plugins-available/pma_symlink_plugin.inc.php b/server/plugins-available/pma_symlink_plugin.inc.php
index db9b6f7..6b9b4fb 100644
--- a/server/plugins-available/pma_symlink_plugin.inc.php
+++ b/server/plugins-available/pma_symlink_plugin.inc.php
@@ -81,7 +81,7 @@
 
 			// If the parent_domain_id has been chenged, we will have to update the old site as well.
 			if($this->action == 'update' && $data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) {
-				$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$old_parent_domain_id." AND active = 'y'");
+				$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $old_parent_domain_id);
 				$data["new"] = $tmp;
 				$data["old"] = $tmp;
 				$this->action = 'update';
@@ -89,7 +89,7 @@
 			}
 
 			// This is not a vhost, so we need to update the parent record instead.
-			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$new_parent_domain_id." AND active = 'y'");
+			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $new_parent_domain_id);
 			$data["new"] = $tmp;
 			$data["old"] = $tmp;
 			$this->action = 'update';
diff --git a/server/plugins-available/postfix_filter_plugin.inc.php b/server/plugins-available/postfix_filter_plugin.inc.php
index 867df25..9c97ff1 100644
--- a/server/plugins-available/postfix_filter_plugin.inc.php
+++ b/server/plugins-available/postfix_filter_plugin.inc.php
@@ -80,8 +80,8 @@
 
 		$type = $data["new"]["type"];
 		if($type != '') {
-			$sql = "SELECT * FROM mail_content_filter WHERE server_id = ".intval($conf["server_id"])." AND type = '".$app->db->quote($type)."' AND active = 'y'";
-			$rules = $app->db->queryAllRecords($sql);
+			$sql = "SELECT * FROM mail_content_filter WHERE server_id = ? AND type = ?' AND active = 'y'";
+			$rules = $app->db->queryAllRecords($sql, $conf["server_id"], $type);
 			$content = '';
 			foreach($rules as $rule) {
 				$content .= $rule["pattern"];
@@ -111,8 +111,8 @@
 
 		$type = $data["old"]["type"];
 		if($type != '') {
-			$sql = "SELECT * FROM mail_content_filter WHERE server_id = ".intval($conf["server_id"])." AND type = '".$app->db->quote($type)."' AND active = 'y'";
-			$rules = $app->db->queryAllRecords($sql);
+			$sql = "SELECT * FROM mail_content_filter WHERE server_id = ? AND type = ? AND active = 'y'";
+			$rules = $app->db->queryAllRecords($sql, $conf["server_id"], $type);
 			$content = '';
 			foreach($rules as $rule) {
 				$content .= $rule["pattern"];
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 474d10d..94a5762 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -115,6 +115,7 @@
 				$rbl_hosts = explode(",", $rbl_hosts);
 			}
 			$options = explode(", ", exec("postconf -h smtpd_recipient_restrictions"));
+			$new_options = array();
 			foreach ($options as $key => $value) {
 				if (!preg_match('/reject_rbl_client/', $value)) {
 					$new_options[] = $value;
@@ -138,6 +139,24 @@
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 		}
 		
+		if($mail_config['reject_sender_login_mismatch'] != $old_ini_data['mail']['reject_sender_login_mismatch']) {
+			$options = explode(", ", exec("postconf -h smtpd_sender_restrictions"));
+			$new_options = array();
+			foreach ($options as $key => $value) {
+				if (!preg_match('/reject_authenticated_sender_login_mismatch/', $value)) {
+					$new_options[] = $value;
+				}
+			}
+				
+			if ($mail_config['reject_sender_login_mismatch'] == 'y') {
+				reset($new_options); $i = 0;
+				// insert after check_sender_access but before permit_...
+				while (isset($new_options[$i]) && substr($new_options[$i], 0, 19) == 'check_sender_access') ++$i;
+				array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch'));
+			}
+			exec("postconf -e 'smtpd_sender_restrictions = ".implode(", ", $new_options)."'");
+		}		
+		
 		if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
 			// If dovecot switch to lmtp
 			if($app->system->is_installed('dovecot')) {
diff --git a/server/plugins-available/powerdns_plugin.inc.php b/server/plugins-available/powerdns_plugin.inc.php
index 14c2447..412050d 100644
--- a/server/plugins-available/powerdns_plugin.inc.php
+++ b/server/plugins-available/powerdns_plugin.inc.php
@@ -132,9 +132,9 @@
 
 		$origin = substr($data["new"]["origin"], 0, -1);
 		$ispconfig_id = $data["new"]["id"];
-		$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$ispconfig_id);
+		$serial = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $ispconfig_id);
 		$serial_id = $serial["serial"];
-		$app->db->query("INSERT INTO powerdns.domains (name, type, notified_serial, ispconfig_id) VALUES ('$origin', 'MASTER', $serial_id, $ispconfig_id)");
+		$app->db->query("INSERT INTO powerdns.domains (name, type, notified_serial, ispconfig_id) VALUES (?, ?, ?, ?)", $origin, 'MASTER', $serial_id, $ispconfig_id);
 		$zone_id = $app->db->insertID();
 		if(substr($data["new"]["ns"], -1) == '.'){
 			$ns = substr($data["new"]["ns"], 0, -1);
@@ -147,7 +147,7 @@
 		$content = $ns.' '.$hostmaster.' '.$data["new"]["serial"].' '.$data["new"]["refresh"].' '.$data["new"]["retry"].' '.$data["new"]["expire"].' '.$data["new"]["minimum"];
 		$ttl = $data["new"]["ttl"];
 
-		$app->db->query("INSERT INTO powerdns.records (domain_id, name, type, content, ttl, prio, change_date, ispconfig_id) VALUES ($zone_id, '$origin', 'SOA', '$content', $ttl, 0, ".time().", $ispconfig_id)");
+		$app->db->query("INSERT INTO powerdns.records (domain_id, name, type, content, ttl, prio, change_date, ispconfig_id) VALUES (?, ?, 'SOA', ?, ?, 0, UNIX_TIMESTAMP(), ?)", $zone_id, $origin, $content, $ttl, $ispconfig_id);
 
 		//* tell pdns to rediscover zones in DB
 		$this->zoneRediscover();
@@ -164,7 +164,7 @@
 			if($data["old"]["active"] != 'Y') return;
 			$this->soa_delete($event_name, $data);
 		} else {
-			$exists = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["id"]);
+			$exists = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ?", $data["new"]["id"]);
 			if($data["old"]["active"] == 'Y' && is_array($exists)){
 				$origin = substr($data["new"]["origin"], 0, -1);
 				$ispconfig_id = $data["new"]["id"];
@@ -179,7 +179,7 @@
 				$hostmaster = substr($data["new"]["mbox"], 0, -1);
 				$content = $ns.' '.$hostmaster.' '.$data["new"]["serial"].' '.$data["new"]["refresh"].' '.$data["new"]["retry"].' '.$data["new"]["expire"].' '.$data["new"]["minimum"];
 				$ttl = $data["new"]["ttl"];
-				$app->db->query("UPDATE powerdns.records SET name = '$origin', content = '$content', ttl = $ttl, change_date = ".time()." WHERE ispconfig_id = ".$data["new"]["id"]." AND type = 'SOA'");
+				$app->db->query("UPDATE powerdns.records SET name = ?, content = ?, ttl = ?, change_date = UNIX_TIMESTAMP() WHERE ispconfig_id = ? AND type = 'SOA'", $origin, $content, $ttl, $data["new"]["id"]);
 
 				//* tell pdns to use 'pdnssec rectify' on the new zone
 				$this->rectifyZone($data);
@@ -188,7 +188,7 @@
 			} else {
 				$this->soa_insert($event_name, $data);
 				$ispconfig_id = $data["new"]["id"];
-				if($records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = $ispconfig_id AND active = 'Y'")){
+				if($records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = ? AND active = 'Y'", $ispconfig_id)){
 					foreach($records as $record){
 						foreach($record as $key => $val){
 							$data["new"][$key] = $val;
@@ -207,10 +207,10 @@
 	function soa_delete($event_name, $data) {
 		global $app, $conf;
 
-		$zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["old"]["id"]." AND type = 'MASTER'");
+		$zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ? AND type = 'MASTER'", $data["old"]["id"]);
 		$zone_id = $zone["id"];
-		$app->db->query("DELETE FROM powerdns.records WHERE domain_id = $zone_id");
-		$app->db->query("DELETE FROM powerdns.domains WHERE id = $zone_id");
+		$app->db->query("DELETE FROM powerdns.records WHERE domain_id = ?", $zone_id);
+		$app->db->query("DELETE FROM powerdns.domains WHERE id = ?", $zone_id);
 	}
 
 	function slave_insert($event_name, $data) {
@@ -222,7 +222,7 @@
 		$ispconfig_id = $data["new"]["id"];
 		$master_ns = $data["new"]["ns"];
 
-		$app->db->query("INSERT INTO powerdns.domains (name, type, master, ispconfig_id) VALUES ('$origin', 'SLAVE', '$master_ns', $ispconfig_id)");
+		$app->db->query("INSERT INTO powerdns.domains (name, type, master, ispconfig_id) VALUES (?, ?, ?, ?)", $origin, 'SLAVE', $master_ns, $ispconfig_id);
 
 		$zone_id = $app->db->insertID();
 
@@ -243,12 +243,12 @@
 				$ispconfig_id = $data["new"]["id"];
 				$master_ns = $data["new"]["ns"];
 
-				$app->db->query("UPDATE powerdns.domains SET name = '$origin', type = 'SLAVE', master = '$master_ns' WHERE ispconfig_id=$ispconfig_id AND type = 'SLAVE'");
+				$app->db->query("UPDATE powerdns.domains SET name = ?, type = 'SLAVE', master = ? WHERE ispconfig_id=? AND type = 'SLAVE'", $origin, $master_ns, $ispconfig_id);
 				$zone_id = $app->db->insertID();
 
-				$zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$ispconfig_id." AND type = 'SLAVE'");
+				$zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ? AND type = 'SLAVE'", $ispconfig_id);
 				$zone_id = $zone["id"];
-				$app->db->query("DELETE FROM powerdns.records WHERE domain_id = $zone_id AND ispconfig_id = 0");
+				$app->db->query("DELETE FROM powerdns.records WHERE domain_id = ? AND ispconfig_id = 0", $zone_id);
 
 				//* tell pdns to fetch zone from master server
 				$this->fetchFromMaster($data);
@@ -264,21 +264,21 @@
 	function slave_delete($event_name, $data) {
 		global $app, $conf;
 
-		$zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["old"]["id"]." AND type = 'SLAVE'");
+		$zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ? AND type = 'SLAVE'", $data["old"]["id"]);
 		$zone_id = $zone["id"];
-		$app->db->query("DELETE FROM powerdns.records WHERE domain_id = $zone_id");
-		$app->db->query("DELETE FROM powerdns.domains WHERE id = $zone_id");
+		$app->db->query("DELETE FROM powerdns.records WHERE domain_id = ?", $zone_id);
+		$app->db->query("DELETE FROM powerdns.domains WHERE id = ?", $zone_id);
 	}
 
 	function rr_insert($event_name, $data) {
 		global $app, $conf;
 		if($data["new"]["active"] != 'Y') return;
-		$exists = $app->db->queryOneRecord("SELECT * FROM powerdns.records WHERE ispconfig_id = ".$data["new"]["id"]);
+		$exists = $app->db->queryOneRecord("SELECT * FROM powerdns.records WHERE ispconfig_id = ?", $data["new"]["id"]);
 		if ( is_array($exists) ) return;
 
-		$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data["new"]["zone"]);
+		$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data["new"]["zone"]);
 		$origin = substr($zone["origin"], 0, -1);
-		$powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["zone"]." AND type = 'MASTER'");
+		$powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ? AND type = 'MASTER'", $data["new"]["zone"]);
 		$zone_id = $powerdns_zone["id"];
 
 		$type = $data["new"]["type"];
@@ -327,7 +327,7 @@
 		$change_date = time();
 		$ispconfig_id = $data["new"]["id"];
 
-		$app->db->query("INSERT INTO powerdns.records (domain_id, name, type, content, ttl, prio, change_date, ispconfig_id) VALUES ($zone_id, '$name', '$type', '$content', $ttl, $prio, $change_date, $ispconfig_id)");
+		$app->db->query("INSERT INTO powerdns.records (domain_id, name, type, content, ttl, prio, change_date, ispconfig_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", $zone_id, $name, $type, $content, $ttl, $prio, $change_date, $ispconfig_id);
 
 		//* tell pdns to use 'pdnssec rectify' on the new zone
 		$this->rectifyZone($data);
@@ -340,11 +340,11 @@
 			if($data["old"]["active"] != 'Y') return;
 			$this->rr_delete($event_name, $data);
 		} else {
-			$exists = $app->db->queryOneRecord("SELECT * FROM powerdns.records WHERE ispconfig_id = ".$data["new"]["id"]);
+			$exists = $app->db->queryOneRecord("SELECT * FROM powerdns.records WHERE ispconfig_id = ?", $data["new"]["id"]);
 			if($data["old"]["active"] == 'Y' && is_array($exists)){
-				$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ".$data["new"]["zone"]);
+				$zone = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ?", $data["new"]["zone"]);
 				$origin = substr($zone["origin"], 0, -1);
-				$powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ".$data["new"]["zone"]." AND type = 'MASTER'");
+				$powerdns_zone = $app->db->queryOneRecord("SELECT * FROM powerdns.domains WHERE ispconfig_id = ? AND type = 'MASTER'", $data["new"]["zone"]);
 				$zone_id = $powerdns_zone["id"];
 
 				$type = $data["new"]["type"];
@@ -392,7 +392,7 @@
 				$prio = $data["new"]["aux"];
 				$change_date = time();
 				$ispconfig_id = $data["new"]["id"];
-				$app->db->query("UPDATE powerdns.records SET name = '$name', type = '$type', content = '$content', ttl = $ttl, prio = $prio, change_date = ".time()." WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+				$app->db->query("UPDATE powerdns.records SET name = ?, type = ?, content = ?, ttl = ?, prio = ?, change_date = UNIX_TIMESTAMP() WHERE ispconfig_id = ? AND type != 'SOA'", $name, $type, $content, $ttl, $prio, $ispconfig_id);
 
 				//* tell pdns to use 'pdnssec rectify' on the new zone
 				$this->rectifyZone($data);
@@ -406,7 +406,7 @@
 		global $app, $conf;
 
 		$ispconfig_id = $data["old"]["id"];
-		$app->db->query("DELETE FROM powerdns.records WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+		$app->db->query("DELETE FROM powerdns.records WHERE ispconfig_id = ? AND type != 'SOA'", $ispconfig_id);
 	}
 
 	function find_pdns_control() {
@@ -475,7 +475,7 @@
 					exec($pdns_pdnssec . ' rectify-zone ' . rtrim($data["new"]["origin"],"."));
 				} else {
 					// get origin from DB for all other recordtypes
-					$zn = $app->db->queryOneRecord("SELECT d.name AS name FROM powerdns.domains d, powerdns.records r WHERE r.ispconfig_id=".$data["new"]["id"]." AND r.domain_id = d.id");
+					$zn = $app->db->queryOneRecord("SELECT d.name AS name FROM powerdns.domains d, powerdns.records r WHERE r.ispconfig_id=? AND r.domain_id = d.id", $data["new"]["id"]);
 					exec($pdns_pdnssec . ' rectify-zone ' . trim($zn["name"]));
 				}
 			}
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index e19796c..a0ae9a5 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -79,7 +79,7 @@
 		}
 
 		//* Check if the resulting path is inside the docroot
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 		if(substr($data['new']['dir'],0,strlen($web['document_root'])) != $web['document_root']) {
 			$app->log('Directory of the shell user is outside of website docroot.',LOGLEVEL_WARN);
 			return false;
@@ -96,6 +96,8 @@
 			return false;
 		}
 
+		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
+		
 		if($app->system->is_user($data['new']['puser'])) {
 
 			// Get the UID of the parent user
@@ -103,14 +105,27 @@
 			if($uid > $this->min_uid) {
 				//* Remove webfolder protection
 				$app->system->web_folder_protection($web['document_root'], false);
-
-				if(!is_dir($data['new']['dir'])){
-					$app->file->mkdirs(escapeshellcmd($data['new']['dir']), '0700');
-					$app->system->chown(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['username']));
-					$app->system->chgrp(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['pgroup']));
+				
+				//* Home directory of the new shell user
+				if($data['new']['chroot'] == 'jailkit') {
+					$homedir = $data['new']['dir'];
+				} else {
+					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
+				}
+				
+				if(!is_dir($data['new']['dir'].'/home')){
+					$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0750');
+					$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['puser']));
+					$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['pgroup']));
+				}
+				
+				if(!is_dir($homedir)){
+					$app->file->mkdirs(escapeshellcmd($homedir), '0750');
+					$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']));
+					$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
 				}
 				$command = 'useradd';
-				$command .= ' -d '.escapeshellcmd($data['new']['dir']);
+				$command .= ' -d '.escapeshellcmd($homedir);
 				$command .= ' -g '.escapeshellcmd($data['new']['pgroup']);
 				$command .= ' -o '; // non unique
 				if($data['new']['password'] != '') $command .= ' -p '.escapeshellcmd($data['new']['password']);
@@ -129,10 +144,10 @@
 				$this->_setup_ssh_rsa();
 
 				//* Create .bash_history file
-				$app->system->touch(escapeshellcmd($data['new']['dir']).'/.bash_history');
-				$app->system->chmod(escapeshellcmd($data['new']['dir']).'/.bash_history', 0755);
-				$app->system->chown(escapeshellcmd($data['new']['dir']).'/.bash_history', $data['new']['username']);
-				$app->system->chgrp(escapeshellcmd($data['new']['dir']).'/.bash_history', $data['new']['pgroup']);
+				$app->system->touch(escapeshellcmd($homedir).'/.bash_history');
+				$app->system->chmod(escapeshellcmd($homedir).'/.bash_history', 0755);
+				$app->system->chown(escapeshellcmd($homedir).'/.bash_history', $data['new']['username']);
+				$app->system->chgrp(escapeshellcmd($homedir).'/.bash_history', $data['new']['pgroup']);
 
 				//* Disable shell user temporarily if we use jailkit
 				if($data['new']['chroot'] == 'jailkit') {
@@ -163,7 +178,7 @@
 		}
 
 		//* Check if the resulting path is inside the docroot
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 		if(substr($data['new']['dir'],0,strlen($web['document_root'])) != $web['document_root']) {
 			$app->log('Directory of the shell user is outside of website docroot.',LOGLEVEL_WARN);
 			return false;
@@ -181,10 +196,22 @@
 			return false;
 		}
 		
+		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
+		
 		if($app->system->is_user($data['new']['puser'])) {
 			// Get the UID of the parent user
 			$uid = intval($app->system->getuid($data['new']['puser']));
 			if($uid > $this->min_uid) {
+				
+				//* Home directory of the shell user
+				if($data['new']['chroot'] == 'jailkit') {
+					$homedir = $data['new']['dir'];
+					$homedir_old = $data['old']['dir'];
+				} else {
+					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
+					$homedir_old = $data['old']['dir'].'/home/'.$data['old']['username'];
+				}
+				
 				// Check if the user that we want to update exists, if not, we insert it
 				if($app->system->is_user($data['old']['username'])) {
 					/*
@@ -202,12 +229,32 @@
 					$app->log("Executed command: $command ",LOGLEVEL_DEBUG);
 					*/
 					//$groupinfo = $app->system->posix_getgrnam($data['new']['pgroup']);
-					if($data['new']['dir'] != $data['old']['dir'] && !is_dir($data['new']['dir'])){
-						$app->file->mkdirs(escapeshellcmd($data['new']['dir']), '0700');
-						$app->system->chown(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['username']));
-						$app->system->chgrp(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['pgroup']));
+					if($homedir != $homedir_old && !is_dir($homedir)){
+						$app->system->web_folder_protection($web['document_root'], false);
+						if(!is_dir($data['new']['dir'].'/home')){
+							$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0750');
+							$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['puser']));
+							$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['pgroup']));
+						}
+						$app->file->mkdirs(escapeshellcmd($homedir), '0750');
+						$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['username']));
+						$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
+						$app->system->web_folder_protection($web['document_root'], true);
+					} else {
+						if(!is_dir($homedir)){
+							$app->system->web_folder_protection($web['document_root'], false);
+							if(!is_dir($data['new']['dir'].'/home')){
+								$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0750');
+								$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['puser']));
+								$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['pgroup']));
+							}
+							$app->file->mkdirs(escapeshellcmd($homedir), '0750');
+							$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']));
+							$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
+							$app->system->web_folder_protection($web['document_root'], true);
+						}
 					}
-					$app->system->usermod($data['old']['username'], 0, $app->system->getgid($data['new']['pgroup']), $data['new']['dir'], $data['new']['shell'], $data['new']['password'], $data['new']['username']);
+					$app->system->usermod($data['old']['username'], 0, $app->system->getgid($data['new']['pgroup']), $homedir, $data['new']['shell'], $data['new']['password'], $data['new']['username']);
 					$app->log("Updated shelluser: ".$data['old']['username'], LOGLEVEL_DEBUG);
 
 					// call the ssh-rsa update function
@@ -218,10 +265,10 @@
 
 					//* Create .bash_history file
 					if(!is_file($data['new']['dir']).'/.bash_history') {
-						$app->system->touch(escapeshellcmd($data['new']['dir']).'/.bash_history');
-						$app->system->chmod(escapeshellcmd($data['new']['dir']).'/.bash_history', 0755);
-						$app->system->chown(escapeshellcmd($data['new']['dir']).'/.bash_history', escapeshellcmd($data['new']['username']));
-						$app->system->chgrp(escapeshellcmd($data['new']['dir']).'/.bash_history', escapeshellcmd($data['new']['pgroup']));
+						$app->system->touch(escapeshellcmd($homedir).'/.bash_history');
+						$app->system->chmod(escapeshellcmd($homedir).'/.bash_history', 0755);
+						$app->system->chown(escapeshellcmd($homedir).'/.bash_history', escapeshellcmd($data['new']['username']));
+						$app->system->chgrp(escapeshellcmd($homedir).'/.bash_history', escapeshellcmd($data['new']['pgroup']));
 					}
 
 				} else {
@@ -239,7 +286,7 @@
 	function delete($event_name, $data) {
 		global $app, $conf;
 
-		$app->uses('system,getconf');
+		$app->uses('system,getconf,services');
 		
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
@@ -251,16 +298,22 @@
 			// Get the UID of the user
 			$userid = intval($app->system->getuid($data['old']['username']));
 			if($userid > $this->min_uid) {
+				$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['old']['parent_domain_id']));
+					
 				// check if we have to delete the dir
-				$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = \'' . $app->db->quote($data['old']['dir']) . '\'');
+				$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = ?', $data['old']['dir']);
 				if(!$check && is_dir($data['old']['dir'])) {
 					
-					$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['old']['parent_domain_id']));
-					
+					$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['old']['parent_domain_id']);
 					$app->system->web_folder_protection($web['document_root'], false);
 					
 					// delete dir
-					$homedir = $data['old']['dir'];
+					if($data['new']['chroot'] == 'jailkit') {
+						$homedir = $data['old']['dir'];
+					} else {
+						$homedir = $data['old']['dir'].'/home/'.$data['old']['username'];
+					}
+				
 					if(substr($homedir, -1) !== '/') $homedir .= '/';
 					$files = array('.bash_logout', '.bash_history', '.bashrc', '.profile');
 					$dirs = array('.ssh', '.cache');
@@ -292,10 +345,33 @@
 				
 				// We delete only non jailkit users, jailkit users will be deleted by the jailkit plugin.
 				if ($data['old']['chroot'] != "jailkit") {
+					// if this web uses PHP-FPM, that PPH-FPM service must be stopped before we can delete this user
+					if($web['php'] == 'php-fpm'){
+						if(trim($web['fastcgi_php_version']) != ''){
+							$default_php_fpm = false;
+							list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($web['fastcgi_php_version']));
+						} else {
+							$default_php_fpm = true;
+						}
+						$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
+						if(!$default_php_fpm){
+							$app->services->restartService('php-fpm', 'stop:'.$custom_php_fpm_init_script);
+						} else {
+							$app->services->restartService('php-fpm', 'stop:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+						}
+					}
 					$command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; userdel -f';
 					$command .= ' '.escapeshellcmd($data['old']['username']).' &> /dev/null';
 					exec($command);
 					$app->log("Deleted shelluser: ".$data['old']['username'], LOGLEVEL_DEBUG);
+					// start PHP-FPM again
+					if($web['php'] == 'php-fpm'){
+						if(!$default_php_fpm){
+							$app->services->restartService('php-fpm', 'start:'.$custom_php_fpm_init_script);
+						} else {
+							$app->services->restartService('php-fpm', 'start:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+						}
+					}
 				}
 
 			} else {
@@ -311,11 +387,11 @@
 		global $app;
 		$this->app->log("ssh-rsa setup shelluser_base", LOGLEVEL_DEBUG);
 		// Get the client ID, username, and the key
-		$domain_data = $this->app->db->queryOneRecord('SELECT sys_groupid FROM web_domain WHERE web_domain.domain_id = '.intval($this->data['new']['parent_domain_id']));
-		$sys_group_data = $this->app->db->queryOneRecord('SELECT * FROM sys_group WHERE sys_group.groupid = '.intval($domain_data['sys_groupid']));
+		$domain_data = $this->app->db->queryOneRecord('SELECT sys_groupid FROM web_domain WHERE web_domain.domain_id = ?', $this->data['new']['parent_domain_id']);
+		$sys_group_data = $this->app->db->queryOneRecord('SELECT * FROM sys_group WHERE sys_group.groupid = ?', $domain_data['sys_groupid']);
 		$id = intval($sys_group_data['client_id']);
 		$username= $sys_group_data['name'];
-		$client_data = $this->app->db->queryOneRecord('SELECT * FROM client WHERE client.client_id = '.$id);
+		$client_data = $this->app->db->queryOneRecord('SELECT * FROM client WHERE client.client_id = ?', $id);
 		$userkey = $client_data['ssh_rsa'];
 		unset($domain_data);
 		unset($client_data);
@@ -323,7 +399,7 @@
 		// ssh-rsa authentication variables
 		//$sshrsa = $this->data['new']['ssh_rsa'];
 		$sshrsa = '';
-		$ssh_users = $app->db->queryAllRecords("SELECT ssh_rsa FROM shell_user WHERE parent_domain_id = ".intval($this->data['new']['parent_domain_id']));
+		$ssh_users = $app->db->queryAllRecords("SELECT ssh_rsa FROM shell_user WHERE parent_domain_id = ?", $this->data['new']['parent_domain_id']);
 		if(is_array($ssh_users)) {
 			foreach($ssh_users as $sshu) {
 				if($sshu['ssh_rsa'] != '') $sshrsa .= "\n".$sshu['ssh_rsa'];
@@ -347,7 +423,7 @@
 			$userkey = $app->system->file_get_contents('/tmp/id_rsa.pub');
 
 			// save keypair in client table
-			$this->app->db->query("UPDATE client SET created_at = ".time().", id_rsa = '".$app->db->quote($app->system->file_get_contents('/tmp/id_rsa'))."', ssh_rsa = '".$app->db->quote($userkey)."' WHERE client_id = ".$id);
+			$this->app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", $app->system->file_get_contents('/tmp/id_rsa'), $userkey, $id);
 
 			$app->system->unlink('/tmp/id_rsa');
 			$app->system->unlink('/tmp/id_rsa.pub');
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index 3c8e294..aabbcde 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -80,7 +80,7 @@
 		}
 		
 		
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']);
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 
 		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
 			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
@@ -159,7 +159,7 @@
 			return false;
 		}
 		
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']);
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']);
 
 		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
 			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
@@ -232,7 +232,7 @@
 			return false;
 		}
 
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['old']['parent_domain_id']);
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['old']['parent_domain_id']);
 
 		if ($data['old']['chroot'] == "jailkit")
 		{
@@ -284,7 +284,7 @@
 
 			//add bash.bashrc script
 			//we need to collect the domain name to be used as the HOSTNAME in the bashrc script
-			$web = $this->app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = ".intval($this->data['new']["parent_domain_id"]));
+			$web = $this->app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = ?", $this->data['new']["parent_domain_id"]);
 
 			$this->app->load('tpl');
 
@@ -407,7 +407,7 @@
 		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
 
 		// Get the parent website of this shell user
-		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$this->data['new']['parent_domain_id']);
+		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $this->data['new']['parent_domain_id']);
 
 		//* If the security level is set to high
 		if($web_config['security_level'] == 20 && is_array($web)) {
@@ -431,11 +431,11 @@
 		global $app;
 		$this->app->log("ssh-rsa setup shelluser_jailkit", LOGLEVEL_DEBUG);
 		// Get the client ID, username, and the key
-		$domain_data = $this->app->db->queryOneRecord('SELECT sys_groupid FROM web_domain WHERE web_domain.domain_id = '.intval($this->data['new']['parent_domain_id']));
-		$sys_group_data = $this->app->db->queryOneRecord('SELECT * FROM sys_group WHERE sys_group.groupid = '.intval($domain_data['sys_groupid']));
+		$domain_data = $this->app->db->queryOneRecord('SELECT sys_groupid FROM web_domain WHERE web_domain.domain_id = ?', $this->data['new']['parent_domain_id']);
+		$sys_group_data = $this->app->db->queryOneRecord('SELECT * FROM sys_group WHERE sys_group.groupid = ?', $domain_data['sys_groupid']);
 		$id = intval($sys_group_data['client_id']);
 		$username= $sys_group_data['name'];
-		$client_data = $this->app->db->queryOneRecord('SELECT * FROM client WHERE client.client_id = '.$id);
+		$client_data = $this->app->db->queryOneRecord('SELECT * FROM client WHERE client.client_id = ?', $id);
 		$userkey = $client_data['ssh_rsa'];
 		unset($domain_data);
 		unset($client_data);
@@ -459,7 +459,7 @@
 			$userkey = $app->system->file_get_contents('/tmp/id_rsa.pub');
 
 			// save keypair in client table
-			$this->app->db->query("UPDATE client SET created_at = ".time().", id_rsa = '".$app->db->quote($app->system->file_get_contents('/tmp/id_rsa'))."', ssh_rsa = '".$app->db->quote($userkey)."' WHERE client_id = ".$id);
+			$this->app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ? ssh_rsa = ? WHERE client_id = ?", $app->system->file_get_contents('/tmp/id_rsa'), $userkey, $id);
 
 			$app->system->unlink('/tmp/id_rsa');
 			$app->system->unlink('/tmp/id_rsa.pub');
@@ -532,10 +532,10 @@
 		global $app, $conf;
 		
 		// check if we have to delete the dir
-				$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = \'' . $app->db->quote($homedir) . '\'');
+				$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = ?', $homedir);
 				
 				if(!$check && is_dir($homedir)) {
-					$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($parent_domain_id));
+					$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $parent_domain_id);
 					$app->system->web_folder_protection($web['document_root'], false);
 					
 					// delete dir
diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php
index 6f12bf8..ae6b79c 100644
--- a/server/plugins-available/software_update_plugin.inc.php
+++ b/server/plugins-available/software_update_plugin.inc.php
@@ -67,8 +67,8 @@
 	private function set_install_status($inst_id, $status) {
 		global $app;
 
-		$app->db->query("UPDATE software_update_inst SET status = '{$status}' WHERE software_update_inst_id = '{$inst_id}'");
-		$app->dbmaster->query("UPDATE software_update_inst SET status = '{$status}' WHERE software_update_inst_id = '{$inst_id}'");
+		$app->db->query("UPDATE software_update_inst SET status = ? WHERE software_update_inst_id = ?", $status, $inst_id);
+		$app->dbmaster->query("UPDATE software_update_inst SET status = ? WHERE software_update_inst_id = ?", $status, $inst_id);
 	}
 
 	public function process($event_name, $data) {
@@ -76,8 +76,8 @@
 
 		//* Get the info of the package:
 		$software_update_id = intval($data["new"]["software_update_id"]);
-		$software_update = $app->db->queryOneRecord("SELECT * FROM software_update WHERE software_update_id = '$software_update_id'");
-		$software_package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = '".$app->db->quote($software_update['package_name'])."'");
+		$software_update = $app->db->queryOneRecord("SELECT * FROM software_update WHERE software_update_id = ?", $software_update_id);
+		$software_package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = ?", $software_update['package_name']);
 
 		if($software_package['package_type'] == 'ispconfig' && !$conf['software_updates_enabled'] == true) {
 			$app->log('Software Updates not enabled on this server. To enable updates, set $conf["software_updates_enabled"] = true; in config.inc.php', LOGLEVEL_WARN);
diff --git a/server/plugins-available/webmail_symlink_plugin.inc.php b/server/plugins-available/webmail_symlink_plugin.inc.php
index 43cca9b..c64b706 100644
--- a/server/plugins-available/webmail_symlink_plugin.inc.php
+++ b/server/plugins-available/webmail_symlink_plugin.inc.php
@@ -81,7 +81,7 @@
 
 			// If the parent_domain_id has been chenged, we will have to update the old site as well.
 			if($this->action == 'update' && $data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) {
-				$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$old_parent_domain_id." AND active = 'y'");
+				$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $old_parent_domain_id);
 				$data["new"] = $tmp;
 				$data["old"] = $tmp;
 				$this->action = 'update';
@@ -89,7 +89,7 @@
 			}
 
 			// This is not a vhost, so we need to update the parent record instead.
-			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$new_parent_domain_id." AND active = 'y'");
+			$tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ? AND active = 'y'", $new_parent_domain_id);
 			$data["new"] = $tmp;
 			$data["old"] = $tmp;
 			$this->action = 'update';
diff --git a/server/plugins-available/webserver_plugin.inc.php b/server/plugins-available/webserver_plugin.inc.php
index dd5a50b..cca339a 100644
--- a/server/plugins-available/webserver_plugin.inc.php
+++ b/server/plugins-available/webserver_plugin.inc.php
@@ -107,7 +107,7 @@
 
 
 		//** read additional php versions of this server
-		$php_versions = $app->db->queryAllRecords('SELECT server_php_id, php_fastcgi_ini_dir, php_fpm_ini_dir FROM server_php WHERE server_id = ' . intval($conf['server_id']));
+		$php_versions = $app->db->queryAllRecords('SELECT server_php_id, php_fastcgi_ini_dir, php_fpm_ini_dir FROM server_php WHERE server_id = ?', $conf['server_id']);
 		foreach($php_versions as $php) {
 			if($php['php_fastcgi_ini_dir'] && $php['php_fastcgi_ini_dir'] . '/php.ini' != $web_config['php_ini_path_cgi']) {
 				$check_files[] = array('file' => $php['php_fastcgi_ini_dir'] . '/php.ini',
diff --git a/server/plugins-available/xmpp_plugin.inc.php b/server/plugins-available/xmpp_plugin.inc.php
new file mode 100644
index 0000000..128a88e
--- /dev/null
+++ b/server/plugins-available/xmpp_plugin.inc.php
@@ -0,0 +1,397 @@
+<?php
+
+/*
+Copyright (c) 2015 Michael Fürmann, Spicy Web (spicyweb.de)
+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 xmpp_plugin {
+
+    var $plugin_name = 'xmpp_server_plugin';
+    var $class_name = 'xmpp_server_plugin';
+
+    var $xmpp_config_dir = '/etc/metronome';
+
+    var $ssl_certificate_changed = false;
+    var $ssl_certificate_deleted = false;
+
+
+    //* 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']['xmpp'] == 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('server_insert', 'xmpp_plugin', 'insert');
+        $app->plugins->registerEvent('server_update', 'xmpp_plugin', 'update');
+
+        $app->plugins->registerEvent('xmpp_domain_insert', 'xmpp_plugin', 'ssl');
+        $app->plugins->registerEvent('xmpp_domain_update', 'xmpp_plugin', 'ssl');
+        $app->plugins->registerEvent('xmpp_domain_delete', 'xmpp_plugin', 'ssl');
+
+        $app->plugins->registerEvent('xmpp_domain_insert', 'xmpp_plugin', 'domainInsert');
+        $app->plugins->registerEvent('xmpp_domain_update', 'xmpp_plugin', 'domainUpdate');
+        $app->plugins->registerEvent('xmpp_domain_delete', 'xmpp_plugin', 'domainDelete');
+        $app->plugins->registerEvent('xmpp_user_insert', 'xmpp_plugin', 'userInsert');
+        $app->plugins->registerEvent('xmpp_user_update', 'xmpp_plugin', 'userUpdate');
+        $app->plugins->registerEvent('xmpp_user_delete', 'xmpp_plugin', 'userDelete');
+
+    }
+
+    function insert($event_name, $data) {
+        global $app, $conf;
+
+        $this->update($event_name, $data);
+
+    }
+
+    // The purpose of this plugin is to rewrite the main.cf file
+    function update($event_name, $data) {
+        global $app, $conf;
+
+        // get the config
+        $app->uses("getconf,system,tpl");
+
+
+        $old_ini_data = $app->ini_parser->parse_ini_string($data['old']['config']);
+        $xmpp_config = $app->getconf->get_server_config($conf['server_id'], 'xmpp');
+
+        // Global server config
+        $tpl = new tpl();
+        $tpl->newTemplate('metronome_conf_global.master');
+        $tpl->setVar('ipv6', $xmpp_config['xmpp_use_ipv6']=='y'?'true':'false');
+        $tpl->setVar('bosh_timeout', intval($xmpp_config['xmpp_bosh_max_inactivity']));
+        $tpl->setVar('port_http', intval($xmpp_config['xmpp_port_http']));
+        $tpl->setVar('port_https', intval($xmpp_config['xmpp_port_https']));
+        $tpl->setVar('port_pastebin', intval($xmpp_config['xmpp_port_pastebin']));
+        $tpl->setVar('port_bosh', intval($xmpp_config['xmpp_port_bosh']));
+        // Global server admins (for all hosted domains)
+        $admins = '';
+        foreach(explode(',', $xmpp_config['xmpp_server_admins']) AS $a)
+            $admins.= "\t\"".trim($a)."\",\n";
+        $tpl->setVar('server_admins', $admins);
+        unset($admins);
+        // enabled modules, so own modules or simmilar prosody-modules can easily be added
+        $modules = '';
+        foreach(explode(',', $xmpp_config['xmpp_modules_enabled']) AS $m)
+            $modules.= "\t\"".trim($m)."\",\n";
+        $tpl->setVar('modules_enabled', $modules);
+        unset($modules);
+        $app->system->file_put_contents($this->xmpp_config_dir.'/global.cfg.lua', $tpl->grab());
+        unset($tpl);
+
+        $app->services->restartServiceDelayed('metronome', 'restart');
+        return;
+    }
+
+    function domainInsert($event_name, $data) {
+        global $app, $conf;
+
+        $this->domainUpdate($event_name, $data);
+
+    }
+
+    function domainUpdate($event_name, $data){
+        global $app, $conf;
+
+        // get the config
+        $app->uses("getconf,system,tpl");
+
+        // Collections
+        $status_hosts = array($data['new']['domain']);
+        $status_comps = array();
+
+        // Create main host file
+        $tpl = new tpl();
+        $tpl->newTemplate('metronome_conf_host.master');
+        $tpl->setVar('domain', $data['new']['domain']);
+        $tpl->setVar('active', $data['new']['active'] == 'y' ? 'true' : 'false');
+        $tpl->setVar('public_registration', $data['new']['public_registration'] == 'y' ? 'true' : 'false');
+        // Domain admins
+        $admins = array();
+        foreach(explode(',',$data['new']['domain_admins']) AS $adm){
+            $admins[] = trim($adm);
+        }
+        $tpl->setVar('domain_admins', "\t\t\"".implode("\",\n\t\t\"",$admins)."\"\n");
+
+        // Enable / Disable features
+        if($data['new']['use_pubsub']=='y'){
+            $tpl->setVar('use_pubsub', 'true');
+            $status_comps[] = 'pubsub.'.$data['new']['domain'];
+        }else{
+            $tpl->setVar('use_pubsub', 'false');
+        }
+        if($data['new']['use_proxy']=='y'){
+            $tpl->setVar('use_proxy', 'true');
+            $status_comps[] = 'proxy.'.$data['new']['domain'];
+        }else{
+            $tpl->setVar('use_proxy', 'false');
+        }
+
+        if($data['new']['use_anon_host']=='y'){
+            $tpl->setVar('use_anon_host', 'true');
+            $status_hosts[] = 'anon.'.$data['new']['domain'];
+        }else{
+            $tpl->setVar('use_anon_host', 'false');
+        }
+        if($data['new']['use_vjud']=='y'){
+            $tpl->setVar('use_vjud', 'true');
+            $tpl->setVar('vjud_opt_mode', 'opt-'.$data['new']['vjud_opt_mode']);
+            $status_comps[] = 'vjud.'.$data['new']['domain'];
+        }else{
+            $tpl->setVar('use_vjud', 'false');
+        }
+
+        $tpl->setVar('use_muc', $data['new']['use_muc_host']=='y'?'true':'false');
+        if($data['new']['use_muc_host'] == 'y'){
+            $status_comps[] = 'muc.'.$data['new']['domain'];
+            $tpl->setVar('muc_restrict_room_creation', $data['new']['muc_restrict_room_creation']);
+            $tpl->setVar('muc_name', strlen($data['new']['muc_name']) ? $data['new']['muc_name'] : $data['new']['domain'].' Chatrooms');
+            // Admins for MUC channels
+            $admins = array();
+            foreach(explode(',',$data['new']['muc_admins']) AS $adm){
+                $admins[] = trim($adm);
+            }
+            $tpl->setVar('muc_admins', "\t\t\"".implode("\",\n\t\t\"",$admins)."\"\n");
+            $tpl->setVar('use_pastebin', $data['new']['use_pastebin']=='y'?'true':'false');
+            $tpl->setVar('pastebin_expire', intval($data['new']['pastebin_expire_after']));
+            $tpl->setVar('pastebin_trigger', $data['new']['pastebin_trigger']);
+            $tpl->setVar('use_archive', $data['new']['use_http_archive']=='y'?'true':'false');
+            $tpl->setVar('archive_join', $data['new']['http_archive_show_join']=='y'?'true':'false');
+            $tpl->setVar('archive_status', $data['new']['http_archive_show_status']=='y'?'true':'false');
+
+        }
+
+        // Check for SSL
+        if(strlen($data['new']['ssl_cert']) && strlen($data['new']['ssl_key']) && !$this->ssl_certificate_deleted || $this->ssl_certificate_changed)
+            $tpl->setVar('ssl_cert', true);
+
+        $app->system->file_put_contents($this->xmpp_config_dir.'/hosts/'.$data['new']['domain'].'.cfg.lua', $tpl->grab());
+        unset($tpl);
+
+        // Create status host file
+        if($data['new']['use_status_host']=='y'){
+            $tpl = new tpl;
+            $tpl->newTemplate('metronome_conf_status.master');
+            $tpl->setVar('domain', $data['new']['domain']);
+            $tpl->setVar('status_hosts', "\t\t\"".implode("\",\n\t\t\"",$status_hosts)."\"\n");
+            $tpl->setVar('status_comps', "\t\t\"".implode("\",\n\t\t\"",$status_comps)."\"\n");
+            $app->system->file_put_contents($this->xmpp_config_dir.'/status/'.$data['new']['domain'].'.cfg.lua', $tpl->grab());
+            unset($tpl);
+        }
+
+        $app->services->restartServiceDelayed('metronome', 'reload');
+    }
+
+    function domainDelete($event_name, $data){
+        global $app, $conf;
+
+        // get the config
+        $app->uses("system");
+        $domain = $data['old']['domain'];
+        $folder = str_replace('-', '%2d', str_replace('.', '%2e', $str = urlencode($domain)));
+
+        // Remove config files
+        $app->system->unlink("/etc/metronome/hosts/$domain.cfg.lua");
+        $app->system->unlink("/etc/metronome/status/$domain.cfg.lua");
+        $app->system->unlink("/etc/metronome/certs/$domain.cert");
+        $app->system->unlink("/etc/metronome/certs/$domain.key");
+        $app->system->unlink("/etc/metronome/certs/$domain.csr");
+        // Remove all stored data
+        var_dump('rm -rf /var/lib/metronome/'.$folder);
+        exec('rm -rf /var/lib/metronome/'.$folder);
+        exec('rm -rf /var/lib/metronome/*%2e'.$folder);
+
+        $app->services->restartServiceDelayed('metronome', 'reload');
+    }
+
+    function userInsert($event_name, $data){
+        //$data['new']['auth_method']
+        // Check domain for auth settings
+        // Don't allow manual user creation for mailaccount controlled domains
+
+        // maybe metronomectl adduser for new local users
+    }
+    function userUpdate($event_name, $data){
+        // Check domain for auth settings
+        // Don't allow manual user update for mailaccount controlled domains
+
+        // maybe metronomectl passwd for existing local users
+    }
+    function userDelete($event_name, $data){
+        // Check domain for auth settings
+        // Don't allow manual user deletion for mailaccount controlled domains
+
+        // Remove account from metronome
+        exec('metronomectl deluser '.$data['old']['jid']);
+    }
+
+    // Handle the creation of SSL certificates
+    function ssl($event_name, $data) {
+        global $app, $conf;
+
+        $app->uses('system,tpl');
+
+        // load the server configuration options
+        $app->uses('getconf');
+        $web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+
+        $ssl_dir = '/etc/metronome/certs';
+        $domain = $data['new']['domain'];
+        $cnf_file = $ssl_dir.'/'.$domain.'.cnf';
+        $key_file = $ssl_dir.'/'.$domain.'.key';
+        $csr_file = $ssl_dir.'/'.$domain.'.csr';
+        $crt_file = $ssl_dir.'/'.$domain.'.cert';
+
+        //* Create a SSL Certificate, but only if this is not a mirror server.
+        if($data['new']['ssl_action'] == 'create' && $conf['mirror_server_id'] == 0) {
+
+            $this->ssl_certificate_changed = true;
+
+            //* Rename files if they exist
+            if(file_exists($cnf_file)) $app->system->rename($cnf_file, $cnf_file.'.bak');
+            if(file_exists($key_file)){
+                $app->system->rename($key_file, $key_file.'.bak');
+                $app->system->chmod($key_file.'.bak', 0400);
+                $app->system->chown($key_file.'.bak', 'metronome');
+            }
+            if(file_exists($csr_file)) $app->system->rename($csr_file, $csr_file.'.bak');
+            if(file_exists($crt_file)) $app->system->rename($crt_file, $crt_file.'.bak');
+
+            // Write new CNF file
+            $tpl = new tpl();
+            $tpl->newTemplate('metronome_conf_ssl.master');
+            $tpl->setVar('domain', $domain);
+            $tpl->setVar('ssl_country', $data['new']['ssl_country']);
+            $tpl->setVar('ssl_locality', $data['new']['ssl_locality']);
+            $tpl->setVar('ssl_organisation', $data['new']['ssl_organisation']);
+            $tpl->setVar('ssl_organisation_unit', $data['new']['ssl_organisation_unit']);
+            $tpl->setVar('ssl_email', $data['new']['ssl_email']);
+            $app->system->file_put_contents($cnf_file, $tpl->grab());
+
+            // Generate new key, csr and cert
+            exec("(cd /etc/metronome/certs && make $domain.key)");
+            exec("(cd /etc/metronome/certs && make $domain.csr)");
+            exec("(cd /etc/metronome/certs && make $domain.cert)");
+
+            $ssl_key = $app->system->file_get_contents($key_file);
+            $app->system->chmod($key_file, 0400);
+            $app->system->chown($key_file, 'metronome');
+            $ssl_request = $app->system->file_get_contents($csr_file);
+            $ssl_cert = $app->system->file_get_contents($crt_file);
+            /* Update the DB of the (local) Server */
+            $app->db->query("UPDATE xmpp_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key, $data['new']['domain']);
+            $app->db->query("UPDATE xmpp_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+            /* Update also the master-DB of the Server-Farm */
+            $app->dbmaster->query("UPDATE xmpp_domain SET ssl_request = ?, ssl_cert = ?, ssl_key = ? WHERE domain = ?", $ssl_request, $ssl_cert, $ssl_key, $data['new']['domain']);
+            $app->dbmaster->query("UPDATE xmpp_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+            $app->log('Creating XMPP SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
+        }
+
+        //* Save a SSL certificate to disk
+        if($data["new"]["ssl_action"] == 'save') {
+            $this->ssl_certificate_changed = true;
+
+            //* Rename files if they exist
+            if(file_exists($cnf_file)) $app->system->rename($cnf_file, $cnf_file.'.bak');
+            if(file_exists($key_file)){
+                $app->system->rename($key_file, $key_file.'.bak');
+                $app->system->chmod($key_file.'.bak', 0400);
+                $app->system->chown($key_file.'.bak', 'metronome');
+            }
+            if(file_exists($csr_file)) $app->system->rename($csr_file, $csr_file.'.bak');
+            if(file_exists($crt_file)) $app->system->rename($crt_file, $crt_file.'.bak');
+
+            //* Write new ssl files
+            if(trim($data["new"]["ssl_request"]) != '')
+                $app->system->file_put_contents($csr_file, $data["new"]["ssl_request"]);
+            if(trim($data["new"]["ssl_cert"]) != '')
+                $app->system->file_put_contents($crt_file, $data["new"]["ssl_cert"]);
+
+            //* Write the key file, if field is empty then import the key into the db
+            if(trim($data["new"]["ssl_key"]) != '') {
+                $app->system->file_put_contents($key_file, $data["new"]["ssl_key"]);
+                $app->system->chmod($key_file, 0400);
+                $app->system->chown($key_file, 'metronome');
+            } else {
+                $ssl_key = $app->system->file_get_contents($key_file);
+                /* Update the DB of the (local) Server */
+                $app->db->query("UPDATE xmpp_domain SET ssl_key = ? WHERE domain = ?", $ssl_key, $data['new']['domain']);
+                /* Update also the master-DB of the Server-Farm */
+                $app->dbmaster->query("UPDATE xmpp_domain SET ssl_key = '$ssl_key' WHERE domain = ?", $data['new']['domain']);
+            }
+
+            /* Update the DB of the (local) Server */
+            $app->db->query("UPDATE xmpp_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+
+            /* Update also the master-DB of the Server-Farm */
+            $app->dbmaster->query("UPDATE xmpp_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+            $app->log('Saving XMPP SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
+        }
+
+        //* Delete a SSL certificate
+        if($data['new']['ssl_action'] == 'del') {
+            $this->ssl_certificate_deleted = true;
+            $app->system->unlink($csr_file);
+            $app->system->unlink($crt_file);
+            $app->system->unlink($key_file);
+            $app->system->unlink($cnf_file);
+            $app->system->unlink($csr_file.'.bak');
+            $app->system->unlink($crt_file.'.bak');
+            $app->system->unlink($key_file.'.bak');
+            $app->system->unlink($cnf_file.'.bak');
+            /* Update the DB of the (local) Server */
+            $app->db->query("UPDATE xmpp_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
+            $app->db->query("UPDATE xmpp_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+            /* Update also the master-DB of the Server-Farm */
+            $app->dbmaster->query("UPDATE xmpp_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
+            $app->dbmaster->query("UPDATE xmpp_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
+            $app->log('Deleting SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
+        }
+
+    }
+
+} // end class
+
+?>
diff --git a/server/scripts/ispconfig_patch b/server/scripts/ispconfig_patch
index 9376ba1..6ed2a3f 100644
--- a/server/scripts/ispconfig_patch
+++ b/server/scripts/ispconfig_patch
@@ -102,6 +102,7 @@
 
 if(!is_installed('patch')) {
 	swriteln("The program 'patch' is missing on your server. Please install it and try again.");
+	exit;
 }
 
 $patch_id = simple_query('Enter patch id', false, '');
diff --git a/server/scripts/ispconfig_update.sh b/server/scripts/ispconfig_update.sh
index e3689cf..03c13c9 100644
--- a/server/scripts/ispconfig_update.sh
+++ b/server/scripts/ispconfig_update.sh
@@ -1,3 +1,7 @@
 #!/bin/bash
 
-php -q /usr/local/ispconfig/server/scripts/ispconfig_update.php
\ No newline at end of file
+php -q \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d open_basedir= \
+    /usr/local/ispconfig/server/scripts/ispconfig_update.php
diff --git a/server/scripts/update_from_dev.sh b/server/scripts/update_from_dev.sh
index de93fd9..12f62aa 100644
--- a/server/scripts/update_from_dev.sh
+++ b/server/scripts/update_from_dev.sh
@@ -4,7 +4,11 @@
 wget -O ispconfig3-dev.tar.gz "http://git.ispconfig.org/ispconfig/ispconfig3/repository/archive.tar.gz?ref=master"
 tar xzf ispconfig3-dev.tar.gz
 cd ispconfig3.git/install
-php -q update.php
+php -q \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d open_basedir= \
+    update.php
 cd /tmp
 rm -rf /tmp/ispconfig3.git /tmp/ispconfig3-dev.tar.gz
 
diff --git a/server/scripts/update_from_tgz.sh b/server/scripts/update_from_tgz.sh
index 09dddeb..7d59e40 100644
--- a/server/scripts/update_from_tgz.sh
+++ b/server/scripts/update_from_tgz.sh
@@ -12,7 +12,11 @@
 then
 	tar xvfz ISPConfig-3-stable.tar.gz
 	cd ispconfig3_install/install/
-	php -q update.php
+	php -q \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d open_basedir= \
+    update.php
 	rm -rf /tmp/ispconfig3_install/install
 	rm -f ISPConfig-3-stable.tar.gz
 else
diff --git a/server/server.php b/server/server.php
index 4cf1d35..4479b14 100644
--- a/server/server.php
+++ b/server/server.php
@@ -43,14 +43,14 @@
  * Try to Load the server configuration from the master-db
  */
 if ($app->dbmaster->connect_error == NULL) {
-	$server_db_record = $app->dbmaster->queryOneRecord("SELECT * FROM server WHERE server_id = " . $conf['server_id']);
+	$server_db_record = $app->dbmaster->queryOneRecord("SELECT * FROM server WHERE server_id = ?", $conf['server_id']);
 
 	if(!is_array($server_db_record)) die('Unable to load the server configuration from database.');
 
 	//* Get the number of the last processed datalog_id, if the id of the local server
 	//* is > then the one of the remote system, then use the local ID as we might not have
 	//* reached the remote server during the last run then.
-	$local_server_db_record = $app->db->queryOneRecord("SELECT * FROM server WHERE server_id = " . $conf['server_id']);
+	$local_server_db_record = $app->db->queryOneRecord("SELECT * FROM server WHERE server_id = ?", $conf['server_id']);
 	$conf['last_datalog_id'] = (int) max($server_db_record['updated'], $local_server_db_record['updated']);
 	unset($local_server_db_record);
 
@@ -73,7 +73,6 @@
 	unset($server_db_record);
 
 	// retrieve admin email address for notifications
-	//$sys_ini = $app->dbmaster->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = 1");
 	$sys_ini = $app->db->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = 1");
 	$conf['sys_ini'] = $app->ini_parser->parse_ini_string(stripslashes($sys_ini['config']));
 	$conf['admin_mail'] = $conf['sys_ini']['mail']['admin_mail'];
@@ -156,9 +155,9 @@
 
 	// Check if there is anything to update
 	if ($conf['mirror_server_id'] > 0) {
-		$tmp_rec = $app->dbmaster->queryOneRecord("SELECT count(server_id) as number from sys_datalog WHERE datalog_id > " . $conf['last_datalog_id'] . " AND (server_id = " . $conf['server_id'] . " OR server_id = " . $conf['mirror_server_id'] . " OR server_id = 0)");
+		$tmp_rec = $app->dbmaster->queryOneRecord("SELECT count(server_id) as number from sys_datalog WHERE datalog_id > ? AND (server_id = ? OR server_id = ? OR server_id = 0)", $conf['last_datalog_id'], $conf['server_id'], $conf['mirror_server_id']);
 	} else {
-		$tmp_rec = $app->dbmaster->queryOneRecord("SELECT count(server_id) as number from sys_datalog WHERE datalog_id > " . $conf['last_datalog_id'] . " AND (server_id = " . $conf['server_id'] . " OR server_id = 0)");
+		$tmp_rec = $app->dbmaster->queryOneRecord("SELECT count(server_id) as number from sys_datalog WHERE datalog_id > ? AND (server_id = ? OR server_id = 0)", $conf['last_datalog_id'], $conf['server_id']);
 	}
 
 	$tmp_num_records = $tmp_rec['number'];
diff --git a/server/server.sh b/server/server.sh
index 522e0d5..2d05d4f 100755
--- a/server/server.sh
+++ b/server/server.sh
@@ -1,5 +1,6 @@
 #!/bin/sh
 
+
 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
 
 . /etc/profile
@@ -14,7 +15,15 @@
 fi
 
 cd /usr/local/ispconfig/server
-/usr/bin/php -q /usr/local/ispconfig/server/server.php
+/usr/bin/php -q \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d open_basedir= \
+    /usr/local/ispconfig/server/server.php
 
 cd /usr/local/ispconfig/security
-/usr/bin/php -q /usr/local/ispconfig/security/check.php
+/usr/bin/php -q \
+    -d disable_classes= \
+    -d disable_functions= \
+    -d open_basedir= \
+    /usr/local/ispconfig/security/check.php

--
Gitblit v1.9.1