diff --git a/js/collapsible-div.js b/js/collapsible-div.js
index 363345c..da9bff9 100644
--- a/js/collapsible-div.js
+++ b/js/collapsible-div.js
@@ -232,11 +232,9 @@
   /**
    * Support Drupal's 'behaviors' system for binding.
    */
-  Drupal.behaviors.CToolsCollapsible = { 
+  Drupal.behaviors.CToolsCollapsible = {
     attach: function(context) {
-      $('.ctools-collapsible-container:not(.ctools-collapsible-processed)', context)
-        .each(Drupal.CTools.bindCollapsible)
-        .addClass('ctools-collapsible-processed');
+      $('.ctools-collapsible-container', context).once('ctools-collapsible', Drupal.CTools.bindCollapsible);
     }
   }
 })(jQuery);
diff --git a/js/dependent.js b/js/dependent.js
index cca3622..e70ea53 100644
--- a/js/dependent.js
+++ b/js/dependent.js
@@ -215,8 +215,8 @@
 
       // Really large sets of fields are too slow with the above method, so this
       // is a sort of hacked one that's faster but much less flexible.
-      $("select.ctools-master-dependent:not(.ctools-processed)")
-        .addClass('ctools-processed')
+      $("select.ctools-master-dependent")
+        .once('ctools')
         .change(function() {
           var val = $(this).val();
           if (val == 'all') {
@@ -227,7 +227,7 @@
             $('.ctools-dependent-' + val).show(0);
           }
         })
-        .trigger('change');
+      .trigger('change');
     }
   }
 })(jQuery);
