Index: cpukit/include/rtems/score/objectimpl.h
===================================================================
--- cpukit/include/rtems/score/objectimpl.h	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/include/rtems/score/objectimpl.h	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -133,5 +133,10 @@
   /** This is the number of objects in a block. */
   Objects_Maximum   allocation_size;
-  /** This is the maximum length of names. */
+  /**
+   * @brief This is the maximum length of names.
+   *
+   * A length of zero indicates that this object has a no string name
+   * (OBJECTS_NO_STRING_NAME).
+   */
   uint16_t          name_length;
   /** This field indicates the API of this object class. */
@@ -139,6 +144,4 @@
   /** This is the class of this object set. */
   uint8_t           the_class;
-  /** This is true if names are strings. */
-  bool              is_string;
   /** This is the true if unlimited objects in this class. */
   bool              auto_extend;
@@ -226,6 +229,5 @@
   uint32_t             maximum,
   uint16_t             size,
-  bool                 is_string,
-  uint32_t             maximum_name_length
+  uint16_t             maximum_name_length
 #if defined(RTEMS_MULTIPROCESSING)
   ,
@@ -233,4 +235,10 @@
 #endif
 );
+
+/**
+ * @brief Constant for the object information string name length to indicate
+ * that this object class has no string names.
+ */
+#define OBJECTS_NO_STRING_NAME 0
 
 /**
@@ -262,5 +270,4 @@
     maximum, \
     size, \
-    is_string, \
     maximum_name_length, \
     extract \
@@ -272,5 +279,4 @@
       maximum, \
       size, \
-      is_string, \
       maximum_name_length, \
       extract \
@@ -283,5 +289,4 @@
     maximum, \
     size, \
-    is_string, \
     maximum_name_length, \
     extract \
@@ -293,5 +298,4 @@
       maximum, \
       size, \
-      is_string, \
       maximum_name_length \
     )
@@ -736,4 +740,11 @@
 );
 
+RTEMS_INLINE_ROUTINE bool _Objects_Has_string_name(
+  const Objects_Information *information
+)
+{
+  return information->name_length > 0;
+}
+
 RTEMS_INLINE_ROUTINE Objects_Maximum _Objects_Extend_size(
   const Objects_Information *information
@@ -920,5 +931,5 @@
 )
 {
-  _Assert( !information->is_string );
+  _Assert( !_Objects_Has_string_name( information ) );
   the_object->name.name_u32 = name;
 
@@ -944,5 +955,5 @@
 )
 {
-  _Assert( information->is_string );
+  _Assert( _Objects_Has_string_name( information ) );
   the_object->name.name_p = name;
 
Index: cpukit/posix/src/key.c
===================================================================
--- cpukit/posix/src/key.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/posix/src/key.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -143,6 +143,5 @@
     sizeof( POSIX_Keys_Control ),
                                 /* size of this object's control block */
-    false,                      /* true if names for this object are strings */
-    0,                          /* maximum length of each object's name */
+    OBJECTS_NO_STRING_NAME,     /* maximum length of each object's name */
     NULL                        /* Proxy extraction support callout */
   );
Index: cpukit/posix/src/mqueue.c
===================================================================
--- cpukit/posix/src/mqueue.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/posix/src/mqueue.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -55,5 +55,4 @@
     sizeof( POSIX_Message_queue_Control ),
                                 /* size of this object's control block */
-    true,                       /* true if names for this object are strings */
     _POSIX_PATH_MAX,            /* maximum length of each object's name */
     NULL                        /* Proxy extraction support callout */
Index: cpukit/posix/src/psxsemaphore.c
===================================================================
--- cpukit/posix/src/psxsemaphore.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/posix/src/psxsemaphore.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -46,5 +46,4 @@
     sizeof( POSIX_Semaphore_Control ),
                                 /* size of this object's control block */
-    true,                       /* true if names for this object are strings */
     _POSIX_PATH_MAX,            /* maximum length of each object's name */
     NULL                        /* Proxy extraction support callout */
Index: cpukit/posix/src/ptimer.c
===================================================================
--- cpukit/posix/src/ptimer.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/posix/src/ptimer.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -66,6 +66,5 @@
     sizeof( POSIX_Timer_Control ),
                                 /* size of this object's control block */
-    false,                      /* true if names for this object are strings */
-    0,                          /* maximum length of each object's name */
+    OBJECTS_NO_STRING_NAME,     /* maximum length of an object name */
     NULL                        /* Proxy extraction support callout */
   );
