diff --git a/README.txt b/README.txt
index 68031f8..ae3b98e 100644
--- a/README.txt
+++ b/README.txt
@@ -8,7 +8,7 @@ can optionally be mailed to e-mail addresses upon submission.
 
 Requirements
 ------------
-Drupal 6.x
+Drupal 6.16 or higher
 
 Installation
 ------------
diff --git a/includes/webform.components.inc b/includes/webform.components.inc
index 3f5a890..69f9f38 100644
--- a/includes/webform.components.inc
+++ b/includes/webform.components.inc
@@ -664,12 +664,17 @@ function webform_component_insert(&$component) {
     $function($component);
   }
 
-  db_lock_table('webform_component');
-  $component['cid'] = isset($component['cid']) ? $component['cid'] : db_result(db_query('SELECT MAX(cid) FROM {webform_component} WHERE nid = %d', $component['nid'])) + 1;
-  $component['value'] = isset($component['value']) ? $component['value'] : NULL;
-  $component['mandatory'] = isset($component['mandatory']) ? $component['mandatory'] : 0;
-  db_query("INSERT INTO {webform_component} (nid, cid, pid, form_key, name, type, value, extra, mandatory, weight) VALUES (%d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d)", $component['nid'], $component['cid'], $component['pid'], $component['form_key'], $component['name'], $component['type'], $component['value'], serialize($component['extra']), $component['mandatory'], $component['weight']);
-  db_unlock_tables();
+  if (lock_acquire('webform_component_insert_' . $component['nid'], 5)) {
+    $component['cid'] = isset($component['cid']) ? $component['cid'] : db_result(db_query('SELECT MAX(cid) FROM {webform_component} WHERE nid = %d', $component['nid'])) + 1;
+    $component['value'] = isset($component['value']) ? $component['value'] : NULL;
+    $component['mandatory'] = isset($component['mandatory']) ? $component['mandatory'] : 0;
+    db_query("INSERT INTO {webform_component} (nid, cid, pid, form_key, name, type, value, extra, mandatory, weight) VALUES (%d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d)", $component['nid'], $component['cid'], $component['pid'], $component['form_key'], $component['name'], $component['type'], $component['value'], serialize($component['extra']), $component['mandatory'], $component['weight']);
+    lock_release('webform_component_insert_' . $component['nid']);
+  }
+  else {
+    watchdog('webform', 'A Webform component could not be saved because a timeout occurred while trying to acquire a lock for the node. Details: <pre>@component</pre>', array('@component' => print_r($component, TRUE)));
+    return FALSE;
+  }
 
   // Post-insert actions.
   module_invoke_all('webform_component_insert', $component);
diff --git a/webform.install b/webform.install
index d3dbe5b..d690b0d 100644
--- a/webform.install
+++ b/webform.install
@@ -418,6 +418,25 @@ function webform_uninstall() {
 }
 
 /**
+ * Implementation of hook_requirements().
+ */
+function webform_requirements($phase) {
+  $requirements = array();
+  $t = get_t();
+
+  if (version_compare(VERSION, '6.16') < 0) {
+    $requirements['webform_drupal_version'] = array(
+      'title' => $t('Webform'),
+      'value' => VERSION,
+      'severity' => REQUIREMENT_ERROR,
+      'description' => $t('Webform requires at least version @version of Drupal core.', array('@version' => '6.16')),
+    );
+  }
+
+  return $requirements;
+}
+
+/**
  * Set the minimum upgrade version.
  *
  * This should allow updates from any 2.x version of Webform (for D5 or D6),
