diff --git a/form_builder.js b/form_builder.js
index 526a423..6a8b38b 100644
--- a/form_builder.js
+++ b/form_builder.js
@@ -151,7 +151,7 @@ Drupal.behaviors.formBuilderTabs = function(context) {
  * Submit the delete form via AJAX or close the form with the cancel link.
  */
 Drupal.behaviors.formBuilderDeleteConfirmation = function(context) {
-  var $confirmForm = $('form.confirmation');
+  var $confirmForm = $('form.confirmation', context);
   if ($confirmForm.length) {
     $confirmForm.submit(Drupal.formBuilder.deleteField);
     $confirmForm.find('a').click(Drupal.formBuilder.clickCancel);
@@ -250,7 +250,9 @@ Drupal.formBuilder = {
   // replacing newer updates.
   lastUpdateTime: 0,
   // Status of mouse click.
-  mousePressed: 0
+  mousePressed: 0,
+  // Selector for a custom field configuration form.
+  fieldConfigureForm: false
 };
 
 /**
@@ -315,6 +317,7 @@ Drupal.formBuilder.editField = function() {
     return false;
   }
 
+  // Show loading indicators.
   $link.addClass('progress');
 
   // If clicking on the link a second time, close the form instead of open.
@@ -327,6 +330,10 @@ Drupal.formBuilder.editField = function() {
   }
 
   var getForm = function() {
+    if (Drupal.formBuilder.fieldConfigureForm) {
+      $(Drupal.formBuilder.fieldConfigureForm).html(Drupal.settings.formBuilder.fieldLoading);
+    }
+
     $.ajax({
       url: $link.attr('href'),
       type: 'GET',
@@ -374,7 +381,16 @@ Drupal.formBuilder.displayForm = function(response) {
   }
 
   var $preview = $('#form-builder-element-' + response.elementId);
-  var $form = $(response.html).insertAfter($preview).css('display', 'none');
+  var $form = $(response.html);
+
+  if (Drupal.formBuilder.fieldConfigureForm) {
+    $(Drupal.formBuilder.fieldConfigureForm).html($form);
+    $form.css('display', 'none');
+  }
+  else {
+    $form.insertAfter($preview).css('display', 'none');
+  }
+
   Drupal.attachBehaviors($form.get(0));
 
   $form
@@ -387,9 +403,9 @@ Drupal.formBuilder.displayForm = function(response) {
     .find('fieldset:visible:first').prepend(response.messages);
 
   $form.slideDown(function() {
-    $form.parents('div.form-builder-wrapper:first').find('a.progress').removeClass('progress');
+    $preview.parents('div.form-builder-wrapper:first').find('a.progress').removeClass('progress');
+    $form.find('input:visible:first').focus();
   });
-  //Drupal.unfreezeHeight();
 
   Drupal.formBuilder.updatingElement = false;
 };
@@ -747,12 +763,16 @@ Drupal.formBuilder.unsetActive = function() {
 
 Drupal.formBuilder.closeActive = function(callback) {
   if (Drupal.formBuilder.activeElement) {
-    var $activeForm = $(Drupal.formBuilder.activeElement).find('form');
+    var $activeForm = Drupal.formBuilder.fieldConfigureForm ? $(Drupal.formBuilder.fieldConfigureForm).find('form') : $(Drupal.formBuilder.activeElement).find('form');
 
     if ($activeForm.length) {
       Drupal.freezeHeight();
       $activeForm.slideUp(function(){
         $(this).remove();
+        // Set a message in the custom configure form location if it exists.
+        if (Drupal.formBuilder.fieldConfigureForm) {
+          $(Drupal.formBuilder.fieldConfigureForm).html(Drupal.settings.formBuilder.noFieldSelected);
+        }
         if (callback) {
           callback.call();
         }
diff --git a/form_builder.module b/form_builder.module
index ece4196..898507e 100644
--- a/form_builder.module
+++ b/form_builder.module
@@ -73,6 +73,14 @@ function form_builder_theme() {
       'arguments' => array(),
       'file' => 'includes/form_builder.admin.inc',
     ),
+    'form_builder_no_field_selected' => array(
+      'variables' => array(),
+      'file' => 'includes/form_builder.admin.inc',
+    ),
+    'form_builder_field_loading' => array(
+      'variables' => array(),
+      'file' => 'includes/form_builder.admin.inc',
+    ),
     'form_builder_field_palette' => array(
       'arguments' => array('fields' => NULL, 'groups' => NULL, 'form_type' => NULL, 'form_id' => NULL),
       'file' => 'includes/form_builder.admin.inc',
diff --git a/includes/form_builder.admin.inc b/includes/form_builder.admin.inc
index d5fdb6e..247a6e4 100644
--- a/includes/form_builder.admin.inc
+++ b/includes/form_builder.admin.inc
@@ -338,7 +338,35 @@ function theme_form_builder_element_wrapper($element, $content) {
 function theme_form_builder_empty_fieldset() {
   $output = '';
   $output .= '<div class="form-builder-wrapper form-builder-empty-placeholder">';
-  $output .= '<span>' . t('This fieldset is empty. Drag a form element into it.') .'</span>';
+  $output .= '<span>' . t('This fieldset is empty. Drag a form element into it.') . '</span>';
+  $output .= '</div>';
+  return $output;
+}
+
+/**
+ * Message shown in custom field configure forms when no field is selected.
+ *
+ * Note that this message is not displayed using the default field presentation.
+ * Modules or themes can set a custom field configuration form location by
+ * specifying a Drupal.settings.formBuilder.configureFormSelector value.
+ */
+function theme_form_builder_no_field_selected() {
+  $output = '';
+  $output .= '<div class="field-settings-message">';
+  $output .= t('No field selected');
+  $output .= '</div>';
+  return $output;
+}
+
+/**
+ * Message shown in custom field configure forms when a field is loading.
+ *
+ * @see theme_form_builder_no_field_selected().
+ */
+function theme_form_builder_field_loading() {
+  $output = '';
+  $output .= '<div class="field-settings-message">';
+  $output .= t('Loading...');
   $output .= '</div>';
   return $output;
 }
@@ -433,7 +461,15 @@ function form_builder_pre_render_form($form) {
   drupal_add_js(drupal_get_path('module', 'options_element') .'/options_element.js');
   drupal_add_js('misc/tabledrag.js');
   drupal_add_js('misc/collapse.js');
-  drupal_add_js(array('formBuilder' => array('emptyFieldset' => theme('form_builder_empty_fieldset'))), 'setting');
+
+  $settings = array(
+    'emptyFieldset' => theme('form_builder_empty_fieldset'),
+    'noFieldSelected' => theme('form_builder_no_field_selected'),
+    'fieldLoading' => theme('form_builder_field_loading'),
+  );
+
+  drupal_add_js(array('formBuilder' => $settings), 'setting');
+
   drupal_add_css(drupal_get_path('module', 'form_builder') .'/form_builder.css');
   drupal_add_css(drupal_get_path('module', 'options_element') .'/options_element.css');
 
