diff --git a/install/install.php b/install/install.php
index abbe35839f64169648c014cd746f39e9fe78705f..5af71e9021dec8416a0639517cefd8671d9b8d45 100644
--- a/install/install.php
+++ b/install/install.php
@@ -121,7 +121,7 @@ exec("/etc/init.d/courier-imap restart");
 exec("/etc/init.d/courier-imap-ssl restart");
 exec("/etc/init.d/courier-pop restart");
 exec("/etc/init.d/courier-pop-ssl restart");
-
+exec("/etc/init.d/apache2 restart");
 
 echo "Installation finished.\n";
 
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index c1b414405d0778b6fbb418c2e63dc0935804c2fa..264d2849294192c13a9f529c046e5a9ff9170a75 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -318,7 +318,7 @@ maildrop  unix  -       n       n       -       -       pipe
 		// Edit the file /etc/default/saslauthd
 		$configfile = '/etc/default/saslauthd';
 		if(is_file($configfile)) copy($configfile,$configfile.'~');
-		if(is_file($configfile.'~')) exec('chmod 400 '.$configfile.'/~');
+		if(is_file($configfile.'~')) exec('chmod 400 '.$configfile.'~');
 		$content = rf($configfile);
 		$content = str_replace('START=no','START=yes',$content);
 		$content = str_replace('OPTIONS="-c"','OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"',$content);
@@ -371,7 +371,7 @@ maildrop  unix  -       n       n       -       -       pipe
 		//authdaemonrc
 		$configfile = $conf["dist_courier_config_dir"].'/authdaemonrc';
 		if(is_file($configfile)) copy($configfile,$configfile.'~');
-		if(is_file($configfile.'~')) exec('chmod 400 '.$configfile.'/~');
+		if(is_file($configfile.'~')) exec('chmod 400 '.$configfile.'~');
 		$content = rf($configfile);
 		$content = str_replace('authmodulelist="authpam"','authmodulelist="authmysql"',$content);
 		wf($configfile,$content);
diff --git a/install/tpl/mailfilter.master b/install/tpl/mailfilter.master
index 6333fa13807533ee2b91eb14434264e20106b7f8..e95908a4488fb22fe086f378821fe0fe7db4e72b 100644
--- a/install/tpl/mailfilter.master
+++ b/install/tpl/mailfilter.master
@@ -37,6 +37,15 @@ if ( $RETURNCODE != 0 )
   `chmod -R 0700 {dist_postfix_vmail_mailbox_base}/$HOST`
 }
 
+# Check if the user has a autoresponder enabled
+
+`test -f {dist_postfix_vmail_mailbox_base}/mailfilters/$HOST/$USER/.autoresponder`
+if ( $RETURNCODE == 0 )
+{
+  include "{dist_postfix_vmail_mailbox_base}/mailfilters/$HOST/$USER/.autoresponder"
+}
+
+
 #
 # Check that user has his own maildrop include,
 # if not available, check if $DEFAULT is set
@@ -44,10 +53,10 @@ if ( $RETURNCODE != 0 )
 # it) and deliver or fail temporarily if not available
 #
 
