Index: cpukit/libcsupport/include/rtems/libcsupport.h
===================================================================
--- cpukit/libcsupport/include/rtems/libcsupport.h	(revision 172e953147da1d82bf5a6746b2fe6112a9509ad7)
+++ cpukit/libcsupport/include/rtems/libcsupport.h	(revision 7bdb765a67812750b9454d2940512da9fec16d38)
@@ -119,5 +119,4 @@
   uint32_t active_barriers;
   uint32_t active_condition_variables;
-  uint32_t active_keys;
   uint32_t active_message_queues;
   uint32_t active_message_queue_descriptors;
@@ -133,4 +132,6 @@
   Heap_Information_block workspace_info;
   Heap_Information_block heap_info;
+  uint32_t active_posix_key_value_pairs;
+  uint32_t active_posix_keys;
   rtems_resource_rtems_api rtems_api;
   rtems_resource_posix_api posix_api;
Index: cpukit/libcsupport/src/resource_snapshot.c
===================================================================
--- cpukit/libcsupport/src/resource_snapshot.c	(revision 172e953147da1d82bf5a6746b2fe6112a9509ad7)
+++ cpukit/libcsupport/src/resource_snapshot.c	(revision 7bdb765a67812750b9454d2940512da9fec16d38)
@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2012-2014 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
- *  Obere Lagerstr. 30
+ *  Dornierstr. 4
  *  82178 Puchheim
  *  Germany
@@ -23,11 +23,13 @@
 #include <rtems/libio_.h>
 #include <rtems/malloc.h>
+#include <rtems/score/rbtreeimpl.h>
 #include <rtems/score/protectedheap.h>
 #include <rtems/score/threadimpl.h>
 #include <rtems/score/wkspace.h>
 
-#include <rtems/extensionimpl.h>
+#include <rtems/posix/keyimpl.h>
 
 #include <rtems/rtems/barrierimpl.h>
+#include <rtems/extensionimpl.h>
 #include <rtems/rtems/dpmemimpl.h>
 #include <rtems/rtems/messageimpl.h>
@@ -44,5 +46,4 @@
   #include <rtems/posix/mqueueimpl.h>
   #include <rtems/posix/muteximpl.h>
-  #include <rtems/posix/keyimpl.h>
   #include <rtems/posix/psignal.h>
   #include <rtems/posix/pthreadimpl.h>
@@ -53,5 +54,6 @@
 #endif
 
-static const Objects_Information *objects_info_table[] = {
+static const Objects_Information *const objects_info_table[] = {
+  &_POSIX_Keys_Information,
   &_Barrier_Information,
   &_Extension_Information,
@@ -68,5 +70,4 @@
     &_POSIX_Barrier_Information,
     &_POSIX_Condition_variables_Information,
-    &_POSIX_Keys_Information,
     &_POSIX_Message_queue_Information,
     &_POSIX_Message_queue_Information_fds,
@@ -105,8 +106,42 @@
 }
 
+static bool count_posix_key_value_pairs(
+  const RBTree_Node *node,
+  RBTree_Direction dir,
+  void *visitor_arg
+)
+{
+  uint32_t *count = visitor_arg;
+
+  (void) node;
+  (void) dir;
+
+  ++(*count);
+
+  return false;
+}
+
+static uint32_t get_active_posix_key_value_pairs(void)
+{
+  uint32_t count = 0;
+
+  _Thread_Disable_dispatch();
+  _RBTree_Iterate(
+    &_POSIX_Keys_Key_value_lookup_tree,
+    RBT_LEFT,
+    count_posix_key_value_pairs,
+    &count
+  );
+  _Thread_Enable_dispatch();
+
+  return count;
+}
+
 void rtems_resource_snapshot_take(rtems_resource_snapshot *snapshot)
 {
-  uint32_t *active = &snapshot->rtems_api.active_barriers;
+  uint32_t *active = &snapshot->active_posix_keys;
   size_t i;
+
+  memset(snapshot, 0, sizeof(*snapshot));
 
   _RTEMS_Lock_allocator();
@@ -123,8 +158,5 @@
   _RTEMS_Unlock_allocator();
 
-  #ifndef RTEMS_POSIX_API
-    memset(&snapshot->posix_api, 0, sizeof(snapshot->posix_api));
-  #endif
-
+  snapshot->active_posix_key_value_pairs = get_active_posix_key_value_pairs();
   snapshot->open_files = open_files();
 }
Index: testsuites/psxtests/psxconfig01/init.c
===================================================================
--- testsuites/psxtests/psxconfig01/init.c	(revision 172e953147da1d82bf5a6746b2fe6112a9509ad7)
+++ testsuites/psxtests/psxconfig01/init.c	(revision 7bdb765a67812750b9454d2940512da9fec16d38)
@@ -9,8 +9,8 @@
 /*
  * Copyright (c) 2014. On-Line Applications Research Corporation (OAR).
- * Copyright (c) 2011-2012 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2011-2014 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
- *  Obere Lagerstr. 30
+ *  Dornierstr. 4
  *  82178 Puchheim
  *  Germany
@@ -46,4 +46,9 @@
 #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 5
 
+#define CONFIGURE_MAXIMUM_POSIX_KEYS 23
+#ifdef CONFIGURE_MAXIMUM_POSIX_KEYS
+  #define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS CONFIGURE_MAXIMUM_POSIX_KEYS
+#endif
+
 #define CONFIGURE_MAXIMUM_BARRIERS 2
 #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 7
@@ -61,5 +66,4 @@
 #define CONFIGURE_MAXIMUM_POSIX_BARRIERS 31
 #define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 29
-#define CONFIGURE_MAXIMUM_POSIX_KEYS 23
 #define POSIX_MQ_COUNT 5
 #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 19
@@ -263,4 +267,5 @@
   rtems_resource_snapshot snapshot;
   int i = 0;
+  pthread_key_t key;
 
   TEST_BEGIN();
@@ -298,4 +303,25 @@
     snapshot.rtems_api.active_extensions == CONFIGURE_MAXIMUM_USER_EXTENSIONS
   );
+#endif
+
+#ifdef CONFIGURE_MAXIMUM_POSIX_KEYS
+  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_KEYS; ++i) {
+    eno = pthread_key_create(&key, posix_key_dtor);
+    rtems_test_assert(eno == 0);
+
+    eno = pthread_setspecific(key, (void *) (i + 1));
+    rtems_test_assert(eno == 0);
+  }
+  eno = pthread_key_create(&key, posix_key_dtor);
+  rtems_test_assert(eno == EAGAIN);
+  rtems_resource_snapshot_take(&snapshot);
+  rtems_test_assert(
+    snapshot.active_posix_keys == CONFIGURE_POSIX_KEYS
+  );
+  rtems_test_assert(
+    snapshot.active_posix_key_value_pairs == CONFIGURE_MAXIMUM_POSIX_KEYS
+  );
+#else
+  (void) key;
 #endif
 
@@ -456,16 +482,4 @@
 #endif
 
-#ifdef CONFIGURE_MAXIMUM_POSIX_KEYS
-  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_KEYS; ++i) {
-    pthread_key_t key;
-    eno = pthread_key_create(&key, posix_key_dtor);
-    rtems_test_assert(eno == 0);
-  }
-  rtems_resource_snapshot_take(&snapshot);
-  rtems_test_assert(
-    snapshot.posix_api.active_keys == CONFIGURE_POSIX_KEYS
-  );
-#endif
-
 #ifdef POSIX_MQ_COUNT
   for (i = 0; i < POSIX_MQ_COUNT; ++i) {
