Index: c/src/exec/score/headers/mpci.h
===================================================================
--- c/src/exec/score/headers/mpci.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/headers/mpci.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -29,4 +29,15 @@
 #include <rtems/score/watchdog.h>
 #include <rtems/score/coresem.h>
+
+/*
+ *  The following constants define the stack size requirements for
+ *  the system threads.
+ */
+ 
+#define MPCI_RECEIVE_SERVER_STACK_SIZE \
+  ( STACK_MINIMUM_SIZE + \
+    CPU_MPCI_RECEIVE_SERVER_EXTRA_STACK + \
+    _CPU_Table.extra_mpci_receive_server_stack \
+  )
 
 /*
@@ -93,4 +104,25 @@
  
 /*
+ *  The following enumerated type defines the list of
+ *  internal MP operations.
+ */
+ 
+typedef enum {
+  MPCI_PACKETS_SYSTEM_VERIFY  =  0
+}   MPCI_Internal_Remote_operations;
+ 
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote event operations.
+ */
+ 
+typedef struct {
+  MP_packet_Prefix                 Prefix;
+  MPCI_Internal_Remote_operations  operation;
+  unsigned32                       maximum_nodes;
+  unsigned32                       maximum_global_objects;
+}    MPCI_Internal_packet;
+
+/*
  *  This is the core semaphore which the MPCI Receive Server blocks on.
  */
@@ -136,4 +168,14 @@
   unsigned32               timeout_status
 );
+
+/*
+ *  _MPCI_Create_server
+ *
+ *  DESCRIPTION:
+ *  
+ *  This routine creates the packet receive server used in MP systems.
+ */
+
+void _MPCI_Create_server( void );
 
 /*
@@ -260,5 +302,7 @@
  */
  
-void _MPCI_Receive_server( void );
+Thread _MPCI_Receive_server(
+  unsigned32 ignored
+);
 
 /*PAGE
@@ -272,4 +316,91 @@
  
 void _MPCI_Announce ( void );
+
+/*
+ *  _MPCI_Internal_packets_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+ 
+void _MPCI_Internal_packets_Send_process_packet (
+   MPCI_Internal_Remote_operations operation
+);
+ 
+/*
+ *  _MPCI_Internal_packets_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ *
+ *  This routine is not needed since there are no request
+ *  packets to be sent by this manager.
+ */
+ 
+/*
+ *  _MPCI_Internal_packets_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ *
+ *  This routine is not needed since there are no response
+ *  packets to be sent by this manager.
+ */
+ 
+/*
+ *
+ *  _MPCI_Internal_packets_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+ 
+void _MPCI_Internal_packets_Process_packet (
+  MP_packet_Prefix *the_packet_prefix
+);
+ 
+/*
+ *  _MPCI_Internal_packets_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+ 
+/*
+ *  _MPCI_Internal_packets_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+ 
+/*
+ *  _MPCI_Internal_packets_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is used to obtain a internal threads mp packet.
+ */
+ 
+ MPCI_Internal_packet *_MPCI_Internal_packets_Get_packet ( void );
 
 #ifdef __cplusplus
Index: c/src/exec/score/headers/mppkt.h
===================================================================
--- c/src/exec/score/headers/mppkt.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/headers/mppkt.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -39,5 +39,5 @@
 
 typedef enum {
-  MP_PACKET_INTERNAL_THREADS = 0,
+  MP_PACKET_MPCI_INTERNAL    = 0,
   MP_PACKET_TASKS            = 1,
   MP_PACKET_MESSAGE_QUEUE    = 2,
@@ -49,5 +49,5 @@
 }   MP_packet_Classes;
 
-#define MP_PACKET_CLASSES_FIRST  MP_PACKET_INTERNAL_THREADS
+#define MP_PACKET_CLASSES_FIRST  MP_PACKET_MPCI_INTERNAL
 #define MP_PACKET_CLASSES_LAST   MP_PACKET_SIGNAL
 
