diff --git a/apps.manifest.inc b/apps.manifest.inc
index b5d8df5..55994cc 100755
--- a/apps.manifest.inc
+++ b/apps.manifest.inc
@@ -397,6 +397,15 @@ function apps_app_callback($app, $key) {
   if (isset($app[$key]) && module_exists($app['machine_name']) && function_exists($app[$key])){
     return $app[$key];
   }
+
+	// Else try load this module (happens when module is not enabled)
+	if (isset($app['machine_name']) && !empty($key)) {
+    module_load_include("module", $app['machine_name']);
+    $info = module_invoke($app['machine_name'], 'apps_app_info');
+    if (isset($info[$key])) {
+      return $info[$key];
+    }
+  }
 }
 
 
diff --git a/apps.pages.inc b/apps.pages.inc
index c4b1da4..d4b23cc 100755
--- a/apps.pages.inc
+++ b/apps.pages.inc
@@ -195,14 +195,14 @@ function apps_app_enable($server_name, $app_name) {
   $next = apps_app_page_path($app, 'configure');
   $success = module_enable(array($app['machine_name']), TRUE);
   if ($success) {
-    drupal_flush_all_caches();
+    system_rebuild_module_data();
     drupal_set_message("Enabled {$app['name']} app");
     drupal_set_message(t("Please go to !homelink to see the new app in action. ", 
 			array('!homelink' => l("the home page", "<front>")))
 		      );
-    if (!$app['disabled'] && ($cb = apps_app_callback($app, "post install callback"))) {
-      $cb($app);
-    }
+	  if ($callback = apps_app_callback($app, "post install callback")) {
+	    $callback($app);
+	  }
     if(!_apps_app_access('administer apps', $server_name, 'configure', $app_name)) {
       $next = apps_app_page_path($app, '');
     }
@@ -228,8 +228,12 @@ function apps_app_disable($server_name, $app_name) {
     drupal_goto($next);
   }
 
+  if ($callback = apps_app_callback($app, "post install callback")) {
+    $callback($app);
+  }
+
   $success = module_disable(array($app['machine_name']));
-  drupal_flush_all_caches();
+  system_rebuild_module_data();
   drupal_set_message("Disabled {$app['name']} app");
   $next = apps_app_page_path($app, '');
   drupal_goto($next);
