diff --git a/include/class.queue.php b/include/class.queue.php
index 1606e99f1458c75c947c3445c0aacfdade125dc9..ac8fd33811445ade63539804b372ab48b56636d6 100644
--- a/include/class.queue.php
+++ b/include/class.queue.php
@@ -560,7 +560,8 @@ class CustomQueue extends VerySimpleModel {
     }
 
     function getStatus() {
-        return 'bogus';
+        return $this->hasFlag(self::FLAG_DISABLED)
+            ? __('Disabled') : __('Active');
     }
 
     function getChildren() {
@@ -768,6 +769,13 @@ class CustomQueue extends VerySimpleModel {
             : $this->clearFlag($flag);
     }
 
+    function disable() {
+        $this->setFlag(self::FLAG_DISABLED);
+    }
+
+    function enable() {
+        $this->clearFlag(self::FLAG_DISABLED);
+    }
 
     function update($vars, &$errors=array()) {
         // Set basic search information
diff --git a/include/i18n/en_US/queue.yaml b/include/i18n/en_US/queue.yaml
index 678575ba2846e5de8e35efca2e70e785fa253e4b..901de736209dcf18725836fd72a4ba67eae11b01 100644
--- a/include/i18n/en_US/queue.yaml
+++ b/include/i18n/en_US/queue.yaml
@@ -13,7 +13,7 @@
 # flags:
 #   0x01:   FLAG_PUBLIC
 #   0x02:   FLAG_QUEUE (should be set for everything here)
-#   0x04:   FLAG_CONTAINER (should be set for top-level queues)
+#   0x04:   FLAG_DISABLED
 #   0x08:   FLAG_INHERIT (inherit criteria from parent)
 #   0x10:   FLAG_INHERIT_COLUMNS
 #   0x20:   FLAG_INHERIT_SORTING
diff --git a/include/staff/queues-ticket.inc.php b/include/staff/queues-ticket.inc.php
index 77efa54d8ce0295e1b7f29d693e8a682b9d59344..f23f2e9fe4440c40d8ae2d2c789a9a8263bb0814 100644
--- a/include/staff/queues-ticket.inc.php
+++ b/include/staff/queues-ticket.inc.php
@@ -8,19 +8,19 @@
             <div id="action-dropdown-more" class="action-dropdown anchor-right">
                 <ul id="actions">
                     <li>
-                        <a class="confirm" data-name="enable" href="queues.php?t=tickets&amp;a=enable">
+                        <a class="queue-action no-pjax" data-action="enable" href="#queues.php">
                             <i class="icon-ok-sign icon-fixed-width"></i>
                             <?php echo __( 'Enable'); ?>
                         </a>
                     </li>
                     <li>
-                        <a class="confirm" data-name="disable" href="queues.php?t=tickets&amp;a=disable">
+                        <a class="queue-action no-pjax" data-action="disable" href="#queues.php">
                             <i class="icon-ban-circle icon-fixed-width"></i>
                             <?php echo __( 'Disable'); ?>
                         </a>
                     </li>
                     <li class="danger">
-                        <a class="confirm" data-name="delete" href="queues.php?t=tickets&amp;a=delete#queues">
+                        <a class="queue-action no-pjax" data-action="delete" href="#queues.php">
                             <i class="icon-trash icon-fixed-width"></i>
                             <?php echo __( 'Delete'); ?>
                         </a>
@@ -28,12 +28,11 @@
                 </ul>
             </div>
         </div>
+        <input type="hidden" name="do" value="mass_process" />
         <h3><?php echo __('Ticket Queues');?></h3>
     </div>
     <div class="clear"></div>
  <?php csrf_token(); ?>
- <input type="hidden" name="do" value="mass_process" >
- <input type="hidden" id="action" name="a" value="" >
  <table class="list" border="0" cellspacing="1" cellpadding="0" width="940">
     <thead>
         <tr>
@@ -55,7 +54,7 @@ $emitLevel = function($queues, $level=0) use ($all_queues, &$emitLevel) {
         <td colspan="<?php echo max(1, $level); ?>"></td>
 <?php } ?>
         <td>
-          <input type="checkbox" class="checkbox" name="ckb[]">
+          <input type="checkbox" class="mass checkbox" value="<?php echo $q->id; ?>" />
           <input type="hidden" name="qsort[<?php echo $q->id; ?>]"
             value="<?php echo $q->sort; ?>"/>
         </td>
@@ -80,3 +79,36 @@ $emitLevel($all_queues->findAll(array('parent_id' => 0)));
 ?>
     </tbody>
 </table>
+
+<script>
+$(function() {
+  var goBaby = function(action) {
+    var ids = [], that = this,
+        $form = $(this).closest('form');
+    $('input:checkbox.mass:checked', $form).each(function() {
+      ids.push($(this).val());
+    });
+    if (ids.length) {
+      $.confirm(__('You sure?')).then(function() {
+        $.each(ids, function() { $form.append($('<input type="hidden" name="ids[]">').val(this)); });
+        $form.append($('<input type="hidden" name="a" />')
+          .val($(that).data('action')));
+        $form.append($('<input type="hidden" name="count" />')
+          .val(ids.length));
+        $form.attr('action', action);
+        // I don't know why, but submitting the form doesn't work...
+        $form.find('[type=submit]').trigger('click');
+      });
+    }
+    else {
+      $.sysAlert(__('Oops'),
+        __('You need to select at least one item'));
+    }
+  };
+  $(document).on('click', 'a.queue-action', function(e) {
+    e.preventDefault();
+    goBaby.call(this, $(this).attr('href').substr(1));
+    return false;
+  });
+});
+</script>
diff --git a/scp/js/scp.js b/scp/js/scp.js
index 780b038fa55bbdbc18011838e090e36c8f9bd68f..fb2a6428a9c8e1884186968236b252f9a197eda7 100644
--- a/scp/js/scp.js
+++ b/scp/js/scp.js
@@ -163,8 +163,8 @@ var scp_prep = function() {
 
     $('form.save, form:has(table.list)').submit(function() {
         $(window).unbind('beforeunload');
-        $('#overlay, #loading').show();
-        return true;
+        $.toggleOverlay(true);
+        $('#loading').show();
      });
 
     $('select#tpl_options').change(function() {
diff --git a/scp/queues.php b/scp/queues.php
index ac9efb966984e5682b347b5b945c9b47b384e4e1..5c41f79d43b166f700c05bbcbf134284e6551f88 100644
--- a/scp/queues.php
+++ b/scp/queues.php
@@ -54,6 +54,40 @@ if ($_POST) {
                 __('this queue'));
         }
         break;
+
+    case 'mass_process':
+        $updated = 0;
+        foreach (CustomQueue::objects()
+            ->filter(['id__in' => $_POST['ids']]) as $queue
+        ) {
+            switch ($_POST['a']) {
+            case 'enable':
+                $queue->enable();
+                if ($queue->save()) $updated++;
+                break;
+            case 'disable':
+                $queue->disable();
+                if ($queue->save()) $updated++;
+                break;
+            case 'delete':
+                if ($queue->delete()) $updated++;
+            }
+        }
+        if (!$updated) {
+            Messages::error(__(
+                'Unable to manage any of the selected queues'));
+        }
+        elseif ($_POST['count'] && $updated != $_POST['count']) {
+            Messages::warning(__(
+                'Not all selected items were updated'));
+        }
+        elseif ($updated) {
+            Messages::success(__(
+                'Successfully managed selected queues'));
+        }
+
+        // TODO: Consider redirecting based on the queue root
+        Http::redirect('settings.php?t=tickets#queues');
     }
 }
 
diff --git a/scp/tickets.php b/scp/tickets.php
index 5564c226ec135f2e9268878d29dbca1fa5885bbc..0c8f0b98fcb5c94d97e8e027d6cdd19576dbe42b 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -437,6 +437,7 @@ $queues = CustomQueue::queues()
         'flags__hasbit' => CustomQueue::FLAG_PUBLIC,
         'staff_id' => $thisstaff->getId(),
     )))
+    ->exclude(['flags__hasbit' => CustomQueue::FLAG_DISABLED])
     ->getIterator();
 
 // Start with all the top-level (container) queues