Index: cpukit/libfs/src/pipe/fifo.c
===================================================================
--- cpukit/libfs/src/pipe/fifo.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/libfs/src/pipe/fifo.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -75,12 +75,14 @@
 static void pipe_interruptible(pipe_control_t *pipe)
 {
-  Objects_Locations location;
-
-  _Barrier_Get(pipe->readBarrier, &location)->Barrier.Wait_queue.state
-    |= STATES_INTERRUPTIBLE_BY_SIGNAL;
-  _Thread_Enable_dispatch();
-  _Barrier_Get(pipe->writeBarrier, &location)->Barrier.Wait_queue.state
-    |= STATES_INTERRUPTIBLE_BY_SIGNAL;
-  _Thread_Enable_dispatch();
+  Objects_Locations  location;
+  Barrier_Control   *the_barrier;
+
+  the_barrier = _Barrier_Get(pipe->readBarrier, &location);
+  the_barrier->Barrier.Wait_queue.state |= STATES_INTERRUPTIBLE_BY_SIGNAL;
+  _Objects_Put( &the_barrier->Object );
+
+  the_barrier = _Barrier_Get(pipe->writeBarrier, &location);
+  the_barrier->Barrier.Wait_queue.state |= STATES_INTERRUPTIBLE_BY_SIGNAL;
+  _Objects_Put( &the_barrier->Object );
 }
 #endif
Index: cpukit/posix/src/canceleval.c
===================================================================
--- cpukit/posix/src/canceleval.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/canceleval.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -36,8 +36,9 @@
        thread_support->cancelability_type == PTHREAD_CANCEL_ASYNCHRONOUS &&
        thread_support->cancelation_requested ) {
+    /* FIXME: This path is broken on SMP */
     _Thread_Unnest_dispatch();
     _POSIX_Thread_Exit( the_thread, PTHREAD_CANCELED );
   } else
-    _Thread_Enable_dispatch();
+    _Objects_Put( &the_thread->Object );
 
 }
Index: cpukit/posix/src/conddestroy.c
===================================================================
--- cpukit/posix/src/conddestroy.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/conddestroy.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,5 +47,5 @@
 
       if ( _Thread_queue_First( &the_cond->Wait_queue ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_cond->Object );
         return EBUSY;
       }
@@ -57,5 +57,5 @@
 
       _POSIX_Condition_variables_Free( the_cond );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_cond->Object );
       return 0;
 
Index: cpukit/posix/src/condsignalsupp.c
===================================================================
--- cpukit/posix/src/condsignalsupp.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/condsignalsupp.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -56,5 +56,5 @@
       } while ( is_broadcast && the_thread );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_cond->Object );
 
       return 0;
Index: cpukit/posix/src/condwaitsupp.c
===================================================================
--- cpukit/posix/src/condwaitsupp.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/condwaitsupp.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -38,13 +38,15 @@
 {
   register POSIX_Condition_variables_Control *the_cond;
+  POSIX_Mutex_Control                        *the_mutex;
   Objects_Locations                           location;
   int                                         status;
   int                                         mutex_status;
 
-  if ( !_POSIX_Mutex_Get( mutex, &location ) ) {
+  the_mutex = _POSIX_Mutex_Get( mutex, &location );
+  if ( !the_mutex ) {
      return EINVAL;
   }
 
-  _Thread_Unnest_dispatch();
+  _Objects_Put_without_thread_dispatch( &the_mutex->Object );
 
   the_cond = _POSIX_Condition_variables_Get( cond, &location );
@@ -54,5 +56,5 @@
 
       if ( the_cond->Mutex && ( the_cond->Mutex != *mutex ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_cond->Object );
         return EINVAL;
       }
@@ -61,5 +63,5 @@
 /* XXX ignore this for now  since behavior is undefined
       if ( mutex_status ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_cond->Object );
         return EINVAL;
       }
@@ -76,5 +78,5 @@
         _Thread_queue_Enqueue( &the_cond->Wait_queue, timeout );
 
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_cond->Object );
 
         /*
@@ -95,5 +97,5 @@
 
       } else {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_cond->Object );
         status = ETIMEDOUT;
       }
Index: cpukit/posix/src/keydelete.c
===================================================================
--- cpukit/posix/src/keydelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/keydelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -52,5 +52,5 @@
        */
       _POSIX_Keys_Free( the_key );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_key->Object );
       return 0;
 
Index: cpukit/posix/src/keygetspecific.c
===================================================================
--- cpukit/posix/src/keygetspecific.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/keygetspecific.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
       index    = _Objects_Get_index( _Thread_Executing->Object.id );
       key_data = (void *) the_key->Values[ api ][ index ];
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_key->Object );
       return key_data;
 
Index: cpukit/posix/src/keysetspecific.c
===================================================================
--- cpukit/posix/src/keysetspecific.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/keysetspecific.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
       index = _Objects_Get_index( _Thread_Executing->Object.id );
       the_key->Values[ api ][ index ] = (void *) value;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_key->Object );
       return 0;
 
Index: cpukit/posix/src/mqueueclose.c
===================================================================
--- cpukit/posix/src/mqueueclose.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mqueueclose.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -79,5 +79,5 @@
       _POSIX_Message_queue_Free_fd( the_mq_fd );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mq_fd->Object );
       return 0;
    }
Index: cpukit/posix/src/mqueuegetattr.c
===================================================================
--- cpukit/posix/src/mqueuegetattr.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mqueuegetattr.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -75,5 +75,5 @@
       mqstat->mq_curmsgs = the_mq->Message_queue.number_of_pending_messages;
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mq_fd->Object );
       return 0;
 
Index: cpukit/posix/src/mqueuenotify.c
===================================================================
--- cpukit/posix/src/mqueuenotify.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mqueuenotify.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -70,5 +70,5 @@
       if ( notification ) {
         if ( _CORE_message_queue_Is_notify_enabled( &the_mq->Message_queue ) ) {
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_mq_fd->Object );
           rtems_set_errno_and_return_minus_one( EBUSY );
         }
@@ -89,5 +89,5 @@
       }
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mq_fd->Object );
       return 0;
 
