diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index 1d6fd58..68fe20a 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -92,26 +92,44 @@
    return pNesting->pCurrent != &(pNesting->pMapsAndArrays[0]);
 }
 
+inline static int IsIndefiniteLength(const QCBORDecodeNesting *pNesting)
+{
+   if(!DecodeNesting_IsNested(pNesting)) {
+      return 0;
+   }
+   
+   return pNesting->pCurrent->uCount == UINT16_MAX;
+}
+
 inline static int DecodeNesting_TypeIsMap(const QCBORDecodeNesting *pNesting)
 {
-   if(!DecodeNesting_IsNested(pNesting))
+   if(!DecodeNesting_IsNested(pNesting)) {
       return 0;
+   }
    
    return CBOR_MAJOR_TYPE_MAP == pNesting->pCurrent->uMajorType;
 }
 
-inline static void DecodeNesting_Decrement(QCBORDecodeNesting *pNesting, uint8_t uDataType)
+inline static void DecodeNesting_Decrement(QCBORDecodeNesting *pNesting)
 {
    if(!DecodeNesting_IsNested(pNesting)) {
       return;  // at top level where there is no tracking
    }
    
-   // Decrement
-   pNesting->pCurrent->uCount--;
-   
-   // Pop up nesting levels if the counts at the levels is zero
-   while(0 == pNesting->pCurrent->uCount && DecodeNesting_IsNested(pNesting)) {
+   if(IsIndefiniteLength(pNesting)) {
+      // Decrement only gets called once. Only at the end of the array/map
+      // when the break is encountered. There is no tracking of the number
+      // of items in the array/map.
       pNesting->pCurrent--;
+
+   } else {
+      // Decrement
+      pNesting->pCurrent->uCount--;
+   
+      // Pop up nesting levels if the counts at the levels is zero
+      while(0 == pNesting->pCurrent->uCount && DecodeNesting_IsNested(pNesting)) {
+         pNesting->pCurrent--;
+      }
    }
 }
 
@@ -166,6 +184,15 @@
 
 
 /*
+ Public function, see header file
+ */
+void QCBOR_Decode_SetUpAllocator(QCBORDecodeContext *pCtx, const QCBORStringAllocator *pAllocator)
+{
+    pCtx->pStringAllocator = (void *)pAllocator;
+}
+
+
+/*
  This decodes the fundamental part of a CBOR data item, the type and number
  
  This is the Counterpart to InsertEncodedTypeAndNumber().
@@ -211,10 +238,11 @@
       case ADDINFO_RESERVED1: // reserved by CBOR spec
       case ADDINFO_RESERVED2: // reserved by CBOR spec
       case ADDINFO_RESERVED3: // reserved by CBOR spec
-      case LEN_IS_INDEFINITE: // indefinite types not supported (yet)
          nReturn = QCBOR_ERR_UNSUPPORTED;
          goto Done;
-         
+
+       case LEN_IS_INDEFINITE:
+           // Fall through OK to see what happens: TODO: check this.
       default:
          uTmpValue = uAdditionalInfo;
          break;
@@ -299,6 +327,10 @@
 #error QCBOR_TYPE_UNDEF macro value wrong
 #endif
 
+#if QCBOR_TYPE_BREAK != CBOR_SIMPLE_BREAK
+#error QCBOR_TYPE_BREAK macro value wrong
+#endif
+
 #if QCBOR_TYPE_DOUBLE != DOUBLE_PREC_FLOAT
 #error QCBOR_TYPE_DOUBLE macro value wrong
 #endif
@@ -323,7 +355,6 @@
       case ADDINFO_RESERVED1:  // 28
       case ADDINFO_RESERVED2:  // 29
       case ADDINFO_RESERVED3:  // 30
-      case CBOR_SIMPLE_BREAK:  // 31
          nReturn = QCBOR_ERR_UNSUPPORTED;
          break;
          
@@ -331,6 +362,7 @@
       case CBOR_SIMPLEV_TRUE:  // 21
       case CBOR_SIMPLEV_NULL:  // 22
       case CBOR_SIMPLEV_UNDEF: // 23
+      case CBOR_SIMPLE_BREAK:  // 31
          break; // nothing to do
          
       case CBOR_SIMPLEV_ONEBYTE: // 24
@@ -591,7 +623,11 @@
             nReturn = QCBOR_ERR_ARRAY_TOO_LONG;
             goto Done;
          }
-         pDecodedItem->val.uCount = uNumber; // type conversion OK because of check above
+         if(uAdditionalInfo == LEN_IS_INDEFINITE) {
+            pDecodedItem->val.uCount = UINT16_MAX;
+         } else {
+            pDecodedItem->val.uCount = (uint16_t)uNumber; // type conversion OK because of check above
+         }
          pDecodedItem->uDataType  = uMajorType; // C preproc #if above makes sure constants align
          break;
          
@@ -678,9 +714,19 @@
    if(IsMapOrArray(pDecodedItem->uDataType) && pDecodedItem->val.uCount) {
       nReturn = DecodeNesting_Descend(&(me->nesting), pDecodedItem->uDataType, pDecodedItem->val.uCount);
    } else {
-      // Track number of items in maps and arrays and ascend nesting if all are consumed
-      // Note that an empty array or map is like a integer or string in effect here
-      DecodeNesting_Decrement(&(me->nesting), pDecodedItem->uDataType);
+      if(!IsIndefiniteLength(&(me->nesting))) {
+         // Is a definite length array or map
+         // Track number of items in maps and arrays and ascend nesting if all are consumed
+         // Note that an empty array or map is like a integer or string in effect here
+         DecodeNesting_Decrement(&(me->nesting));
+      } else {
+         // Is an indefinite length array or map
+         if(pDecodedItem->uDataType == QCBOR_TYPE_BREAK) {
+            // Only decrement when the end is encountered.
+            DecodeNesting_Decrement(&(me->nesting));
+            // TODO: get another item here....
+         }
+      }
    }
    
 Done:
