diff --git a/master.admin.inc b/master.admin.inc
index 0eb3849..c9bda4b 100644
--- a/master.admin.inc
+++ b/master.admin.inc
@@ -342,7 +342,7 @@ function _master_modules_overview_features_tableselect_form($features, $parents
  */
 function master_modules_master_submit($form, &$form_state) {
 
-  $to_enable = array_keys(array_filter($form_state['values']['dependent']['modules']));
+  $to_enable = array_keys(array_filter($form_state['values']['master']['modules']));
 
   // @TODO: check dependencies.
   // @TODO: add more from system_modules_submit().
@@ -350,7 +350,7 @@ function master_modules_master_submit($form, &$form_state) {
   // Enable modules.
   if (!empty($to_enable)) {
     $stringlist = implode(', ', $to_enable);
-    module_enable($to_enable);
+    _master_enable_modules($to_enable);
     drupal_set_message(t('Modules %list should now be enabled.', array('%list' => $stringlist)), 'notice');
   }
 }
@@ -368,12 +368,66 @@ function master_modules_enable_submit($form, &$form_state) {
   // Enable modules.
   if (!empty($to_enable)) {
     $stringlist = implode(', ', $to_enable);
-    module_enable($to_enable);
+    _master_enable_modules($to_enable);
     drupal_set_message(t('Modules %list should now be enabled.', array('%list' => $stringlist)), 'notice');
   }
 }
 
 /**
+ * Enable or install a list of modules.
+ *
+ * @param array $modules
+ *   an array of module machine names
+ */
+function _master_enable_modules($modules) {
+
+  // Make sure the install API is available.
+  include_once './includes/install.inc';
+
+  $install = array();
+  $enable = array();
+
+  foreach ($modules as $module) {
+    if (drupal_get_installed_schema_version($module) == SCHEMA_UNINSTALLED) {
+      $install[] = $module;
+    }
+    else {
+      $enable[] = $module;
+    }
+  }
+
+  // Enable before installing, to meet dependencies.
+  if (!empty($enable)) {
+    module_enable($enable);
+  }
+
+  // Install new modules.
+  foreach ($install as $key => $module) {
+    if (!drupal_check_module($module)) {
+      unset($install[$key]);
+    }
+  }
+  if (!empty($install)) {
+    drupal_install_modules($install);
+  }
+
+  _master_enable_module_rebuilds();
+  module_invoke('locale', 'system_update', $install);
+}
+
+/**
+ * Helper wrapper to clear caches after
+ */
+function _master_enable_module_rebuilds() {
+  drupal_rebuild_theme_registry();
+  node_types_rebuild();
+  menu_rebuild();
+  cache_clear_all('schema', 'cache');
+  drupal_clear_css_cache();
+  drupal_clear_js_cache();
+}
+
+/**
  * Form submission for master module enabling.
  */
 function master_modules_disable_submit($form, &$form_state) {
