Index: cpukit/score/include/rtems/score/userextimpl.h
===================================================================
--- cpukit/score/include/rtems/score/userextimpl.h	(revision d1505a19c7363ff28220c3ec8a8bfeff73bbd464)
+++ cpukit/score/include/rtems/score/userextimpl.h	(revision 6f6da82ca0b57ed1c42050f8103c2ea2adb3d3e2)
@@ -308,5 +308,5 @@
     &ctx,
     _User_extensions_Fatal_visitor,
-    CHAIN_ITERATOR_BACKWARD
+    CHAIN_ITERATOR_FORWARD
   );
 }
@@ -319,5 +319,5 @@
     executing,
     _User_extensions_Thread_terminate_visitor,
-    CHAIN_ITERATOR_FORWARD
+    CHAIN_ITERATOR_BACKWARD
   );
 }
Index: cpukit/score/include/rtems/sysinit.h
===================================================================
--- cpukit/score/include/rtems/sysinit.h	(revision d1505a19c7363ff28220c3ec8a8bfeff73bbd464)
+++ cpukit/score/include/rtems/sysinit.h	(revision 6f6da82ca0b57ed1c42050f8103c2ea2adb3d3e2)
@@ -56,6 +56,6 @@
 #define RTEMS_SYSINIT_POSIX_RWLOCK               000368
 #define RTEMS_SYSINIT_POSIX_SHM                  000369
-#define RTEMS_SYSINIT_POSIX_CLEANUP              00036a
-#define RTEMS_SYSINIT_POSIX_KEYS                 00036b
+#define RTEMS_SYSINIT_POSIX_KEYS                 00036a
+#define RTEMS_SYSINIT_POSIX_CLEANUP              00036b
 #define RTEMS_SYSINIT_IDLE_THREADS               000380
 #define RTEMS_SYSINIT_LIBIO                      000400
