diff --git a/js/ajax-responder.js b/js/ajax-responder.js
index e244106..1cad618 100644
--- a/js/ajax-responder.js
+++ b/js/ajax-responder.js
@@ -88,10 +88,11 @@
     var url_class = '.' + $(item).attr('id') + '-url';
     $(url_class).each(
       function() {
-        if (url && $(this).val()) {
+        var $this = $(this);
+        if (url && $this.val()) {
           url += '/';
         }
-        url += $(this).val();
+        url += $this.val();
       });
     return url;
   };
diff --git a/js/auto-submit.js b/js/auto-submit.js
index bc5a58e..59178c4 100644
--- a/js/auto-submit.js
+++ b/js/auto-submit.js
@@ -30,8 +30,9 @@ Drupal.behaviors.CToolsAutoSubmit = {
   attach: function(context) {
     // 'this' references the form element
     function triggerSubmit (e) {
-      if (!$(this).hasClass('ctools-ajaxing')) {
-        $(this).find('.ctools-auto-submit-click').click();
+      var $this = $(this);
+      if (!$this.hasClass('ctools-ajaxing')) {
+        $this.find('.ctools-auto-submit-click').click();
       }
     }
 
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..0c9b105 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-dependent')
         .change(function() {
           var val = $(this).val();
           if (val == 'all') {
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..c829ae2 100644
--- a/js/dropdown.js
+++ b/js/dropdown.js
@@ -24,50 +24,50 @@
 (function ($) {
   Drupal.behaviors.CToolsDropdown = {
     attach: function() {
-      $('div.ctools-dropdown:not(.ctools-dropdown-processed)')
-        .removeClass('ctools-dropdown-no-js')
-        .addClass('ctools-dropdown-processed')
-        .each(function() {
-          var $dropdown = $(this);
-          var open = false;
-          var hovering = false;
-          var timerID = 0;
+      $('div.ctools-dropdown').once('ctools-dropdown', function() {
+        var $dropdown = $(this);
+        var open = false;
+        var hovering = false;
+        var timerID = 0;
 
-          var toggle = function(close) {
-            // if it's open or we're told to close it, close it.
-            if (open || close) {
-              // If we're just toggling it, close it immediately.
-              if (!close) {
-                open = false;
-                $("div.ctools-dropdown-container", $dropdown).slideUp(100);
-              }
-              else {
-                // If we were told to close it, wait half a second to make
-                // sure that's what the user wanted.
-                // Clear any previous timer we were using.
-                if (timerID) {
-                  clearTimeout(timerID);
-                }
-                timerID = setTimeout(function() {
-                  if (!hovering) {
-                    open = false;
-                    $("div.ctools-dropdown-container", $dropdown).slideUp(100);
-                  }}, 500);
-              }
+        $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) {
+            // If we're just toggling it, close it immediately.
+            if (!close) {
+              open = false;
+              $("div.ctools-dropdown-container", $dropdown).slideUp(100);
             }
             else {
-              // open it.
-              open = true;
-              $("div.ctools-dropdown-container", $dropdown)
-                .animate({height: "show", opacity: "show"}, 100);
+              // If we were told to close it, wait half a second to make
+              // sure that's what the user wanted.
+              // Clear any previous timer we were using.
+              if (timerID) {
+                clearTimeout(timerID);
+              }
+              timerID = setTimeout(function() {
+                if (!hovering) {
+                  open = false;
+                  $("div.ctools-dropdown-container", $dropdown).slideUp(100);
+                }
+              }, 500);
             }
           }
-          $("a.ctools-dropdown-link", $dropdown).click(function() {
-              toggle();
-              return false;
-            });
+          else {
+            // open it.
+            open = true;
+            $("div.ctools-dropdown-container", $dropdown)
+              .animate({height: "show", opacity: "show"}, 100);
+          }
+        }
+        $("a.ctools-dropdown-link", $dropdown).click(function() {
+          toggle();
+          return false;
+        });
 
-          $dropdown.hover(
+        $dropdown.hover(
             function() {
               hovering = true;
             }, // hover in
@@ -76,12 +76,12 @@
               toggle(true);
               return false;
             });
-            // @todo -- just use CSS for this noise.
-          $("div.ctools-dropdown-container a").hover(
-            function() { $(this).addClass('ctools-dropdown-hover'); },
-            function() { $(this).removeClass('ctools-dropdown-hover'); }
-            );
-        });
+        // @todo -- just use CSS for this noise.
+        $("div.ctools-dropdown-container a").hover(
+          function() { $(this).addClass('ctools-dropdown-hover'); },
+          function() { $(this).removeClass('ctools-dropdown-hover'); }
+        );
+      });
     }
   }
 })(jQuery);
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..8006408 100644
--- a/js/modal.js
+++ b/js/modal.js
@@ -175,10 +175,10 @@
    * Submit responder to do an AJAX submit on all modal forms.
    */
   Drupal.CTools.Modal.submitAjaxForm = function(e) {
-    var url = $(this).attr('action');
-    var form = $(this);
+    var $form = $(this);
+    var url = $form.attr('action');
 
-    setTimeout(function() { Drupal.CTools.AJAX.ajaxSubmit(form, url); }, 1);
+    setTimeout(function() { Drupal.CTools.AJAX.ajaxSubmit($form, url); }, 1);
     return false;
   }
 
@@ -192,83 +192,73 @@
       // 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() {
+        var $this = $(this);
+        $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() {
+        var $this = $(this);
+        $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');
-
-          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;
-          });
+      $('#modal-content form', context).once('ctools-use-modal', function() {
+        var $this = $(this);
+        var element_settings = {};
+
+        element_settings.url = $this.attr('action');
+        element_settings.event = 'submit';
+        element_settings.progress = { 'type': 'throbber' }
+        var base = $this.attr('id');
 
+        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;
         });
-      });
     }
   };
 
@@ -318,10 +308,11 @@
     var url_class = '.' + $(item).attr('id') + '-url';
     $(url_class).each(
       function() {
-        if (url && $(this).val()) {
+        var $this = $(this);
+        if (url && $this.val()) {
           url += '/';
         }
-        url += $(this).val();
+        url += $this.val();
       });
     return url;
   };
@@ -508,12 +499,23 @@
     // jQuery magic loop through the instances and run the animations or removal.
     content.each(function(){
       if ( animation == 'fade' ) {
-        $('#modalContent').fadeOut(speed,function(){$('#modalBackdrop').fadeOut(speed, function(){$(this).remove();});$(this).remove();});
+        $('#modalContent').fadeOut(speed, function() {
+          $('#modalBackdrop').fadeOut(speed, function() {
+            $(this).remove();
+          });
+          $(this).remove();
+        });
       } else {
         if ( animation == 'slide' ) {
-          $('#modalContent').slideUp(speed,function(){$('#modalBackdrop').slideUp(speed, function(){$(this).remove();});$(this).remove();});
+          $('#modalContent').slideUp(speed,function() {
+            $('#modalBackdrop').slideUp(speed, function() {
+              $(this).remove();
+            });
+            $(this).remove();
+          });
         } else {
-          $('#modalContent').remove();$('#modalBackdrop').remove();
+          $('#modalContent').remove();
+          $('#modalBackdrop').remove();
         }
       }
     });
diff --git a/js/stylizer.js b/js/stylizer.js
index dc1caaa..16d6c49 100644
--- a/js/stylizer.js
+++ b/js/stylizer.js
@@ -183,11 +183,12 @@
       };
 
       // Add hook
+      var $this = $(this);
       var hook = $('<div class="hook"></div>');
-      $(this).after(hook);
+      $this.after(hook);
       hooks.push(hook);
 
-      $(this).parent().find('.lock').click();
+      $this.parent().find('.lock').click();
       this.i = i;
       inputs.push(this);
     })