-`test -f {dist_postfix_vmail_mailbox_base}/mailfilters/$LOGNAME`
+`test -f {dist_postfix_vmail_mailbox_base}/mailfilters/$HOST/$USER/.mailfilter`
 if ( $RETURNCODE == 0 )
 {
-  include "{dist_postfix_vmail_mailbox_base}/mailfilters/$LOGNAME"
+  include "{dist_postfix_vmail_mailbox_base}/mailfilters/$HOST/$USER/.mailfilter"
 }
 else
 {
diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index bdcbaed8556a7396561f3566a4780701156cdc2e..f9ad1ecdce63bac613c99b4165b638b831cb8aff 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -673,15 +673,23 @@ class tform {
                                                 if($field['formtype'] == 'PASSWORD') {
                                                         $sql_insert_key .= "`$key`, ";
                                                         if($field['encryption'] == 'CRYPT') {
-                                                                // $sql_insert_val .= "encrypt('".$record[$key]."'), ";
-																$sql_insert_val .= "'".crypt($record[$key],substr(md5(time()),0,2))."', ";
+                                                                $salt="$1$";
+																for ($n=0;$n<8;$n++) {
+																	$salt.=chr(mt_rand(64,126));
+																}
+																$salt.="$";
+																// $salt = substr(md5(time()),0,2);
+																$record[$key] = crypt($record[$key],$salt);
                                                         } else {
-                                                                $sql_insert_val .= "md5('".$record[$key]."'), ";
+                                                                $record[$key] = md5($record[$key]);
                                                         }
+														$sql_insert_val .= "'".$record[$key]."', ";
                                                 } elseif ($field['formtype'] == 'CHECKBOX') {
                                                         $sql_insert_key .= "`$key`, ";
 														if($record[$key] == '') {
+															// if a checkbox is not set, we set it to the unchecked value
 															$sql_insert_val .= "'".$field['value'][0]."', ";
+															$record[$key] = $field['value'][0];
 														} else {
 															$sql_insert_val .= "'".$record[$key]."', ";
 														}
@@ -691,15 +699,23 @@ class tform {
                                                 }
                                         } else {
                                                 if($field['formtype'] == 'PASSWORD') {
-                                                        if($field['encryption'] == 'CRYPT') {
-                                                                // $sql_update .= "`$key` = encrypt('".$record[$key]."'), ";
-																$sql_update .= "`$key` = '".crypt($record[$key],substr(md5(time()),0,2))."', ";
+														if($field['encryption'] == 'CRYPT') {
+                                                                $salt="$1$";
+																for ($n=0;$n<8;$n++) {
+																	$salt.=chr(mt_rand(64,126));
+																}
+																$salt.="$";
+																// $salt = substr(md5(time()),0,2);
+																$record[$key] = crypt($record[$key],$salt);
                                                         } else {
-                                                                $sql_update .= "`$key` = md5('".$record[$key]."'), ";
+                                                                $record[$key] = md5($record[$key]);
                                                         }
+                                                        $sql_update .= "`$key` = '".$record[$key]."', ";
                                                 } elseif ($field['formtype'] == 'CHECKBOX') {
 														if($record[$key] == '') {
+															// if a checkbox is not set, we set it to the unchecked value
 															$sql_update .= "`$key` = '".$field['value'][0]."', ";
+															$record[$key] = $field['value'][0];
 														} else {
 															$sql_update .= "`$key` = '".$record[$key]."', ";
 														}
@@ -707,7 +723,11 @@ class tform {
                                                         $sql_update .= "`$key` = '".$record[$key]."', ";
                                                 }
                                         }
-                                }
+                                } else {
+									// we unset the password filed, if empty to tell the datalog function 
+									// that the password has not been changed
+								    unset($record[$key]);
+								}
                         }
         }
 
@@ -840,30 +860,46 @@ class tform {
                 }
 
                 $diffrec = array();
-
+				
                 if(is_array($record_new)) {
                         foreach($record_new as $key => $val) {
                                 if($record_old[$key] != $val) {
-                                        // Datensatz hat sich geƤndert
+										// Record has changed
                                         $diffrec[$key] = array('old' => $record_old[$key],
-                                                                           'new' => $val);
+                                                               'new' => $val);
                                 }
                         }
                 }