Index: c/src/exec/score/headers/object.h
===================================================================
--- c/src/exec/score/headers/object.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/headers/object.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -101,5 +101,5 @@
 #define OBJECTS_CLASSES_FIRST               OBJECTS_NO_CLASS
 #define OBJECTS_CLASSES_LAST                OBJECTS_POSIX_CONDITION_VARIABLES
-#define OBJECTS_CLASSES_FIRST_THREAD_CLASS  OBJECTS_INTERNAL_THREADS
+#define OBJECTS_CLASSES_FIRST_THREAD_CLASS  OBJECTS_MPCI_PACKETS
 #define OBJECTS_CLASSES_LAST_THREAD_CLASS   OBJECTS_POSIX_THREADS
 
Index: c/src/exec/score/headers/sysstate.h
===================================================================
--- c/src/exec/score/headers/sysstate.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/headers/sysstate.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -32,5 +32,5 @@
   SYSTEM_STATE_BEFORE_INITIALIZATION,   /* start -> end of 1st init part */
   SYSTEM_STATE_BEFORE_MULTITASKING,     /* end of 1st -> beginning of 2nd */
-  SYSTEM_STATE_BEGIN_MULTITASKING,      /* beginning of 2nd -> end of SYSI */
+  SYSTEM_STATE_BEGIN_MULTITASKING,      /* just before multitasking starts */
   SYSTEM_STATE_UP,                      /* normal operation */
   SYSTEM_STATE_FAILED                   /* fatal error occurred */
Index: c/src/exec/score/headers/thread.h
===================================================================
--- c/src/exec/score/headers/thread.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/headers/thread.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -162,4 +162,26 @@
 
 /*
+ *  The following constants define the stack size requirements for
+ *  the idle thread.
+ */
+ 
+ 
+#define THREAD_IDLE_STACK_SIZE  STACK_MINIMUM_SIZE
+ 
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+ 
+EXTERN Objects_Information _Thread_Internal_information;
+ 
+/*
+ *  The following define the thread control pointers used to access
+ *  and manipulate the idle thread.
+ */
+ 
+EXTERN Thread_Control *_Thread_Idle;
+
+/*
  *  The following context area contains the context of the "thread"
  *  which invoked the start multitasking routine.  This context is 
@@ -237,4 +259,16 @@
   unsigned32   maximum_proxies
 );
+
+/*
+ *  _Thread_Create_idle
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine creates the idle thread.
+ *
+ *  WARNING!! No thread should be created before this one.
+ */
+ 
+void _Thread_Create_idle( void );
 
 /*
@@ -757,4 +791,40 @@
 );
 
+/*
+ *  _Thread_Internal_allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates an internal thread.
+ */
+ 
+STATIC INLINE Thread_Control *_Thread_Internal_allocate( void );
+ 
+/*
+ *  _Thread_Internal_free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees an internal thread.
+ */
+ 
+STATIC INLINE void _Thread_Internal_free (
+  Thread_Control *the_task
+);
+
+/*
+ *  _Thread_Idle_body
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is the body of the system idle thread.
+ */
+ 
+#if (CPU_PROVIDES_IDLE_THREAD_BODY == FALSE)
+Thread _Thread_Idle_body(
+  unsigned32 ignored
+);
+#endif
+
 #include <rtems/score/thread.inl>
 #include <rtems/score/threadmp.h>
Index: c/src/exec/score/include/rtems/score/mpci.h
===================================================================
--- c/src/exec/score/include/rtems/score/mpci.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/include/rtems/score/mpci.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -29,4 +29,15 @@
 #include <rtems/score/watchdog.h>
 #include <rtems/score/coresem.h>
