diff --git a/inc/qcbor/qcbor_private.h b/inc/qcbor/qcbor_private.h
index 2edeab9..fa66be9 100644
--- a/inc/qcbor/qcbor_private.h
+++ b/inc/qcbor/qcbor_private.h
@@ -70,9 +70,7 @@
  */
 #define QCBOR_NUM_MAPPED_TAGS 4
 
-#define QCBOR_MAX_NUM_MAPPED_TAGS 1024
-
-#define QCBOR_LAST_UNMAPPED_TAG (CBOR_TAG_INVALID16 - QCBOR_MAX_NUM_MAPPED_TAGS)
+#define QCBOR_LAST_UNMAPPED_TAG (CBOR_TAG_INVALID16 - QCBOR_NUM_MAPPED_TAGS)
 
 /*
  PRIVATE DATA STRUCTURE
@@ -120,23 +118,6 @@
 };
 
 
-
-#define QCBOR_NEST_TYPE_SEQUENCE 0x01
-#define QCBOR_NEST_TYPE_ARRAY 0x02
-#define QCBOR_NEST_TYPE_MAP 0x03
-#define QCBOR_NEST_TYPE_IS_INDEFINITE 0x40
-#define QCBOR_NEST_TYPE_IS_BOUNDED 0x80
-
-/*
-#define QCBOR_NEST_TYPE_BSTR 0x00
-#define QCBOR_NEST_TYPE_DEFINITE_ARRAY
-#define QCBOR_NEST_TYPE_INDEFINITE_ARRAY
-#define QCBOR_NEST_TYPE_DEFINITE_MAP
-#define QCBOR_NEST_TYPE_INDEFINITE_MAP
-#define QCBOR_NEST_TYPE_
-*/
-
-
 /*
  PRIVATE DATA STRUCTURE
 
@@ -171,7 +152,7 @@
        Item tracking can either be for definite or indefinite length
        maps / arrays. For definite lengths, the total count and
        current position is tracked. For indefinite length, uTotalCount
-       is 0xffff and there is no tracking in this data structure.
+       is UINT16_MAX and there is no tracking in this data structure.
 
        This also records whether a level is bounded or not.  All
        byte-count tracked levels (the top-level sequence and
@@ -217,7 +198,6 @@
     map, array or bstr. This may be more than one level up, or even
     the end of the input CBOR.
     */
-
 } QCBORDecodeNesting;
 
 
@@ -243,11 +223,9 @@
    UsefulInputBuf InBuf;
 
 
-
    QCBORDecodeNesting nesting;
    
 
-
    // If a string allocator is configured for indefinite-length
    // strings, it is configured here.
    QCORInternalAllocator StringAllocator;
@@ -264,14 +242,9 @@
 #define MAP_OFFSET_CACHE_INVALID UINT32_MAX // TODO: exclude this value from input length
    uint32_t uMapEndOffsetCache;
 
-   uint8_t        uDecodeMode;
-   uint8_t        bStringAllocateAll;
-   uint8_t        uLastError;  // QCBORError stuffed into a uint8_t
-
-   // This is NULL or points to QCBORTagList.
-   // It is type void for the same reason as above.
-   // TODO: remove this?
-   //const void *pCallerConfiguredTagList;
+   uint8_t  uDecodeMode;
+   uint8_t  bStringAllocateAll;
+   uint8_t  uLastError;  // QCBORError stuffed into a uint8_t
 
    uint64_t auMappedTags[QCBOR_NUM_MAPPED_TAGS];
 };
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index dc8450f..515f58f 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -143,6 +143,7 @@
    return (uint8_t)nLevel;
 }
 
+
 inline static uint8_t
 DecodeNesting_GetBoundedModeLevel(QCBORDecodeNesting *pNesting)
 {
@@ -154,12 +155,14 @@
    return (uint8_t)nLevel;
 }
 
+
 static inline size_t
 DecodeNesting_GetMapOrArrayStart(QCBORDecodeNesting *pNesting)
 {
    return pNesting->pCurrentBounded->u.ma.uStartOffset;
 }
 
+
 inline static bool
 DecodeNesting_IsCurrentAtTop(const QCBORDecodeNesting *pNesting)
 {
@@ -170,6 +173,7 @@
    }
 }
 