Index: cpukit/posix/src/mqueuerecvsupp.c
===================================================================
--- cpukit/posix/src/mqueuerecvsupp.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mqueuerecvsupp.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -60,5 +60,5 @@
     case OBJECTS_LOCAL:
       if ( (the_mq_fd->oflag & O_ACCMODE) == O_WRONLY ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_mq_fd->Object );
         rtems_set_errno_and_return_minus_one( EBADF );
       }
@@ -67,5 +67,5 @@
 
       if ( msg_len < the_mq->Message_queue.maximum_message_size ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_mq_fd->Object );
         rtems_set_errno_and_return_minus_one( EMSGSIZE );
       }
@@ -98,5 +98,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mq_fd->Object );
       if (msg_prio) {
         *msg_prio = _POSIX_Message_queue_Priority_from_core(
Index: cpukit/posix/src/mqueuesendsupp.c
===================================================================
--- cpukit/posix/src/mqueuesendsupp.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mqueuesendsupp.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -78,5 +78,5 @@
     case OBJECTS_LOCAL:
       if ( (the_mq_fd->oflag & O_ACCMODE) == O_RDONLY ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_mq_fd->Object );
         rtems_set_errno_and_return_minus_one( EBADF );
       }
@@ -106,5 +106,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mq_fd->Object );
 
       /*
Index: cpukit/posix/src/mqueuesetattr.c
===================================================================
--- cpukit/posix/src/mqueuesetattr.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mqueuesetattr.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -65,5 +65,5 @@
 
       the_mq_fd->oflag = mqstat->mq_flags;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mq_fd->Object );
       return 0;
 
Index: cpukit/posix/src/mutexdestroy.c
===================================================================
--- cpukit/posix/src/mutexdestroy.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mutexdestroy.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
 
       if ( _CORE_mutex_Is_locked( &the_mutex->Mutex ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_mutex->Object );
         return EBUSY;
       }
@@ -59,5 +59,5 @@
 
       _POSIX_Mutex_Free( the_mutex );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mutex->Object );
       return 0;
 
Index: cpukit/posix/src/mutexgetprioceiling.c
===================================================================
--- cpukit/posix/src/mutexgetprioceiling.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mutexgetprioceiling.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -54,5 +54,5 @@
         the_mutex->Mutex.Attributes.priority_ceiling
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mutex->Object );
       return 0;
 
Index: cpukit/posix/src/mutexinit.c
===================================================================
--- cpukit/posix/src/mutexinit.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mutexinit.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -86,5 +86,5 @@
       switch ( location ) {
         case OBJECTS_LOCAL:
-          _Thread_Enable_dispatch();
+          _Objects_Put( &mutex_in_use->Object );
           return EBUSY;
         #if defined(RTEMS_MULTIPROCESSING)
Index: cpukit/posix/src/mutexsetprioceiling.c
===================================================================
--- cpukit/posix/src/mutexsetprioceiling.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mutexsetprioceiling.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -81,5 +81,5 @@
         NULL
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mutex->Object );
 
       return 0;
Index: cpukit/posix/src/mutexunlock.c
===================================================================
--- cpukit/posix/src/mutexunlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/mutexunlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -55,5 +55,5 @@
         NULL
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_mutex->Object );
       return _POSIX_Mutex_Translate_core_mutex_return_code( status );
 
Index: cpukit/posix/src/pbarrierdestroy.c
===================================================================
--- cpukit/posix/src/pbarrierdestroy.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pbarrierdestroy.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -51,5 +51,5 @@
     case OBJECTS_LOCAL:
       if ( the_barrier->Barrier.number_of_waiting_threads != 0 ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_barrier->Object );
         return EBUSY;
       }
@@ -59,5 +59,5 @@
       _POSIX_Barrier_Free( the_barrier );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_barrier->Object );
       return 0;
 
Index: cpukit/posix/src/pbarrierwait.c
===================================================================
--- cpukit/posix/src/pbarrierwait.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pbarrierwait.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -56,5 +56,5 @@
         NULL
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_barrier->Object );
       return _POSIX_Barrier_Translate_core_barrier_return_code(
                 _Thread_Executing->Wait.return_code );
Index: cpukit/posix/src/prwlockdestroy.c
===================================================================
--- cpukit/posix/src/prwlockdestroy.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlockdestroy.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -53,5 +53,5 @@
        */
       if ( _Thread_queue_First( &the_rwlock->RWLock.Wait_queue ) != NULL ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_rwlock->Object );
         return EBUSY;
       }
@@ -65,5 +65,5 @@
       _POSIX_RWLock_Free( the_rwlock );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       return 0;
 