+
+/*
+ *  The following constants define the stack size requirements for
+ *  the system threads.
+ */
+ 
+#define MPCI_RECEIVE_SERVER_STACK_SIZE \
+  ( STACK_MINIMUM_SIZE + \
+    CPU_MPCI_RECEIVE_SERVER_EXTRA_STACK + \
+    _CPU_Table.extra_mpci_receive_server_stack \
+  )
 
 /*
@@ -93,4 +104,25 @@
  
 /*
+ *  The following enumerated type defines the list of
+ *  internal MP operations.
+ */
+ 
+typedef enum {
+  MPCI_PACKETS_SYSTEM_VERIFY  =  0
+}   MPCI_Internal_Remote_operations;
+ 
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote event operations.
+ */
+ 
+typedef struct {
+  MP_packet_Prefix                 Prefix;
+  MPCI_Internal_Remote_operations  operation;
+  unsigned32                       maximum_nodes;
+  unsigned32                       maximum_global_objects;
+}    MPCI_Internal_packet;
+
+/*
  *  This is the core semaphore which the MPCI Receive Server blocks on.
  */
@@ -136,4 +168,14 @@
   unsigned32               timeout_status
 );
+
+/*
+ *  _MPCI_Create_server
+ *
+ *  DESCRIPTION:
+ *  
+ *  This routine creates the packet receive server used in MP systems.
+ */
+
+void _MPCI_Create_server( void );
 
 /*
@@ -260,5 +302,7 @@
  */
  
-void _MPCI_Receive_server( void );
+Thread _MPCI_Receive_server(
+  unsigned32 ignored
+);
 
 /*PAGE
@@ -272,4 +316,91 @@
  
 void _MPCI_Announce ( void );
+
+/*
+ *  _MPCI_Internal_packets_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+ 
+void _MPCI_Internal_packets_Send_process_packet (
+   MPCI_Internal_Remote_operations operation
+);
+ 
+/*
+ *  _MPCI_Internal_packets_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ *
+ *  This routine is not needed since there are no request
+ *  packets to be sent by this manager.
+ */
+ 
+/*
+ *  _MPCI_Internal_packets_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ *
+ *  This routine is not needed since there are no response
+ *  packets to be sent by this manager.
+ */
+ 
+/*
+ *
+ *  _MPCI_Internal_packets_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+ 
+void _MPCI_Internal_packets_Process_packet (
+  MP_packet_Prefix *the_packet_prefix
+);
+ 
+/*
+ *  _MPCI_Internal_packets_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+ 
+/*
+ *  _MPCI_Internal_packets_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+ 
+/*
+ *  _MPCI_Internal_packets_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is used to obtain a internal threads mp packet.
+ */
+ 
+ MPCI_Internal_packet *_MPCI_Internal_packets_Get_packet ( void );
 
 #ifdef __cplusplus
Index: c/src/exec/score/include/rtems/score/mppkt.h
===================================================================
--- c/src/exec/score/include/rtems/score/mppkt.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/include/rtems/score/mppkt.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -39,5 +39,5 @@
 
 typedef enum {
-  MP_PACKET_INTERNAL_THREADS = 0,
+  MP_PACKET_MPCI_INTERNAL    = 0,
   MP_PACKET_TASKS            = 1,
   MP_PACKET_MESSAGE_QUEUE    = 2,
@@ -49,5 +49,5 @@
 }   MP_packet_Classes;
 
-#define MP_PACKET_CLASSES_FIRST  MP_PACKET_INTERNAL_THREADS
+#define MP_PACKET_CLASSES_FIRST  MP_PACKET_MPCI_INTERNAL
 #define MP_PACKET_CLASSES_LAST   MP_PACKET_SIGNAL
 
Index: c/src/exec/score/include/rtems/score/object.h
===================================================================
--- c/src/exec/score/include/rtems/score/object.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/include/rtems/score/object.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -101,5 +101,5 @@
 #define OBJECTS_CLASSES_FIRST               OBJECTS_NO_CLASS
 #define OBJECTS_CLASSES_LAST                OBJECTS_POSIX_CONDITION_VARIABLES
-#define OBJECTS_CLASSES_FIRST_THREAD_CLASS  OBJECTS_INTERNAL_THREADS
+#define OBJECTS_CLASSES_FIRST_THREAD_CLASS  OBJECTS_MPCI_PACKETS
 #define OBJECTS_CLASSES_LAST_THREAD_CLASS   OBJECTS_POSIX_THREADS
 