+				$this->diffrec = $diffrec;
+				
+				// Full diff records for ISPConfig, they have a different format then the simple diffrec
+				$diffrec_full = array();
+
+                if(is_array($record_old)) {
+                        foreach($record_old as $key => $val) {
+                                if(isset($record_new[$key]) && $record_new[$key] != $val) {
+                                    // Record has changed
+									$diffrec_full['old'][$key] = $val;
+									$diffrec_full['new'][$key] = $record_new[$key];
+                                } else {
+									$diffrec_full['old'][$key] = $val;
+									$diffrec_full['new'][$key] = $val;
+								}
+                        }
+                }
+				
+				/*
+				echo "<pre>";
+				print_r($diffrec_full);
+				echo "</pre>";
+				*/
 				
 				// Insert the server_id, if the record has a server_id
 				$server_id = ($record_old["server_id"] > 0)?$record_old["server_id"]:0;
 				if(isset($record_new["server_id"])) $server_id = $record_new["server_id"];
-				
-				$this->diffrec = $diffrec;
 
-                if(count($diffrec) > 0) {
-                        
-						// We need the full records in ISPConfig, not only the diffs
-						$diffrec = array(	'old' => $record_old,
-											'new' => $record_new);
-						
-						$diffstr = $app->db->quote(serialize($diffrec));
+                if(count($this->diffrec) > 0) {
+						$diffstr = $app->db->quote(serialize($diffrec_full));
                         $username = $app->db->quote($_SESSION["s"]["user"]["username"]);
                         $dbidx = $this->formDef['db_table_idx'].":".$primary_id;
                         $action = ($action == 'INSERT')?'i':'u';
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index b0f11d675556d1de2493571ea47b0ba5e0cf3361..eba1e1f5ab7a8cca0b56e5c095a469de3a43a5c9 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -166,10 +166,10 @@ $form["tabs"]['autoresponder'] = array (
 			'rows'		=> '15'
 		),
 		'autoresponder' => array (
-			'datatype'	=> 'INTEGER',
+			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'CHECKBOX',
-			'default'	=> '1',
-			'value'		=> '1'
+			'default'	=> 'n',
+			'value'		=> array(1 => 'y',0 => 'n')
 		),
 	##################################
 	# ENDE Datatable fields
@@ -177,5 +177,31 @@ $form["tabs"]['autoresponder'] = array (
 	)
 );
 
+if($_SESSION["s"]["user"]["typ"] == 'admin') {
+
+$form["tabs"]['mailfilter'] = array (
+	'title' 	=> "Mailfilter",
+	'width' 	=> 100,
+	'template' 	=> "templates/mail_user_mailfilter_edit.htm",
+	'fields' 	=> array (
+	##################################
+	# Begin Datatable fields
+	##################################
+		'custom_mailfilter' => array (
+			'datatype'	=> 'TEXT',
+			'formtype'	=> 'TEXTAREA',
+			'default'	=> '',
+			'value'		=> '',
+			'cols'		=> '30',
+			'rows'		=> '15'
+		),
+	##################################
+	# ENDE Datatable fields
+	##################################
+	)
+);
+
+}
+
 
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 69908191235f76b01707b3197233b698dc127a39..99fab8afcdb680b8c7bfb246c8b14c0acee4ae19 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -1,26 +1,29 @@
-<?php
-$wb["email_txt"] = 'Email';
-$wb["cryptpwd_txt"] = 'Password';
-$wb["active_txt"] = 'Active';
-$wb["btn_save_txt"] = 'Save';
-$wb["btn_cancel_txt"] = 'Cancel';
-$wb["email_error_isemail"] = 'Email address is invalid.';
-$wb["email_error_unique"] = 'Duplicate Emailaddress.';
-$wb["autoresponder_text_txt"] = 'Text';
-$wb["autoresponder_txt"] = 'Autoresponder';
-$wb["no_domain_perm"] = 'You have no permission for this domain.';
-$wb["error_no_pwd"] = 'Password is empty.';
-$wb["quota_error_isint"] = 'Mailbox size must be a number.';
-$wb["quota_txt"] = 'quota';
-$wb["server_id_txt"] = 'server_id';
-$wb["password_txt"] = 'password';
-$wb["maildir_txt"] = 'maildir';
-$wb["postfix_txt"] = 'Enable Receiving';
-$wb["access_txt"] = 'Enable Access';
-$wb["policy_txt"] = 'Spamfilter';
-$wb["no_policy"] = '- not enabled -';
-$wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
-$wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
-$wb["welcome_mail_subject"] = "Welcome to your new email account.";
-$wb["welcome_mail_message"] = "Welcome to your new email account.\r\n \r\n Your webmaster.";
+<?php
+$wb["custom_mailfilter_txt"] = 'custom_mailfilter';
+$wb["btn_save_txt"] = 'Save';
+$wb["btn_cancel_txt"] = 'Cancel';
+$wb["email_txt"] = 'Email';
+$wb["cryptpwd_txt"] = 'Password';
+$wb["active_txt"] = 'Active';
+$wb["email_error_isemail"] = 'Email address is invalid.';
+$wb["email_error_unique"] = 'Duplicate Emailaddress.';
+$wb["autoresponder_text_txt"] = 'Text';
+$wb["autoresponder_txt"] = 'Autoresponder';
+$wb["no_domain_perm"] = 'You have no permission for this domain.';
+$wb["error_no_pwd"] = 'Password is empty.';
+$wb["quota_error_isint"] = 'Mailbox size must be a number.';
+$wb["quota_txt"] = 'quota';
+$wb["server_id_txt"] = 'server_id';
+$wb["password_txt"] = 'password';
+$wb["maildir_txt"] = 'maildir';
+$wb["postfix_txt"] = 'Enable Receiving';
+$wb["access_txt"] = 'Enable Access';
+$wb["policy_txt"] = 'Spamfilter';
+$wb["no_policy"] = '- not enabled -';
+$wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
+$wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
+$wb["welcome_mail_subject"] = 'Welcome to your new email account.';
+$wb["welcome_mail_message"] = 'Welcome to your new email account.
+ 
+ Your webmaster.';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_user_mailfilter_edit.htm b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..57310e115d4c11e18d9cfbd3dd0e525a48e25d99
--- /dev/null
+++ b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
@@ -0,0 +1,16 @@
+<table width="500" border="0" cellspacing="0" cellpadding="2">
+  <tr>
+    <td class="frmText11">{tmpl_var name='custom_mailfilter_txt'}:</td>
+    <td class="frmText11"><textarea name='custom_mailfilter' cols='30' rows='15'>{tmpl_var name='custom_mailfilter'}</textarea></td>
+  </tr>  <tr>
+    <td class="frmText11">&nbsp;</td>
+    <td class="frmText11">&nbsp;</td>
+  </tr>
+  <tr>
+    <td>&nbsp;</td>
+    <td><input name="btn_save" type="button" class="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','mail/mail_user_edit.php');"><div class="buttonEnding"></div>&nbsp;
+      <input name="btn_cancel" type="button" class="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('mail/mail_user_list.php');"><div class="buttonEnding"></div>
+    </td>
+  </tr>
+</table>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
\ No newline at end of file
diff --git a/server/conf/autoresponder.master b/server/conf/autoresponder.master
new file mode 100644
index 0000000000000000000000000000000000000000..d88f9de85bd71ed4ba66143a9f5b10d69f671fe8
--- /dev/null
+++ b/server/conf/autoresponder.master
@@ -0,0 +1,14 @@
+cc $DEFAULT
+xfilter "reformail -r -t -I 'From: $LOGNAME'"
+/^To:.*/
+getaddr{$MATCH}=~ /^.*/;
+MATH=tolower${MATCH}
+flock "{vmail_mailbox_base}/mailfilters/$HOST/$USER/.vacation.lock" {
+        `fgrep -iqx "$MATCH" {vmail_mailbox_base}/mailfilters/$HOST/$USER/.vacation.lst 2>/dev/null || { \
+               echo "$MATCH" >> {vmail_mailbox_base}/mailfilters/$HOST/$USER/.vacation.lst ; \
+               exit 1 ; \
+         } `
+}
+if ( $RETURNCODE == 0 )
+    exit
+to "| (cat - ; echo ''; cat {vmail_mailbox_base}/mailfilters/$HOST/$USER/.vacation.msg) | $SENDMAIL -t"
\ No newline at end of file
diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php
index 16fc2cc84ac3b091926ce71b60709277b04d1089..41bc2ae259c508c2e1d70e63e5a98bd12ed86e37 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -81,14 +81,14 @@ class modules {
 		global $app,$conf;
 		
 		// TODO: process only new entries.
-		$sql = "SELECT * FROM sys_datalog WHERE server_id = ".$conf["server_id"];
+		$sql = "SELECT * FROM sys_datalog WHERE server_id = ".$conf["server_id"]." ORDER BY datalog_id";
 		$records = $app->db->queryAllRecords($sql);
 		foreach($records as $rec) {
 			$data = unserialize(stripslashes($rec["data"]));
 			$this->raiseTableHook($rec["dbtable"],$rec["action"],$data);
+			$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("DELETE FROM sys_datalog WHERE datalog_id = ".$rec["datalog_id"]);
-		$app->log("Deleting sys_datalog ID ".$rec["datalog_id"],LOGLEVEL_DEBUG);
 	}
 	
 	function raiseTableHook($table_name,$action,$data) {
diff --git a/server/plugins-enabled/maildrop_plugin.inc.php b/server/plugins-enabled/maildrop_plugin.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..961088c4330bf1a7e57caa619d5e7a37ba2ca5ce
--- /dev/null
+++ b/server/plugins-enabled/maildrop_plugin.inc.php
@@ -0,0 +1,186 @@
+<?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 maildrop_plugin {
+	
+	var $plugin_name = 'maildrop_plugin';
+	var $class_name = 'maildrop_plugin';
+	
+	
+	var $mailfilter_config_dir = '';
+	
+	/*
+	 	This function is called when the plugin is loaded
+	*/
+	
+	function onLoad() {
+		global $app;
+		
+		/*
+		Register for the events
+		*/
+		
+		$app->plugins->registerEvent('mail_user_update','maildrop_plugin','update');
+		$app->plugins->registerEvent('mail_user_delete','maildrop_plugin','delete');
+		
+	}
+	
+	
+	function update($event_name,$data) {
+		global $app, $conf;
+		
+		// load the server configuration options
+		$app->uses("getconf");
+		$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
+		if(substr($mail_config["homedir_path"],-1) == '/') {
+			$mail_config["homedir_path"] = substr($mail_config["homedir_path"],0,-1);
+		}
+		$this->mailfilter_config_dir = $mail_config["homedir_path"].'/mailfilters';
+		
+		
+		// Check if the config directory exists.
+		if(!is_dir($this->mailfilter_config_dir)) {
+			$app->log("Mailfilter config directory '".$this->mailfilter_config_dir."' does not exist.",LOGLEVEL_ERROR);
+		} else {
+			// Check if something has been changed regarding the autoresponders
+			if($data["old"]["autoresponder_text"] != $data["new"]["autoresponder_text"] 
+			    or $data["old"]["autoresponder"] != $data["new"]["autoresponder"]
+			    or (isset($data["new"]["email"]) and $data["old"]["email"] != $data["new"]["email"])) {
+			   		
+					// We delete the old autoresponder, if it exists
+					$email_parts = explode("@",$data["old"]["email"]);
+					$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.lock';
+					if(is_file($file)) unlink($file) or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+					$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.lst';
+					if(is_file($file)) unlink($file) or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+					$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.msg';
+					if(is_file($file)) unlink($file) or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+					$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.autoresponder';
+					if(is_file($file)) unlink($file) or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+			   		
+					//Now we create the new autoresponder, if it is enabled
+					if($data["new"]["autoresponder"] == 'y') {
+						if(isset($data["new"]["email"])) {
+							$email_parts = explode("@",$data["new"]["email"]);
+						} else {
+							$email_parts = explode("@",$data["old"]["email"]);
+						}
+						
+						// make sure that the config directories exist
+						if(!is_dir($this->mailfilter_config_dir.'/'.$email_parts[1])) {
+							mkdir($this->mailfilter_config_dir.'/'.$email_parts[1]);
+							exec("chown vmail ".$this->mailfilter_config_dir.'/'.$email_parts[1]);
+							exec("chmod 400 ".$this->mailfilter_config_dir.'/'.$email_parts[1]);
+						}
+						if(!is_dir($this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0])) {
+							mkdir($this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0]);
+							exec("chown vmail ".$this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0]);
+							exec("chmod 400 ".$this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0]);
+						}
+						
+						// Load the master template
+						$tpl = file_get_contents($conf["rootpath"].'/conf/autoresponder.master');
+						$tpl = str_replace('{vmail_mailbox_base}',$mail_config["homedir_path"],$tpl);
+						// Write the config file.
+						$config_file_path = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.autoresponder';
+						file_put_contents($config_file_path,$tpl);
+						$app->log("Writing Autoresponder mailfilter file: $config_file_path",LOGLEVEL_DEBUG);
+						exec("chmod 400 $config_file_path");
+						exec("chown vmail $config_file_path");
+						unset($tpl);
+						unset($config_file_path);
+						
+						// Write the autoresponder message file
+						$config_file_path = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.msg';
+						file_put_contents($config_file_path,$data["new"]["autoresponder_text"]);
+						exec("chmod 400 $config_file_path");
+						exec("chown vmail $config_file_path");
+						$app->log("Writing Autoresponder message file: $config_file_path",LOGLEVEL_DEBUG);
+			   		}
+			}
+			
+			// Write the custom mailfilter script, if mailfilter recipe has changed
+			if($data["old"]["custom_mailfilter"] != $data["new"]["custom_mailfilter"]) {
+				if(trim($data["new"]["custom_mailfilter"]) != '') {
+					// Delete the old filter recipe
+					$email_parts = explode("@",$data["old"]["email"]);
+					$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.mailfilter';
+					if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+					
+					// write the new recipe
+					if(isset($data["new"]["email"])) {
+						$email_parts = explode("@",$data["new"]["email"]);
+					} else {
+						$email_parts = explode("@",$data["old"]["email"]);
+					}
+					$config_file_path = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.mailfilter';
+					file_put_contents($config_file_path,$data["new"]["custom_mailfilter"]);
+					exec("chmod 400 $config_file_path");
+					exec("chown vmail $config_file_path");
+					unset($config_file_path);
+				} else {
+					// Delete the mailfilter recipe
+					$email_parts = explode("@",$data["old"]["email"]);
+					$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.mailfilter';
+					if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+				}
+			}
+		}
+	}
+	
+	function delete($event_name,$data) {
+		global $app, $conf;
+		
+		// load the server configuration options
+		$app->uses("getconf");
+		$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
+		$this->mailfilter_config_dir = $mail_config["homedir_path"].'/mailfilters';
+		
+		$email_parts = explode("@",$data["old"]["email"]);
+		$dir = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0];
+		if(is_dir($dir)) {
+			$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.lock';
+			if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+			$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.lst';
+			if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+			$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.vacation.msg';
+			if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+			$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.autoresponder';
+			if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+			$file = $this->mailfilter_config_dir.'/'.$email_parts[1].'/'.$email_parts[0].'/.mailfilter';
+			if(is_file($file)) unlink($file)  or $app->log("Unable to delete file: $file",LOGLEVEL_WARN);
+			rmdir($dir) or $app->log("Unable to delete directory: $dir",LOGLEVEL_WARN);
+		}
+	}
+	
+
+} // end class
+
+?>
\ No newline at end of file