Index: cpukit/posix/src/prwlockrdlock.c
===================================================================
--- cpukit/posix/src/prwlockrdlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlockrdlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -57,5 +57,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       return _POSIX_RWLock_Translate_core_RWLock_return_code(
         (CORE_RWLock_Status) _Thread_Executing->Wait.return_code
Index: cpukit/posix/src/prwlocktimedrdlock.c
===================================================================
--- cpukit/posix/src/prwlocktimedrdlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlocktimedrdlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -83,5 +83,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       if ( !do_wait ) {
         if ( _Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE ) {
Index: cpukit/posix/src/prwlocktimedwrlock.c
===================================================================
--- cpukit/posix/src/prwlocktimedwrlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlocktimedwrlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -85,5 +85,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       if ( !do_wait &&
            (_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
Index: cpukit/posix/src/prwlocktryrdlock.c
===================================================================
--- cpukit/posix/src/prwlocktryrdlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlocktryrdlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -62,5 +62,5 @@
 
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       return _POSIX_RWLock_Translate_core_RWLock_return_code(
         (CORE_RWLock_Status) _Thread_Executing->Wait.return_code
Index: cpukit/posix/src/prwlocktrywrlock.c
===================================================================
--- cpukit/posix/src/prwlocktrywrlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlocktrywrlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -61,5 +61,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       return _POSIX_RWLock_Translate_core_RWLock_return_code(
         (CORE_RWLock_Status) _Thread_Executing->Wait.return_code
Index: cpukit/posix/src/prwlockunlock.c
===================================================================
--- cpukit/posix/src/prwlockunlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlockunlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -56,5 +56,5 @@
     case OBJECTS_LOCAL:
       status = _CORE_RWLock_Release( &the_rwlock->RWLock );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       return _POSIX_RWLock_Translate_core_RWLock_return_code( status );
 
Index: cpukit/posix/src/prwlockwrlock.c
===================================================================
--- cpukit/posix/src/prwlockwrlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/prwlockwrlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -63,5 +63,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_rwlock->Object );
       return _POSIX_RWLock_Translate_core_RWLock_return_code(
         (CORE_RWLock_Status) _Thread_Executing->Wait.return_code
Index: cpukit/posix/src/pspindestroy.c
===================================================================
--- cpukit/posix/src/pspindestroy.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pspindestroy.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -51,5 +51,5 @@
     case OBJECTS_LOCAL:
       if ( _CORE_spinlock_Is_busy( &the_spinlock->Spinlock ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_spinlock->Object );
         return EBUSY;
       }
@@ -59,5 +59,5 @@
       _POSIX_Spinlock_Free( the_spinlock );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_spinlock->Object );
       return 0;
 
Index: cpukit/posix/src/pspinlock.c
===================================================================
--- cpukit/posix/src/pspinlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pspinlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
     case OBJECTS_LOCAL:
       status = _CORE_spinlock_Wait( &the_spinlock->Spinlock, true, 0 );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_spinlock->Object );
       return _POSIX_Spinlock_Translate_core_spinlock_return_code( status );
 
Index: cpukit/posix/src/pspintrylock.c
===================================================================
--- cpukit/posix/src/pspintrylock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pspintrylock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -54,5 +54,5 @@
     case OBJECTS_LOCAL:
       status = _CORE_spinlock_Wait( &the_spinlock->Spinlock, false, 0 );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_spinlock->Object );
       return _POSIX_Spinlock_Translate_core_spinlock_return_code( status );
 
Index: cpukit/posix/src/pspinunlock.c
===================================================================
--- cpukit/posix/src/pspinunlock.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pspinunlock.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -56,5 +56,5 @@
     case OBJECTS_LOCAL:
       status = _CORE_spinlock_Release( &the_spinlock->Spinlock );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_spinlock->Object );
       return _POSIX_Spinlock_Translate_core_spinlock_return_code( status );
 
Index: cpukit/posix/src/pthreaddetach.c
===================================================================
--- cpukit/posix/src/pthreaddetach.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreaddetach.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -44,5 +44,5 @@
       api = the_thread->API_Extensions[ THREAD_API_POSIX ];
       api->detachstate = PTHREAD_CREATE_DETACHED;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return 0;
 
Index: cpukit/posix/src/pthreadequal.c
===================================================================
--- cpukit/posix/src/pthreadequal.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreadequal.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -42,6 +42,8 @@
   return _Objects_Are_ids_equal( t1, t2 );
 #else
-  int               status;
-  Objects_Locations location;
+  int                status;
+  Objects_Locations  location;
+  Thread_Control    *thread_1;
+  Thread_Control    *thread_2;
 
   /*
@@ -55,5 +57,5 @@
    */
 
-  (void) _Thread_Get( t1, &location );
+  thread_1 = _Thread_Get( t1, &location );
   switch ( location ) {
 
@@ -64,12 +66,12 @@
        */
 
-      (void) _Thread_Get( t2, &location );
+      thread_2 = _Thread_Get( t2, &location );
       switch ( location ) {
 
         case OBJECTS_LOCAL:
           status = _Objects_Are_ids_equal( t1, t2 );
-	  _Thread_Unnest_dispatch();
-	  _Thread_Enable_dispatch();
-	  break;
+          _Objects_Put_without_thread_dispatch( &thread_2->Object );
+          _Objects_Put( &thread_1->Object );
+          break;
 
         case OBJECTS_ERROR:
@@ -78,5 +80,5 @@
 #endif
           /* t1 must have been valid so exit the critical section */
-          _Thread_Enable_dispatch();
+          _Objects_Put( &thread_1->Object );
           /* return status == 0 */
           break;
Index: cpukit/posix/src/pthreadexit.c
===================================================================
--- cpukit/posix/src/pthreadexit.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreadexit.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -73,4 +73,5 @@
             STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT
           );
+           /* FIXME: Lock order reversal */
            _RTEMS_Unlock_allocator();
           _Thread_Enable_dispatch();
@@ -88,4 +89,5 @@
       _POSIX_Threads_Free( the_thread );
 
+     /* FIXME: Lock order reversal */
     _RTEMS_Unlock_allocator();
   _Thread_Enable_dispatch();
Index: cpukit/posix/src/pthreadgetschedparam.c
===================================================================
--- cpukit/posix/src/pthreadgetschedparam.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreadgetschedparam.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -54,5 +54,5 @@
           _POSIX_Priority_From_core( the_thread->current_priority );
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return 0;
 
Index: cpukit/posix/src/pthreadjoin.c
===================================================================
--- cpukit/posix/src/pthreadjoin.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreadjoin.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -46,10 +46,10 @@
 
       if ( api->detachstate == PTHREAD_CREATE_DETACHED ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return EINVAL;
       }
 
       if ( _Thread_Is_executing( the_thread ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return EDEADLK;
       }
@@ -71,5 +71,5 @@
         _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
 
       if ( _Thread_Executing->Wait.return_code == EINTR )
Index: cpukit/posix/src/pthreadkill.c
===================================================================
--- cpukit/posix/src/pthreadkill.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreadkill.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -61,5 +61,5 @@
 
         if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN ) {
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_thread->Object );
           return 0;
         }
@@ -72,7 +72,7 @@
 
         if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
-	  _Thread_Dispatch_necessary = true;
+          _Thread_Dispatch_necessary = true;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return 0;
 
Index: cpukit/posix/src/pthreadsetschedparam.c
===================================================================
--- cpukit/posix/src/pthreadsetschedparam.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/pthreadsetschedparam.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -99,5 +99,5 @@
       }
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return 0;
 
Index: cpukit/posix/src/semaphorewaitsupp.c
===================================================================
--- cpukit/posix/src/semaphorewaitsupp.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/semaphorewaitsupp.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -52,5 +52,5 @@
         timeout
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
 
       if ( !_Thread_Executing->Wait.return_code )
Index: cpukit/posix/src/semclose.c
===================================================================
--- cpukit/posix/src/semclose.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/semclose.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -46,5 +46,5 @@
       the_semaphore->open_count -= 1;
       _POSIX_Semaphore_Delete( the_semaphore );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
       return 0;
 
Index: cpukit/posix/src/semdestroy.c
===================================================================
--- cpukit/posix/src/semdestroy.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/semdestroy.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -49,10 +49,10 @@
 
       if ( the_semaphore->named == true ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_semaphore->Object );
         rtems_set_errno_and_return_minus_one( EINVAL );
       }
 
       _POSIX_Semaphore_Delete( the_semaphore );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
       return 0;
 
Index: cpukit/posix/src/semgetvalue.c
===================================================================
--- cpukit/posix/src/semgetvalue.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/semgetvalue.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -46,5 +46,5 @@
     case OBJECTS_LOCAL:
       *sval = _CORE_semaphore_Get_count( &the_semaphore->Semaphore );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
       return 0;
 
Index: cpukit/posix/src/sempost.c
===================================================================
--- cpukit/posix/src/sempost.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/sempost.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -53,5 +53,5 @@
 #endif
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
       return 0;
 
Index: cpukit/posix/src/timercreate.c
===================================================================
--- cpukit/posix/src/timercreate.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/timercreate.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -73,5 +73,5 @@
   ptimer = _POSIX_Timer_Allocate();
   if ( !ptimer ) {
-    _Thread_Enable_dispatch();
+    _Objects_Put( &ptimer->Object );
     rtems_set_errno_and_return_minus_one( EAGAIN );
   }
@@ -98,5 +98,5 @@
 
   *timerid  = ptimer->Object.id;
-  _Thread_Enable_dispatch();
+  _Objects_Put( &ptimer->Object );
   return 0;
 }