Index: cpukit/posix/src/shm.c
===================================================================
--- cpukit/posix/src/shm.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/posix/src/shm.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -36,5 +36,4 @@
     sizeof( POSIX_Shm_Control ),
                                 /* size of this object's control block */
-    true,                       /* true if names for this object are strings */
     _POSIX_PATH_MAX,            /* maximum length of each object's name */
     NULL                        /* Proxy extraction support callout */
Index: cpukit/rtems/src/barrier.c
===================================================================
--- cpukit/rtems/src/barrier.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/barrier.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -40,6 +40,5 @@
                                    /* maximum objects of this class */
     sizeof( Barrier_Control ),     /* size of this object's control block */
-    false,                         /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH,     /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,        /* maximum length of an object name */
     NULL                           /* Proxy extraction support callout */
   );
Index: cpukit/rtems/src/dpmem.c
===================================================================
--- cpukit/rtems/src/dpmem.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/dpmem.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -38,6 +38,5 @@
     sizeof( Dual_ported_memory_Control ),
                                   /* size of this object's control block */
-    false,                        /* true if names of this object are strings */
-    RTEMS_MAXIMUM_NAME_LENGTH,    /* maximum length of each object's name */
+    OBJECTS_NO_STRING_NAME,       /* maximum length of an object name */
     NULL                          /* Proxy extraction support callout */
   );
Index: cpukit/rtems/src/msg.c
===================================================================
--- cpukit/rtems/src/msg.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/msg.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -40,6 +40,5 @@
     sizeof( Message_queue_Control ),
                                   /* size of this object's control block */
-    false,                        /* true if names of this object are strings */
-    RTEMS_MAXIMUM_NAME_LENGTH,    /* maximum length of each object's name */
+    OBJECTS_NO_STRING_NAME,       /* maximum length of an object name */
     _Message_queue_MP_Send_extract_proxy
                                   /* Proxy extraction support callout */
Index: cpukit/rtems/src/part.c
===================================================================
--- cpukit/rtems/src/part.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/part.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -37,6 +37,5 @@
                                  /* maximum objects of this class */
     sizeof( Partition_Control ), /* size of this object's control block */
-    false,                       /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH,   /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,      /* maximum length of an object name */
     _Partition_MP_Send_extract_proxy  /* Proxy extraction support callout */
   );
Index: cpukit/rtems/src/ratemon.c
===================================================================
--- cpukit/rtems/src/ratemon.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/ratemon.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -37,6 +37,5 @@
                                      /* maximum objects of this class */
     sizeof( Rate_monotonic_Control ),/* size of this object's control block */
-    false,                           /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH,       /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,          /* maximum length of an object name */
     NULL                             /* Proxy extraction support callout */
   );
Index: cpukit/rtems/src/region.c
===================================================================
--- cpukit/rtems/src/region.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/region.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -48,6 +48,5 @@
                                /* maximum objects of this class */
     sizeof( Region_Control ),  /* size of this object's control block */
-    false,                     /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,    /* maximum length of an object name */
     NULL                       /* Proxy extraction support callout */
   );
Index: cpukit/rtems/src/rtemstimer.c
===================================================================
--- cpukit/rtems/src/rtemstimer.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/rtemstimer.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -39,6 +39,5 @@
                                /* maximum objects of this class */
     sizeof( Timer_Control ),   /* size of this object's control block */
-    false,                     /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,    /* maximum length of an object name */
     NULL                       /* Proxy extraction support callout */
   );
Index: cpukit/rtems/src/sem.c
===================================================================
--- cpukit/rtems/src/sem.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/rtems/src/sem.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -34,6 +34,5 @@
                                  /* maximum objects of this class */
     sizeof( Semaphore_Control ), /* size of this object's control block */
-    false,                       /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH,   /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,      /* maximum length of an object name */
     _Semaphore_MP_Send_extract_proxy /* Proxy extraction support callout */
   );
Index: cpukit/sapi/src/extension.c
===================================================================
--- cpukit/sapi/src/extension.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/sapi/src/extension.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -36,6 +36,5 @@
     rtems_configuration_get_maximum_extensions(),
     sizeof( Extension_Control ),
-    false,                     /* true if the name is a string */
-    RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */
+    OBJECTS_NO_STRING_NAME,    /* maximum length of an object name */
     NULL                       /* Proxy extraction support callout */
   );
