diff --git a/include/class.ticket.php b/include/class.ticket.php
index d559b1cc67a2764625abd2d25c7a97d980658bc3..fd9da00ca1d15aa6014eac5389c274f2d35940e2 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -971,11 +971,15 @@ class Ticket {
         $this->reload();
     }
 
-    function  activityNotice($vars) {
+    /*
+     * Notify collaborators on response or new message
+     *
+     */
+
+    function  notifyCollaborators($entry) {
         global $cfg;
 
-        if (!$vars
-                || !$vars['variables']
+        if (!$entry instanceof ThreadEntry
                 || !($recipients=$this->getRecipients())
                 || !($dept=$this->getDept())
                 || !($tpl=$dept->getTemplate())
@@ -983,19 +987,28 @@ class Ticket {
                 || !($email=$dept->getEmail()))
             return;
 
-        $msg = $this->replaceVars($msg->asArray(), $vars['variables']);
+        //Who posted the entry?
+        $uid = 0;
+        if ($entry instanceof Message) {
+            $poster = $entry->getUser();
+            $uid = $entry->getUserId();
+        } else
+            $poster = $entry->getStaff();
 
-        if($cfg->stripQuotedReply() && ($tag=$cfg->getReplySeparator()))
-            $msg['body'] = "<p style=\"display:none\">$tag<p>".$msg['body'];
+        $vars = array(
+                'message' => (string) $entry,
+                'poster' => $poster? $poster : 'A collaborator');
+
+        $msg = $this->replaceVars($msg->asArray(), $vars);
 
-        $attachments = ($cfg->emailAttachments() && $vars['attachments'])?$vars['attachments']:array();
-        $options = array();
-        if($vars['inreplyto'])
-            $options['inreplyto'] = $vars['inreplyto'];
-        if($vars['references'])
-            $options['references'] = $vars['references'];
+        if ($cfg->stripQuotedReply() && ($tag=$cfg->getReplySeparator()))
+            $msg['body'] = "<p style=\"display:none\">$tag<p>".$msg['body'];
 
-        foreach($recipients as $recipient) {
+        $attachments = $cfg->emailAttachments()?$entry->getAttachments():array();
+        $options = array('inreplyto' => $entry->getEmailMessageId());
+        foreach ($recipients as $recipient) {
+            if ($uid == $recipient->getId()) continue;
+            $options['references'] =  $entry->getEmailReferencesForUser($recipient);
             $notice = $this->replaceVars($msg, array('recipient' => $recipient));
             $email->send($recipient->getEmail(), $notice['subj'], $notice['body'], $attachments,
                 $options);
@@ -1004,7 +1017,7 @@ class Ticket {
         return;
     }
 
-    function onMessage($autorespond=true, $message=null) {
+    function onMessage($message, $autorespond=true) {
         global $cfg;
 
         db_query('UPDATE '.TICKET_TABLE.' SET isanswered=0,lastmessage=NOW() WHERE ticket_id='.db_input($this->getId()));
@@ -1021,13 +1034,18 @@ class Ticket {
         if($this->isClosed()) $this->reopen(); //reopen..
 
        /**********   double check auto-response  ************/
-        if($autorespond && (Email::getIdByEmail($this->getEmail())))
+        if (!($user = $message->getUser()))
             $autorespond=false;
-        elseif($autorespond && ($dept=$this->getDept()))
+        elseif ($autorespond && (Email::getIdByEmail($user->getEmail())))
+            $autorespond=false;
+        elseif ($autorespond && ($dept=$this->getDept()))
             $autorespond=$dept->autoRespONNewMessage();
 
 
-        if(!$autorespond || !$cfg->autoRespONNewMessage()) return;  //no autoresp or alerts.
+        if(!$autorespond
+                || !$cfg->autoRespONNewMessage()
+                || !$message) return;  //no autoresp or alerts.
+
         $this->reload();
         $dept = $this->getDept();
         $email = $dept->getAutoRespEmail();
@@ -1038,18 +1056,18 @@ class Ticket {
                 && ($msg=$tpl->getNewMessageAutorepMsgTemplate())) {
 
             $msg = $this->replaceVars($msg->asArray(),
-                            array('signature' => ($dept && $dept->isPublic())?$dept->getSignature():''));
+                            array(
+                                'recipient' => $user,
+                                'signature' => ($dept && $dept->isPublic())?$dept->getSignature():''));
 
             //Reply separator tag.
             if($cfg->stripQuotedReply() && ($tag=$cfg->getReplySeparator()))
                 $msg['body'] = "<p style=\"display:none\">$tag<p>".$msg['body'];
 
-            if (!$message)
-                $message = $this->getLastMessage();
             $options = array(
-                'inreplyto'=>$message->getEmailMessageId(),
-                'references'=>$message->getEmailReferences());
-            $email->sendAutoReply($this->getEmail(), $msg['subj'], $msg['body'],
+                'inreplyto' => $message->getEmailMessageId(),
+                'references' => $message->getEmailReferencesForUser($user));
+            $email->sendAutoReply($user->getEmail(), $msg['subj'], $msg['body'],
                 null, $options);
         }
     }
@@ -1516,7 +1534,7 @@ class Ticket {
         if ($autorespond && $message->isAutoResponse())
             $autorespond=false;
 
-        $this->onMessage($autorespond, $message); //must be called b4 sending alerts to staff.
+        $this->onMessage($message, $autorespond); //must be called b4 sending alerts to staff.
 
         $dept = $this->getDept();
 
@@ -1560,12 +1578,7 @@ class Ticket {
             }
         }
 
-        unset($variables['message']);
-        $variables['message'] = $message->asVar();
-
-        $info = $options + array('variables' => $variables);
-        $this->activityNotice($info);
-
+        $this->notifyCollaborators($message);
 
         return $message;
     }
@@ -1680,12 +1693,8 @@ class Ticket {
                 $options);
         }
 
-        if($vars['emailcollab']) {
-            unset($variables['response']);
-            $variables['message'] = $response->asVar();
-            $info = $options + array('variables' => $variables);
-            $this->activityNotice($info);
-        }
+        if($vars['emailcollab'])
+            $this->notifyCollaborators($response);
 
         return $response;
     }