diff --git a/include/ajax.tasks.php b/include/ajax.tasks.php
index 15a623c4d7d45e324540e9d0426f37b35205ed85..19016e20c7fbe3d7691f576a7af7ba3df7a00beb 100644
--- a/include/ajax.tasks.php
+++ b/include/ajax.tasks.php
@@ -126,7 +126,7 @@ class TasksAjaxAPI extends AjaxController {
                         Format::datetime($_SESSION[':form-data']['timestamp']));
 
                     $note = array(
-                            'title' => __('Task Created From Thread'),
+                            'title' => __('Task Created From Thread Entry'),
                             'note' => __('Task ' . $taskLink .
                             '<br /> Thread Entry ID: ' . $entryLink)
                             );
@@ -139,7 +139,7 @@ class TasksAjaxAPI extends AjaxController {
                         $originalTask->getNumber());
 
                     $note = array(
-                            'title' => __('Task Created From Thread'),
+                            'title' => __('Task Created From Thread Entry'),
                             'note' => __('This Task was created from Task ' . $taskLink));
 
                     $task->postNote($note, $errors, $thisstaff);
diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index 5377996c628c55c498a78e8d50650dd10815a713..0a7cf21bcbd1ea0bc01bec441bbcc385cbf62090 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -1362,7 +1362,7 @@ function refer($tid, $target=null) {
                         Format::datetime($_SESSION[':form-data']['timestamp']));
 
                     $note = array(
-                            'title' => __('Task Created From Thread'),
+                            'title' => __('Task Created From Thread Entry'),
                             'body' => __('Task ' . $taskLink .
                             '<br /> Thread Entry ID: ' . $entryLink)
                             );
@@ -1375,7 +1375,7 @@ function refer($tid, $target=null) {
                         $ticket->getNumber());
 
                     $note = array(
-                            'title' => __('Task Created From Thread'),
+                            'title' => __('Task Created From Thread Entry'),
                             'note' => __('This Task was created from Ticket ' . $ticketLink));
 
                     $task->postNote($note, $errors, $thisstaff);
diff --git a/include/class.template.php b/include/class.template.php
index 53f1caf431a542d115bcfe49a5baa5d08bdf3eb7..4e73ecb32967f248d6781b6d6696036bd4ff1088 100644
--- a/include/class.template.php
+++ b/include/class.template.php
@@ -60,6 +60,14 @@ class EmailTemplateGroup {
                 'ticket', 'signature', 'recipient', 'staff', 'message',
             ),
         ),
+        'ticket.notice.bcc'=>array(
+            'group'=>'a.ticket.user',
+            'name'=>/* @trans */ 'New Ticket Notice (BCC)',
+            'desc'=>/* @trans */ 'Notice sent to BCCd users, if enabled, on new ticket created by an agent on behalf of a user (e.g phone calls).',
+            'context' => array(
+                'ticket', 'signature', 'recipient', 'staff', 'message',
+            ),
+        ),
         'ticket.overlimit'=>array(
             'group'=>'a.ticket.user',
             'name'=>/* @trans */ 'Overlimit Notice',
@@ -76,6 +84,14 @@ class EmailTemplateGroup {
                 'ticket', 'signature', 'response', 'staff', 'poster', 'recipient',
             ),
         ),
+        'ticket.reply.bcc'=>array(
+            'group'=>'a.ticket.user',
+            'name'=>/* @trans */ 'Response/Reply Template (BCC)',
+            'desc'=>/* @trans */ 'Template used on ticket response/reply',
+            'context' => array(
+                'ticket', 'signature', 'response', 'staff', 'poster', 'recipient',
+            ),
+        ),
         'ticket.activity.notice'=>array(
             'group'=>'a.ticket.user',
             'name'=>/* @trans */ 'New Activity Notice',
@@ -84,6 +100,14 @@ class EmailTemplateGroup {
                 'ticket', 'signature', 'message', 'poster', 'recipient',
             ),
         ),
