Index: cpukit/score/src/allocatormutex.c
===================================================================
--- cpukit/score/src/allocatormutex.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
+++ cpukit/score/src/allocatormutex.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2017 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/apimutex.h>
+
+static API_Mutex_Control _RTEMS_Allocator_Mutex =
+  API_MUTEX_INITIALIZER( "_Allocator" );
+
+void _RTEMS_Lock_allocator( void )
+{
+  _API_Mutex_Lock( &_RTEMS_Allocator_Mutex );
+}
+
+void _RTEMS_Unlock_allocator( void )
+{
+  _API_Mutex_Unlock( &_RTEMS_Allocator_Mutex );
+}
+
+bool _RTEMS_Allocator_is_owner( void )
+{
+  return _API_Mutex_Is_owner( &_RTEMS_Allocator_Mutex );
+}
Index: cpukit/score/src/apimutex.c
===================================================================
--- cpukit/score/src/apimutex.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/**
- * @file
- *
- * @brief Initialization and Allocation for API Mutex Handler
- *
- * @ingroup ScoreAPIMutex
- */
-
-/*
- *  COPYRIGHT (c) 1989-2007.
- *  On-Line Applications Research Corporation (OAR).
- *
- *  The license and distribution terms for this file may be
- *  found in the file LICENSE in this distribution or at
- *  http://www.rtems.org/license/LICENSE.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <rtems/score/apimutex.h>
-#include <rtems/score/coremuteximpl.h>
-#include <rtems/score/objectimpl.h>
-
-static Objects_Information _API_Mutex_Information;
-
-void _API_Mutex_Initialization(
-  uint32_t maximum_mutexes
-)
-{
-  _Objects_Initialize_information(
-    &_API_Mutex_Information,     /* object information table */
-    OBJECTS_INTERNAL_API,        /* object API */
-    OBJECTS_INTERNAL_MUTEXES,    /* object class */
-    maximum_mutexes,             /* maximum objects of this class */
-    sizeof( API_Mutex_Control ), /* size of this object's control block */
-    false,                       /* true if the name is a string */
-    0,                           /* maximum length of an object name */
-    NULL                         /* Proxy extraction support callout */
-  );
-}
-
-void _API_Mutex_Allocate(
-  API_Mutex_Control **the_mutex
-)
-{
-  API_Mutex_Control *mutex;
-
-  mutex = (API_Mutex_Control *)
-    _Objects_Allocate_unprotected( &_API_Mutex_Information );
-
-  _Assert( mutex != NULL );
-
-  _CORE_recursive_mutex_Initialize( &mutex->Mutex );
-
-  _Objects_Open_u32( &_API_Mutex_Information, &mutex->Object, 1 );
-
-  *the_mutex = mutex;
-}
Index: cpukit/score/src/apimutexisowner.c
===================================================================
--- cpukit/score/src/apimutexisowner.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/apimutexisowner.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -19,12 +19,8 @@
 
 #include <rtems/score/apimutex.h>
-#include <rtems/score/coremuteximpl.h>
-#include <rtems/score/threadimpl.h>
+#include <rtems/score/percpu.h>
 
 bool _API_Mutex_Is_owner( const API_Mutex_Control *the_mutex )
 {
-  return _CORE_mutex_Is_owner(
-    &the_mutex->Mutex.Mutex,
-    _Thread_Get_executing()
-  );
+  return the_mutex->Mutex._Mutex._Queue._owner == _Thread_Get_executing();
 }
Index: cpukit/score/src/apimutexlock.c
===================================================================
--- cpukit/score/src/apimutexlock.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/apimutexlock.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -21,28 +21,16 @@
 
 #include <rtems/score/apimutex.h>
