Index: cpukit/include/rtems/score/objectimpl.h
===================================================================
--- cpukit/include/rtems/score/objectimpl.h	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ cpukit/include/rtems/score/objectimpl.h	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -127,5 +127,10 @@
   /** This is the number of objects on the Inactive list. */
   Objects_Maximum   inactive;
-  /** This is the number of objects in a block. */
+  /**
+   * @brief This is the number of objects in a block if the automatic extension
+   * is enabled.
+   *
+   * This member is zero if the automatic extension is disabled.
+   */
   Objects_Maximum   objects_per_block;
   /** This is the size in bytes of each object instance. */
@@ -138,6 +143,4 @@
    */
   uint16_t          name_length;
-  /** This is the true if unlimited objects in this class. */
-  bool              auto_extend;
   /** This is the chain of inactive control blocks. */
   Chain_Control     Inactive;
@@ -748,5 +751,5 @@
 )
 {
-  return information->auto_extend ? information->objects_per_block : 0;
+  return information->objects_per_block;
 }
 
@@ -857,4 +860,20 @@
 {
   return _Objects_Get_index( information->maximum_id );
+}
+
+/**
+ * @brief Returns true if the automatic object extension (unlimited objects) is
+ * enabled, otherwise false.
+ *
+ * @param[in] information The object information.
+ *
+ * @retval true The automatic object extension (unlimited objects) is enabled.
+ * @retval false Otherwise.
+ */
+RTEMS_INLINE_ROUTINE Objects_Maximum _Objects_Is_auto_extend(
+  const Objects_Information *information
+)
+{
+  return information->objects_per_block != 0;
 }
 
Index: cpukit/rtems/src/rtemsobjectgetclassinfo.c
===================================================================
--- cpukit/rtems/src/rtemsobjectgetclassinfo.c	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ cpukit/rtems/src/rtemsobjectgetclassinfo.c	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -47,5 +47,5 @@
   info->minimum_id  = _Objects_Get_minimum_id( obj_info->maximum_id );
   info->maximum_id  = obj_info->maximum_id;
-  info->auto_extend = obj_info->auto_extend;
+  info->auto_extend = _Objects_Is_auto_extend( obj_info );
   info->maximum     = _Objects_Get_maximum_index( obj_info );
 
Index: cpukit/score/src/objectallocate.c
===================================================================
--- cpukit/score/src/objectallocate.c	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ cpukit/score/src/objectallocate.c	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -57,5 +57,5 @@
   the_object = _Objects_Get_inactive( information );
 
