diff --git a/includes/form_builder.admin.inc b/includes/form_builder.admin.inc
index 5d9ffae..f5e57cd 100644
--- a/includes/form_builder.admin.inc
+++ b/includes/form_builder.admin.inc
@@ -719,6 +719,36 @@ function form_builder_field_configure_pre_render($form) {
   return $form;
 }
 
+/**
+ * Validate the form for editing a field.
+ */
+function form_builder_field_configure_validate(&$form, &$form_state) {
+  // Check that the new component key is unique.
+  $form_structure = form_builder_cache_load($form['#_edit_form_type'], $form['#_edit_form_id']);
+  if ($form_structure) {
+    $form_components = form_builder_get_form_components($form_structure);
+    if (!empty($form_components[$form_state['values']['key']]) && $form_components[$form_state['values']['key']] != $form['#_edit_element_id']) {
+      form_set_error('key', t('The form key %key is already in use.', array('%key' => $form_state['values']['key'])));
+    }
+  }
+}
+
+/**
+ * Recursivelly build a list of webform components.
+ */
+function form_builder_get_form_components($form, $components = array()) {
+  foreach (element_children($form) as $key) {
+    if (!empty($form[$key]['#form_builder']['element_id'])) {
+      $components[$key] = $form[$key]['#form_builder']['element_id'];
+      $components += form_builder_get_form_components($form[$key], $components);
+    }
+  }
+  return $components;
+}
+
+/**
+ * Process the form for editing a field.
+ */
 function form_builder_field_configure_submit(&$form, &$form_state) {
   $form_type = $form['#_edit_form_type'];
   $form_id = $form['#_edit_form_id'];