diff --git a/js/dropbutton.js b/js/dropbutton.js
index 4dd20b0..49bc107 100644
--- a/js/dropbutton.js
+++ b/js/dropbutton.js
@@ -26,13 +26,12 @@
   Drupal.behaviors.CToolsDropbutton = {
     attach: function() {
       // Process buttons. All dropbuttons are buttons.
-      $('.ctools-button:not(.ctools-button-processed)')
-      .removeClass('ctools-no-js')
-      .addClass('ctools-button-processed');
+      $('.ctools-button')
+        .once('ctools-button')
+        .removeClass('ctools-no-js');
+
       // Process dropbuttons. Not all buttons are dropbuttons.
-      $('.ctools-dropbutton:not(.ctools-dropbutton-processed)')
-      .addClass('ctools-dropbutton-processed')
-      .each(function() {
+      $('.ctools-dropbutton').once('ctools-dropbutton', function() {
         var $dropbutton = $(this);
         var $button = $('.ctools-content', $dropbutton);
         var $secondaryActions = $('li', $button).not(':first');
diff --git a/js/dropdown.js b/js/dropdown.js
index 522f4d5..56da1d5 100644
--- a/js/dropdown.js
+++ b/js/dropdown.js
@@ -24,15 +24,14 @@
 (function ($) {
   Drupal.behaviors.CToolsDropdown = {
     attach: function() {
-      $('div.ctools-dropdown:not(.ctools-dropdown-processed)')
-        .removeClass('ctools-dropdown-no-js')
-        .addClass('ctools-dropdown-processed')
-        .each(function() {
+      $('div.ctools-dropdown').once('ctools-dropdown', function() {
           var $dropdown = $(this);
           var open = false;
           var hovering = false;
           var timerID = 0;
 
+          $dropdown.removeClass('ctools-dropdown-no-js');
+
           var toggle = function(close) {
             // if it's open or we're told to close it, close it.
             if (open || close) {
diff --git a/js/jump-menu.js b/js/jump-menu.js
index 6bd0af6..7b0928a 100644
--- a/js/jump-menu.js
+++ b/js/jump-menu.js
@@ -1,13 +1,13 @@
 
 (function($) {
-  Drupal.behaviors.CToolsJumpMenu = { 
+  Drupal.behaviors.CToolsJumpMenu = {
     attach: function(context) {
-      $('.ctools-jump-menu-hide:not(.ctools-jump-menu-processed)')
-        .addClass('ctools-jump-menu-processed')
+      $('.ctools-jump-menu-hide')
+        .once('ctools-jump-menu')
         .hide();
 
-      $('.ctools-jump-menu-change:not(.ctools-jump-menu-processed)')
-        .addClass('ctools-jump-menu-processed')
+      $('.ctools-jump-menu-change')
+        .once('ctools-jump-menu')
         .change(function() {
           var loc = $(this).val();
           var urlArray = loc.split('::');
@@ -20,8 +20,8 @@
           return false;
         });
 
-      $('.ctools-jump-menu-button:not(.ctools-jump-menu-processed)')
-        .addClass('ctools-jump-menu-processed')
+      $('.ctools-jump-menu-button')
+        .once('ctools-jump-menu')
         .click(function() {
           // Instead of submitting the form, just perform the redirect.
 
diff --git a/js/modal.js b/js/modal.js
index acb2227..fe23331 100644
--- a/js/modal.js
+++ b/js/modal.js
@@ -192,83 +192,70 @@
       // used together safely.
       /*
        * @todo remimplement the warm caching feature
-      $('a.ctools-use-modal-cache:not(.ctools-use-modal-processed)', context)
-        .addClass('ctools-use-modal-processed')
-        .click(Drupal.CTools.Modal.clickAjaxCacheLink)
-        .each(function () {
-          Drupal.CTools.AJAX.warmCache.apply(this);
-        });
+       $('a.ctools-use-modal-cache', context).once('ctools-use-modal', function() {
+         $(this).click(Drupal.CTools.Modal.clickAjaxCacheLink);
+         Drupal.CTools.AJAX.warmCache.apply(this);
+       });
         */
 
-      $('area.ctools-use-modal:not(.ctools-use-modal-processed), a.ctools-use-modal:not(.ctools-use-modal-processed)', context)
-        .addClass('ctools-use-modal-processed')
-        .click(Drupal.CTools.Modal.clickAjaxLink)
-        .each(function () {
-          // Create a drupal ajax object
-          var element_settings = {};
-          if ($(this).attr('href')) {
-            element_settings.url = $(this).attr('href');
-            element_settings.event = 'click';
-            element_settings.progress = { type: 'throbber' };
-          }
-          var base = $(this).attr('href');
-          Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
-
-          // Attach the display behavior to the ajax object
+      $('area.ctools-use-modal, a.ctools-use-modal', context).once('ctools-use-modal', function() {
+        $(this).click(Drupal.CTools.Modal.clickAjaxLink);
+        // Create a drupal ajax object
+        var element_settings = {};
+        if ($(this).attr('href')) {
+          element_settings.url = $(this).attr('href');
+          element_settings.event = 'click';
+          element_settings.progress = { type: 'throbber' };
         }
-      );
+        var base = $(this).attr('href');
+        Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
+      });
 
       // Bind buttons
-      $('input.ctools-use-modal:not(.ctools-use-modal-processed), button.ctools-use-modal:not(.ctools-use-modal-processed)', context)
-        .addClass('ctools-use-modal-processed')
-        .click(Drupal.CTools.Modal.clickAjaxLink)
-        .each(function() {
-          var button = this;
-          var element_settings = {};
-
-          // AJAX submits specified in this manner automatically submit to the
-          // normal form action.
-          element_settings.url = Drupal.CTools.Modal.findURL(this);
-          element_settings.event = 'click';
-
-          var base = $(this).attr('id');
-          Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
-
-          // Make sure changes to settings are reflected in the URL.
-          $('.' + $(button).attr('id') + '-url').change(function() {
-            Drupal.ajax[base].options.url = Drupal.CTools.Modal.findURL(button);
-          });
+      $('input.ctools-use-modal, button.ctools-use-modal', context).once('ctools-use-modal', function() {
+        $(this).click(Drupal.CTools.Modal.clickAjaxLink);
+        var button = this;
+        var element_settings = {};
+
+        // AJAX submits specified in this manner automatically submit to the
+        // normal form action.
+        element_settings.url = Drupal.CTools.Modal.findURL(this);
+        element_settings.event = 'click';
+
+        var base = $(this).attr('id');
+        Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
+
+        // Make sure changes to settings are reflected in the URL.
+        $('.' + $(button).attr('id') + '-url').change(function() {
+          Drupal.ajax[base].options.url = Drupal.CTools.Modal.findURL(button);
         });
+      });
 
       // Bind our custom event to the form submit
-      $('#modal-content form:not(.ctools-use-modal-processed)', context)
-        .addClass('ctools-use-modal-processed')
-        .each(function() {
-          var element_settings = {};
-
-          element_settings.url = $(this).attr('action');
-          element_settings.event = 'submit';
-          element_settings.progress = { 'type': 'throbber' }
-          var base = $(this).attr('id');
+      $('#modal-content form', context).once('ctools-use-modal', function() {
+        var element_settings = {};
 
-          Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
-          Drupal.ajax[base].form = $(this);
+        element_settings.url = $(this).attr('action');
+        element_settings.event = 'submit';
+        element_settings.progress = { 'type': 'throbber' }
+        var base = $(this).attr('id');
 
-          $('input[type=submit], button', this).click(function() {
-            Drupal.ajax[base].element = this;
-            this.form.clk = this;
-          });
+        Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
+        Drupal.ajax[base].form = $(this);
 
+        $('input[type=submit], button', this).click(function() {
+          Drupal.ajax[base].element = this;
+          this.form.clk = this;
         });
+      });
 
       // Bind a click handler to allow elements with the 'ctools-close-modal'
       // class to close the modal.
-      $('.ctools-close-modal', context).once('ctools-close-modal-processed', function () {
-        $(this).click(function() {
+      $('.ctools-close-modal', context).once('ctools-close-modal')
+        .click(function() {
           Drupal.CTools.Modal.dismiss();
           return false;
         });
-      });
     }
   };
 
