diff --git a/form_builder.js b/form_builder.js
index 4eadd16..d3dad65 100644
--- a/form_builder.js
+++ b/form_builder.js
@@ -8,14 +8,18 @@
 
 Drupal.behaviors.formBuilderElement = {};
 Drupal.behaviors.formBuilderElement.attach = function(context) {
-  var $wrappers = $('div.form-builder-wrapper', context);
-  var $elements = $('div.form-builder-element', context);
+  var $wrappers = $('div.form-builder-wrapper:not(.form-builder-processed)', context);
+  var $elements = $('div.form-builder-element:not(.form-builder-processed)', context);
 
   // If the context itself is a wrapper, add it to the list.
-  if ($(context).is('div.form-builder-wrapper')) {
+  if ($(context).is('div.form-builder-wrapper:not(.form-builder-processed)')) {
     $wrappers = $wrappers.add(context);
   }
 
+  // Add a guard class.
+  $wrappers.addClass('form-builder-processed');
+  $elements.addClass('form-builder-processed');
+
   // Add over effect on rollover.
   // The .hover() method is not used to avoid issues with nested hovers.
   $wrappers.not('div.form-builder-empty-placeholder')
@@ -365,7 +369,7 @@ Drupal.formBuilder.clickCancel = function() {
 Drupal.formBuilder.displayForm = function(response) {
   var $preview = $('#form-builder-element-' + response.elementId);
   var $form = $(response.html).insertAfter($preview).css('display', 'none');
-  Drupal.attachBehaviors($form.parent().get(0));
+  Drupal.attachBehaviors($form.get(0));
 
   $form
     // Add the ajaxForm behavior to the new form.