Index: cpukit/posix/src/timerdelete.c
===================================================================
--- cpukit/posix/src/timerdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/timerdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -55,5 +55,5 @@
       (void) _Watchdog_Remove( &ptimer->Timer );
       _POSIX_Timer_Free( ptimer );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &ptimer->Object );
       return 0;
 
Index: cpukit/posix/src/timergetoverrun.c
===================================================================
--- cpukit/posix/src/timergetoverrun.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/timergetoverrun.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -41,5 +41,5 @@
       overrun = ptimer->overrun;
       ptimer->overrun = 0;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &ptimer->Object );
       return overrun;
 
Index: cpukit/posix/src/timergettime.c
===================================================================
--- cpukit/posix/src/timergettime.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/timergettime.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -69,5 +69,5 @@
       value->it_interval  = ptimer->timer_data.it_interval;
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &ptimer->Object );
       return 0;
 
Index: cpukit/posix/src/timersettime.c
===================================================================
--- cpukit/posix/src/timersettime.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/posix/src/timersettime.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -96,5 +96,5 @@
          ptimer->state = POSIX_TIMER_STATE_CREATE_STOP;
          /* Returns with success */
-        _Thread_Enable_dispatch();
+        _Objects_Put( &ptimer->Object );
         return 0;
        }
@@ -113,5 +113,5 @@
        );
        if ( !activated ) {
-         _Thread_Enable_dispatch();
+         _Objects_Put( &ptimer->Object );
          return 0;
        }
@@ -128,5 +128,5 @@
        ptimer->state = POSIX_TIMER_STATE_CREATE_RUN;
        _TOD_Get( &ptimer->time );
-       _Thread_Enable_dispatch();
+      _Objects_Put( &ptimer->Object );
        return 0;
 
Index: cpukit/rtems/src/barrierdelete.c
===================================================================
--- cpukit/rtems/src/barrierdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/barrierdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -48,5 +48,5 @@
       _Barrier_Free( the_barrier );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_barrier->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/barrierrelease.c
===================================================================
--- cpukit/rtems/src/barrierrelease.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/barrierrelease.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -57,5 +57,5 @@
     case OBJECTS_LOCAL:
       *released = _CORE_barrier_Release( &the_barrier->Barrier, id, NULL );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_barrier->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/barrierwait.c
===================================================================
--- cpukit/rtems/src/barrierwait.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/barrierwait.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -45,5 +45,5 @@
         NULL
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_barrier->Object );
       return _Barrier_Translate_core_barrier_return_code(
                 _Thread_Executing->Wait.return_code );
Index: cpukit/rtems/src/dpmemdelete.c
===================================================================
--- cpukit/rtems/src/dpmemdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/dpmemdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -41,5 +41,5 @@
       _Objects_Close( &_Dual_ported_memory_Information, &the_port->Object );
       _Dual_ported_memory_Free( the_port );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_port->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/dpmemexternal2internal.c
===================================================================
--- cpukit/rtems/src/dpmemexternal2internal.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/dpmemexternal2internal.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
         *internal = _Addresses_Add_offset( the_port->internal_base,
                                            ending );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_port->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/dpmeminternal2external.c
===================================================================
--- cpukit/rtems/src/dpmeminternal2external.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/dpmeminternal2external.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -51,5 +51,5 @@
         *external = _Addresses_Add_offset( the_port->external_base,
                                            ending );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_port->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/eventsend.c
===================================================================
--- cpukit/rtems/src/eventsend.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/eventsend.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -43,5 +43,5 @@
         STATES_WAITING_FOR_EVENT
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &thread->Object );
       sc = RTEMS_SUCCESSFUL;
       break;
Index: cpukit/rtems/src/eventtimeout.c
===================================================================
--- cpukit/rtems/src/eventtimeout.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/eventtimeout.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -59,5 +59,5 @@
         if ( !the_thread->Wait.count ) {
           _ISR_Enable( level );
-          _Thread_Unnest_dispatch();
+          _Objects_Put_without_thread_dispatch( &the_thread->Object );
           return;
         }
@@ -72,5 +72,5 @@
       _ISR_Enable( level );
       _Thread_Unblock( the_thread );
-      _Thread_Unnest_dispatch();
+      _Objects_Put_without_thread_dispatch( &the_thread->Object );
       break;
 
