diff --git a/filefield_sources.js b/filefield_sources.js
index 8fe66de..65afa48 100644
--- a/filefield_sources.js
+++ b/filefield_sources.js
@@ -5,39 +5,42 @@
  */
 Drupal.behaviors.fileFieldSources = {};
 Drupal.behaviors.fileFieldSources.attach = function(context, settings) {
-  $('div.filefield-sources-list a', context).click(function() {
-    $fileFieldElement = $(this).parents('div.form-managed-file:first');
-
-    // Remove the active class.
-    $(this).parents('div.filefield-sources-list').find('a.active').removeClass('active');
-
-    // Find the unique FileField Source class name.
-    var fileFieldSourceClass = this.className.match(/filefield-source-[0-9a-z]+/i)[0];
-
-    // The default upload element is a special case.
-    if ($(this).is('.filefield-source-upload')) {
-      $fileFieldElement.find('div.filefield-sources-list').siblings('input.form-file, input.form-submit').css('display', '');
-      $fileFieldElement.find('div.filefield-source').css('display', 'none');
-    }
-    else {
-      $fileFieldElement.find('div.filefield-sources-list').siblings('input.form-file, input.form-submit').css('display', 'none');
-      $fileFieldElement.find('div.filefield-source').not('div.' + fileFieldSourceClass).css('display', 'none');
-      $fileFieldElement.find('div.' + fileFieldSourceClass).css('display', '');
-    }
-
-    // Add the active class.
-    $(this).addClass('active');
-    Drupal.fileFieldSources.updateHintText($fileFieldElement.get(0));
-  });
+  $('div.filefield-sources-list:not(.filefield-sources-processed)', context).each(function() {
+    $(this).addClass('filefield-sources-processed');
+    var $fileFieldElement = $(this).parents('div.form-managed-file:first');
+    $(this).find('a').click(function() {
+      // Remove the active class.
+      $(this).parents('div.filefield-sources-list').find('a.active').removeClass('active');
+
+      // Find the unique FileField Source class name.
+      var fileFieldSourceClass = this.className.match(/filefield-source-[0-9a-z]+/i)[0];
+
+      // The default upload element is a special case.
+      if ($(this).is('.filefield-source-upload')) {
+        $fileFieldElement.find('div.filefield-sources-list').siblings('input.form-file, input.form-submit').css('display', '');
+        $fileFieldElement.find('div.filefield-source').css('display', 'none');
+      }
+      else {
+        $fileFieldElement.find('div.filefield-sources-list').siblings('input.form-file, input.form-submit').css('display', 'none');
+        $fileFieldElement.find('div.filefield-source').not('div.' + fileFieldSourceClass).css('display', 'none');
+        $fileFieldElement.find('div.' + fileFieldSourceClass).css('display', '');
+      }
+
+      // Add the active class.
+      $(this).addClass('active');
+      Drupal.fileFieldSources.updateHintText($fileFieldElement.get(0));
+    });
 
-  // Hide all the other upload mechanisms on page load.
-  $('div.filefield-source', context).css('display', 'none');
-  $('div.filefield-sources-list', context).each(function() {
+    // Hide all the other upload mechanisms on page load.
+    $fileFieldElement.find('div.filefield-source', this).css('display', 'none');
     $(this).find('a:first').addClass('active');
   });
-  $('form#node-form', context).submit(function() {
-    Drupal.fileFieldSources.removeHintText();
-  });
+
+  if (context === document) {
+    $('form').submit(function() {
+      Drupal.fileFieldSources.removeHintText();
+    });
+  }
 };
 
 /**
@@ -100,7 +103,7 @@ Drupal.fileFieldSources = {
    * Delete all hint text from a form before submit.
    */
   removeHintText: function() {
-    $('div.filefield-element input.hint').val('').removeClass('hint');
+    $('div.filefield-source input.hint').val('').removeClass('hint');
   }
 };
 
