diff --git a/l10n_update.module b/l10n_update.module
index aee9b5c..b0eb6b2 100644
--- a/l10n_update.module
+++ b/l10n_update.module
@@ -92,6 +92,15 @@ function l10n_update_cron() {
   }
 }
 
+
+/**
+ * Implements hook_modules_enabled().
+ */
+function l10n_update_modules_enabled($modules) {
+  module_load_include('project.inc', 'l10n_update');
+  l10n_update_project_refresh($modules);
+}
+
 /**
  * Implements hook_form_alter().
  */
@@ -101,9 +110,6 @@ function l10n_update_form_alter(&$form, $form_state, $form_id) {
       // Replace the submit callback by our own customized version
       $form['#submit'] = array('l10n_update_locale_translate_edit_form_submit');
       break;
-    case 'system_modules':
-      $form['#submit'][] = 'l10n_update_system_modules_submit';
-      break;
     case 'system_modules_uninstall':
       $form['#submit'][] = 'l10n_update_system_modules_uninstall_submit';
       break;
@@ -119,23 +125,6 @@ function l10n_update_form_alter(&$form, $form_state, $form_id) {
 }
 
 /**
- * Additional submit hander for System Modules form.
- *
- * Rebuild project information, update status, etc. When this callback runs,
- * locale module has already run and update cache is refreshed.
- *
- * @see l10n_update_form_alter()
- */
-function l10n_update_system_modules_submit($form, $form_state) {
-  // Check we are not on the confirm form
-  // and check if l10n_update module is still enabled.
-  if (!isset($form_state['storage']) && module_exists('l10n_update')) {
-    module_load_include('project.inc', 'l10n_update');
-    l10n_update_project_refresh();
-  }
-}
-
-/**
  * Additional submit hander for System Modules Uninstall form.
  *
  * Remove data of uninstalled modules from {l10n_update_file} table.
diff --git a/l10n_update.project.inc b/l10n_update.project.inc
index 3e8c704..537bb8e 100644
--- a/l10n_update.project.inc
+++ b/l10n_update.project.inc
@@ -124,38 +124,34 @@ function l10n_update_project_list() {
 }
 
 /**
- * Refresh projects after enabling/disabling modules
+ * Refresh projects after enabling modules
  *
  * When new projects are installed, set a batch for locale import / update
  */
-function l10n_update_project_refresh() {
-  // Get previous enabled/disabled projects.
-  $previous_projects = l10n_update_get_projects();
+function l10n_update_project_update($modules) {
   // Get all current projects, also rebuild table data.
   $current_projects = l10n_update_build_projects();
-  $installed = array_diff(array_keys($current_projects), array_keys($previous_projects));
-
-  // If there are newly installed projects, create batch for projects x languages
-  if ($installed) {
-    module_load_include('check.inc', 'l10n_update');
-    // Get project data of newly installed projects.
-    foreach ($installed as $name) {
-      $projects[$name] = $current_projects[$name];
-    }
-    // If a translation is available and if update is required, lets go.
-    if ($available = l10n_update_check_projects($projects)) {
-      $history = l10n_update_get_history();
-      if ($updates = l10n_update_build_updates($history, $available)) {
-        module_load_include('batch.inc', 'l10n_update');
-        // Filter out updates in other languages. If no languages, all of them will be updated
-        $updates = _l10n_update_prepare_updates($updates);
-        $batch = l10n_update_batch_multiple($updates, variable_get('l10n_update_import_mode', LOCALE_IMPORT_KEEP));
-        batch_set($batch);
-      }
+
+  // Create batch for projects x languages
+  module_load_include('check.inc', 'l10n_update');
+  // Get project data of newly installed projects.
+  foreach ($modules as $name) {
+    $projects[$name] = $current_projects[$name];
+  }
+  // If a translation is available and if update is required, lets go.
+  if ($available = l10n_update_check_projects($projects)) {
+    $history = l10n_update_get_history();
+    if ($updates = l10n_update_build_updates($history, $available)) {
+      module_load_include('batch.inc', 'l10n_update');
+      // Filter out updates in other languages. If no languages, all of them will be updated
+      $updates = _l10n_update_prepare_updates($updates);
+      $batch = l10n_update_batch_multiple($updates, variable_get('l10n_update_import_mode', LOCALE_IMPORT_KEEP));
+      batch_set($batch);
     }
   }
 }
 
+
 /**
  * Populate an array of project data.
  *