Index: cpukit/score/src/userextiterate.c
===================================================================
--- cpukit/score/src/userextiterate.c	(revision d1505a19c7363ff28220c3ec8a8bfeff73bbd464)
+++ cpukit/score/src/userextiterate.c	(revision 6f6da82ca0b57ed1c42050f8103c2ea2adb3d3e2)
@@ -8,5 +8,5 @@
 
 /*
- * Copyright (c) 2012, 2016 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
@@ -155,6 +155,7 @@
 {
   Thread_Control              *executing;
-  const User_extensions_Table *callouts_current;
-  const User_extensions_Table *callouts_end;
+  const User_extensions_Table *initial_current;
+  const User_extensions_Table *initial_begin;
+  const User_extensions_Table *initial_end;
   const Chain_Node            *end;
   Chain_Node                  *node;
@@ -164,15 +165,16 @@
   executing = _Thread_Get_executing();
 
-  callouts_current = rtems_configuration_get_user_extension_table();
-  callouts_end = callouts_current
-    + rtems_configuration_get_number_of_initial_extensions();
-
-  while ( callouts_current != callouts_end ) {
-    (*visitor)( executing, arg, callouts_current );
-
-    ++callouts_current;
-  }
+  initial_begin = rtems_configuration_get_user_extension_table();
+  initial_end =
+    initial_begin + rtems_configuration_get_number_of_initial_extensions();
 
   if ( direction == CHAIN_ITERATOR_FORWARD ) {
+    initial_current = initial_begin;
+
+    while ( initial_current != initial_end ) {
+      (*visitor)( executing, arg, initial_current );
+      ++initial_current;
+    }
+
     end = _Chain_Immutable_tail( &_User_extensions_List.Active );
   } else {
@@ -214,3 +216,12 @@
 
   _User_extensions_Release( &lock_context );
-}
+
+  if ( direction == CHAIN_ITERATOR_BACKWARD ) {
+    initial_current = initial_end;
+
+    while ( initial_current != initial_begin ) {
+      --initial_current;
+      (*visitor)( executing, arg, initial_current );
+    }
+  }
+}
Index: testsuites/sptests/spextensions01/init.c
===================================================================
--- testsuites/sptests/spextensions01/init.c	(revision d1505a19c7363ff28220c3ec8a8bfeff73bbd464)
+++ testsuites/sptests/spextensions01/init.c	(revision 6f6da82ca0b57ed1c42050f8103c2ea2adb3d3e2)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2016 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2016, 2017 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
@@ -81,5 +81,5 @@
 }
 
-static void assert_static_order(int index)
+static void assert_forward_order(int index)
 {
   assert((counter % active_extensions) == index);
@@ -87,19 +87,13 @@
 }
 
-static void assert_forward_order(int index)
-{
-  assert((counter % active_extensions) == index);
+static void assert_reverse_order(int index)
+{
+  assert((counter % active_extensions) == (active_extensions - 1 - index));
   ++counter;
 }
 
-static void assert_reverse_order(int index)
-{
-  assert((counter % active_extensions) == (5 - index));
-  ++counter;
-}
-
 static bool zero_thread_create(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(0);
+  assert_forward_order(0);
   assert_allocator_protected_thread_context();
   return true;
@@ -108,5 +102,5 @@
 static void zero_thread_start(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(0);
+  assert_forward_order(0);
   assert_thread_dispatch_disabled_context();
 }
@@ -114,5 +108,5 @@
 static void zero_thread_restart(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(0);
+  assert_forward_order(0);
   assert_life_protected_thread_context();
 }
@@ -120,5 +114,5 @@
 static void zero_thread_delete(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(0);
+  assert_reverse_order(0);
   assert_allocator_protected_thread_context();
 }
@@ -126,10 +120,10 @@
 static void zero_thread_switch(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(0);
+  assert_forward_order(0);
 }
 
 static void zero_thread_begin(rtems_tcb *a)
 {
-  assert_static_order(0);
+  assert_forward_order(0);
   assert_normal_thread_context();
 }
@@ -137,5 +131,5 @@
 static void zero_thread_exitted(rtems_tcb *a)
 {
-  assert_static_order(0);
+  assert_forward_order(0);
   assert_normal_thread_context();
 }
@@ -148,5 +142,5 @@
 {
   if (source == RTEMS_FATAL_SOURCE_EXIT) {
-    assert_static_order(0);
+    assert_forward_order(0);
   }
 }
@@ -154,5 +148,5 @@
 static void zero_thread_terminate(rtems_tcb *a)
 {
-  assert_static_order(0);
+  assert_reverse_order(0);
   assert_life_protected_thread_context();
 }
@@ -160,5 +154,5 @@
 static bool one_thread_create(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(1);
+  assert_forward_order(1);
   assert_allocator_protected_thread_context();
   return true;
@@ -167,5 +161,5 @@
 static void one_thread_start(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(1);
+  assert_forward_order(1);
   assert_thread_dispatch_disabled_context();
 }
@@ -173,5 +167,5 @@
 static void one_thread_restart(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(1);
+  assert_forward_order(1);
   assert_life_protected_thread_context();
 }
@@ -179,5 +173,5 @@
 static void one_thread_delete(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(1);
+  assert_reverse_order(1);
   assert_allocator_protected_thread_context();
 }
@@ -185,10 +179,10 @@
 static void one_thread_switch(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(1);
+  assert_forward_order(1);
 }
 
 static void one_thread_begin(rtems_tcb *a)
 {
-  assert_static_order(1);
+  assert_forward_order(1);
   assert_normal_thread_context();
 }
@@ -196,5 +190,5 @@
 static void one_thread_exitted(rtems_tcb *a)
 {
-  assert_static_order(1);
+  assert_forward_order(1);
   assert_normal_thread_context();
 }
@@ -207,5 +201,5 @@
 {
   if (source == RTEMS_FATAL_SOURCE_EXIT) {
-    assert_static_order(1);
+    assert_forward_order(1);
   }
 }
@@ -213,5 +207,5 @@
 static void one_thread_terminate(rtems_tcb *a)
 {
-  assert_static_order(1);
+  assert_reverse_order(1);
   assert_life_protected_thread_context();
 }
@@ -232,5 +226,5 @@
 static void two_thread_restart(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(2);
+  assert_forward_order(2);
   assert_life_protected_thread_context();
 }
@@ -266,7 +260,5 @@
 {
   if (source == RTEMS_FATAL_SOURCE_EXIT) {
-    assert_reverse_order(2);
-    assert(counter == 72);
-    TEST_END();
+    assert_forward_order(2);
   }
 }
@@ -274,5 +266,5 @@
 static void two_thread_terminate(rtems_tcb *a)
 {
-  assert_forward_order(2);
+  assert_reverse_order(2);
   assert_life_protected_thread_context();
 }
@@ -293,5 +285,5 @@
 static void three_thread_restart(rtems_tcb *a, rtems_tcb *b)
 {
-  assert_static_order(3);
+  assert_forward_order(3);
   assert_life_protected_thread_context();
 }
@@ -327,5 +319,7 @@
 {
   if (source == RTEMS_FATAL_SOURCE_EXIT) {
-    assert_reverse_order(3);
+    assert_forward_order(3);
+    assert(counter == 72);
+    TEST_END();
   }
 }
@@ -333,5 +327,5 @@
 static void three_thread_terminate(rtems_tcb *a)
 {
-  assert_forward_order(3);
+  assert_reverse_order(3);
   assert_life_protected_thread_context();
 }
Index: testsuites/sptests/spsysinit01/init.c
===================================================================
--- testsuites/sptests/spsysinit01/init.c	(revision d1505a19c7363ff28220c3ec8a8bfeff73bbd464)
+++ testsuites/sptests/spsysinit01/init.c	(revision 6f6da82ca0b57ed1c42050f8103c2ea2adb3d3e2)
@@ -121,9 +121,11 @@
   POSIX_SHM_PRE,
   POSIX_SHM_POST,
+#endif /* RTEMS_POSIX_API */
+  POSIX_KEYS_PRE,
+  POSIX_KEYS_POST,
+#ifdef RTEMS_POSIX_API
   POSIX_CLEANUP_PRE,
   POSIX_CLEANUP_POST,
 #endif /* RTEMS_POSIX_API */
-  POSIX_KEYS_PRE,
-  POSIX_KEYS_POST,
   IDLE_THREADS_PRE,
   IDLE_THREADS_POST,