Index: cpukit/score/src/objectgetnameasstring.c
===================================================================
--- cpukit/score/src/objectgetnameasstring.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/objectgetnameasstring.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -115,5 +115,5 @@
   _Objects_Name_to_string(
     the_object->name,
-    information->is_string,
+    _Objects_Has_string_name( information ),
     name,
     length
Index: cpukit/score/src/objectidtoname.c
===================================================================
--- cpukit/score/src/objectidtoname.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/objectidtoname.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -41,5 +41,5 @@
     return OBJECTS_INVALID_ID;
 
-  if ( information->is_string )
+  if ( _Objects_Has_string_name( information ) )
     return OBJECTS_INVALID_ID;
 
Index: cpukit/score/src/objectinitializeinformation.c
===================================================================
--- cpukit/score/src/objectinitializeinformation.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/objectinitializeinformation.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -31,6 +31,5 @@
   uint32_t             maximum,
   uint16_t             size,
-  bool                 is_string,
-  uint32_t             maximum_name_length
+  uint16_t             maximum_name_length
 #if defined(RTEMS_MULTIPROCESSING)
   ,
@@ -50,5 +49,4 @@
   information->object_blocks      = 0;
   information->inactive           = 0;
-  information->is_string          = is_string;
 
   /*
Index: cpukit/score/src/objectnamespaceremove.c
===================================================================
--- cpukit/score/src/objectnamespaceremove.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/objectnamespaceremove.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -28,5 +28,5 @@
 )
 {
-  _Assert( !information->is_string );
+  _Assert( !_Objects_Has_string_name( information ) );
   the_object->name.name_u32 = 0;
 }
@@ -39,5 +39,5 @@
   char *name;
 
-  _Assert( information->is_string );
+  _Assert( _Objects_Has_string_name( information ) );
   name = RTEMS_DECONST( char *, the_object->name.name_p );
   the_object->name.name_p = NULL;
Index: cpukit/score/src/objectnametoidstring.c
===================================================================
--- cpukit/score/src/objectnametoidstring.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/objectnametoidstring.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -34,5 +34,5 @@
   uint32_t index;
 
-  _Assert( information->is_string );
+  _Assert( _Objects_Has_string_name( information ) );
   _Assert( _Objects_Allocator_is_owner() );
 
Index: cpukit/score/src/objectsetname.c
===================================================================
--- cpukit/score/src/objectsetname.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/objectsetname.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -30,30 +30,31 @@
 )
 {
-  size_t                 length;
-  const char            *s;
+  if ( _Objects_Has_string_name( information ) ) {
+    size_t  length;
+    char   *dup;
 
-  s      = name;
-  length = strnlen( name, information->name_length );
+    length = strnlen( name, information->name_length );
+    dup = _Workspace_String_duplicate( name, length );
+    if ( dup == NULL ) {
+      return false;
+    }
 
-  if ( information->is_string ) {
-    char *d;
+    the_object->name.name_p = dup;
+  } else {
+    char c[ 4 ];
+    size_t i;
 
-    d = _Workspace_Allocate( length + 1 );
-    if ( !d )
-      return false;
+    memset( c, ' ', sizeof( c ) );
 
-    _Workspace_Free( (void *)the_object->name.name_p );
-    the_object->name.name_p = NULL;
+    for ( i = 0; i < 4; ++i ) {
+      if ( name[ i ] == '\0') {
+        break;
+      }
 
-    strncpy( d, name, length );
-    d[length] = '\0';
-    the_object->name.name_p = d;
-  } else {
-    the_object->name.name_u32 =  _Objects_Build_name(
-      ((length)     ? s[ 0 ] : ' '),
-      ((length > 1) ? s[ 1 ] : ' '),
-      ((length > 2) ? s[ 2 ] : ' '),
-      ((length > 3) ? s[ 3 ] : ' ')
-    );
+      c[ i ] = name[ i ];
+    }
+
+    the_object->name.name_u32 =
+      _Objects_Build_name( c[ 0 ], c[ 1 ], c[ 2 ], c[ 3 ] );
   }
 
Index: cpukit/score/src/thread.c
===================================================================
--- cpukit/score/src/thread.c	(revision d6e347387198c7e8fac4b4f6f52c3d9624ebafcd)
+++ cpukit/score/src/thread.c	(revision 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7)
@@ -59,6 +59,5 @@
     maximum,
     _Thread_Control_size,
-    false,
-    RTEMS_MAXIMUM_NAME_LENGTH,
+    OBJECTS_NO_STRING_NAME,
     NULL
   );
