diff --git a/includes/actions.inc b/includes/actions.inc
index c2fd4d9..e387b0a 100644
--- a/includes/actions.inc
+++ b/includes/actions.inc
@@ -108,7 +108,11 @@ function actions_do($action_ids, $object = NULL, $context = NULL, $a1 = NULL, $a
       }
       // Singleton action; $action_id is the function name.
       else {
-        $actions_result[$action_id] = $action_id($object, $context, $a1, $a2);
+        $action = $available_actions[$action_id];
+        $callback = isset($action['callback']) ? $action['callback'] : $action_id;
+        if (function_exists($callback)) {
+          $actions_result[$action_id] = $callback($object, $context, $a1, $a2, $action_id);
+        }
       }
     }
   }
@@ -128,8 +132,10 @@ function actions_do($action_ids, $object = NULL, $context = NULL, $a1 = NULL, $a
     }
     // Singleton action; $action_ids is the function name.
     else {
-      if (function_exists($action_ids)) {
-        $actions_result[$action_ids] = $action_ids($object, $context, $a1, $a2);
+      $action = $available_actions[$action_ids];
+      $callback = isset($action['callback']) ? $action['callback'] : $action_ids;
+      if (function_exists($callback)) {
+        $actions_result[$action_ids] = $callback($object, $context, $a1, $a2, $action_ids);
       }
       else {
         // Set to avoid undefined index error messages later.
@@ -190,7 +196,7 @@ function actions_get_all_actions() {
   foreach ($actions as &$action) {
     $action['configurable'] = (bool) $action['parameters'];
     unset($action['parameters']);
-    unset($action['aid']);
+    //unset($action['aid']);
   }
   return $actions;
 }
@@ -212,9 +218,10 @@ function actions_get_all_actions() {
  */
 function actions_actions_map($actions) {
   $actions_map = array();
-  foreach ($actions as $callback => $array) {
-    $key = drupal_hash_base64($callback);
-    $actions_map[$key]['callback']     = isset($array['callback']) ? $array['callback'] : $callback;
+  foreach ($actions as $aid => $array) {
+    $key = drupal_hash_base64($aid);
+    $actions_map[$key]['aid']          = $aid;
+    $actions_map[$key]['callback']     = isset($array['callback']) ? $array['callback'] : $aid;
     $actions_map[$key]['label']        = $array['label'];
     $actions_map[$key]['type']         = $array['type'];
     $actions_map[$key]['configurable'] = $array['configurable'];
@@ -269,24 +276,24 @@ function actions_function_lookup($hash) {
  */
 function actions_synchronize($delete_orphans = FALSE) {
   $actions_in_code = actions_list(TRUE);
-  $actions_in_db = db_query("SELECT aid, callback, label FROM {actions} WHERE parameters = ''")->fetchAllAssoc('callback', PDO::FETCH_ASSOC);
+  $actions_in_db = db_query("SELECT aid, callback, label FROM {actions} WHERE parameters = ''")->fetchAllAssoc('aid', PDO::FETCH_ASSOC);
 
   // Go through all the actions provided by modules.
-  foreach ($actions_in_code as $callback => $array) {
+  foreach ($actions_in_code as $aid => $array) {
     // Ignore configurable actions since their instances get put in when the
     // user adds the action.
     if (!$array['configurable']) {
       // If we already have an action ID for this action, no need to assign aid.
-      if (isset($actions_in_db[$callback])) {
-        unset($actions_in_db[$callback]);
+      if (isset($actions_in_db[$aid])) {
+        unset($actions_in_db[$aid]);
       }
       else {
         // This is a new singleton that we don't have an aid for; assign one.
         db_insert('actions')
           ->fields(array(
-            'aid' => $callback,
+            'aid' => $aid,
             'type' => $array['type'],
-            'callback' => $callback,
+            'callback' => isset($array['callback']) ? $array['callback'] : $aid,
             'parameters' => '',
             'label' => $array['label'],
             ))
@@ -301,7 +308,7 @@ function actions_synchronize($delete_orphans = FALSE) {
     $orphaned = array_keys($actions_in_db);
 
     if ($delete_orphans) {
-      $actions = db_query('SELECT aid, label FROM {actions} WHERE callback IN (:orphaned)', array(':orphaned' => $orphaned))->fetchAll();
+      $actions = db_query('SELECT aid, label FROM {actions} WHERE aid IN (:orphaned)', array(':orphaned' => $orphaned))->fetchAll();
       foreach ($actions as $action) {
         actions_delete($action->aid);
         watchdog('actions', "Removed orphaned action '%action' from database.", array('%action' => $action->label));
diff --git a/modules/trigger/trigger.admin.inc b/modules/trigger/trigger.admin.inc
index 7509eb3..a51d94a 100644
--- a/modules/trigger/trigger.admin.inc
+++ b/modules/trigger/trigger.admin.inc
@@ -134,7 +134,8 @@ function trigger_assign_form($form, $form_state, $module, $hook, $label) {
     }
   }
   foreach (actions_actions_map(actions_get_all_actions()) as $aid => $action) {
-    if (in_array($action['callback'], $functions)) {
+    $callback = is_numeric($action['aid']) ? $action['callback'] : $action['aid'];
+    if (in_array($callback, $functions)) {
       $options[$action['type']][$aid] = $action['label'];
     }
   }