Index: cpukit/rtems/src/msgqbroadcast.c
===================================================================
--- cpukit/rtems/src/msgqbroadcast.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqbroadcast.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -71,5 +71,5 @@
                     );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
       return
         _Message_queue_Translate_core_message_queue_return_code( core_status );
Index: cpukit/rtems/src/msgqdelete.c
===================================================================
--- cpukit/rtems/src/msgqdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -78,5 +78,5 @@
       }
 #endif
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/msgqflush.c
===================================================================
--- cpukit/rtems/src/msgqflush.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqflush.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -70,5 +70,5 @@
     case OBJECTS_LOCAL:
       *count = _CORE_message_queue_Flush( &the_message_queue->message_queue );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/msgqgetnumberpending.c
===================================================================
--- cpukit/rtems/src/msgqgetnumberpending.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqgetnumberpending.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -68,5 +68,5 @@
     case OBJECTS_LOCAL:
       *count = the_message_queue->message_queue.number_of_pending_messages;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/msgqreceive.c
===================================================================
--- cpukit/rtems/src/msgqreceive.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqreceive.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -72,5 +72,5 @@
         timeout
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
       return _Message_queue_Translate_core_message_queue_return_code(
         _Thread_Executing->Wait.return_code
Index: cpukit/rtems/src/msgqsend.c
===================================================================
--- cpukit/rtems/src/msgqsend.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqsend.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -87,5 +87,5 @@
       );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
 
       /*
Index: cpukit/rtems/src/msgqurgent.c
===================================================================
--- cpukit/rtems/src/msgqurgent.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/msgqurgent.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -69,5 +69,5 @@
         0        /* no timeout */
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_message_queue->Object );
 
       /*
Index: cpukit/rtems/src/partdelete.c
===================================================================
--- cpukit/rtems/src/partdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/partdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -59,8 +59,8 @@
 #endif
 
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_partition->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_partition->Object );
       return RTEMS_RESOURCE_IN_USE;
 
Index: cpukit/rtems/src/partgetbuffer.c
===================================================================
--- cpukit/rtems/src/partgetbuffer.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/partgetbuffer.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,9 +47,9 @@
       if ( the_buffer ) {
         the_partition->number_of_used_blocks += 1;
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_partition->Object );
         *buffer = the_buffer;
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_partition->Object );
       return RTEMS_UNSATISFIED;
 
Index: cpukit/rtems/src/partreturnbuffer.c
===================================================================
--- cpukit/rtems/src/partreturnbuffer.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/partreturnbuffer.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -54,8 +54,8 @@
         _Partition_Free_buffer( the_partition, buffer );
         the_partition->number_of_used_blocks -= 1;
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_partition->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_partition->Object );
       return RTEMS_INVALID_ADDRESS;
 
Index: cpukit/rtems/src/ratemoncancel.c
===================================================================
--- cpukit/rtems/src/ratemoncancel.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemoncancel.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -39,5 +39,5 @@
     case OBJECTS_LOCAL:
       if ( !_Thread_Is_executing( the_period->owner ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_period->Object );
         return RTEMS_NOT_OWNER_OF_RESOURCE;
       }
@@ -45,5 +45,5 @@
       the_period->state = RATE_MONOTONIC_INACTIVE;
       _Scheduler_Release_job(the_period->owner, 0);
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_period->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/ratemondelete.c
===================================================================
--- cpukit/rtems/src/ratemondelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemondelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -43,5 +43,5 @@
       the_period->state = RATE_MONOTONIC_INACTIVE;
       _Rate_monotonic_Free( the_period );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_period->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/ratemongetstatistics.c
===================================================================
--- cpukit/rtems/src/ratemongetstatistics.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemongetstatistics.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -64,5 +64,5 @@
       #endif
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_period->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/ratemongetstatus.c
===================================================================
--- cpukit/rtems/src/ratemongetstatus.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemongetstatus.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -74,5 +74,5 @@
           );
         if (!valid_status) {
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_period->Object );
           return RTEMS_NOT_DEFINED;
         }
@@ -91,5 +91,5 @@
       }
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_period->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/ratemonperiod.c
===================================================================
--- cpukit/rtems/src/ratemonperiod.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemonperiod.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -246,5 +246,5 @@
     case OBJECTS_LOCAL:
       if ( !_Thread_Is_executing( the_period->owner ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_period->Object );
         return RTEMS_NOT_OWNER_OF_RESOURCE;
       }
@@ -264,5 +264,5 @@
             break;
         }
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_period->Object );
         return( return_value );
       }
@@ -288,5 +288,5 @@
 
         _Watchdog_Insert_ticks( &the_period->Timer, length );
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_period->Object );
         return RTEMS_SUCCESSFUL;
       }
@@ -327,5 +327,5 @@
           _Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
 
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_period->Object );
         return RTEMS_SUCCESSFUL;
       }
@@ -344,5 +344,5 @@
         _Watchdog_Insert_ticks( &the_period->Timer, length );
         _Scheduler_Release_job(the_period->owner, the_period->next_length);
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_period->Object );
         return RTEMS_TIMEOUT;
       }
Index: cpukit/rtems/src/ratemonresetstatistics.c
===================================================================
--- cpukit/rtems/src/ratemonresetstatistics.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemonresetstatistics.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -54,5 +54,5 @@
     case OBJECTS_LOCAL:
       _Rate_monotonic_Reset_statistics( the_period );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_period->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/ratemontimeout.c
===================================================================
--- cpukit/rtems/src/ratemontimeout.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/ratemontimeout.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -60,5 +60,5 @@
       } else
         the_period->state = RATE_MONOTONIC_EXPIRED;
-      _Thread_Unnest_dispatch();
+      _Objects_Put_without_thread_dispatch( &the_period->Object );
       break;
 
Index: cpukit/rtems/src/regiongetsegment.c
===================================================================
--- cpukit/rtems/src/regiongetsegment.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/regiongetsegment.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -80,4 +80,5 @@
              *  because this thread is going to block.
              */
+            /* FIXME: Lock order reversal */
             _Thread_Disable_dispatch();
             _RTEMS_Unlock_allocator();
