diff --git a/apps.manifest.inc b/apps.manifest.inc
index c2c54db..81ea064 100755
--- a/apps.manifest.inc
+++ b/apps.manifest.inc
@@ -412,6 +412,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]) && function_exists($info[$key])) {
+      return $info[$key];
+    }
+  }
 }


diff --git a/apps.pages.inc b/apps.pages.inc
index af8ce49..50d5958 100755
--- a/apps.pages.inc
+++ b/apps.pages.inc
@@ -174,6 +174,7 @@ function apps_app_enable($app) {
   $next = apps_app_page_path($app, 'configure');
   $success = module_enable(array($app['machine_name']), TRUE);
   if ($success) {
+    system_rebuild_module_data();
     drupal_flush_all_caches();
     drupal_set_message(t("Enabled @name app", array('@name' => $app['name'])));
     if (!$app['disabled'] && ($cb = apps_app_callback($app, "post install callback"))) {
@@ -213,6 +214,10 @@ function apps_app_disable($app) {
  * Callback for app uninstall
  */
 function apps_app_uninstall($app) {
+	if ($callback = apps_app_callback($app, "post install callback")) {
+    $callback($app);
+  }
+
   require_once DRUPAL_ROOT . '/includes/install.inc';
   $uninstall[] = $app['machine_name'];
   if (isset($app['demo content module']) && $app['demo content module']) {
@@ -220,6 +225,7 @@ function apps_app_uninstall($app) {
   }

   if (drupal_uninstall_modules($uninstall)) {
+    system_rebuild_module_data();
     drupal_flush_all_caches();
     drupal_set_message(t("Uninstalled @name app", array('@name' => $app['name'])));
   }
