diff --git a/product/CMFActivity/ActivityTool.py b/product/CMFActivity/ActivityTool.py
index 778d89a4d5fa98ab5c50a900162dbd09d9b7c4ec..a1b4813c8f374410271f7810338fb5bed0ec61d5 100644
--- a/product/CMFActivity/ActivityTool.py
+++ b/product/CMFActivity/ActivityTool.py
@@ -863,10 +863,14 @@ class ActivityTool (Folder, UniqueObject):
           new_message_list.append(m)
         except:
           m.is_executed = 0
-          m.exc_type = sys.exc_info()[0]
+          exc_info = sys.exc_info()
+          m.exc_type = exc_info[0]
+          m.exc_value = str(exc_info[1])
+          m.traceback = ''.join(ExceptionFormatter.format_exception(
+                                *exc_info))
           LOG('WARNING ActivityTool', 0,
               'Could not call method %s on object %s' %
-              (m.method_id, m.object_path), error=sys.exc_info())
+              (m.method_id, m.object_path), error=exc_info)
 
       try:
         if len(expanded_object_list) > 0:
@@ -879,12 +883,19 @@ class ActivityTool (Folder, UniqueObject):
           result = None
       except:
         # In this case, the group method completely failed.
+        exc_info = sys.exc_info()
+        exc_type = exc_info[0]
+        exc_value = str(exc_info[1])
+        traceback = ''.join(ExceptionFormatter.format_exception(
+                            *exc_info))
         for m in new_message_list:
           m.is_executed = 0
-          m.exc_type = sys.exc_info()[0]
+          m.exc_type = exc_type
+          m.exc_value = exc_value
+          m.traceback = traceback
         LOG('WARNING ActivityTool', 0,
             'Could not call method %s on objects %s' %
-            (method_id, expanded_object_list), error=sys.exc_info())
+            (method_id, expanded_object_list), error=exc_info)
       else:
         # Obtain all indices of failed messages. Note that this can be a partial failure.
         failed_message_dict = {}