@@ -92,5 +93,5 @@
             _Thread_queue_Enqueue( &the_region->Wait_queue, timeout );
 
-            _Thread_Enable_dispatch();
+            _Objects_Put( &the_region->Object );
 
             return (rtems_status_code) executing->Wait.return_code;
Index: cpukit/rtems/src/rtemsobjectsetname.c
===================================================================
--- cpukit/rtems/src/rtemsobjectsetname.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/rtemsobjectsetname.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -55,5 +55,5 @@
     case OBJECTS_LOCAL:
       _Objects_Set_name( information, the_object, name );
-      _Thread_Enable_dispatch();
+      _Objects_Put( the_object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/semdelete.c
===================================================================
--- cpukit/rtems/src/semdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/semdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -60,5 +60,5 @@
              !_Attributes_Is_simple_binary_semaphore(
                  the_semaphore->attribute_set ) ) {
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_semaphore->Object );
           return RTEMS_RESOURCE_IN_USE;
         }
@@ -93,5 +93,5 @@
       }
 #endif
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/semflush.c
===================================================================
--- cpukit/rtems/src/semflush.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/semflush.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -69,5 +69,5 @@
         );
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_semaphore->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/semrelease.c
===================================================================
--- cpukit/rtems/src/semrelease.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/semrelease.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -92,5 +92,5 @@
           MUTEX_MP_SUPPORT
         );
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_semaphore->Object );
         return _Semaphore_Translate_core_mutex_return_code( mutex_status );
       } else {
@@ -100,5 +100,5 @@
           MUTEX_MP_SUPPORT
         );
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_semaphore->Object );
         return
           _Semaphore_Translate_core_semaphore_return_code( semaphore_status );
Index: cpukit/rtems/src/signalsend.c
===================================================================
--- cpukit/rtems/src/signalsend.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/signalsend.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -57,8 +57,8 @@
           _ASR_Post_signals( signal_set, &asr->signals_pending );
         }
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_NOT_DEFINED;
 
Index: cpukit/rtems/src/systemeventsend.c
===================================================================
--- cpukit/rtems/src/systemeventsend.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/systemeventsend.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -49,5 +49,5 @@
         STATES_WAITING_FOR_SYSTEM_EVENT
       );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &thread->Object );
       sc = RTEMS_SUCCESSFUL;
       break;
Index: cpukit/rtems/src/taskdelete.c
===================================================================
--- cpukit/rtems/src/taskdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -55,9 +55,9 @@
 
       #if defined(RTEMS_DEBUG)
-	if ( !the_information ) {
-	  _Thread_Enable_dispatch();
-	  return RTEMS_INVALID_ID;
-	  /* This should never happen if _Thread_Get() works right */
-	}
+        if ( !the_information ) {
+          _Objects_Put( &the_thread->Object );
+          return RTEMS_INVALID_ID;
+          /* This should never happen if _Thread_Get() works right */
+        }
       #endif
 
@@ -77,6 +77,7 @@
       _RTEMS_tasks_Free( the_thread );
 
+      /* FIXME: Lock order reversal */
       _RTEMS_Unlock_allocator();
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/taskgetnote.c
===================================================================
--- cpukit/rtems/src/taskgetnote.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskgetnote.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -76,5 +76,5 @@
       api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
       *note = api->Notepads[ notepad ];
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/taskissuspended.c
===================================================================
--- cpukit/rtems/src/taskissuspended.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskissuspended.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -61,8 +61,8 @@
     case OBJECTS_LOCAL:
       if ( !_States_Is_suspended( the_thread->current_state ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_ALREADY_SUSPENDED;
 
Index: cpukit/rtems/src/taskrestart.c
===================================================================
--- cpukit/rtems/src/taskrestart.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskrestart.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,8 +47,8 @@
     case OBJECTS_LOCAL:
       if ( _Thread_Restart( the_thread, NULL, argument ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_INCORRECT_STATE;
 
Index: cpukit/rtems/src/taskresume.c
===================================================================
--- cpukit/rtems/src/taskresume.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskresume.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,8 +47,8 @@
       if ( _States_Is_suspended( the_thread->current_state ) ) {
         _Thread_Resume( the_thread );
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_INCORRECT_STATE;
 
Index: cpukit/rtems/src/tasksetnote.c
===================================================================
--- cpukit/rtems/src/tasksetnote.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/tasksetnote.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -73,5 +73,5 @@
       api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
       api->Notepads[ notepad ] = note;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/tasksetpriority.c
===================================================================
--- cpukit/rtems/src/tasksetpriority.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/tasksetpriority.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -62,5 +62,5 @@
           _Thread_Change_priority( the_thread, new_priority, false );
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/taskstart.c
===================================================================
--- cpukit/rtems/src/taskstart.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskstart.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -69,8 +69,8 @@
       if ( _Thread_Start(
              the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_INCORRECT_STATE;
 
Index: cpukit/rtems/src/tasksuspend.c
===================================================================
--- cpukit/rtems/src/tasksuspend.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/tasksuspend.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,8 +47,8 @@
       if ( !_States_Is_suspended( the_thread->current_state ) ) {
         _Thread_Suspend( the_thread );
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_SUCCESSFUL;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_ALREADY_SUSPENDED;
 
Index: cpukit/rtems/src/taskvariableadd.c
===================================================================
--- cpukit/rtems/src/taskvariableadd.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskvariableadd.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,5 +47,5 @@
         if (tvp->ptr == ptr) {
           tvp->dtor = dtor;
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_thread->Object );
           return RTEMS_SUCCESSFUL;
         }
@@ -59,5 +59,5 @@
          _Workspace_Allocate(sizeof(rtems_task_variable_t));
       if (new == NULL) {
-        _Thread_Enable_dispatch();
+        _Objects_Put( &the_thread->Object );
         return RTEMS_NO_MEMORY;
       }
@@ -68,5 +68,5 @@
       new->next = (struct rtems_task_variable_tt *)the_thread->task_variables;
       the_thread->task_variables = new;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/taskvariabledelete.c
===================================================================
--- cpukit/rtems/src/taskvariabledelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskvariabledelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
 
           _RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_thread->Object );
           return RTEMS_SUCCESSFUL;
         }
@@ -56,5 +56,5 @@
         tvp = (rtems_task_variable_t *)tvp->next;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_INVALID_ADDRESS;
 
Index: cpukit/rtems/src/taskvariableget.c
===================================================================
--- cpukit/rtems/src/taskvariableget.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/taskvariableget.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -60,10 +60,10 @@
 	   */
           *result = tvp->tval;
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_thread->Object );
           return RTEMS_SUCCESSFUL;
         }
         tvp = (rtems_task_variable_t *)tvp->next;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_thread->Object );
       return RTEMS_INVALID_ADDRESS;
 
Index: cpukit/rtems/src/timercancel.c
===================================================================
--- cpukit/rtems/src/timercancel.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timercancel.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,5 +50,5 @@
       if ( !_Timer_Is_dormant_class( the_timer->the_class ) )
         (void) _Watchdog_Remove( &the_timer->Ticker );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/timerdelete.c
===================================================================
--- cpukit/rtems/src/timerdelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timerdelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -42,5 +42,5 @@
       (void) _Watchdog_Remove( &the_timer->Ticker );
       _Timer_Free( the_timer );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/timerfireafter.c
===================================================================
--- cpukit/rtems/src/timerfireafter.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timerfireafter.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -60,5 +60,5 @@
         if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) {
           _ISR_Enable( level );
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_timer->Object );
           return RTEMS_SUCCESSFUL;
         }