+        'ticket.activity.notice.bcc'=>array(
+            'group'=>'a.ticket.user',
+            'name'=>/* @trans */ 'New Activity Notice (BCC)',
+            'desc'=>/* @trans */ 'Template used to notify BCCd collaborators on ticket activity',
+            'context' => array(
+                'ticket', 'signature', 'message', 'poster', 'recipient',
+            ),
+        ),
         'ticket.alert'=>array(
             'group'=>'b.ticket.staff',
             'name'=>/* @trans */ 'New Ticket Alert',
@@ -309,6 +333,10 @@ class EmailTemplateGroup {
         return $this->getMsgTemplate('ticket.notice');
     }
 
+    function getNewTicketNoticeBCCMsgTemplate() {
+        return $this->getMsgTemplate('ticket.notice.bcc');
+    }
+
     function getNewMessageAutorepMsgTemplate() {
         return $this->getMsgTemplate('message.autoresp');
     }
@@ -325,10 +353,18 @@ class EmailTemplateGroup {
         return $this->getMsgTemplate('ticket.reply');
     }
 
+    function getReplyBCCMsgTemplate() {
+        return $this->getMsgTemplate('ticket.reply.bcc');
+    }
+
     function  getActivityNoticeMsgTemplate() {
         return $this->getMsgTemplate('ticket.activity.notice');
     }
 
+    function  getActivityNoticeBCCMsgTemplate() {
+        return $this->getMsgTemplate('ticket.activity.notice.bcc');
+    }
+
     function getOverlimitMsgTemplate() {
         return $this->getMsgTemplate('ticket.overlimit');
     }
diff --git a/include/class.ticket.php b/include/class.ticket.php
index f28f4e8e1d670bfec09aeeca9dcea6a2f7a5f9c2..3c2856d3baab56c8d883741592fc0d0fc487aa82 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -1564,6 +1564,7 @@ implements RestrictedAccess, Threadable, Searchable {
             || !($dept=$this->getDept())
             || !($tpl=$dept->getTemplate())
             || !($msg=$tpl->getActivityNoticeMsgTemplate())
+            || !($bccmsg=$tpl->getActivityNoticeBCCMsgTemplate())
             || !($email=$dept->getEmail())
         ) {
             return;
@@ -1593,6 +1594,7 @@ implements RestrictedAccess, Threadable, Searchable {
         );
 
         $msg = $this->replaceVars($msg->asArray(), $vars);
+        $bccmsg = $this->replaceVars($bccmsg->asArray(), $vars);
 
         $attachments = $cfg->emailAttachments()?$entry->getAttachments():array();
         $options = array('thread' => $entry);
@@ -1627,7 +1629,7 @@ implements RestrictedAccess, Threadable, Searchable {
          //send bcc messages seperately for privacy
          if ($collabsBcc) {
            foreach ($collabsBcc as $recipient) {
-             $notice = $this->replaceVars($msg, array('recipient' => $recipient));
+             $notice = $this->replaceVars($bccmsg, array('recipient' => $recipient));
              if ($posterEmail != $recipient->getEmail()->address)
                $email->send($recipient, $notice['subj'], $notice['body'], $attachments,
                    $options);
@@ -2988,7 +2990,7 @@ implements RestrictedAccess, Threadable, Searchable {
             if ($vars['bccs']
                     && $vars['emailcollab']
                     && ($bcctpl = $dept->getTemplate())
-                    && ($bccmsg=$bcctpl->getReplyMsgTemplate())) {
+                    && ($bccmsg=$bcctpl->getReplyBCCMsgTemplate())) {
                 foreach ($vars['bccs'] as $uid) {
                     if (!($recipient = User::lookup($uid)))
                         continue;
@@ -3887,20 +3889,19 @@ implements RestrictedAccess, Threadable, Searchable {
         }
 
         //check to see if ticket was created from a thread
-        if ($_SESSION[':form-data']['ticket'] || $_SESSION[':form-data']['task']) {
-          $oldTicket = $_SESSION[':form-data']['ticket'];
-          $oldTask = $_SESSION[':form-data']['task'];
+        if ($_SESSION[':form-data']['ticketId'] || $_SESSION[':form-data']['taskId']) {
+          $oldTicket = Ticket::lookup($_SESSION[':form-data']['ticketId']);
+          $oldTask = Task::lookup($_SESSION[':form-data']['taskId']);
 
           //add internal note to new ticket.
           //New ticket should have link to old task/ticket:
-          $link = sprintf('<a href="%s.php?id=%d#entry-%d"><b>#%s</b></a>',
+          $link = sprintf('<a href="%s.php?id=%d"><b>#%s</b></a>',
               $oldTicket ? 'tickets' : 'tasks',
               $oldTicket ? $oldTicket->getId() : $oldTask->getId(),
-              $_SESSION[':form-data']['eid'],
               $oldTicket ? $oldTicket->getNumber() : $oldTask->getNumber());
 
           $note = array(
-                  'title' => __('Ticket Created From Thread'),
+                  'title' => __('Ticket Created From Thread Entry'),
                   'body' => sprintf(__('This Ticket was created from %s '. $link),
                             $oldTicket ? 'Ticket' : 'Task')
                   );
@@ -3919,12 +3920,12 @@ implements RestrictedAccess, Threadable, Searchable {
               Format::datetime($_SESSION[':form-data']['timestamp']));
 
           $ticketNote = array(
-              'title' => __('Ticket Created From Thread'),
+              'title' => __('Ticket Created From Thread Entry'),
               'body' => __('Ticket ' . $ticketLink).
               '<br /> Thread Entry ID: ' . $entryLink);
 
           $taskNote = array(
-              'title' => __('Ticket Created From Thread'),
+              'title' => __('Ticket Created From Thread Entry'),
               'note' => __('Ticket ' . $ticketLink).
               '<br /> Thread Entry ID: ' . $entryLink);
 
@@ -4142,7 +4143,8 @@ implements RestrictedAccess, Threadable, Searchable {
            $attachments = array();
            $message = $ticket->getLastMessage();
            if ($cfg->emailAttachments()) {
-               $attachments = $message->getAttachments();
+               if ($message)
+                 $attachments = $message->getAttachments();
                if ($response && $response->getNumAttachments())
                  $attachments = $attachments->merge($response->getAttachments());
            }
@@ -4183,7 +4185,7 @@ implements RestrictedAccess, Threadable, Searchable {
               if ($collabsBcc) {
                 foreach ($collabsBcc as $recipient) {
                   if (($tpl=$dept->getTemplate())
-                      && ($bccmsg=$tpl->getNewTicketNoticeMsgTemplate())
+                      && ($bccmsg=$tpl->getNewTicketNoticeBCCMsgTemplate())
                       && ($email=$dept->getEmail())
                   )
                   $extraVars = UsersName::getNameFormats($recipient, 'recipient');
diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php
index 277714d5b701b9bfb22ecc8a83c5a2c5fceceaea..17b9891b90dba383df6180102ac49e0da28b7778 100644
--- a/include/staff/ticket-open.inc.php
+++ b/include/staff/ticket-open.inc.php
@@ -10,13 +10,13 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
 //  Use thread entry to seed the ticket
 if (!$user && $_GET['tid'] && ($entry = ThreadEntry::lookup($_GET['tid']))) {
     if ($entry->getThread()->getObjectType() == 'T')
-      $oldTicket = Ticket::lookup($entry->getThread()->getObjectId());
+      $oldTicketId = $entry->getThread()->getObjectId();
     if ($entry->getThread()->getObjectType() == 'A')
-      $oldTask = Task::lookup($entry->getThread()->getObjectId());
+      $oldTaskId = $entry->getThread()->getObjectId();
 
     $_SESSION[':form-data']['message'] = Format::htmlchars($entry->getBody());
-    $_SESSION[':form-data']['ticket'] = $oldTicket;
-    $_SESSION[':form-data']['task'] = $oldTask;
+    $_SESSION[':form-data']['ticketId'] = $oldTicketId;
+    $_SESSION[':form-data']['taskId'] = $oldTaskId;
     $_SESSION[':form-data']['eid'] = $entry->getId();
     $_SESSION[':form-data']['timestamp'] = $entry->getCreateDate();
 
@@ -349,7 +349,7 @@ if ($_POST)
         <tbody id="dynamic-form">
         <?php
             foreach ($forms as $form) {
-                print $form->getForm()->getMedia();
+                print $form->getForm($_SESSION[':form-data'])->getMedia();
                 include(STAFFINC_DIR .  'templates/dynamic-form.tmpl.php');
             }
         ?>
diff --git a/scp/js/thread.js b/scp/js/thread.js
index 0b4ebe50213763d035bd4df033856d6c51fe2241..bb67ca4ce868d7ea865c4aa5972f184836aa3c2c 100644
--- a/scp/js/thread.js
+++ b/scp/js/thread.js
@@ -159,7 +159,10 @@ var thread = {
         }
 
         // Open thread body links in a new tab/window
+        // unless referring to thread entry on current page
         $('div.thread-body a', $container).each(function() {
+          var str = this.toString();
+          if (!str.includes('#entry-'))
             $(this).attr('target', '_blank');
         });