diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index 2ec7a68..a34afe1 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -648,11 +648,8 @@
 static int GetNext_FullItem(QCBORDecodeContext *me, QCBORItem *pDecodedItem)
 {
    int nReturn;
-   UsefulBufC FullString = NULLUsefulBufC;
-   QCBORStringAllocator *pAlloc =  (QCBORStringAllocator *)me->pStringAllocator;
+   QCBORStringAllocator *pAlloc = (QCBORStringAllocator *)me->pStringAllocator;
    
-   // TODO: can this call to GetNext_Item go in the loop below so there is only
-   // one call to it so it can inline?
    nReturn = GetNext_Item(&(me->InBuf), pDecodedItem, me->bStringAllocateAll ? pAlloc: NULL);
    if(nReturn) {
       goto Done;
@@ -681,6 +678,7 @@
    // There is an indefinite length string to work on...
    // Track which type of string it is
    const uint8_t uStringType = pDecodedItem->uDataType;
+   UsefulBufC FullString = NULLUsefulBufC;
    
    // Loop getting segments of indefinite string
    for(;;) {
@@ -718,7 +716,7 @@
    }
    
 Done:
-   if(nReturn && FullString.ptr) {
+   if(pAlloc && nReturn && FullString.ptr) {
       // Getting item failed, clean up the allocated memory
       (pAlloc->fFree)(pAlloc->pAllocaterContext, (void *)FullString.ptr); // TODO unconst construct
    }
@@ -878,7 +876,27 @@
 
 
 /* Loops processing breaks until a non-break is encountered
- or an error is encountered
+ or an error is encountered.
+ 
+ Case 1) data ends correctly in a break
+ 
+ Case 2) data is short a break
+ 
+ Case 3) data is short other than a break
+ 
+ Case 4) extra break
+ 
+ Case 5) other extra stuff
+ 
+ 
+ Can stop when nesting is exhausted, possibly returning a break
+ 
+ Can stop when getting to a non-break or to end of data
+    return error on end of data or return no error on end of data
+ 
+ All getnexts either return an item or an error so far
+ 
+ 
  */
 static int GetNext_GetNonBreak(QCBORDecodeContext *me, QCBORItem *pDecodedItem)
 {
@@ -921,6 +939,21 @@
    // Record the nesting level for this data item before processing any of
    // decrementing and decsending
    pDecodedItem->uNestingLevel = DecodeNesting_GetLevel(&(me->nesting));
+#if 0
+   // Maybe peek at next item here.
+   {
+      // Only need to do this is current item is indefinite length
+      if(UsefulInputBuf_BytesUnconsumed(&(me->InBuf))) {
+         size_t uPeek = UsefulInputBuf_Tell(&(me->InBuf));
+         QCBORItem Peek;
+         GetNext_Item(&(me->InBuf), &Peek, NULL);
+         if(Peek.uDataType == 99) { // TODO:
+            // Mark current item as end of array / map
+         }
+         UsefulInputBuf_Seek(&(me->InBuf), uPeek);
+      }
+   }
+#endif
    
    if(IsMapOrArray(pDecodedItem->uDataType)) {
       // If the new item is array or map, the nesting level descends
@@ -1041,9 +1074,7 @@
  - Hit end of input while decoding a text or byte string QCBOR_ERR_HIT_END
  
  - Encountered conflicting tags -- e.g., an item is tagged both a date string and an epoch date QCBOR_ERR_UNSUPPORTED
- 
- - Encountered a break, not supported because indefinite lengths are not supported QCBOR_ERR_UNSUPPORTED
- 
+  
  - Encontered an array or mapp that has too many items QCBOR_ERR_ARRAY_TOO_LONG
  
  - Encountered array/map nesting that is too deep QCBOR_ERR_ARRAY_NESTING_TOO_DEEP
@@ -1100,10 +1131,10 @@
 }
 
 
-void QCBORDecode_SetMemPool(QCBORDecodeContext *me, UsefulBuf Pool, bool bAllStrings)
+int QCBORDecode_SetMemPool(QCBORDecodeContext *me, UsefulBuf Pool, bool bAllStrings)
 {
    if(Pool.len < sizeof(MemPool)+1) {
-      return; // Failure will happen when first string needs to be allocated
+      return 1;
    }
    
    MemPool *pMP = (MemPool *)Pool.ptr;
@@ -1119,6 +1150,8 @@
    
    me->pStringAllocator = pMP;
    me->bStringAllocateAll = bAllStrings;
+   
+   return 0;
 }
 
 
