diff --git a/include/class.ticket.php b/include/class.ticket.php
index c652f8f3fed5a8fde306ce5b2e5a6e37c83e517b..692c6e53ee0315691871461b499020baa1d1636c 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -728,6 +728,7 @@ class Ticket {
 
         $this->reload();
         $this->logEvent('closed');
+        $this->deleteDrafts();
 
         return true;
     }
@@ -1676,9 +1677,15 @@ class Ticket {
         foreach (DynamicFormEntry::forTicket($this->getId()) as $form)
             $form->delete();
 
+        $this->deleteDrafts();
+
         return true;
     }
 
+    function deleteDrafts() {
+        Draft::deleteForNamespace('ticket.%.' . $this->getId());
+    }
+
     function update($vars, &$errors) {
 
         global $cfg, $thisstaff;
diff --git a/scp/tickets.php b/scp/tickets.php
index 1058b80d95f67fed03e39c191292f76e5c8b2774..c55c4f27f8fe97709b61997277a5a65de7e5d5d8 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -70,13 +70,13 @@ if($_POST && !$errors):
                 $msg='Reply posted successfully';
                 $ticket->reload();
 
-                // Cleanup drafts for the ticket. If not closed, only clean
-                // for this staff. Else clean all drafts for the ticket.
-                Draft::deleteForNamespace('ticket.%.' . $ticket->getId(),
-                    $ticket->isClosed() ? false : $thisstaff->getId());
-
                 if($ticket->isClosed() && $wasOpen)
                     $ticket=null;
+                else
+                    // Still open -- cleanup response draft for this user
+                    Draft::deleteForNamespace(
+                        'ticket.response.' . $ticket->getId(),
+                        $thisstaff->getId());
 
             } elseif(!$errors['err']) {
                 $errors['err']='Unable to post the reply. Correct the errors below and try again!';
@@ -174,17 +174,13 @@ if($_POST && !$errors):
             $wasOpen = ($ticket->isOpen());
             if(($note=$ticket->postNote($vars, $errors, $thisstaff))) {
 
-                // Cleanup drafts for the ticket. If not closed, only clean
-                // note drafts for this staff. Else clean all drafts for the ticket.
-                Draft::deleteForNamespace(
-                        sprintf('ticket.%s.%d',
-                              $ticket->isClosed() ? '%' : 'note',
-                              $ticket->getId()),
-                        $ticket->isOpen() ? $thisstaff->getId() : false);
-
                 $msg='Internal note posted successfully';
                 if($wasOpen && $ticket->isClosed())
                     $ticket = null; //Going back to main listing.
+                else
+                    // Ticket is still open -- clear draft for the note
+                    Draft::deleteForNamespace('ticket.note.'.$ticket->getId(),
+                        $thisstaff->getId());
 
             } else {