-#include <rtems/score/coremuteximpl.h>
 #include <rtems/score/threadimpl.h>
 
 void _API_Mutex_Lock( API_Mutex_Control *the_mutex )
 {
-  Thread_Life_state    previous_thread_life_state;
-  Thread_queue_Context queue_context;
+  Thread_Life_state previous_thread_life_state;
 
   previous_thread_life_state =
     _Thread_Set_life_protection( THREAD_LIFE_PROTECTED );
 
-  _Thread_queue_Context_initialize( &queue_context );
-  _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
-  _Thread_queue_Context_set_enqueue_do_nothing_extra( &queue_context );
-  _CORE_recursive_mutex_Seize(
-    &the_mutex->Mutex,
-    CORE_MUTEX_TQ_PRIORITY_INHERIT_OPERATIONS,
-    _Thread_Executing,
-    true,
-    _CORE_recursive_mutex_Seize_nested,
-    &queue_context
-  );
+  _Mutex_recursive_Acquire( &the_mutex->Mutex );
 
-  if ( the_mutex->Mutex.nest_level == 0 ) {
+  if ( the_mutex->Mutex._nest_level == 0 ) {
     the_mutex->previous_thread_life_state = previous_thread_life_state;
   }
Index: cpukit/score/src/apimutexunlock.c
===================================================================
--- cpukit/score/src/apimutexunlock.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/apimutexunlock.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -21,23 +21,15 @@
 
 #include <rtems/score/apimutex.h>
-#include <rtems/score/coremuteximpl.h>
+#include <rtems/score/threadimpl.h>
 
 void _API_Mutex_Unlock( API_Mutex_Control *the_mutex )
 {
-  Thread_queue_Context queue_context;
-  Thread_Life_state    previous_thread_life_state;
-  bool                 restore_thread_life_protection;
+  Thread_Life_state previous_thread_life_state;
+  bool              restore_thread_life_protection;
 
   previous_thread_life_state = the_mutex->previous_thread_life_state;
-  restore_thread_life_protection = the_mutex->Mutex.nest_level == 0;
+  restore_thread_life_protection = the_mutex->Mutex._nest_level == 0;
 
-  _Thread_queue_Context_initialize( &queue_context );
-  _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
-  _CORE_recursive_mutex_Surrender(
-    &the_mutex->Mutex,
-    CORE_MUTEX_TQ_PRIORITY_INHERIT_OPERATIONS,
-    _Thread_Executing,
-    &queue_context
-  );
+  _Mutex_recursive_Release( &the_mutex->Mutex );
 
   if ( restore_thread_life_protection ) {
Index: cpukit/score/src/coretod.c
===================================================================
--- cpukit/score/src/coretod.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/coretod.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -20,4 +20,24 @@
 
 #include <rtems/score/todimpl.h>
+#include <rtems/score/apimutex.h>
 
 TOD_Control _TOD;
+
+static API_Mutex_Control _TOD_Mutex = API_MUTEX_INITIALIZER( "_TOD" );
+
+void _TOD_Lock( void )
+{
+  _API_Mutex_Lock( &_TOD_Mutex );
+}
+
+void _TOD_Unlock( void )
+{
+  _API_Mutex_Unlock( &_TOD_Mutex );
+}
+
+#if defined(RTEMS_DEBUG)
+bool _TOD_Is_owner( void )
+{
+  return _API_Mutex_Is_owner( &_TOD_Mutex );
+}
+#endif
Index: cpukit/score/src/coretodset.c
===================================================================
--- cpukit/score/src/coretodset.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/coretodset.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -33,5 +33,5 @@
   uint32_t        cpu_index;
 
-  _Assert( _API_Mutex_Is_owner( _Once_Mutex ) );
+  _Assert( _TOD_Is_owner() );
 
   timespec2bintime( tod, &tod_as_bintime );
Index: cpukit/score/src/debugisownerofallocator.c
===================================================================
--- cpukit/score/src/debugisownerofallocator.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*
- * Copyright (c) 2014-2015 embedded brains GmbH.  All rights reserved.
- *
- *  embedded brains GmbH
- *  Dornierstr. 4
- *  82178 Puchheim
- *  Germany
- *  <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#if HAVE_CONFIG_H
-  #include "config.h"
-#endif
-
-#include <rtems/score/assert.h>
-#include <rtems/score/apimutex.h>
-#include <rtems/score/threadimpl.h>
-
-#if defined( RTEMS_DEBUG )
-  bool _Debug_Is_owner_of_allocator( void )
-  {
-    API_Mutex_Control *mutex = _RTEMS_Allocator_Mutex;
-    bool owner;
-
-    if ( mutex != NULL ) {
-      owner = _API_Mutex_Is_owner( mutex );
-    } else {
-      owner = false;
-    }
-
-    return owner;
-  }
-#endif
Index: cpukit/score/src/libatomic.c
===================================================================
--- cpukit/score/src/libatomic.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/libatomic.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -60,8 +60,6 @@
 }
 
-/*
- * FIXME: The once lock should be only a temporary solution. We need a
- * dedicated internal mutex for this.
- */
+static API_Mutex_Control _Libatomic_Mutex =
+  API_MUTEX_INITIALIZER( "_Libatomic" );
 
 void _Libatomic_Lock_n( void *ptr, __size_t n )
@@ -69,5 +67,5 @@
   (void) ptr;
   (void) n;
-  _Once_Lock();
+  _API_Mutex_Lock( &_Libatomic_Mutex );
 }
 
@@ -76,4 +74,4 @@
   (void) ptr;
   (void) n;
-  _Once_Unlock();
+  _API_Mutex_Unlock( &_Libatomic_Mutex );
 }
Index: cpukit/score/src/objectactivecount.c
===================================================================
--- cpukit/score/src/objectactivecount.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/objectactivecount.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -28,5 +28,5 @@
   size_t maximum;
 
-  _Assert( _Debug_Is_owner_of_allocator() );
+  _Assert( _Objects_Allocator_is_owner() );
 
   inactive = _Chain_Node_count_unprotected( &information->Inactive );
Index: cpukit/score/src/objectallocate.c
===================================================================
--- cpukit/score/src/objectallocate.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/objectallocate.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -44,5 +44,5 @@
 
   _Assert(
-    _Debug_Is_owner_of_allocator()
+    _Objects_Allocator_is_owner()
       || !_System_state_Is_up( _System_state_Get() )
   );
Index: cpukit/score/src/objectextendinformation.c
===================================================================
--- cpukit/score/src/objectextendinformation.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/objectextendinformation.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -57,5 +57,5 @@
 
   _Assert(
-    _Debug_Is_owner_of_allocator()
+    _Objects_Allocator_is_owner()
       || !_System_state_Is_up( _System_state_Get() )
   );
Index: cpukit/score/src/objectfree.c
===================================================================
--- cpukit/score/src/objectfree.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/objectfree.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -30,5 +30,5 @@
   uint32_t    allocation_size = information->allocation_size;
 
-  _Assert( _Debug_Is_owner_of_allocator() );
+  _Assert( _Objects_Allocator_is_owner() );
 
   _Chain_Append_unprotected( &information->Inactive, &the_object->Node );
Index: cpukit/score/src/objectshrinkinformation.c
===================================================================
--- cpukit/score/src/objectshrinkinformation.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/objectshrinkinformation.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -32,5 +32,5 @@
   uint32_t          index_base;
 
-  _Assert( _Debug_Is_owner_of_allocator() );
+  _Assert( _Objects_Allocator_is_owner() );
 
   /*
Index: cpukit/score/src/once.c
===================================================================
--- cpukit/score/src/once.c	(revision a7dcef97e93240b1947a0094b1af91e9b9324a30)
+++ cpukit/score/src/once.c	(revision 6c2b8a4b35536a5f99ba1ef91139485b011dafc1)
@@ -55,2 +55,14 @@
   return eno;
 }
+
+static API_Mutex_Control _Once_Mutex = API_MUTEX_INITIALIZER( "_Once" );
+
+void _Once_Lock( void )
+{
+  _API_Mutex_Lock( &_Once_Mutex );
+}
+
+void _Once_Unlock( void )
+{
+  _API_Mutex_Unlock( &_Once_Mutex );
+}