@@ -75,5 +75,5 @@
 
       _Watchdog_Insert_ticks( &the_timer->Ticker, ticks );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/timerfirewhen.c
===================================================================
--- cpukit/rtems/src/timerfirewhen.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timerfirewhen.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -63,5 +63,5 @@
          seconds - _TOD_Seconds_since_epoch()
        );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/timergetinfo.c
===================================================================
--- cpukit/rtems/src/timergetinfo.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timergetinfo.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -47,5 +47,5 @@
       the_info->start_time = the_timer->Ticker.start_time;
       the_info->stop_time  = the_timer->Ticker.stop_time;
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/timerreset.c
===================================================================
--- cpukit/rtems/src/timerreset.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timerreset.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -67,5 +67,5 @@
         #if defined(RTEMS_DEBUG)
           if ( !timer_server ) {
-            _Thread_Enable_dispatch();
+            _Objects_Put( &the_timer->Object );
             return RTEMS_INCORRECT_STATE;
           }
@@ -81,5 +81,5 @@
         status = RTEMS_NOT_DEFINED;
       }
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return status;
 
Index: cpukit/rtems/src/timerserverfireafter.c
===================================================================
--- cpukit/rtems/src/timerserverfireafter.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timerserverfireafter.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -64,5 +64,5 @@
         if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) {
           _ISR_Enable( level );
-          _Thread_Enable_dispatch();
+          _Objects_Put( &the_timer->Object );
           return RTEMS_SUCCESSFUL;
         }
@@ -80,5 +80,5 @@
       (*timer_server->schedule_operation)( timer_server, the_timer );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/rtems/src/timerserverfirewhen.c
===================================================================
--- cpukit/rtems/src/timerserverfirewhen.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/rtems/src/timerserverfirewhen.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -84,5 +84,5 @@
       (*timer_server->schedule_operation)( timer_server, the_timer );
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_timer->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/sapi/src/extensiondelete.c
===================================================================
--- cpukit/sapi/src/extensiondelete.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/sapi/src/extensiondelete.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -38,5 +38,5 @@
       _Objects_Close( &_Extension_Information, &the_extension->Object );
       _Extension_Free( the_extension );
-      _Thread_Enable_dispatch();
+      _Objects_Put( &the_extension->Object );
       return RTEMS_SUCCESSFUL;
 
Index: cpukit/score/inline/rtems/score/object.inl
===================================================================
--- cpukit/score/inline/rtems/score/object.inl	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/inline/rtems/score/object.inl	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -378,4 +378,33 @@
 
 /**
+ * @brief Puts back an object obtained with _Objects_Get().
+ *
+ * This function decrements the thread dispatch disable level.  The
+ * _Thread_Dispatch() is called if the level reaches zero.
+ */
+RTEMS_INLINE_ROUTINE void _Objects_Put(
+  Objects_Control *the_object
+)
+{
+  (void) the_object;
+  _Thread_Enable_dispatch();
+}
+
+/**
+ * @brief Puts back an object obtained with _Objects_Get().
+ *
+ * This function decrements the thread dispatch disable level.  The
+ * _Thread_Dispatch() is not called if the level reaches zero, thus a thread
+ * dispatch will not take place immediately on the current processor.
+ */
+RTEMS_INLINE_ROUTINE void _Objects_Put_without_thread_dispatch(
+  Objects_Control *the_object
+)
+{
+  (void) the_object;
+  _Thread_Unnest_dispatch();
+}
+
+/**
  * @brief Puts back an object obtained with _Objects_Get_isr_disable().
  */
Index: cpukit/score/src/corerwlocktimeout.c
===================================================================
--- cpukit/score/src/corerwlocktimeout.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/corerwlocktimeout.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -40,5 +40,5 @@
     case OBJECTS_LOCAL:
       _Thread_queue_Process_timeout( the_thread );
-      _Thread_Unnest_dispatch();
+      _Objects_Put_without_thread_dispatch( &the_thread->Object );
       break;
   }
Index: cpukit/score/src/mpci.c
===================================================================
--- cpukit/score/src/mpci.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/mpci.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -268,5 +268,5 @@
       _Thread_queue_Extract( &_MPCI_Remote_blocked_threads, the_thread );
       the_thread->Wait.return_code = the_packet->return_code;
-      _Thread_Unnest_dispatch();
+      _Objects_Put_without_thread_dispatch( &the_thread->Object );
     break;
   }
Index: cpukit/score/src/objectgetnameasstring.c
===================================================================
--- cpukit/score/src/objectgetnameasstring.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/objectgetnameasstring.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -96,5 +96,5 @@
       *d = '\0';
 
-      _Thread_Enable_dispatch();
+      _Objects_Put( the_object );
       return name;
   }
