diff --git a/WHATSNEW.md b/WHATSNEW.md
index b361dbc8968dd394620a8842b4133bdb827ae104..14a69ee57592b1d29ef6f1e0355f23fe054c9eb2 100644
--- a/WHATSNEW.md
+++ b/WHATSNEW.md
@@ -1,3 +1,56 @@
+osTicket v1.8.1.3
+=================
+### Enhancements
+  * Support filtering based on help topic (#728)
+  * Embedded images ([rfc2397](http://www.ietf.org/rfc/rfc2397.txt)) are correctly supported (#740)
+  * Allow regular staff members to show assigned open tickets on open queue (#751)
+  * Support Handle [rfc1892](http://www.ietf.org/rfc/rfc1892.txt) style bounce notices (#871)
+  * Disable autocomplete on CAPTCHA fields (#821)
+  * Show `closed` date on the closed ticket queue (#865)
+  * Departments support assignment to members only (#862)
+  * Department email selection is optional (#862)
+
+### Bugs
+  * Fix error output on some systems if the `i18n` folder is not readable (#714)
+  * Fix possible crash if an email has no body (#707)
+  * Fix errors in download hash generation (#743)
+  * Support two-character file extensions (#719)
+  * Fix inline images with an invalid content id (#708)
+  * Remove confusing false-positive banner and admin email for client login (#763, #765)
+  * Fix detection of inline images without a `cid:` URL scheme (#779)
+  * Fix crash sending fatal alert email (bdfb2f1)
+  * Fix partial corruption of HTML @style attributes (#784)
+  * Fix several CSS styles for the staff interface (#785)
+  * Properly clear department selection from other settings on deletion (#792)
+  * Users with ticket-edit rights can see the "Change Owner" option in the more drop-down (#799)
+  * Links to new osTicket site are now correct (#808)
+  * Fix incorrect ticket count on simple ticket search (#809)
+  * Fix attachment size detection on systems with `mbstring.func_overload` set (#811)
+  * Fix horribly incorrect TNEF stream parsing (#825)
+  * Fix incorrect SQL query searching staff directory (91d65d9)
+  * Properly trim user input for ban list entries (#837)
+  * Ticket assignment alert can be disabled (#839)
+  * Preserve newlines in long answer form fields (with HTML disabled) (a04c5e7)
+  * Fix javascript error on form submission with empty date picker field (0013b40)
+  * Fix images in message portion of the new ticket notice to end user (#842)
+  * Send new internal note alert to assigned team members (#858)
+  * Properly strip leading and trailing whitespace from text/plain emails (fa7a025)
+  * Fix incorrect default template for ticket auto responses (97d6e25)
+  * Canned responses can be disabled (120d90b)
+  * Don't corrupt filters with selected, disabled teams, SLAs (120d90b)
+  * Fix crash sending some alert emails (efa7311)
+  * Fix HTML scrubbing with some content-ids (efa7311, eb5861f)
+  * Squelch E_WARN from ContentAjaxAPI::getSignature (ed33d06)
+  * `@localhost` is *not* a valid email address (f40c018)
+  * Fix `web.config` for newly patched IIS setups (78a47c2)
+  * Honor disabled assignment alerts for teams (#894)
+  * Send out internal note alerts to assigned staff (and Team) if Agent closes the ticket with the note (#903)
+
+### Performance and Security
+  * Fix cross site scripting (XSS) vulnerability in thread entry widget (9916214)
+  * Mail parsing uses significantly less memory (#861)
+
+
 osTicket v1.8.1.2
 =================
 * All fixes and enhancements from v1.8.0.4, plus *
diff --git a/include/ajax.content.php b/include/ajax.content.php
index 1703ba28e4f4b7d4a91687f9e8d6c6aa7ab9725f..3126c28e2fa34c479c62a69e07e3da8f311bc12a 100644
--- a/include/ajax.content.php
+++ b/include/ajax.content.php
@@ -103,7 +103,7 @@ class ContentAjaxAPI extends AjaxController {
         return $content;
     }
 
-    function getSignature($type, $id) {
+    function getSignature($type, $id=null) {
         global $thisstaff;
 
         if (!$thisstaff)
diff --git a/include/class.team.php b/include/class.team.php
index 2d79a987f70260e4778a349d946f8d80bfb6c443..21280bd0efdc19152a7f3b95be15d394797a8c00 100644
--- a/include/class.team.php
+++ b/include/class.team.php
@@ -126,6 +126,10 @@ class Team {
         return $this->isEnabled();
     }
 
+    function alertsEnabled() {
+        return !$this->ht['noalerts'];
+    }
+
     function update($vars, &$errors) {
 
         //reset team lead if they're being deleted
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 27e293523ba0689f7106e544f8f375e6e0a8bce4..e70b25dec2e8b760cb7eb1530d2d3c407a2c6bc6 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -1145,18 +1145,19 @@ class Ticket {
 
         //recipients
         $recipients=array();
-        if(!strcasecmp(get_class($assignee), 'Staff')) {
-            if($cfg->alertStaffONAssignment())
+        if ($assignee instanceof Staff) {
+            if ($cfg->alertStaffONAssignment())
                 $recipients[] = $assignee;
-        } elseif(!strcasecmp(get_class($assignee), 'Team')) {
-            if($cfg->alertTeamMembersONAssignment() && ($members=$assignee->getMembers()))
+        } elseif (($assignee instanceof Team) && $assignee->alertsEnabled()) {
+            if ($cfg->alertTeamMembersONAssignment() && ($members=$assignee->getMembers()))
                 $recipients = array_merge($recipients, $members);
-            elseif($cfg->alertTeamLeadONAssignment() && ($lead=$assignee->getTeamLead()))
+            elseif ($cfg->alertTeamLeadONAssignment() && ($lead=$assignee->getTeamLead()))
                 $recipients[] = $lead;
         }
 
         //Get the message template
-        if($recipients && ($msg=$tpl->getAssignedAlertMsgTemplate())) {
+        if ($recipients
+                && ($msg=$tpl->getAssignedAlertMsgTemplate())) {
 
             $msg = $this->replaceVars($msg->asArray(),
                         array('comments' => $comments,
@@ -1846,6 +1847,9 @@ class Ticket {
             // No alerts for bounce emails
             $alert = false;
 
+        // Get assigned staff just in case the ticket is closed.
+        $assignee = $this->getStaff();
+
         //Set state: Error on state change not critical!
         if(isset($vars['state']) && $vars['state']) {
             if($this->setState($vars['state']))
@@ -1867,31 +1871,41 @@ class Ticket {
             $recipients=array();
 
             //Last respondent.
-            if($cfg->alertLastRespondentONNewNote())
-                $recipients[]=$this->getLastRespondent();
+            if ($cfg->alertLastRespondentONNewNote())
+                $recipients[] = $this->getLastRespondent();
+
+            // Assigned staff / team
+            if ($cfg->alertAssignedONNewNote()) {
+
+                if ($assignee && $assignee instanceof Staff)
+                    $recipients[] = $assignee;
 
-            //Assigned staff if any...could be the last respondent
-            if($cfg->alertAssignedONNewNote() && $this->isAssigned()) {
-                if ($staff = $this->getStaff())
-                    $recipients[] = $staff;
                 if ($team = $this->getTeam())
                     $recipients = array_merge($recipients, $team->getMembers());
             }
 
-            //Dept manager
-            if($cfg->alertDeptManagerONNewNote() && $dept && $dept->getManagerId())
-                $recipients[]=$dept->getManager();
+            // Dept manager
+            if ($cfg->alertDeptManagerONNewNote() && $dept && $dept->getManagerId())
+                $recipients[] = $dept->getManager();
 
             $options = array(
                 'inreplyto'=>$note->getEmailMessageId(),
                 'references'=>$note->getEmailReferences(),
                 'thread'=>$note);
+
+            $isClosed = $this->isClosed();
             $sentlist=array();
             foreach( $recipients as $k=>$staff) {
                 if(!is_object($staff)
-                        || !$staff->isAvailable() //Don't bother vacationing staff.
-                        || isset($sentlist[$staff->getEmail()]) //No duplicates.
-                        || $note->getStaffId() == $staff->getId())  //No need to alert the poster!
+                        // Don't bother vacationing staff.
+                        || !$staff->isAvailable()
+                        // No duplicates.
+                        || isset($sentlist[$staff->getEmail()])
+                        // No need to alert the poster!
+                        || $note->getStaffId() == $staff->getId()
+                        // Make sure staff has access to ticket
+                        || ($isClosed && !$this->checkStaffAccess($staff))
+                        )
                     continue;
                 $alert = $this->replaceVars($msg, array('recipient' => $staff));
                 $email->sendAlert($staff->getEmail(), $alert['subj'], $alert['body'], null, $options);
diff --git a/web.config b/web.config
index ee754443fd21e93c111e2cd962fd019ded871c30..19eb76ef3acecaa61690919e7ec6812f156f2af5 100644
--- a/web.config
+++ b/web.config
@@ -1,15 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
 
-    <configSections>
-        <sectionGroup name="system.webServer">
-            <sectionGroup name="rewrite">
-                <section name="rewriteMaps" overrideModeDefault="Allow" />
-                <section name="rules" overrideModeDefault="Allow" />
-            </sectionGroup>
-        </sectionGroup>
-    </configSections>
-
     <system.webServer>
         <directoryBrowse enabled="false" />
         <rewrite>