=== modified file 'rules/schema/p2o.xml'
--- old/rules/schema/p2o.xml	2025-04-07 08:20:02 +0000
+++ new/rules/schema/p2o.xml	2025-07-14 09:11:02 +0000
@@ -402,6 +402,7 @@
             <rule>newIdx = newIdx + 1</rule>
          </while>
       </function>
+
    </func-library>
    
    <!-- global variables -->
@@ -673,7 +674,9 @@
       <variable name="extentVal"             type="java.lang.Long" />
       <variable name="extents"               type="java.util.Collection" /> <!-- TODO: not used? -->
       <variable name="extentMap"             init="#(java.util.Map) create('java.util.HashMap')" /> <!-- TODO: not used? -->
+      <variable name="extIndex"              type="java.lang.Long" />
       <variable name="hasUsualExtent"        type="java.lang.Boolean" />
+      <variable name="useExpandedExtent"     type="java.lang.Boolean" />
       <variable name="storeTTPeer"           type="java.lang.Boolean" />
       <variable name="tmpTabCrit"            type="java.util.Map" />
       <variable name="tmpTabKey"             type="com.goldencode.p2j.uast.AstKey" />
@@ -1333,6 +1336,7 @@
          
          <!-- reset usual extent/custom extent flags for all fields-->
          <rule>evalLib('fields_all', this)
+            <action>useExpandedExtent = false</action>
             <action>hasUsualExtent = false</action>
          </rule>
          
@@ -1386,6 +1390,12 @@
                </rule>
             </rule>
 
+            <rule>getConfigParameter("expand-extents", true)) or
+                  (parent.type == prog.temp_table or
+                   parent.type == prog.work_table)
+               <action on="true">useExpandedExtent = true</action>
+            </rule>
+
             <rule>peers = create('java.util.ArrayList')</rule>
             <action>extentVal = this.getAnnotation('extent')</action>
             <rule>extentVal != null
@@ -1498,17 +1508,31 @@
                </rule>
             </rule>
 
-            <!-- check for column collision -->
-            <rule>columns.contains(tmpName)
-               <rule>sqlColumn == null
-                  <action>nextColSuf = execLib("getUniqueSuffix", nextColSuf, tmpName, columns)</action>
-                  <action>tmpName = sprintf("%s%d", tmpName, nextColSuf)</action>
-                  <action on="false">
-                     printfln("WARNING: Column collision because of hint: %s", sqlColumn)
-                  </action>
+            <rule>extentVal != null and extentVal > 0 and useExpandedExtent
+               <variable name="newTmpName"    type="java.lang.String" />
+
+               <rule>extIndex = #(long) 0</rule>
+               <while>extentVal >= extIndex
+                  <rule>extIndex = extIndex + 1</rule>
+                  <rule>newTmpName = sprintf("%s_%d", tmpName, extIndex)</rule>
+                  <rule>columns.contains(newTmpName)
+                     <action>nextColSuf = execLib("getUniqueSuffix", nextColSuf, tmpName, columns)</action>
+                     <action>tmpName = sprintf("%s%d", tmpName, nextColSuf)</action>
+                     <rule>newTmpName = sprintf("%s_%d", tmpName, extIndex)</rule>
+                  </rule>
+                  <rule>columns.add(newTmpName)</rule>
+               </while>
+
+               <rule on="false">columns.contains(tmpName)
+                  <rule>sqlColumn == null
+                     <action>nextColSuf = execLib("getUniqueSuffix", nextColSuf, tmpName, columns)</action>
+                     <action>tmpName = sprintf("%s%d", tmpName, nextColSuf)</action>
+                     <action on="false">
+                        printfln("WARNING: Column collision because of hint: %s", sqlColumn)
+                     </action>
+                  </rule>
                </rule>
             </rule>
-
             <action>columns.add(tmpName)</action>
 
             <!-- escape field name if hinted -->