+
 inline static bool
 DecodeNesting_IsIndefiniteLength(const QCBORDecodeNesting *pNesting)
 {
@@ -185,6 +189,7 @@
    return true;
 }
 
+
 inline static bool
 DecodeNesting_IsDefiniteLength(const QCBORDecodeNesting *pNesting)
 {
@@ -200,6 +205,7 @@
    return true;
 }
 
+
 inline static bool
 DecodeNesting_IsBstrWrapped(const QCBORDecodeNesting *pNesting)
 {
@@ -210,6 +216,7 @@
    return false;
 }
 
+
 inline static bool DecodeNesting_IsCurrentBounded(const QCBORDecodeNesting *pNesting)
 {
    if(pNesting->pCurrent->uLevelType == QCBOR_TYPE_BYTE_STRING) {
@@ -221,6 +228,7 @@
    return false;
 }
 
+
 inline static void DecodeNesting_SetMapOrArrayBoundedMode(const QCBORDecodeNesting *pNesting, size_t uStart)
 {
    // Should be only called on maps and arrays
@@ -228,11 +236,13 @@
    pNesting->pCurrent->u.ma.uStartOffset = (uint32_t)uStart;
 }
 
+
 inline static void DecodeNesting_ClearBoundedMode(const QCBORDecodeNesting *pNesting)
 {
    pNesting->pCurrent->u.ma.uStartOffset = QCBOR_NON_BOUNDED_OFFSET;
 }
 
+
 inline static bool
 DecodeNesting_IsAtEndOfBoundedDefiniteLenMapOrArray(const QCBORDecodeNesting *pNesting)
 {
@@ -260,6 +270,7 @@
    return true;
 }
 
+
 inline static bool
 DecodeNesting_IsEndOfDefiniteLengthMapOrArray(QCBORDecodeNesting *pNesting)
 {
@@ -271,6 +282,7 @@
    }
 }
 
+
 inline static bool
 DecodeNesting_IsCurrentTypeMap(const QCBORDecodeNesting *pNesting)
 {
@@ -279,11 +291,9 @@
    } else {
       return false;
    }
-  /* Seems to be unnecessary  TODO: if(DecodeNesting_IsAtTop(pNesting)) {
-      return false;
-   } */
 }
 
+
 inline static bool
 DecodeNesting_CheckBoundedType(const QCBORDecodeNesting *pNesting, uint8_t uType)
 {
@@ -437,7 +447,7 @@
 }
 
 
-static void
+inline static void
 DecodeNesting_PrepareForMapSearch(QCBORDecodeNesting *pNesting, QCBORDecodeNesting *pSave)
 {
    *pSave = *pNesting;
@@ -1087,12 +1097,11 @@
 }
 
 