Index: cpukit/score/src/objectidtoname.c
===================================================================
--- cpukit/score/src/objectidtoname.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/objectidtoname.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -64,5 +64,5 @@
 
   *name = the_object->name;
-  _Thread_Enable_dispatch();
+  _Objects_Put( the_object );
   return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
 }
Index: cpukit/score/src/schedulercbsattachthread.c
===================================================================
--- cpukit/score/src/schedulercbsattachthread.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/schedulercbsattachthread.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -33,21 +33,7 @@
   Objects_Locations location;
   Thread_Control *the_thread;
-  Scheduler_CBS_Per_thread *sched_info;
 
   if ( server_id >= _Scheduler_CBS_Maximum_servers )
     return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
-
-  the_thread = _Thread_Get(task_id, &location);
-  /* The routine _Thread_Get may disable dispatch and not enable again. */
-  if ( the_thread )
-    _Thread_Enable_dispatch();
-  if ( !the_thread )
-    return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
-
-  sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
-
-  /* Thread is already attached to a server. */
-  if ( sched_info->cbs_server )
-    return SCHEDULER_CBS_ERROR_FULL;
 
   /* Server is not valid. */
@@ -59,10 +45,28 @@
     return SCHEDULER_CBS_ERROR_FULL;
 
-  _Scheduler_CBS_Server_list[server_id]->task_id = task_id;
-  sched_info->cbs_server = (void *) _Scheduler_CBS_Server_list[server_id];
+  the_thread = _Thread_Get(task_id, &location);
+  /* The routine _Thread_Get may disable dispatch and not enable again. */
+  if ( the_thread ) {
+    Scheduler_CBS_Per_thread *sched_info;
 
-  the_thread->budget_callout   = _Scheduler_CBS_Budget_callout;
-  the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
-  the_thread->is_preemptible   = true;
+    sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
+
+    /* Thread is already attached to a server. */
+    if ( sched_info->cbs_server ) {
+      _Objects_Put( &the_thread->Object );
+      return SCHEDULER_CBS_ERROR_FULL;
+    }
+
+    _Scheduler_CBS_Server_list[server_id]->task_id = task_id;
+    sched_info->cbs_server = (void *) _Scheduler_CBS_Server_list[server_id];
+
+    the_thread->budget_callout   = _Scheduler_CBS_Budget_callout;
+    the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
+    the_thread->is_preemptible   = true;
+
+    _Objects_Put( &the_thread->Object );
+  } else {
+    return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
+  }
 
   return SCHEDULER_CBS_OK;
Index: cpukit/score/src/schedulercbsdetachthread.c
===================================================================
--- cpukit/score/src/schedulercbsdetachthread.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/schedulercbsdetachthread.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -35,13 +35,5 @@
   Scheduler_CBS_Per_thread *sched_info;
 
-  the_thread = _Thread_Get(task_id, &location);
-  /* The routine _Thread_Get may disable dispatch and not enable again. */
-  if ( the_thread ) {
-    _Thread_Enable_dispatch();
-  }
-
   if ( server_id >= _Scheduler_CBS_Maximum_servers )
-    return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
-  if ( !the_thread )
     return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
   /* Server is not valid. */
@@ -52,11 +44,19 @@
     return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
 
-  _Scheduler_CBS_Server_list[server_id]->task_id = -1;
-  sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
-  sched_info->cbs_server = NULL;
+  the_thread = _Thread_Get(task_id, &location);
+  /* The routine _Thread_Get may disable dispatch and not enable again. */
+  if ( the_thread ) {
+    _Scheduler_CBS_Server_list[server_id]->task_id = -1;
+    sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
+    sched_info->cbs_server = NULL;
 
-  the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
-  the_thread->budget_callout   = the_thread->Start.budget_callout;
-  the_thread->is_preemptible   = the_thread->Start.is_preemptible;
+    the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
+    the_thread->budget_callout   = the_thread->Start.budget_callout;
+    the_thread->is_preemptible   = the_thread->Start.is_preemptible;
+
+    _Objects_Put( &the_thread->Object );
+  } else {
+    return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
+  }
 
   return SCHEDULER_CBS_OK;
Index: cpukit/score/src/schedulercbsgetexecutiontime.c
===================================================================
--- cpukit/score/src/schedulercbsgetexecutiontime.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/schedulercbsgetexecutiontime.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -50,7 +50,7 @@
   /* The routine _Thread_Get may disable dispatch and not enable again. */
   if ( the_thread ) {
-    _Thread_Enable_dispatch();
     *exec_time = _Scheduler_CBS_Server_list[server_id]->parameters.budget -
       the_thread->cpu_time_budget;
+    _Objects_Put( &the_thread->Object );
   }
   else {
Index: cpukit/score/src/schedulercbsgetremainingbudget.c
===================================================================
--- cpukit/score/src/schedulercbsgetremainingbudget.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/schedulercbsgetremainingbudget.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -48,6 +48,6 @@
   /* The routine _Thread_Get may disable dispatch and not enable again. */
   if ( the_thread ) {
-    _Thread_Enable_dispatch();
     *remaining_budget = the_thread->cpu_time_budget;
+    _Objects_Put( &the_thread->Object );
   }
   else {
Index: cpukit/score/src/threaddelayended.c
===================================================================
--- cpukit/score/src/threaddelayended.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/threaddelayended.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -55,5 +55,5 @@
           | STATES_INTERRUPTIBLE_BY_SIGNAL
       );
-      _Thread_Unnest_dispatch();
+      _Objects_Put_without_thread_dispatch( &the_thread->Object );
       break;
   }
Index: cpukit/score/src/threadqtimeout.c
===================================================================
--- cpukit/score/src/threadqtimeout.c	(revision 54e9216a0e646113a7e2f23a436731c0cf0fba62)
+++ cpukit/score/src/threadqtimeout.c	(revision 2d2352bab92c51c2fd857b9555242545bd08c95e)
@@ -46,5 +46,5 @@
     case OBJECTS_LOCAL:
       _Thread_queue_Process_timeout( the_thread );
-      _Thread_Unnest_dispatch();
+      _Objects_Put_without_thread_dispatch( &the_thread->Object );
       break;
   }
