diff --git a/include/class.ticket.php b/include/class.ticket.php
index 14e49a9e3bd1bcd17e5ec3a3e82d575c8696ce15..50e8173611715153187190c253ea98aec2a77759 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -1628,7 +1628,7 @@ class Ticket {
     }
 
     //Insert Internal Notes
-    function logNote($title, $note, $poster, $alert=true) {
+    function logNote($title, $note, $poster='SYSTEM', $alert=true) {
 
         return $this->postNote(
                 array('title' => $title, 'note' => $note),
diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php
index b5b1a4b795c4f8f506c264547c8859ef0276daf1..c7a479cba2640495a256267718ba43780794cb9e 100644
--- a/include/staff/tickets.inc.php
+++ b/include/staff/tickets.inc.php
@@ -301,6 +301,7 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting..
 <?php csrf_token(); ?>
  <a class="refresh" href="<?php echo $_SERVER['REQUEST_URI']; ?>">Refresh</a>
  <input type="hidden" name="a" value="mass_process" >
+ <input type="hidden" name="do" id="action" value="" >
  <input type="hidden" name="status" value="<?php echo $status; ?>" >
  <table class="list" border="0" cellspacing="1" cellpadding="2" width="940">
     <caption><?php echo $showing; ?>&nbsp;&nbsp;&nbsp;<?php echo $results_type; ?></caption>
@@ -386,7 +387,7 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting..
             <tr id="<?php echo $row['ticket_id']; ?>">
                 <?php if($thisstaff->canManageTickets()) { ?>
                 <td align="center" class="nohover">
-                    <input type="checkbox" name="tids[]" value="<?php echo $row['ticket_id']; ?>" onClick="highLight(this.value,this.checked);">
+                    <input class="ckb" type="checkbox" name="tids[]" value="<?php echo $row['ticket_id']; ?>">
                 </td>
                 <?php } ?>
                 <td align="center" title="<?php echo $row['email']; ?>" nowrap>
@@ -423,11 +424,11 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting..
     <tfoot>
      <tr>
         <td colspan="7">
-            <?php if($res && $num){ ?>
+            <?php if($res && $num && $thisstaff->canManageTickets()){ ?>
             Select:&nbsp;
-            <a href="#" onclick="return select_all(document.forms['tickets'],true)">All</a>&nbsp;&nbsp;
-            <a href="#" onclick="return reset_all(document.forms['tickets'])">None</a>&nbsp;&nbsp;
-            <a href="#" onclick="return toogle_all(document.forms['tickets'],true)">Toggle</a>&nbsp;&nbsp;
+            <a id="selectAll" href="#ckb">All</a>&nbsp;&nbsp;
+            <a id="selectNone" href="#ckb">None</a>&nbsp;&nbsp;
+            <a id="selectToggle" href="#ckb">Toggle</a>&nbsp;&nbsp;
             <?php }else{
                 echo '<i>';
                 echo $ferror?Format::htmlchars($ferror):'Query returned 0 results.';
@@ -445,36 +446,30 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting..
     ?>
         <?php
          if($thisstaff->canManageTickets()) { ?>
-           <p class="centered">  
+           <p class="centered" id="buttons">  
             <?php
             $status=$_REQUEST['status']?$_REQUEST['status']:$status;
             switch (strtolower($status)) {
                 case 'closed': ?>
-                    <input class="button" type="submit" name="reopen" value="Reopen"
-                        onClick=' return confirm("Are you sure you want to reopen selected tickets?");'>
+                    <input class="button" type="submit" name="reopen" value="Reopen" >
                     <?php
                     break;
                 case 'open':
                 case 'answered':
                 case 'assigned':
                     ?>
-                    <input class="button" type="submit" name="overdue" value="Overdue"
-                        onClick=' return confirm("Are you sure you want to mark selected tickets overdue/stale?");'>
-                    <input class="button" type="submit" name="close" value="Close"
-                        onClick=' return confirm("Are you sure you want to close selected tickets?");'>
+                    <input class="button" type="submit" name="mark_overdue" value="Overdue" >
+                    <input class="button" type="submit" name="close" value="Close">
                     <?php
                     break;
                 default: //search??
                     ?>
-                    <input class="button" type="submit" name="close" value="Close"
-                        onClick=' return confirm("Are you sure you want to close selected tickets?");'>
-                    <input class="button" type="submit" name="reopen" value="Reopen"
-                        onClick=' return confirm("Are you sure you want to reopen selected tickets?");'>
+                    <input class="button" type="submit" name="close" value="Close" >
+                    <input class="button" type="submit" name="reopen" value="Reopen">
             <?php
             }
             if($thisstaff->canDeleteTickets()) { ?>
-                <input class="button" type="submit" name="delete" value="Delete" 
-                    onClick=' return confirm("Are you sure you want to DELETE selected tickets?");'>
+                <input class="button" type="submit" name="delete" value="Delete">
             <?php } ?>
         </p>
         <?php
@@ -483,6 +478,36 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting..
     </form>
 </div>
 
+<div style="display:none;" class="dialog" id="confirm-action">
+    <h3>Please Confirm</h3>
+    <a class="close" href="">&times;</a>
+    <hr/>
+    <p class="confirm-action" style="display:none;" id="close-confirm">
+        Are you sure want to <b>close</b> selected open tickets?
+    </p>
+    <p class="confirm-action" style="display:none;" id="reopen-confirm">
+        Are you sure want to <b>reopen</b> selected closed tickets?
+    </p>
+    <p class="confirm-action" style="display:none;" id="mark_overdue-confirm">
+        Are you sure want to flag the selected tickets as <font color="red"><b>overdue</b></font>?
+    </p>
+    <p class="confirm-action" style="display:none;" id="delete-confirm">
+        <font color="red"><strong>Are you sure you want to DELETE selected tickets?</strong></font>
+        <br><br>Deleted tickets CANNOT be recovered, including any associated attachments.
+    </p>
+    <div>Please confirm to continue.</div>
+    <hr style="margin-top:1em"/>
+    <p class="full-width">
+        <span class="buttons" style="float:left">
+            <input type="button" value="No, Cancel" class="close">
+        </span>
+        <span class="buttons" style="float:right">
+            <input type="button" value="Yes, Do it!" class="confirm">
+        </span>
+     </p>
+    <div class="clear"></div>
+</div>
+
 <div class="dialog" style="display:none;" id="advanced-search">
     <h3>Advanced Ticket Search</h3>
     <a class="close" href="">&times;</a>
diff --git a/scp/tickets.php b/scp/tickets.php
index b2a13ceae914b2a45be39417ef199a21cf7aa719..3cf3aeae0e3327f2f3d64493a5b1a1bb8197a0e7 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -324,62 +324,91 @@ if($_POST && !$errors):
         if($ticket && is_object($ticket))
             $ticket->reload();//Reload ticket info following post processing
     }elseif($_POST['a']) {
+
         switch($_POST['a']) {
             case 'mass_process':
                 if(!$thisstaff->canManageTickets())
                     $errors['err']='You do not have permission to mass manage tickets. Contact admin for such access';    
                 elseif(!$_POST['tids'] || !is_array($_POST['tids']))
                     $errors['err']='No tickets selected. You must select at least one ticket.';
-                elseif(($_POST['reopen'] || $_POST['close']) && !$thisstaff->canCloseTickets())
-                    $errors['err']='You do not have permission to close/reopen tickets';
-                elseif($_POST['delete'] && !$thisstaff->canDeleteTickets())
-                    $errors['err']='You do not have permission to delete tickets';
-                elseif(!$_POST['tids'] || !is_array($_POST['tids']))
-                    $errors['err']='You must select at least one ticket';
-        
-                if(!$errors) {
+                else {
                     $count=count($_POST['tids']);
-                    if(isset($_POST['reopen'])){
-                        $i=0;
-                        $note='Ticket reopened by '.$thisstaff->getName();
-                        foreach($_POST['tids'] as $k=>$v) {
-                            $t = new Ticket($v);
-                            if($t && @$t->reopen()) {
-                                $i++;
-                                $t->logActivity('Ticket Reopened',$note,false,'System');
+                    $i = 0;
+                    switch(strtolower($_POST['do'])) {
+                        case 'reopen':
+                            if($thisstaff->canCloseTickets() || $thisstaff->canCreateTickets()) {
+                                $note='Ticket reopened by '.$thisstaff->getName();
+                                foreach($_POST['tids'] as $k=>$v) {
+                                    if(($t=Ticket::lookup($v)) && $t->isClosed() && @$t->reopen()) {
+                                        $i++;
+                                        $t->logNote('Ticket Reopened', $note);
+                                    }
+                                }
+
+                                if($i==$count)
+                                    $msg = "Selected tickets ($i) reopened successfully";
+                                else
+                                    $warn = "$i of $count selected tickets reopened";
+                            } else {
+                                $errors['err'] = 'You do not have permission to reopen tickets';
                             }
-                        }
-                        $msg="$i of $count selected tickets reopened";
-                    }elseif(isset($_POST['close'])){
-                        $i=0;
-                        $note='Ticket closed without response by '.$thisstaff->getName();
-                        foreach($_POST['tids'] as $k=>$v) {
-                            $t = new Ticket($v);
-                            if($t && @$t->close()){ 
-                                $i++;
-                                $t->logActivity('Ticket Closed',$note,false,'System');
+                            break;
+                        case 'close':
+                            if($thisstaff->canCloseTickets()) {
+                                $note='Ticket closed without response by '.$thisstaff->getName();
+                                foreach($_POST['tids'] as $k=>$v) {
+                                    if(($t=Ticket::lookup($v)) && $t->isOpen() && @$t->close()) { 
+                                        $i++;
+                                        $t->logNote('Ticket Closed', $note);
+                                    }
+                                }
+
+                                if($i==$count)
+                                    $msg ="Selected tickets ($i) closed succesfully";
+                                else
+                                    $warn = "$i of $count selected tickets closed";
+                            } else {
+                                $errors['err'] = 'You do not have permission to close tickets';
                             }
-                        }
-                        $msg="$i of $count selected tickets closed";
-                    }elseif(isset($_POST['overdue'])){
-                        $i=0;
-                        $note='Ticket flagged as overdue by '.$thisstaff->getName();
-                        foreach($_POST['tids'] as $k=>$v) {
-                            $t = new Ticket($v);
-                            if($t && !$t->isOverdue())
-                                if($t->markOverdue()) { 
+                            break;
+                        case 'mark_overdue':
+                            $note='Ticket flagged as overdue by '.$thisstaff->getName();
+                            foreach($_POST['tids'] as $k=>$v) {
+                                if(($t=Ticket::lookup($v)) && !$t->isOverdue() && $t->markOverdue()) {
                                     $i++;
-                                    $t->logActivity('Ticket Marked Overdue',$note,false,'System');
+                                    $t->logNote('Ticket Marked Overdue', $note);
+                                }
+                            }
+
+                            if($i==$count)
+                                $msg = "Selected tickets ($i) marked overdue";
+                            else
+                                $warn = "$i of $count selected tickets marked overdue";
+                            break;
+                        case 'delete':
+                            if($thisstaff->canDeleteTickets()) {
+                                foreach($_POST['tids'] as $k=>$v) {
+                                    if(($t=Ticket::lookup($v)) && @$t->delete()) $i++;
                                 }
-                        }
-                        $msg="$i of $count selected tickets marked overdue";
-                    }elseif(isset($_POST['delete'])){
-                        $i=0;
-                        foreach($_POST['tids'] as $k=>$v) {
-                            $t = new Ticket($v);
-                            if($t && @$t->delete()) $i++;
-                        }
-                        $msg="$i of $count selected tickets deleted";
+                        
+                                //Log a warning
+                                if($i) {
+                                    $log = sprintf('%s (%s) just deleted %d ticket(s)',
+                                            $thisstaff->getName(), $thisstaff->getUserName(), $i);
+                                    $ost->logWarning('Tickets deleted', $log, false);
+
+                                }
+
+                                if($i==$count)
+                                    $msg = "Selected tickets ($i) deleted successfully";
+                                else
+                                    $warn = "$i of $count selected tickets deleted";
+                            } else {
+                                $errors['err'] = 'You do not have permission to delete tickets';
+                            }
+                            break;
+                        default:
+                            $errors['err']='Unknown or unsupported action - get technical help';
                     }
                 }
                 break;