Index: cpukit/posix/src/psignalunblockthread.c
===================================================================
--- cpukit/posix/src/psignalunblockthread.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/posix/src/psignalunblockthread.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -41,5 +41,9 @@
 )
 {
-  _Thread_Add_post_switch_action( the_thread, &api->Signal_action );
+  _Thread_Add_post_switch_action(
+    the_thread,
+    &api->Signal_action,
+    _POSIX_signals_Action_handler
+  );
 
   return status;
Index: cpukit/posix/src/pthread.c
===================================================================
--- cpukit/posix/src/pthread.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/posix/src/pthread.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -230,9 +230,5 @@
   }
 
-  _Thread_Action_initialize(
-    &api->Signal_action,
-    _POSIX_signals_Action_handler
-  );
-
+  _Thread_Action_initialize( &api->Signal_action );
   _Thread_queue_Initialize( &api->Join_List, THREAD_QUEUE_DISCIPLINE_FIFO );
 
Index: cpukit/rtems/src/signalsend.c
===================================================================
--- cpukit/rtems/src/signalsend.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/rtems/src/signalsend.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -50,5 +50,6 @@
           _Thread_Add_post_switch_action(
             the_thread,
-            &api->Signal_action
+            &api->Signal_action,
+            _Signal_Action_handler
           );
         } else {
Index: cpukit/rtems/src/taskmode.c
===================================================================
--- cpukit/rtems/src/taskmode.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/rtems/src/taskmode.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -22,4 +22,5 @@
 #include <rtems/rtems/asrimpl.h>
 #include <rtems/rtems/modesimpl.h>
+#include <rtems/rtems/signalimpl.h>
 #include <rtems/score/schedulerimpl.h>
 #include <rtems/score/threadimpl.h>
@@ -104,5 +105,6 @@
         _Thread_Add_post_switch_action(
           executing,
-          &api->Signal_action
+          &api->Signal_action,
+          _Signal_Action_handler
         );
       }
Index: cpukit/rtems/src/tasks.c
===================================================================
--- cpukit/rtems/src/tasks.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/rtems/src/tasks.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -56,5 +56,5 @@
 
   _ASR_Create( &api->Signal );
-  _Thread_Action_initialize( &api->Signal_action, _Signal_Action_handler );
+  _Thread_Action_initialize( &api->Signal_action );
 #if !defined(RTEMS_SMP)
   created->task_variables = NULL;
Index: cpukit/score/include/rtems/score/threadimpl.h
===================================================================
--- cpukit/score/include/rtems/score/threadimpl.h	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/score/include/rtems/score/threadimpl.h	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -848,9 +848,7 @@
 
 RTEMS_INLINE_ROUTINE void _Thread_Action_initialize(
-  Thread_Action         *action,
-  Thread_Action_handler  handler
-)
-{
-  action->handler = handler;
+  Thread_Action *action
+)
+{
   _Chain_Set_off_chain( &action->Node );
 }
@@ -891,6 +889,7 @@
 
 RTEMS_INLINE_ROUTINE void _Thread_Add_post_switch_action(
-  Thread_Control *thread,
-  Thread_Action  *action
+  Thread_Control        *thread,
+  Thread_Action         *action,
+  Thread_Action_handler  handler
 )
 {
@@ -899,4 +898,6 @@
 
   cpu_of_thread = _Thread_Action_ISR_disable_and_acquire( thread, &level );
+
+  action->handler = handler;
 
 #if defined(RTEMS_SMP)
Index: cpukit/score/src/threadinitialize.c
===================================================================
--- cpukit/score/src/threadinitialize.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/score/src/threadinitialize.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -244,8 +244,5 @@
   _Thread_Action_control_initialize( &the_thread->Post_switch_actions );
 
-  _Thread_Action_initialize(
-    &the_thread->Life.Action,
-    _Thread_Life_action_handler
-  );
+  _Thread_Action_initialize( &the_thread->Life.Action );
   the_thread->Life.state = THREAD_LIFE_NORMAL;
   the_thread->Life.terminator = NULL;
Index: cpukit/score/src/threadrestart.c
===================================================================
--- cpukit/score/src/threadrestart.c	(revision d0c39838146c6a186ddda3d95dac71c3fa90f11e)
+++ cpukit/score/src/threadrestart.c	(revision df55d07f2e5c4b1c3d73c4f26a2cbb82f2af261c)
@@ -177,4 +177,15 @@
 }
 
+static void _Thread_Add_life_change_action(
+  Thread_Control *the_thread
+)
+{
+  _Thread_Add_post_switch_action(
+    the_thread,
+    &the_thread->Life.Action,
+    _Thread_Life_action_handler
+  );
+}
+
 static void _Thread_Start_life_change_for_executing(
   Thread_Control *executing
@@ -187,5 +198,5 @@
   );
 
-  _Thread_Add_post_switch_action( executing, &executing->Life.Action );
+  _Thread_Add_life_change_action( executing );
 }
 
@@ -272,5 +283,5 @@
     false
   );
-  _Thread_Add_post_switch_action( the_thread, &the_thread->Life.Action );
+  _Thread_Add_life_change_action( the_thread );
   _Thread_Ready( the_thread );
 }