-uint64_t ConvertTag(QCBORDecodeContext *me, uint16_t uTagVal) {
-   if(uTagVal < 0xfff0) {
+static uint64_t ConvertTag(QCBORDecodeContext *me, uint16_t uTagVal) {
+   if(uTagVal <= QCBOR_LAST_UNMAPPED_TAG) {
       return uTagVal;
    } else {
-      // TODO constant and error check
-      int x = uTagVal - 0xfff0;
+      int x = uTagVal - (QCBOR_LAST_UNMAPPED_TAG + 1);
       return me->auMappedTags[x];
    }
 }
@@ -1104,7 +1113,6 @@
 static QCBORError
 GetNext_TaggedItem(QCBORDecodeContext *me, QCBORItem *pDecodedItem)
 {
-   // Stack usage: int/ptr: 3 -- 24
    QCBORError nReturn;
 
    uint16_t auTags[QCBOR_MAX_TAGS_PER_ITEM] = {CBOR_TAG_INVALID16,
@@ -1137,25 +1145,27 @@
       }
 
       // Is the tag > 16 bits?
-      if(pDecodedItem->val.uTagV > CBOR_TAG_INVALID16) {
+      if(pDecodedItem->val.uTagV > QCBOR_LAST_UNMAPPED_TAG) {
          size_t uTagMapIndex;
-         // Is there room in the tag map?
+         // Is there room in the tag map, or is it in it already?
          for(uTagMapIndex = 0; uTagMapIndex < QCBOR_NUM_MAPPED_TAGS; uTagMapIndex++) {
             if(me->auMappedTags[uTagMapIndex] == CBOR_TAG_INVALID16) {
                break;
             }
             if(me->auMappedTags[uTagMapIndex] == pDecodedItem->val.uTagV) {
+               // TODO: test this
                break;
             }
          }
          if(uTagMapIndex >= QCBOR_NUM_MAPPED_TAGS) {
             // No room for the tag
-            return 97; // TODO: error code
+            // Should never happen as long as QCBOR_MAX_TAGS_PER_ITEM <= QCBOR_NUM_MAPPED_TAGS
+            return QCBOR_ERR_TOO_MANY_TAGS;
          }
 
-         // Cover the case where tag is new and were it is already in the map
+         // Covers the cases where tag is new and were it is already in the map
          me->auMappedTags[uTagMapIndex] = pDecodedItem->val.uTagV;
-         auTags[uTagIndex] = (uint16_t)(uTagMapIndex + 0xfff0); // TODO: proper constant and cast
+         auTags[uTagIndex] = (uint16_t)(uTagMapIndex + QCBOR_LAST_UNMAPPED_TAG + 1);
 
       } else {
          auTags[uTagIndex] = (uint16_t)pDecodedItem->val.uTagV;
@@ -1987,12 +1997,8 @@
 {
    if(uIndex > QCBOR_MAX_TAGS_PER_ITEM) {
       return CBOR_TAG_INVALID16;
-   } else if(pItem->uTags[uIndex] <= QCBOR_LAST_UNMAPPED_TAG) {
-      return pItem->uTags[uIndex];
-   } else if(pItem->uTags[uIndex] < QCBOR_NUM_MAPPED_TAGS + QCBOR_LAST_UNMAPPED_TAG) {
-      return pMe->auMappedTags[pItem->uTags[uIndex] - QCBOR_LAST_UNMAPPED_TAG];
    } else {
-      return CBOR_TAG_INVALID16;
+      return ConvertTag(pMe, pItem->uTags[uIndex]);
    }
 }
 
@@ -2875,7 +2881,8 @@
 
    if(DecodeNesting_IsDefiniteLength(&(pMe->nesting))) {
       /* Reverse the decrement done by GetNext() for the bstr as
-       so the increment in ExitExit()->Ascender() will work right. */
+       so the increment in NestLevelAscender called by ExitBoundedLevel()
+       will work right. */
       // TODO: method for this
       pMe->nesting.pCurrent->u.ma.uCountCursor++;
    }
@@ -4153,6 +4160,8 @@
    */
    switch(pItem->uDataType) {
          // TODO: type float
+
+#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
       case QCBOR_TYPE_DECIMAL_FRACTION:
          if(uOptions & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
             // TODO: rounding and overflow errors
@@ -4171,6 +4180,7 @@
             return QCBOR_ERR_CONVERSION_NOT_REQUESTED;
          }
          break;
+#endif /* ndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
 
       case QCBOR_TYPE_POSBIGNUM:
          if(uOptions & QCBOR_CONVERT_TYPE_BIG_NUM) {
@@ -4188,6 +4198,7 @@
          }
          break;
 
+#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_BIGNUM:
          if(uOptions & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
             double dMantissa = ConvertBigNumToDouble(pItem->val.expAndMantissa.Mantissa.bigNum);
@@ -4223,6 +4234,8 @@
             return QCBOR_ERR_CONVERSION_NOT_REQUESTED;
          }
          break;
+#endif /* ndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
+
 
       default:
          return QCBOR_ERR_UNEXPECTED_TYPE;
@@ -4301,6 +4314,7 @@
 }
 
 
+#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
 void FarfDecimalFraction(QCBORDecodeContext *pMe,
                          uint8_t             uTagRequirement,
                          QCBORItem          *pItem,
@@ -4382,6 +4396,7 @@
    
    FarfDecimalFraction(pMe, uTagRequirement, &Item, pnMantissa, pnExponent);
 }
+#endif /* ndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
 
 
 UsefulBufC ConvertIntToBigNum(uint64_t uInt, UsefulBuf Buffer)
@@ -4403,6 +4418,8 @@
 }
 
 
+#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
+
 void QCBORDecode_GetDecimalFractionBigN(QCBORDecodeContext *pMe,
                                         uint8_t             uTagRequirement,
                                         int64_t             nLabel,
@@ -4456,3 +4473,4 @@
          pMe->uLastError = QCBOR_ERR_UNEXPECTED_TYPE;
    }
 }
+#endif /* ndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