Index: c/src/exec/score/include/rtems/score/sysstate.h
===================================================================
--- c/src/exec/score/include/rtems/score/sysstate.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/include/rtems/score/sysstate.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -32,5 +32,5 @@
   SYSTEM_STATE_BEFORE_INITIALIZATION,   /* start -> end of 1st init part */
   SYSTEM_STATE_BEFORE_MULTITASKING,     /* end of 1st -> beginning of 2nd */
-  SYSTEM_STATE_BEGIN_MULTITASKING,      /* beginning of 2nd -> end of SYSI */
+  SYSTEM_STATE_BEGIN_MULTITASKING,      /* just before multitasking starts */
   SYSTEM_STATE_UP,                      /* normal operation */
   SYSTEM_STATE_FAILED                   /* fatal error occurred */
Index: c/src/exec/score/include/rtems/score/thread.h
===================================================================
--- c/src/exec/score/include/rtems/score/thread.h	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/include/rtems/score/thread.h	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -162,4 +162,26 @@
 
 /*
+ *  The following constants define the stack size requirements for
+ *  the idle thread.
+ */
+ 
+ 
+#define THREAD_IDLE_STACK_SIZE  STACK_MINIMUM_SIZE
+ 
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+ 
+EXTERN Objects_Information _Thread_Internal_information;
+ 
+/*
+ *  The following define the thread control pointers used to access
+ *  and manipulate the idle thread.
+ */
+ 
+EXTERN Thread_Control *_Thread_Idle;
+
+/*
  *  The following context area contains the context of the "thread"
  *  which invoked the start multitasking routine.  This context is 
@@ -237,4 +259,16 @@
   unsigned32   maximum_proxies
 );
+
+/*
+ *  _Thread_Create_idle
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine creates the idle thread.
+ *
+ *  WARNING!! No thread should be created before this one.
+ */
+ 
+void _Thread_Create_idle( void );
 
 /*
@@ -757,4 +791,40 @@
 );
 
+/*
+ *  _Thread_Internal_allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates an internal thread.
+ */
+ 
+STATIC INLINE Thread_Control *_Thread_Internal_allocate( void );
+ 
+/*
+ *  _Thread_Internal_free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees an internal thread.
+ */
+ 
+STATIC INLINE void _Thread_Internal_free (
+  Thread_Control *the_task
+);
+
+/*
+ *  _Thread_Idle_body
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is the body of the system idle thread.
+ */
+ 
+#if (CPU_PROVIDES_IDLE_THREAD_BODY == FALSE)
+Thread _Thread_Idle_body(
+  unsigned32 ignored
+);
+#endif
+
 #include <rtems/score/thread.inl>
 #include <rtems/score/threadmp.h>
Index: c/src/exec/score/inline/rtems/score/thread.inl
===================================================================
--- c/src/exec/score/inline/rtems/score/thread.inl	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/inline/rtems/score/thread.inl	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -284,4 +284,28 @@
 }
 
+/*PAGE
+ *
+ *  _Thread_Internal_allocate
+ *
+ */
+ 
+STATIC INLINE Thread_Control *_Thread_Internal_allocate( void )
+{
+  return (Thread_Control *) _Objects_Allocate( &_Thread_Internal_information );
+}
+ 
+/*PAGE
+ *
+ *  _Thread_Internal_free
+ *
+ */
+ 
+STATIC INLINE void _Thread_Internal_free (
+  Thread_Control *the_task
+)
+{
+  _Objects_Free( &_Thread_Internal_information, &the_task->Object );
+}
+
 #endif
 /* end of include file */
Index: c/src/exec/score/inline/thread.inl
===================================================================
--- c/src/exec/score/inline/thread.inl	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/inline/thread.inl	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -284,4 +284,28 @@
 }
 
