diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index 061898c..70f8849 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -1094,6 +1094,13 @@ function system_modules_confirm_form($modules, $storage) {
 function system_modules_submit($form, &$form_state) {
   include_once DRUPAL_ROOT . '/includes/install.inc';
 
+  // establish a lock during the module saving process to prevent double submission.
+  // this should be a waiting lock since the second submission could contain more information
+  if (!lock_acquire('module_save', 240.0)) {
+    // wait till the previous module_save lock is up & continue
+    lock_wait('module_save');
+  }
+  
   // Builds list of modules.
   $modules = array();
   // If we're not coming from the confirmation form, build the list of modules.
@@ -1222,6 +1229,8 @@ function system_modules_submit($form, &$form_state) {
   }
 
   $form_state['redirect'] = 'admin/modules';
+
+  lock_release('module_save');
 }
 
 /**