-  if ( information->auto_extend ) {
+  if ( _Objects_Is_auto_extend( information ) ) {
     /*
      *  If the list is empty then we are out of objects and need to
Index: cpukit/score/src/objectextendinformation.c
===================================================================
--- cpukit/score/src/objectextendinformation.c	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ cpukit/score/src/objectextendinformation.c	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -50,4 +50,5 @@
   uint32_t          index_end;
   uint32_t          index;
+  Objects_Maximum   extend_count;
   Objects_Maximum   old_maximum;
   uint32_t          new_maximum;
@@ -63,5 +64,4 @@
 
   api_class_and_node = information->maximum_id & ~OBJECTS_INDEX_MASK;
-  old_maximum = _Objects_Get_maximum_index( information );
 
   /*
@@ -73,8 +73,12 @@
   block         = 0;
 
-  if ( information->object_blocks == NULL )
+  if ( information->object_blocks == NULL ) {
+    extend_count = _Objects_Get_maximum_index( information );
+    old_maximum = 0;
     block_count = 0;
-  else {
-    block_count = old_maximum / information->objects_per_block;
+  } else {
+    extend_count = information->objects_per_block;
+    old_maximum = _Objects_Get_maximum_index( information );
+    block_count = old_maximum / extend_count;
 
     for ( ; block < block_count; block++ ) {
@@ -83,10 +87,10 @@
         break;
       } else
-        index_base += information->objects_per_block;
-    }
-  }
-  index_end = index_base + information->objects_per_block;
-
-  new_maximum = (uint32_t) old_maximum + information->objects_per_block;
+        index_base += extend_count;
+    }
+  }
+
+  new_maximum = (uint32_t) old_maximum + extend_count;
+  index_end = index_base + extend_count;
 
   /*
@@ -103,7 +107,6 @@
    * generate a fatal error depending on auto-extending being active.
    */
-  object_block_size = information->objects_per_block
-    * information->object_size;
-  if ( information->auto_extend ) {
+  object_block_size = extend_count * information->object_size;
+  if ( _Objects_Is_auto_extend( information ) ) {
     new_object_block = _Workspace_Allocate( object_block_size );
     if ( !new_object_block )
@@ -156,5 +159,5 @@
       + local_table_size
       + block_count * sizeof( *inactive_per_block );
-    if ( information->auto_extend ) {
+    if ( _Objects_Is_auto_extend( information ) ) {
       object_blocks = _Workspace_Allocate( table_size );
       if ( !object_blocks ) {
Index: cpukit/score/src/objectfree.c
===================================================================
--- cpukit/score/src/objectfree.c	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ cpukit/score/src/objectfree.c	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -32,5 +32,5 @@
   _Chain_Append_unprotected( &information->Inactive, &the_object->Node );
 
-  if ( information->auto_extend ) {
+  if ( _Objects_Is_auto_extend( information ) ) {
     Objects_Maximum objects_per_block;
     Objects_Maximum block;
Index: cpukit/score/src/objectinitializeinformation.c
===================================================================
--- cpukit/score/src/objectinitializeinformation.c	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ cpukit/score/src/objectinitializeinformation.c	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -40,9 +40,10 @@
   Objects_Maximum maximum_per_allocation;
 
+  maximum_per_allocation = _Objects_Maximum_per_allocation( maximum );
   information->maximum_id = _Objects_Build_id(
     the_api,
     the_class,
     _Objects_Local_node,
-    0
+    maximum_per_allocation
   );
   information->object_size = object_size;
@@ -56,18 +57,18 @@
    *  Are we operating in limited or unlimited (e.g. auto-extend) mode.
    */
-  information->auto_extend = _Objects_Is_unlimited( maximum );
-  maximum_per_allocation = _Objects_Maximum_per_allocation( maximum );
+  if ( _Objects_Is_unlimited( maximum ) ) {
+    /*
+     *  Unlimited and maximum of zero is illogical.
+     */
+    if ( maximum_per_allocation == 0) {
+      _Internal_error( INTERNAL_ERROR_UNLIMITED_AND_MAXIMUM_IS_0 );
+    }
 
-  /*
-   *  Unlimited and maximum of zero is illogical.
-   */
-  if ( information->auto_extend && maximum_per_allocation == 0) {
-    _Internal_error( INTERNAL_ERROR_UNLIMITED_AND_MAXIMUM_IS_0 );
+    /*
+     *  The allocation unit is the maximum value
+     */
+    information->objects_per_block = maximum_per_allocation;
   }
 
-  /*
-   *  The allocation unit is the maximum value
-   */
-  information->objects_per_block = maximum_per_allocation;
 
   /*
Index: testsuites/samples/unlimited/test1.c
===================================================================
--- testsuites/samples/unlimited/test1.c	(revision 877048c86a4c2ceb50874597cc619d882e1479eb)
+++ testsuites/samples/unlimited/test1.c	(revision 8b0e752fee90af946e0e117ca7d46a7df7814d14)
@@ -31,5 +31,5 @@
 void test1()
 {
-  bool                 auto_extend;
+  Objects_Maximum      objects_per_block;
   rtems_status_code    result;
   uint32_t             task_count = 0;
@@ -50,6 +50,6 @@
   the_information =
     _Objects_Information_table[OBJECTS_CLASSIC_API][OBJECTS_RTEMS_TASKS];
-  auto_extend = the_information->auto_extend;
-  the_information->auto_extend = false;
+  objects_per_block = the_information->objects_per_block;
+  the_information->objects_per_block = 0;
 
   while (task_count < MAX_TASKS)
@@ -102,5 +102,5 @@
   destroy_all_tasks("TEST1");
 
-  the_information->auto_extend = auto_extend;
+  the_information->objects_per_block = objects_per_block;
 
   printf( " TEST1 : completed\n" );
