Index: libcfa/src/containers/array.hfa
===================================================================
--- libcfa/src/containers/array.hfa	(revision 3eb55f9806679f91fcafa686a33e6c8fdb6a1639)
+++ libcfa/src/containers/array.hfa	(revision 63a4b92a1b215265addfc287907ae92a2316f258)
@@ -25,4 +25,12 @@
 
     Timmed & ?[?]( arpk(Zn, S, Timmed, Tbase) & a, ptrdiff_t i ) {
+        return (Timmed &) a.strides[i];
+    }
+
+    Timmed & ?[?]( arpk(Zn, S, Timmed, Tbase) & a, int i ) {
+        return (Timmed &) a.strides[i];
+    }
+
+    Timmed & ?[?]( arpk(Zn, S, Timmed, Tbase) & a, size_t i ) {
         return (Timmed &) a.strides[i];
     }
@@ -80,44 +88,33 @@
 // Core -[[-,-,-]] operator
 
+#ifdef TRY_BROKEN_DESIRED_MD_SUBSCRIPT
+
 // Desired form.  One definition with recursion on IxBC (worked until Jan 2021, see trac #__TODO__)
-// forall( TA &, TB &, TC &, IxAB, IxBC ... | { TB & ?[?]( TA &, IxAB ); TC & ?[?]( TB &, IxBC ); } )
-// TC & ?[?]( TA & this, IxAB ab, IxBC bc ) {
-//     return this[ab][bc];
-// }
 
-// Workaround form.  Listing all possibilities up to 4 dims.
-forall( TA &, TB &, IxAB | { TB & ?[?]( TA &, IxAB ); }
-            , TC &, IxBC | { TC & ?[?]( TB &, IxBC ); } )
+forall( TA &, TB &, TC &, IxAB, IxBC ... | { TB & ?[?]( TA &, IxAB ); TC & ?[?]( TB &, IxBC ); } )
 TC & ?[?]( TA & this, IxAB ab, IxBC bc ) {
     return this[ab][bc];
 }
-forall( TA &, TB &, IxAB | { TB & ?[?]( TA &, IxAB ); }
-            , TC &, IxBC | { TC & ?[?]( TB &, IxBC ); }
-            , TD &, IxCD | { TD & ?[?]( TC &, IxCD ); } )
-TD & ?[?]( TA & this, IxAB ab, IxBC bc, IxCD cd ) {
-    return this[ab][bc][cd];
-}
-forall( TA &, TB &, IxAB | { TB & ?[?]( TA &, IxAB ); }
-            , TC &, IxBC | { TC & ?[?]( TB &, IxBC ); }
-            , TD &, IxCD | { TD & ?[?]( TC &, IxCD ); }
-            , TE &, IxDE | { TE & ?[?]( TD &, IxDE ); } )
-TE & ?[?]( TA & this, IxAB ab, IxBC bc, IxCD cd, IxDE de ) {
-    return this[ab][bc][cd][de];
+
+#else 
+
+// Workaround form.  Listing all possibilities up to 4 dims.
+
+forall( TA &, TB &, TC &, IxAB_0, IxBC | { TB & ?[?]( TA &, IxAB_0 ); TC & ?[?]( TB &, IxBC ); } )
+TC & ?[?]( TA & this, IxAB_0 ab, IxBC bc ) {
+    return this[ab][bc];
 }
 
-// Adapters for "indexed by ptrdiff_t" implies "indexed by [this other integral type]"
-// Work around restriction that assertions underlying -[[-,-,-]] must match excatly
-forall( C &, E & | { E & ?[?]( C &, ptrdiff_t ); } ) {
+forall( TA &, TB &, TC &, IxAB_0, IxAB_1, IxBC | { TB & ?[?]( TA &, IxAB_0, IxAB_1 ); TC & ?[?]( TB &, IxBC ); } )
+TC & ?[?]( TA & this, IxAB_0 ab0, IxAB_1 ab1, IxBC bc ) {
+    return this[[ab0,ab1]][bc];
+}
 
-    // Targeted to support:  for( i; z(N) ) ... a[[ ..., i, ... ]]
-    E & ?[?]( C & this, size_t i ) {
-        return this[ (ptrdiff_t) i ];
-    }
+forall( TA &, TB &, TC &, IxAB_0, IxAB_1, IxAB_2, IxBC | { TB & ?[?]( TA &, IxAB_0, IxAB_1, IxAB_2 ); TC & ?[?]( TB &, IxBC ); } )
+TC & ?[?]( TA & this, IxAB_0 ab0, IxAB_1 ab1, IxAB_2 ab2, IxBC bc ) {
+    return this[[ab0,ab1,ab2]][bc];
+}
 
-    // Targeted to support:  for( i; 5 ) ... a[[ ..., i, ... ]]
-    E & ?[?]( C & this, int i ) {
-        return this[ (ptrdiff_t) i ];
-    }
-}
+#endif
 
 //