+/*PAGE
+ *
+ *  _Thread_Internal_allocate
+ *
+ */
+ 
+STATIC INLINE Thread_Control *_Thread_Internal_allocate( void )
+{
+  return (Thread_Control *) _Objects_Allocate( &_Thread_Internal_information );
+}
+ 
+/*PAGE
+ *
+ *  _Thread_Internal_free
+ *
+ */
+ 
+STATIC INLINE void _Thread_Internal_free (
+  Thread_Control *the_task
+)
+{
+  _Objects_Free( &_Thread_Internal_information, &the_task->Object );
+}
+
 #endif
 /* end of include file */
Index: c/src/exec/score/macros/rtems/score/thread.inl
===================================================================
--- c/src/exec/score/macros/rtems/score/thread.inl	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/macros/rtems/score/thread.inl	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -198,4 +198,20 @@
   ( (_code) == THREAD_STATUS_PROXY_BLOCKING )
 
+/*
+ *  _Thread_Internal_allocate
+ *
+ */
+ 
+#define _Thread_Internal_allocate() \
+  ((Thread_Control *) _Objects_Allocate( &_Thread_Internal_information ))
+ 
+/*
+ *  _Thread_Internal_free
+ *
+ */
+ 
+#define _Thread_Internal_free( _the_task ) \
+  _Objects_Free( &_Thread_Internal_information, &(_the_task)->Object )
+
 #endif
 /* end of include file */
Index: c/src/exec/score/macros/thread.inl
===================================================================
--- c/src/exec/score/macros/thread.inl	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/macros/thread.inl	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -198,4 +198,20 @@
   ( (_code) == THREAD_STATUS_PROXY_BLOCKING )
 
+/*
+ *  _Thread_Internal_allocate
+ *
+ */
+ 
+#define _Thread_Internal_allocate() \
+  ((Thread_Control *) _Objects_Allocate( &_Thread_Internal_information ))
+ 
+/*
+ *  _Thread_Internal_free
+ *
+ */
+ 
+#define _Thread_Internal_free( _the_task ) \
+  _Objects_Free( &_Thread_Internal_information, &(_the_task)->Object )
+
 #endif
 /* end of include file */
Index: c/src/exec/score/src/mpci.c
===================================================================
--- c/src/exec/score/src/mpci.c	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/src/mpci.c	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -51,4 +51,20 @@
   _MPCI_table = users_mpci_table;
 
+  if ( !_System_state_Is_multiprocessing )
+    return;
+
+  /*
+   *  Register the MP Process Packet routine.
+   */
+ 
+  _MPCI_Register_packet_processor(
+    MP_PACKET_MPCI_INTERNAL,
+    _MPCI_Internal_packets_Process_packet
+  );
+
+  /*
+   *  Create the counting semaphore used by the MPCI Receive Server.
+   */
+
   attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO;
 
@@ -68,4 +84,47 @@
     NULL,
     timeout_status
+  );
+}
+
+/*PAGE
+ *
+ *  _MPCI_Create_server
+ *
+ *  This subprogram creates the MPCI receive server.
+ */
+
+char *_MPCI_Internal_name = "MPCI";
+
+void _MPCI_Create_server( void )
+{
+
+  if ( !_System_state_Is_multiprocessing )
+    return;
+
+  /*
+   *  Initialize the MPCI Receive Server
+   */
+
+  _MPCI_Receive_server_tcb = _Thread_Internal_allocate();
+ 
+  _Thread_Initialize(
+    &_Thread_Internal_information,
+    _MPCI_Receive_server_tcb,
+    NULL,        /* allocate the stack */
+    MPCI_RECEIVE_SERVER_STACK_SIZE,
+    CPU_ALL_TASKS_ARE_FP,
+    PRIORITY_MINIMUM,
+    FALSE,       /* no preempt */
+    FALSE,       /* not timesliced */
+    0,           /* all interrupts enabled */
+    _MPCI_Internal_name
+  );
+ 
+  _Thread_Start(
+    _MPCI_Receive_server_tcb,
+    THREAD_START_NUMERIC,
+    _MPCI_Receive_server,
+    NULL,
+    0
   );
 }
@@ -287,5 +346,7 @@
  */
 
-void _MPCI_Receive_server( void )
+Thread _MPCI_Receive_server(
+  unsigned32 ignored
+)
 {
  
@@ -295,5 +356,4 @@
  
   executing = _Thread_Executing;
-  _MPCI_Receive_server_tcb = executing;
 
   for ( ; ; ) {
@@ -343,3 +403,122 @@
 }
 
+/*PAGE
+ *
+ *  _MPCI_Internal_packets_Send_process_packet
+ *
+ */
+ 
+void _MPCI_Internal_packets_Send_process_packet (
+   MPCI_Internal_Remote_operations operation
+)
+{
+  MPCI_Internal_packet *the_packet;
+ 
+  switch ( operation ) {
+ 
+    case MPCI_PACKETS_SYSTEM_VERIFY:
+ 
+      the_packet                    = _MPCI_Internal_packets_Get_packet();
+      the_packet->Prefix.the_class  = MP_PACKET_MPCI_INTERNAL;
+      the_packet->Prefix.length     = sizeof ( MPCI_Internal_packet );
+      the_packet->Prefix.to_convert = sizeof ( MPCI_Internal_packet );
+      the_packet->operation         = operation;
+ 
+      the_packet->maximum_nodes = _Objects_Maximum_nodes;
+ 
+      the_packet->maximum_global_objects = _Objects_MP_Maximum_global_objects;
+ 
+      _MPCI_Send_process_packet( MPCI_ALL_NODES, &the_packet->Prefix );
+      break;
+  }
+}
+ 
+/*PAGE
+ *
+ *  _MPCI_Internal_packets_Send_request_packet
+ *
+ *  This subprogram is not needed since there are no request
+ *  packets to be sent by this manager.
+ *
+ */
+ 
+/*PAGE
+ *
+ *  _MPCI_Internal_packets_Send_response_packet
+ *
+ *  This subprogram is not needed since there are no response
+ *  packets to be sent by this manager.
+ *
+ */
+ 
+/*PAGE
+ *
+ *
+ *  _MPCI_Internal_packets_Process_packet
+ *
+ */
+ 
+void _MPCI_Internal_packets_Process_packet (
+  MP_packet_Prefix  *the_packet_prefix
+)
+{
+  MPCI_Internal_packet *the_packet;
+  unsigned32                  maximum_nodes;
+  unsigned32                  maximum_global_objects;
+ 
+  the_packet = (MPCI_Internal_packet *) the_packet_prefix;
+ 
+  switch ( the_packet->operation ) {
+ 
+    case MPCI_PACKETS_SYSTEM_VERIFY:
+ 
+      maximum_nodes          = the_packet->maximum_nodes;
+      maximum_global_objects = the_packet->maximum_global_objects;
+      if ( maximum_nodes != _Objects_Maximum_nodes ||
+           maximum_global_objects != _Objects_MP_Maximum_global_objects ) {
+ 
+        _MPCI_Return_packet( the_packet_prefix );
+ 
+        _Internal_error_Occurred(
+          INTERNAL_ERROR_CORE,
+          TRUE,
+          INTERNAL_ERROR_INCONSISTENT_MP_INFORMATION
+        );
+      }
+ 
+      _MPCI_Return_packet( the_packet_prefix );
+ 
+      break;
+  }
+}
+ 
+/*PAGE
+ *
+ *  _MPCI_Internal_packets_Send_object_was_deleted
+ *
+ *  This subprogram is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+ 
+/*PAGE
+ *
+ *  _MPCI_Internal_packets_Send_extract_proxy
+ *
+ *  This subprogram is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+ 
+/*PAGE
+ *
+ *  _MPCI_Internal_packets_Get_packet
+ *
+ */
+ 
+MPCI_Internal_packet *_MPCI_Internal_packets_Get_packet ( void )
+{
+  return ( (MPCI_Internal_packet *) _MPCI_Get_packet() );
+}
+
 /* end of file */
Index: c/src/exec/score/src/thread.c
===================================================================
--- c/src/exec/score/src/thread.c	(revision 75f09e52dea753e8ff655fcd16088135cd894136)
+++ c/src/exec/score/src/thread.c	(revision adf98bd423cabd47466b13d3432284da0d532176)
@@ -41,4 +41,6 @@
  */
 
+char *_Thread_Idle_name = "IDLE";
+
 void _Thread_Handler_initialization(
   unsigned32   ticks_per_timeslice,
@@ -47,5 +49,5 @@
 )
 {
-  unsigned32 index;
+  unsigned32      index;
 
   _Context_Switch_necessary = FALSE;
@@ -67,4 +69,81 @@
 
   _Thread_MP_Handler_initialization( maximum_proxies );
+
+  /*
+   *  Initialize this class of objects.
+   */
+ 
+  _Objects_Initialize_information(
+    &_Thread_Internal_information,
+    OBJECTS_INTERNAL_THREADS,
+    FALSE,
+    ( _System_state_Is_multiprocessing ) ?  2 : 1,
+    sizeof( Thread_Control ),
+    TRUE,
+    8,
+    TRUE
+  );
+
+}
+
+/*PAGE
+ *
+ *  _Thread_Create_idle
+ */
+
+void _Thread_Create_idle( void )
+{
+  Thread (*idle);
+
+  /*
+   *  The entire workspace is zeroed during its initialization.  Thus, all
+   *  fields not explicitly assigned were explicitly zeroed by
+   *  _Workspace_Initialization.
+   */
+ 
+  _Thread_Idle = _Thread_Internal_allocate();
+ 
+  /*
+   *  Initialize the IDLE task.
+   */
+ 
+#if (CPU_PROVIDES_IDLE_THREAD_BODY == TRUE)
+  idle = _CPU_Thread_Idle_body;
+#else
+  idle = _Thread_Idle_body;
+#endif
+ 
+  if ( _CPU_Table.idle_task )
+    idle = _CPU_Table.idle_task;
+ 
+  _Thread_Initialize(
+    &_Thread_Internal_information,
+    _Thread_Idle,
+    NULL,        /* allocate the stack */
+    THREAD_IDLE_STACK_SIZE,
+    CPU_IDLE_TASK_IS_FP,
+    PRIORITY_MAXIMUM,
+    TRUE,        /* preemptable */
+    FALSE,       /* not timesliced */
+    0,           /* all interrupts enabled */
+    _Thread_Idle_name
+  );
+ 
+  /*
+   *  WARNING!!! This is necessary to "kick" start the system and
+   *             MUST be done before _Thread_Start is invoked.
+   */
+ 
+  _Thread_Heir      =
+  _Thread_Executing = _Thread_Idle;
+ 
+  _Thread_Start(
+    _Thread_Idle,
+    THREAD_START_NUMERIC,
+    idle,
+    NULL,
+    0
+  );
+ 
 }
 
@@ -90,8 +169,5 @@
  */
 
-void _Thread_Start_multitasking(
-  Thread_Control *system_thread,
-  Thread_Control *idle_thread
-)
+void _Thread_Start_multitasking( void )
 {
   /*
@@ -1069,3 +1145,27 @@
   return (Thread_Control *) _Objects_Get( information, id, location );
 }
+
+/*PAGE
+ *
+ *  _Thread_Idle_body
+ *
+ *  This kernel routine is the idle thread.  The idle thread runs any time
+ *  no other thread is ready to run.  This thread loops forever with
+ *  interrupts enabled.
+ *
+ *  Input parameters:
+ *    ignored - this parameter is ignored
+ *
+ *  Output parameters:  NONE
+ */
+ 
+#if (CPU_PROVIDES_IDLE_THREAD_BODY == FALSE)
+Thread _Thread_Idle_body(
+  unsigned32 ignored
+)
+{
+  for( ; ; ) ;
+}
 #endif
+
+#endif
