diff --git a/Makefile b/Makefile
index ff12907..206c440 100644
--- a/Makefile
+++ b/Makefile
@@ -34,9 +34,15 @@
           src/ieee754.o \
           src/qcbor_err_to_str.o
 
-TEST_OBJ=test/UsefulBuf_Tests.o test/qcbor_encode_tests.o \
-    test/qcbor_decode_tests.o test/run_tests.o \
-    test/float_tests.o test/half_to_double_from_rfc7049.o example.o tag-examples.o ub-example.o
+TEST_OBJ=test/UsefulBuf_Tests.o \
+         test/qcbor_encode_tests.o \
+         test/qcbor_decode_tests.o \
+         test/run_tests.o \
+         test/float_tests.o \
+         test/half_to_double_from_rfc7049.o \
+         example.o \
+         tag-examples.o \
+         ub-example.o
 
 .PHONY: all so install uninstall clean warn
 
@@ -65,7 +71,9 @@
 PUBLIC_INTERFACE=inc/qcbor/UsefulBuf.h \
                  inc/qcbor/qcbor_private.h \
                  inc/qcbor/qcbor_common.h \
-                 inc/qcbor/qcbor_encode.h \
+                 inc/qcbor/qcbor_main_encode.h \
+                 inc/qcbor/qcbor_number_encode.h \
+                 inc/qcbor/qcbor_tag_encode.h \
                  inc/qcbor/qcbor_decode.h \
                  inc/qcbor/qcbor_main_decode.h \
                  inc/qcbor/qcbor_spiffy_decode.h \
@@ -74,11 +82,18 @@
 
 src/UsefulBuf.o: inc/qcbor/UsefulBuf.h
 
-src/qcbor_encode.o: inc/qcbor/UsefulBuf.h \
-                    inc/qcbor/qcbor_private.h \
-                    inc/qcbor/qcbor_common.h \
-                    inc/qcbor/qcbor_encode.h \
-                    src/ieee754.h
+src/qcbor_main_encode.o: inc/qcbor/UsefulBuf.h \
+                         inc/qcbor/qcbor_private.h \
+                         inc/qcbor/qcbor_common.h \
+                         inc/qcbor/qcbor_main_encode.h
+
+src/qcbor_tag_encode.o: inc/qcbor/UsefulBuf.h \
+                        inc/qcbor/qcbor_private.h \
+                        inc/qcbor/qcbor_common.h \
+                        inc/qcbor/qcbor_main_encode.h \
+                        inc/qcbor/qcbor_number_encode.h \
+                        inc/qcbor/qcbor_tag_encode.h \
+                        src/ieee754.h
 
 src/qcbor_main_decode.o: inc/qcbor/UsefulBuf.h \
                          inc/qcbor/qcbor_private.h \
@@ -97,6 +112,14 @@
                         src/decode_nesting.h \
                         inc/qcbor/qcbor_tag_decode.h
 
+src/qcbor_spiffy_decode.o: inc/qcbor/UsefulBuf.h \
+                        inc/qcbor/qcbor_private.h \
+                        inc/qcbor/qcbor_common.h \
+                        inc/qcbor/qcbor_main_decode.h \
+                        inc/qcbor/qcbor_spiffy_decode.h \
+                        src/decode_nesting.h \
+                        inc/qcbor/qcbor_tag_decode.h
+
 src/qcbor_number_decode.o: inc/qcbor/UsefulBuf.h \
                            inc/qcbor/qcbor_private.h \
                            inc/qcbor/qcbor_common.h \
@@ -136,8 +159,16 @@
 	install -m 644 inc/qcbor/qcbor.h $(DESTDIR)$(PREFIX)/include/qcbor
 	install -m 644 inc/qcbor/qcbor_private.h $(DESTDIR)$(PREFIX)/include/qcbor
 	install -m 644 inc/qcbor/qcbor_common.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_main_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_spiffy_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_number_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_tag_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
 	install -m 644 inc/qcbor/qcbor_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
 	install -m 644 inc/qcbor/qcbor_spiffy_decode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_main_encode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_number_encode.h $(DESTDIR)$(PREFIX)/include/qcbor
+	install -m 644 inc/qcbor/qcbor_tag_encode.h $(DESTDIR)$(PREFIX)/include/qcbor
 	install -m 644 inc/qcbor/qcbor_encode.h $(DESTDIR)$(PREFIX)/include/qcbor
 	install -m 644 inc/qcbor/UsefulBuf.h $(DESTDIR)$(PREFIX)/include/qcbor
 
diff --git a/inc/qcbor/qcbor_common.h b/inc/qcbor/qcbor_common.h
index b6fbdd1..cf4fb0a 100644
--- a/inc/qcbor/qcbor_common.h
+++ b/inc/qcbor/qcbor_common.h
@@ -36,7 +36,6 @@
 #ifndef qcbor_common_h
 #define qcbor_common_h
 
-
 #ifdef __cplusplus
 extern "C" {
 #if 0
@@ -64,7 +63,7 @@
 #define QCBOR_VERSION_MINOR 0
 #define QCBOR_VERSION_PATCH 0
 
-
+/* This is an alpha (not ready for commercial use) release of 2.0.0 */
 
 /**
  * This define indicates a version of QCBOR that supports spiffy
@@ -554,9 +553,7 @@
     */
    QCBOR_ERR_NOT_PREFERRED = 79,
 
-   /** Trying to encode something that is discouraged (e.g., 65-bit
-    * negative integer) without allowing it by calling
-    * QCBOREncode_Allow() */
+   /** Trying to do something that is not allowed. */
    QCBOR_ERR_NOT_ALLOWED = 80,
 
    /** QCBORDecode_EnterBstrWrapped() cannot be used on
diff --git a/inc/qcbor/qcbor_main_decode.h b/inc/qcbor/qcbor_main_decode.h
index 8f3e487..1efefef 100644
--- a/inc/qcbor/qcbor_main_decode.h
+++ b/inc/qcbor/qcbor_main_decode.h
@@ -399,24 +399,24 @@
 /** A floating-point number made of base-2 exponent and positive big
  *  number mantissa.  See @ref expAndMantissa and
  *  QCBOREncode_AddTBigFloatBigMantissa(). */
-// TODO: rename to BIGMANTISSA?
+#define QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA    18
 #define QCBOR_TYPE_BIGFLOAT_POS_BIGNUM         18
 
 /** A floating-point number made of base-2 exponent and negative big
  *  number mantissa.  See @ref expAndMantissa and
  *  QCBOREncode_AddTBigFloatBigMantissa(). */
+#define QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA    19
 #define QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM         19
 
 /** A floating-point number made of base-2 exponent and positive big
  *  number mantissa.  See @ref expAndMantissa and
  *  QCBOREncode_AddTBigFloatBigMantissa(). */
-// TODO: rename to U64MANTISSA
-#define QCBOR_TYPE_BIGFLOAT_POS_U64            82
+#define QCBOR_TYPE_BIGFLOAT_POS_U64MANTISSA    82
 
 /** A floating-point number made of base-2 exponent and negative big
  *  number mantissa.  See @ref expAndMantissa and
  *  QCBOREncode_AddTBigFloatBigMantissa(). */
-#define QCBOR_TYPE_BIGFLOAT_NEG_U64            83
+#define QCBOR_TYPE_BIGFLOAT_NEG_U64MANTISSA    83
 
 /** Type for the simple value false. */
 #define QCBOR_TYPE_FALSE         20
@@ -857,6 +857,7 @@
                        bool                bAllStrings);
 
 
+#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS
 /**
  * @brief Sets up a custom string allocator for indefinite-length strings
  *
@@ -890,12 +891,13 @@
  * @c uLabelAlloc @c == @c 1 in @ref QCBORItem. Note this is in a
  * separate GitHub repository.
  */
-void
+static void
 QCBORDecode_SetUpAllocator(QCBORDecodeContext *pCtx,
                            QCBORStringAllocate pfAllocateFunction,
                            void               *pAllocateContext,
                            bool                bAllStrings);
 
+#endif /* ! QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS */
 
 /**
  * @brief Get the next item (integer, byte string, array...) in the
@@ -921,7 +923,8 @@
  * - The label for an item in a map, which may be a text or byte string
  *   or an integer.
  *
- * - When @ref QCBOR_DECODE_ALLOW_UNPROCESSED_TAG_NUMBERS is set,  unprocessed tag numbers.
+ * - When @ref QCBOR_DECODE_ALLOW_UNPROCESSED_TAG_NUMBERS is set,
+ *   unprocessed tag numbers.
  *
  * See @ref QCBORItem for all the details about what is returned.
  *
@@ -1222,7 +1225,7 @@
  * use. Because of this, It can't be called multiple times like
  * QCBORDecode_PartialFinish().
  *
- * Some CBOR protocols use a CBOR sequence defined in 
+ * Some CBOR protocols use a CBOR sequence defined in
  * [RFC 8742](https://tools.ietf.org/html/rfc8742).
  * A CBOR sequence typically
  * doesn't start out with a map or an array. The end of the CBOR is
@@ -1439,22 +1442,6 @@
 QCBORDecode_Private_GetNextTagContent(QCBORDecodeContext *pMe,
                                       QCBORItem          *pDecodedItem);
 
-/** @private  Semi-private function. See qcbor_decode.c */
-void
-QCBORDecode_Private_GetItemInMapNoCheckSZ(QCBORDecodeContext *pMe,
-                                          const char         *szLabel,
-                                          const uint8_t       uQcborType,
-                                          QCBORItem          *pItem,
-                                          size_t             *puOffset);
-
-/** @private  Semi-private function. See qcbor_decode.c */ // TODO: this a next are spiffy
-void
-QCBORDecode_Private_GetItemInMapNoCheckN(QCBORDecodeContext *pMe,
-                                         const int64_t       nLabel,
-                                         const uint8_t       uQcborType,
-                                         QCBORItem          *pItem,
-                                         size_t             *puOffset);
-
 
 /** @private  Semi-private function. See qcbor_decode.c */
 uint64_t
@@ -1481,6 +1468,19 @@
                                       bool                bMarkEnd,
                                       bool               *pbBreak);
 
+#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS
+static inline void
+QCBORDecode_SetUpAllocator(QCBORDecodeContext *pMe,
+                           QCBORStringAllocate pfAllocateFunction,
+                           void               *pAllocateContext,
+                           bool                bAllStrings)
+{
+   pMe->StringAllocator.pfAllocator   = pfAllocateFunction;
+   pMe->StringAllocator.pAllocateCxt  = pAllocateContext;
+   pMe->bStringAllocateAll            = bAllStrings;
+}
+#endif /* ! QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS */
+
 
 static inline uint32_t
 QCBORDecode_Tell(QCBORDecodeContext *pMe)
@@ -1548,7 +1548,9 @@
 QCBORDecode_Private_SaveTagNumbers(QCBORDecodeContext *pMe, const QCBORItem *pItem)
 {
 #ifndef QCBOR_DISABLE_TAGS
-   memcpy(pMe->auLastTagNumbers, pItem->auTagNumbers, sizeof(pItem->auTagNumbers));
+   memcpy(pMe->auLastTagNumbers,
+          pItem->auTagNumbers,
+          sizeof(pItem->auTagNumbers));
 #else /* ! QCBOR_DISABLE_TAGS */
    (void)pMe;
    (void)pItem;
diff --git a/inc/qcbor/qcbor_main_encode.h b/inc/qcbor/qcbor_main_encode.h
index a87f9a0..7e148a2 100644
--- a/inc/qcbor/qcbor_main_encode.h
+++ b/inc/qcbor/qcbor_main_encode.h
@@ -163,10 +163,10 @@
     */
    QCBOR_ENCODE_CONFIG_SORT = 0x01,
 
-   /** By default QCBOR will error out when trying to encode a double
-    * or float NaN that has a payload because NaN payloads are not
-    * very interoperable. With this set, NaN payloads can be encoded.
-    *
+   /** By default QCBOR will error with @ref QCBOR_ERR_NOT_ALLOWED
+    * when trying to encode a double or float NaN that has a payload
+    * because NaN payloads are not very interoperable. With this set,
+    * NaN payloads can be encoded.
     */
    QCBOR_ENCODE_CONFIG_ALLOW_NAN_PAYLOAD = 0x02,
 
@@ -192,9 +192,9 @@
    QCBOR_ENCODE_CONFIG_DISALLOW_INDEFINITE_LENGTHS = 0x08,
 
    /** This disallows non-preferred floating number encoding,
-   QCBOREncode_AddFloatNoPreferred() and
-   QCBOREncode_AddDoubleNoPreferred().  It is not possible to disable
-   preferred serialization of type 0 and type 1 integers in QCBOR. */
+    * QCBOREncode_AddFloatNoPreferred() and
+    * QCBOREncode_AddDoubleNoPreferred().  It is not possible to disable
+    * preferred serialization of type 0 and type 1 integers in QCBOR. */
    QCBOR_ENCODE_CONFIG_DISALLOW_NON_PREFERRED_NUMBERS = 0x10,
 
    /**
@@ -402,9 +402,8 @@
  *
  * This is the same as QCBOREncode_Config() except it can't
  * configure anything to do with map sorting. That includes
- * both @ref CDE and @ref dCBOR.
- *
- *
+ * both @ref CDE and @ref dCBOR. @ref QCBOR_ERR_NOT_ALLOWED
+ * is returned if trying to configure map sorting.
  */
 static void
 QCBOREncode_ConfigReduced(QCBOREncodeContext *pCtx, enum QCBOREncodeConfig uConfig);
@@ -911,7 +910,7 @@
  * though map items are not all the same size because it always swaps
  * adjacent items.
  */
-void 
+void
 QCBOREncode_CloseAndSortMap(QCBOREncodeContext *pCtx);
 
 /** See QCBOREncode_CloseAndSortMapIndef(). */
@@ -1449,6 +1448,10 @@
 static inline void
 QCBOREncode_Config(QCBOREncodeContext *pMe, enum QCBOREncodeConfig uConfig)
 {
+   /* The close function is made a function pointer as a way to avoid
+    * linking the proportionately large chunk of code for sorting
+    * maps unless explicitly requested. QCBOREncode_CloseAndSortMap()
+    * doesn't get linked unless this function is called. */
    if(uConfig & QCBOR_ENCODE_CONFIG_SORT) {
       pMe->pfnCloseMap = QCBOREncode_CloseAndSortMap;
    } else {
@@ -1462,7 +1465,7 @@
 QCBOREncode_ConfigReduced(QCBOREncodeContext *pMe, enum QCBOREncodeConfig uConfig)
 {
    if(uConfig & QCBOR_ENCODE_CONFIG_SORT) {
-      pMe->uError = 99;
+      pMe->uError = QCBOR_ERR_NOT_ALLOWED;
    } else {
       pMe->uConfigFlags = (int)uConfig;
    }
diff --git a/inc/qcbor/qcbor_number_encode.h b/inc/qcbor/qcbor_number_encode.h
index 457e708..95d224f 100644
--- a/inc/qcbor/qcbor_number_encode.h
+++ b/inc/qcbor/qcbor_number_encode.h
@@ -156,7 +156,7 @@
  * represent the value.  For example, CBOR always encodes the value 0
  * as one byte, 0x00. The representation as 0x00 includes
  * identification of the type as an integer too as the major type for
- * an integer is 0. See 
+ * an integer is 0. See
  * [RFC 8949 Appendix A](https://www.rfc-editor.org/rfc/rfc8949.html#section-appendix.a)
  * for more examples of CBOR encoding. This compact encoding is
  * preferred serialization CBOR as per
@@ -497,7 +497,7 @@
  *                             byte order).
  *
  * This encodes CBOR tag numbers 2 and 3, positive and negative big
- * numbers, as defined in 
+ * numbers, as defined in
  * [RFC 8949 section 3.4.3](https://www.rfc-editor.org/rfc/rfc8949.html#section-3.4.3).
  *
  * This performs the offset of one required when encoding negative
@@ -720,12 +720,15 @@
  * mantissa is a big number (See QCBOREncode_AddTBignumber())
  * allowing for arbitrarily large precision.
  *
- * Preferred serialization of the big number is used. This means it may be converted to
- * a type 0 or type 1 integers making the result the same as QCBOREncode_AddTDecimalFraction().
- * This also offsets negative big numbers by one.
+ * Preferred serialization of the big number is used. This means it
+ * may be converted to a type 0 or type 1 integers making the result
+ * the same as QCBOREncode_AddTDecimalFraction().  This also offsets
+ * negative big numbers by one.
  *
- * If you want the big number to be copied straight through without the conversion to type 0
- * and 1 integers and without the offset of 1 (and much smaller objet code) use QCBOREncode_AddTBigFloatBigMantissaRaw().
+ * If you want the big number to be copied straight through without
+ * the conversion to type 0 and 1 integers and without the offset of 1
+ * (and much smaller objet code) use
+ * QCBOREncode_AddTBigFloatBigMantissaRaw().
  *
  * See @ref expAndMantissa for decoded representation.
  */
diff --git a/inc/qcbor/qcbor_private.h b/inc/qcbor/qcbor_private.h
index caf346f..4655a43 100644
--- a/inc/qcbor/qcbor_private.h
+++ b/inc/qcbor/qcbor_private.h
@@ -235,7 +235,7 @@
    int               uConfigFlags;   /*  enum QCBOREncodeConfig */
 
    void            (*pfnCloseMap)(QCBORPrivateEncodeContext *); /* Use of function
-                               * pointer explained in TODO: */
+                               * pointer explained in QCBOREncode_Config() */
    QCBORTrackNesting nesting; /* Keep track of array and map nesting */
 };
 
diff --git a/inc/qcbor/qcbor_spiffy_decode.h b/inc/qcbor/qcbor_spiffy_decode.h
index f79c256..6a5ba95 100644
--- a/inc/qcbor/qcbor_spiffy_decode.h
+++ b/inc/qcbor/qcbor_spiffy_decode.h
@@ -510,7 +510,12 @@
 /**
  * @brief Position traversal cursor by map label.
  *
- * TODO: finish this documentation
+ * @param[in] pCtx  The decode context.
+ * @param[in] nLabel  The map label to seek too.
+ *
+ * On failure, such as map label not found, this sets the last error
+ * and doesn't change the traversal cursor.  On success the traversal
+ * cursor is moved to the map label item.
  */
 void
 QCBORDecode_SeekToLabelN(QCBORDecodeContext *pCtx, int64_t nLabel);
@@ -519,7 +524,12 @@
 /**
  * @brief Position traversal cursor by map label.
  *
- * TODO: finish this documentation
+ * @param[in] pCtx  The decode context.
+ * @param[in] nLabel  The map label to seek too.
+ *
+ * On failure, such as map label not found, this sets the last error
+ * and doesn't change the traversal cursor.  On success the traversal
+ * cursor is moved to the map label item.
  */
 void
 QCBORDecode_SeekToLabelSZ(QCBORDecodeContext *pMe, const char *szLabel);
@@ -857,6 +867,21 @@
                                      const uint32_t      uEndOffset);
 
 
+/** @private  Semi-private function. See qcbor_decode.c */
+void
+QCBORDecode_Private_GetItemInMapNoCheckSZ(QCBORDecodeContext *pMe,
+                                          const char         *szLabel,
+                                          const uint8_t       uQcborType,
+                                          QCBORItem          *pItem,
+                                          size_t             *puOffset);
+
+/** @private  Semi-private function. See qcbor_decode.c */
+void
+QCBORDecode_Private_GetItemInMapNoCheckN(QCBORDecodeContext *pMe,
+                                         const int64_t       nLabel,
+                                         const uint8_t       uQcborType,
+                                         QCBORItem          *pItem,
+                                         size_t             *puOffset);
 
 
 static inline void
diff --git a/src/qcbor_main_decode.c b/src/qcbor_main_decode.c
index 752d8d5..68fa1b0 100644
--- a/src/qcbor_main_decode.c
+++ b/src/qcbor_main_decode.c
@@ -37,7 +37,6 @@
 #include "ieee754.h" /* Does not use math.h */
 #include "decode_nesting.h"
 
-// TODO: Reduce the circular dependency here
 #include "qcbor/qcbor_tag_decode.h"
 
 
@@ -214,27 +213,6 @@
 
 
 
-#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS
-
-// TODO: inline this; #ifdef out the prototype too
-/* Public function; see qcbor_main_decode.h */
-void
-QCBORDecode_SetUpAllocator(QCBORDecodeContext *pMe,
-                           QCBORStringAllocate pfAllocateFunction,
-                           void               *pAllocateContext,
-                           bool                bAllStrings)
-{
-   pMe->StringAllocator.pfAllocator   = pfAllocateFunction;
-   pMe->StringAllocator.pAllocateCxt  = pAllocateContext;
-   pMe->bStringAllocateAll            = bAllStrings;
-}
-#endif /* ! QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS */
-
-
-
-
-
-
 /*
  * Decoding items is done in six layers, one calling the next one
  * down. If a layer has no work to do for a particular item, it
@@ -783,16 +761,19 @@
 }
 #else /* ! QCBOR_DISABLE_DECODE_CONFORMANCE && ! QCBOR_DISABLE_PREFERRED_FLOAT */
 
+#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
 static QCBORError
 QCBORDecode_Private_HalfConformance(const double d, const QCBORDecodeMode uConfigFlags)
 {
-    (void)d;
-    if(uConfigFlags & (QCBOR_DECODE_ONLY_REDUCED_FLOATS | QCBOR_DECODE_ONLY_PREFERRED_NUMBERS)) {
-        return QCBOR_ERR_CANT_CHECK_FLOAT_CONFORMANCE;
-    } else {
-        return QCBOR_SUCCESS;
-    }
+   (void)d;
+   if(uConfigFlags & (QCBOR_DECODE_ONLY_REDUCED_FLOATS | QCBOR_DECODE_ONLY_PREFERRED_NUMBERS)) {
+      return QCBOR_ERR_CANT_CHECK_FLOAT_CONFORMANCE;
+   } else {
+      return QCBOR_SUCCESS;
+   }
 }
+#endif
+
 
 static QCBORError
 QCBORDecode_Private_SingleConformance(const float f, const QCBORDecodeMode uConfigFlags)
diff --git a/src/qcbor_number_decode.c b/src/qcbor_number_decode.c
index 34896e4..571c1ba 100644
--- a/src/qcbor_number_decode.c
+++ b/src/qcbor_number_decode.c
@@ -1262,7 +1262,7 @@
          }
          break;
 
-      case QCBOR_TYPE_BIGFLOAT_POS_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA:
          if(uConvertTypes & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
             int64_t    nMantissa;
             QCBORError uErr;
@@ -1279,7 +1279,7 @@
          }
          break;
 
-      case QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA:
          if(uConvertTypes & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
             int64_t    nMantissa;
             QCBORError uErr;
@@ -1477,7 +1477,7 @@
          }
          break;
 
-      case QCBOR_TYPE_BIGFLOAT_POS_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA:
          if(uConvertTypes & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
             uint64_t   uMantissa;
             QCBORError uErr;
@@ -1495,7 +1495,7 @@
          }
          break;
 
-      case QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA:
          if(uConvertTypes & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
             return QCBOR_ERR_NUMBER_SIGN_CONVERSION;
          } else {
@@ -1682,7 +1682,7 @@
          }
          break;
 
-      case QCBOR_TYPE_BIGFLOAT_POS_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA:
          if(uConvertTypes & QCBOR_CONVERT_TYPE_BIGFLOAT) {
             double dMantissa = QCBORDecode_Private_BigNumberToDouble(pItem->val.expAndMantissa.Mantissa.bigNum);
             *pdValue = dMantissa * exp2((double)pItem->val.expAndMantissa.nExponent);
@@ -1691,7 +1691,7 @@
          }
          break;
 
-      case QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA:
          if(uConvertTypes & QCBOR_CONVERT_TYPE_BIGFLOAT) {
             double dMantissa = -1-QCBORDecode_Private_BigNumberToDouble(pItem->val.expAndMantissa.Mantissa.bigNum);
             *pdValue = dMantissa * exp2((double)pItem->val.expAndMantissa.nExponent);
@@ -1993,7 +1993,8 @@
    } else if(uType == QCBOR_TYPE_INT64) {
       /* Offset of 1 for negative numbers already performed */
       *pbIsNegative = Item.val.int64 < 0;
-      *pBigNumber = QCBORDecode_Private_UIntToBigNumber((uint64_t)(*pbIsNegative ? -Item.val.int64 : Item.val.int64), BigNumberBuf);
+       const uint64_t uIntTmp = (uint64_t)(*pbIsNegative ? -Item.val.int64 : Item.val.int64);
+      *pBigNumber = QCBORDecode_Private_UIntToBigNumber(uIntTmp, BigNumberBuf);
    } else if(uType == QCBOR_TYPE_65BIT_NEG_INT) {
       /* Offset of 1 for negative numbers NOT already performed */
       *pbIsNegative = true;
@@ -2188,7 +2189,13 @@
    size_t     uOffset;
 
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
-   QCBORDecode_Private_BigNumberNoPreferredMain(pMe, uTagRequirement, &Item, uOffset, BigNumberBuf, pBigNumber, pbIsNegative);
+   QCBORDecode_Private_BigNumberNoPreferredMain(pMe,
+                                                uTagRequirement,
+                                               &Item,
+                                                uOffset,
+                                                BigNumberBuf,
+                                                pBigNumber,
+                                                pbIsNegative);
 }
 
 /* Public function, see qcbor/qcbor_number_decode.h */
@@ -2204,7 +2211,13 @@
    size_t     uOffset;
 
    QCBORDecode_Private_GetItemInMapNoCheckN(pMe, nLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
-   QCBORDecode_Private_BigNumberNoPreferredMain(pMe, uTagRequirement, &Item, uOffset, BigNumberBuf, pBigNumber, pbIsNegative);
+   QCBORDecode_Private_BigNumberNoPreferredMain(pMe,
+                                                uTagRequirement,
+                                               &Item,
+                                                uOffset,
+                                                BigNumberBuf,
+                                                pBigNumber,
+                                                pbIsNegative);
 
 }
 
@@ -2221,7 +2234,13 @@
    size_t     uOffset;
 
    QCBORDecode_Private_GetItemInMapNoCheckSZ(pMe, szLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
-   QCBORDecode_Private_BigNumberNoPreferredMain(pMe, uTagRequirement, &Item, uOffset, BigNumberBuf, pBigNumber, pbIsNegative);
+   QCBORDecode_Private_BigNumberNoPreferredMain(pMe,
+                                                uTagRequirement,
+                                               &Item,
+                                                uOffset,
+                                                BigNumberBuf,
+                                                pBigNumber,
+                                                pbIsNegative);
 }
 
 
@@ -2291,41 +2310,6 @@
 
 #ifndef QCBOR_DISABLE_EXP_AND_MANTISSA
 
-
-// TODO: relocate these notes?
-/* Some notes from the work to disable tags.
- * Some are out of date since tag refactoring.
- *
- * The API for big floats and decimal fractions seems good.
- * If there's any issue with it it's that the code size to
- * implement is a bit large because of the conversion
- * to/from int and bignum that is required. There is no API
- * that doesn't do the conversion so dead stripping will never
- * leave that code out.
- *
- * The implementation itself seems correct, but not as clean
- * and neat as it could be. It could probably be smaller too.
- *
- * The implementation has three main parts / functions
- *  - The decoding of the array of two
- *  - All the tag and type checking for the various API functions
- *  - Conversion to/from bignum and int
- *
- * The type checking seems like it wastes the most code for
- * what it needs to do.
- *
- * The inlining for the conversion is probably making the
- * overall code base larger.
- *
- * The tests cases could be organized a lot better and be
- * more thorough.
- *
- * Seems also like there could be more common code in the
- * first tier part of the public API. Some functions only
- * vary by a TagSpec.
- */
-
-
 static const uint8_t QCBORDecode_Private_DecimalFractionTypes[] = {
    QCBOR_TYPE_DECIMAL_FRACTION,
    QCBOR_TYPE_DECIMAL_FRACTION_POS_BIGNUM,
@@ -2336,10 +2320,10 @@
 
 static const uint8_t QCBORDecode_Private_BigFloatTypes[] = {
    QCBOR_TYPE_BIGFLOAT,
-   QCBOR_TYPE_BIGFLOAT_POS_BIGNUM,
-   QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM,
-   QCBOR_TYPE_BIGFLOAT_POS_U64,
-   QCBOR_TYPE_BIGFLOAT_NEG_U64,
+   QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA,
+   QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA,
+   QCBOR_TYPE_BIGFLOAT_POS_U64MANTISSA,
+   QCBOR_TYPE_BIGFLOAT_NEG_U64MANTISSA,
    QCBOR_TYPE_NONE};
 
 /**
@@ -2368,7 +2352,7 @@
  */
 static void
 QCBORDecode_Private_ExpIntMantissaMain(QCBORDecodeContext          *pMe,
-                                       const enum QCBORDecodeTagReq uTagRequirement,
+                                       const enum QCBORDecodeTagReq uTagReq,
                                        const uint64_t               uTagNumber,
                                        const size_t                 uOffset,
                                        QCBORItem                   *pItem,
@@ -2390,7 +2374,7 @@
 
    QCBORDecode_Private_ProcessTagItem(pMe,
                                       pItem,
-                                      uTagRequirement,
+                                      uTagReq,
                                       qTypes,
                                       uTagNumber,
                                       QCBORDecode_ExpMantissaTagCB,
@@ -2412,21 +2396,21 @@
 #ifndef QCBOR_DISABLE_TAGS
       /* If tags are disabled, mantissas can never be big nums */
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_BIGNUM:
-      case QCBOR_TYPE_BIGFLOAT_POS_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA:
          *pnExponent = pItem->val.expAndMantissa.nExponent;
          uErr = QCBORDecode_Private_PositiveBigNumberToInt(pItem->val.expAndMantissa.Mantissa.bigNum, pnMantissa);
          break;
 
       case QCBOR_TYPE_DECIMAL_FRACTION_NEG_BIGNUM:
-      case QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA:
          *pnExponent = pItem->val.expAndMantissa.nExponent;
          uErr = QCBORDecode_Private_NegativeBigNumberToInt(pItem->val.expAndMantissa.Mantissa.bigNum, pnMantissa);
          break;
 #endif /* ! QCBOR_DISABLE_TAGS */
 
-      case QCBOR_TYPE_BIGFLOAT_NEG_U64:
+      case QCBOR_TYPE_BIGFLOAT_NEG_U64MANTISSA:
       case QCBOR_TYPE_DECIMAL_FRACTION_NEG_U64:
-      case QCBOR_TYPE_BIGFLOAT_POS_U64:
+      case QCBOR_TYPE_BIGFLOAT_POS_U64MANTISSA:
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_U64:
          uErr = QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW;
          break;
@@ -2440,7 +2424,7 @@
 
 static void
 QCBORDecode_Private_ExpBigMantissaRawMain(QCBORDecodeContext  *pMe,
-                                          const enum QCBORDecodeTagReq uTagRequirement,
+                                          const enum QCBORDecodeTagReq uTagReq,
                                           const uint64_t       uTagNumber,
                                           const size_t         uOffset,
                                           QCBORItem           *pItem,
@@ -2465,7 +2449,7 @@
 
    QCBORDecode_Private_ProcessTagItem(pMe,
                                       pItem,
-                                      uTagRequirement,
+                                      uTagReq,
                                       qTypes,
                                       uTagNumber,
                                       QCBORDecode_ExpMantissaTagCB,
@@ -2506,14 +2490,14 @@
 #ifndef QCBOR_DISABLE_TAGS
       /* If tags are disabled, mantissas can never be big nums */
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_BIGNUM:
-      case QCBOR_TYPE_BIGFLOAT_POS_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA:
          *pnExponent = pItem->val.expAndMantissa.nExponent;
          *pMantissa = pItem->val.expAndMantissa.Mantissa.bigNum;
          *pbIsNegative = false;
          break;
 
       case QCBOR_TYPE_DECIMAL_FRACTION_NEG_BIGNUM:
-      case QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA:
          *pnExponent = pItem->val.expAndMantissa.nExponent;
          *pMantissa = pItem->val.expAndMantissa.Mantissa.bigNum;
          *pbIsNegative = true;
@@ -2548,7 +2532,7 @@
  */
 static void
 QCBORDecode_Private_ExpBigMantissaMain(QCBORDecodeContext          *pMe,
-                                       const enum QCBORDecodeTagReq uTagRequirement,
+                                       const enum QCBORDecodeTagReq uTagReq,
                                        const uint64_t               uTagNumber,
                                        const size_t                 uOffset,
                                        QCBORItem                   *pItem,
@@ -2573,7 +2557,7 @@
 
    QCBORDecode_Private_ProcessTagItem(pMe,
                                       pItem,
-                                      uTagRequirement,
+                                      uTagReq,
                                       qTypes,
                                       uTagNumber,
                                       QCBORDecode_ExpMantissaTagCB,
@@ -2594,13 +2578,13 @@
          break;
 
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_U64:
-      case QCBOR_TYPE_BIGFLOAT_POS_U64:
+      case QCBOR_TYPE_BIGFLOAT_POS_U64MANTISSA:
          TempMantissa.uDataType = QCBOR_TYPE_UINT64;
          TempMantissa.val.uint64 = pItem->val.expAndMantissa.Mantissa.uInt;
          break;
 
       case QCBOR_TYPE_DECIMAL_FRACTION_NEG_U64:
-      case QCBOR_TYPE_BIGFLOAT_NEG_U64:
+      case QCBOR_TYPE_BIGFLOAT_NEG_U64MANTISSA:
          TempMantissa.uDataType = QCBOR_TYPE_65BIT_NEG_INT;
          TempMantissa.val.uint64 = pItem->val.expAndMantissa.Mantissa.uInt;
          break;
@@ -2608,14 +2592,14 @@
 #ifndef QCBOR_DISABLE_TAGS
          /* If tags are disabled, mantissas can never be big nums */
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_BIGNUM:
-      case QCBOR_TYPE_BIGFLOAT_POS_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA:
          TempMantissa.uDataType = QCBOR_TYPE_BYTE_STRING;
          TempMantissa.val.bigNum = pItem->val.expAndMantissa.Mantissa.bigNum;
          *pbIsNegative = false;
          break;
 
       case QCBOR_TYPE_DECIMAL_FRACTION_NEG_BIGNUM:
-      case QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM:
+      case QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA:
          TempMantissa.uDataType = QCBOR_TYPE_BYTE_STRING;
          TempMantissa.val.bigNum = pItem->val.expAndMantissa.Mantissa.bigNum;
          *pbIsNegative = true;
@@ -2655,7 +2639,7 @@
 void
 QCBORDecode_GetTDecimalFractionInMapN(QCBORDecodeContext          *pMe,
                                       const int64_t                nLabel,
-                                      const enum QCBORDecodeTagReq uTagRequirement,
+                                      const enum QCBORDecodeTagReq uTagReq,
                                       int64_t                     *pnMantissa,
                                       int64_t                     *pnExponent)
 {
@@ -2664,7 +2648,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckN(pMe, nLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpIntMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_DECIMAL_FRACTION,
                                           uOffset,
                                          &Item,
@@ -2678,7 +2662,7 @@
 void
 QCBORDecode_GetTDecimalFractionInMapSZ(QCBORDecodeContext          *pMe,
                                        const char                  *szLabel,
-                                       const enum QCBORDecodeTagReq uTagRequirement,
+                                       const enum QCBORDecodeTagReq uTagReq,
                                        int64_t                     *pnMantissa,
                                        int64_t                     *pnExponent)
 {
@@ -2687,7 +2671,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckSZ(pMe, szLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpIntMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_DECIMAL_FRACTION,
                                           uOffset,
                                          &Item,
@@ -2699,7 +2683,7 @@
 /* Public function, see qcbor/qcbor_number_decode.h */
 void
 QCBORDecode_GetTDecimalFractionBigMantissa(QCBORDecodeContext          *pMe,
-                                           const enum QCBORDecodeTagReq uTagRequirement,
+                                           const enum QCBORDecodeTagReq uTagReq,
                                            const UsefulBuf              MantissaBuffer,
                                            UsefulBufC                  *pMantissa,
                                            bool                        *pbMantissaIsNegative,
@@ -2710,7 +2694,7 @@
 
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_DECIMAL_FRACTION,
                                           uOffset,
                                          &Item,
@@ -2725,7 +2709,7 @@
 void
 QCBORDecode_GetTDecimalFractionBigMantissaInMapN(QCBORDecodeContext *pMe,
                                                  const int64_t       nLabel,
-                                                 const enum QCBORDecodeTagReq uTagRequirement,
+                                                 const enum QCBORDecodeTagReq uTagReq,
                                                  const UsefulBuf     BufferForMantissa,
                                                  UsefulBufC         *pMantissa,
                                                  bool               *pbIsNegative,
@@ -2736,7 +2720,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckN(pMe, nLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_DECIMAL_FRACTION,
                                           uOffset,
                                          &Item,
@@ -2751,7 +2735,7 @@
 void
 QCBORDecode_GetTDecimalFractionBigMantissaInMapSZ(QCBORDecodeContext *pMe,
                                                   const char         *szLabel,
-                                                  const enum QCBORDecodeTagReq uTagRequirement,
+                                                  const enum QCBORDecodeTagReq uTagReq,
                                                   const UsefulBuf     BufferForMantissa,
                                                   UsefulBufC         *pMantissa,
                                                   bool               *pbIsNegative,
@@ -2762,7 +2746,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckSZ(pMe, szLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_DECIMAL_FRACTION,
                                           uOffset,
                                          &Item,
@@ -2775,7 +2759,7 @@
 /* Public function, see qcbor/qcbor_number_decode.h */
 void
 QCBORDecode_GetTDecimalFractionBigMantissaRaw(QCBORDecodeContext *pMe,
-                                              const enum QCBORDecodeTagReq uTagRequirement,
+                                              const enum QCBORDecodeTagReq uTagReq,
                                               const UsefulBuf     MantissaBuffer,
                                               UsefulBufC         *pMantissa,
                                               bool               *pbMantissaIsNegative,
@@ -2786,7 +2770,7 @@
 
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaRawMain(pMe,
-                                             uTagRequirement,
+                                             uTagReq,
                                              CBOR_TAG_DECIMAL_FRACTION,
                                              uOffset,
                                             &Item,
@@ -2801,7 +2785,7 @@
 void
 QCBORDecode_GetTDecimalFractionBigMantissaRawInMapN(QCBORDecodeContext          *pMe,
                                                     const int64_t                nLabel,
-                                                    const enum QCBORDecodeTagReq uTagRequirement,
+                                                    const enum QCBORDecodeTagReq uTagReq,
                                                     const UsefulBuf              BufferForMantissa,
                                                     UsefulBufC                  *pMantissa,
                                                     bool                        *pbIsNegative,
@@ -2812,7 +2796,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckN(pMe, nLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaRawMain(pMe,
-                                             uTagRequirement,
+                                             uTagReq,
                                              CBOR_TAG_DECIMAL_FRACTION,
                                              uOffset,
                                             &Item,
@@ -2827,7 +2811,7 @@
 void
 QCBORDecode_GetTDecimalFractionBigMantissaRawInMapSZ(QCBORDecodeContext *pMe,
                                                      const char         *szLabel,
-                                                     const enum QCBORDecodeTagReq uTagRequirement,
+                                                     const enum QCBORDecodeTagReq uTagReq,
                                                      const UsefulBuf     BufferForMantissa,
                                                      UsefulBufC         *pMantissa,
                                                      bool               *pbIsNegative,
@@ -2838,7 +2822,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckSZ(pMe, szLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaRawMain(pMe,
-                                             uTagRequirement,
+                                             uTagReq,
                                              CBOR_TAG_DECIMAL_FRACTION,
                                              uOffset,
                                             &Item,
@@ -2917,7 +2901,7 @@
 /* Public function, see qcbor/qcbor_number_decode.h */
 void
 QCBORDecode_GetTBigFloatBigMantissa(QCBORDecodeContext          *pMe,
-                                    const enum QCBORDecodeTagReq uTagRequirement,
+                                    const enum QCBORDecodeTagReq uTagReq,
                                     const UsefulBuf     MantissaBuffer,
                                     UsefulBufC         *pMantissa,
                                     bool               *pbMantissaIsNegative,
@@ -2928,7 +2912,7 @@
 
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_BIGFLOAT,
                                           uOffset,
                                          &Item,
@@ -2944,7 +2928,7 @@
 void
 QCBORDecode_GetTBigFloatBigMantissaInMapN(QCBORDecodeContext *pMe,
                                           const int64_t       nLabel,
-                                          const enum QCBORDecodeTagReq uTagRequirement,
+                                          const enum QCBORDecodeTagReq uTagReq,
                                           const UsefulBuf     BufferForMantissa,
                                           UsefulBufC         *pMantissa,
                                           bool               *pbIsNegative,
@@ -2955,7 +2939,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckN(pMe, nLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_BIGFLOAT,
                                           uOffset,
                                          &Item,
@@ -2970,7 +2954,7 @@
 void
 QCBORDecode_GetTBigFloatBigMantissaInMapSZ(QCBORDecodeContext          *pMe,
                                            const char                  *szLabel,
-                                           const enum QCBORDecodeTagReq uTagRequirement,
+                                           const enum QCBORDecodeTagReq uTagReq,
                                            const UsefulBuf              BufferForMantissa,
                                            UsefulBufC                  *pMantissa,
                                            bool                        *pbIsNegative,
@@ -2981,7 +2965,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckSZ(pMe, szLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaMain(pMe,
-                                          uTagRequirement,
+                                          uTagReq,
                                           CBOR_TAG_BIGFLOAT,
                                           uOffset,
                                          &Item,
@@ -2995,7 +2979,7 @@
 /* Public function, see qcbor/qcbor_number_decode.h */
 void
 QCBORDecode_GetTBigFloatBigMantissaRaw(QCBORDecodeContext *pMe,
-                                       const enum QCBORDecodeTagReq uTagRequirement,
+                                       const enum QCBORDecodeTagReq uTagReq,
                                        const UsefulBuf     MantissaBuffer,
                                        UsefulBufC         *pMantissa,
                                        bool               *pbMantissaIsNegative,
@@ -3006,7 +2990,7 @@
 
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaRawMain(pMe,
-                                             uTagRequirement,
+                                             uTagReq,
                                              CBOR_TAG_BIGFLOAT,
                                              uOffset,
                                             &Item,
@@ -3020,7 +3004,7 @@
 void
 QCBORDecode_GetTBigFloatBigMantissaRawInMapN(QCBORDecodeContext *pMe,
                                              const int64_t       nLabel,
-                                             const enum QCBORDecodeTagReq uTagRequirement,
+                                             const enum QCBORDecodeTagReq uTagReq,
                                              const UsefulBuf     BufferForMantissa,
                                              UsefulBufC         *pMantissa,
                                              bool               *pbIsNegative,
@@ -3031,7 +3015,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckN(pMe, nLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaRawMain(pMe,
-                                             uTagRequirement,
+                                             uTagReq,
                                              CBOR_TAG_BIGFLOAT,
                                              uOffset,
                                             &Item,
@@ -3046,7 +3030,7 @@
 void
 QCBORDecode_GetTBigFloatBigMantissaRawInMapSZ(QCBORDecodeContext          *pMe,
                                               const char                  *szLabel,
-                                              const enum QCBORDecodeTagReq uTagRequirement,
+                                              const enum QCBORDecodeTagReq uTagReq,
                                               const UsefulBuf              BufferForMantissa,
                                               UsefulBufC                  *pMantissa,
                                               bool                        *pbIsNegative,
@@ -3057,7 +3041,7 @@
 
    QCBORDecode_Private_GetItemInMapNoCheckSZ(pMe, szLabel, QCBOR_TYPE_ANY, &Item, &uOffset);
    QCBORDecode_Private_ExpBigMantissaRawMain(pMe,
-                                             uTagRequirement,
+                                             uTagReq,
                                              CBOR_TAG_BIGFLOAT,
                                              uOffset,
                                             &Item,
diff --git a/src/qcbor_number_encode.c b/src/qcbor_number_encode.c
index 91ff289..e23c2d3 100644
--- a/src/qcbor_number_encode.c
+++ b/src/qcbor_number_encode.c
@@ -130,7 +130,9 @@
 
    FloatResult = IEEE754_DoubleToSmaller(dNum, true, bNoNaNPayload);
 
-   QCBOREncode_Private_AddType7(pMe, (uint8_t)FloatResult.uSize, FloatResult.uValue);
+   QCBOREncode_Private_AddType7(pMe,
+                                (uint8_t)FloatResult.uSize,
+                                FloatResult.uValue);
 }
 
 
@@ -190,7 +192,9 @@
 
    FloatResult = IEEE754_SingleToHalf(fNum, bNoNaNPayload);
 
-   QCBOREncode_Private_AddType7(pMe, (uint8_t)FloatResult.uSize, FloatResult.uValue);
+   QCBOREncode_Private_AddType7(pMe,
+                                (uint8_t)FloatResult.uSize,
+                                FloatResult.uValue);
 }
 #endif /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
 
@@ -418,7 +422,7 @@
       if(bNegative) {
          QCBOREncode_Private_AddTNegativeBigNumber(pMe, uTagRequirement, BigNumberNLZ);
       } else {
-         QCBOREncode_AddTBigNumberRaw(pMe, false, uTagRequirement, BigNumberNLZ);
+         QCBOREncode_AddTBigNumberRaw(pMe, false, uTagRequirement,BigNumberNLZ);
       }
    }
 }
diff --git a/src/qcbor_spiffy_decode.c b/src/qcbor_spiffy_decode.c
index fcad613..1c13bdc 100644
--- a/src/qcbor_spiffy_decode.c
+++ b/src/qcbor_spiffy_decode.c
@@ -15,9 +15,6 @@
 
 #include "qcbor/qcbor_main_decode.h"
 #include "qcbor/qcbor_spiffy_decode.h"
-// TODO: see about removing these two includes
-#include "qcbor/qcbor_tag_decode.h"
-#include "ieee754.h" /* Does not use math.h */
 #include "decode_nesting.h"
 
 
@@ -606,8 +603,6 @@
 
 
 
-
-
 /**
  * @brief Semi-private. Get pointer, length and item count of an array or map.
  *
@@ -999,7 +994,6 @@
 
 
 
-
 /**
  * @brief Process simple type true and false, a boolean
  *
diff --git a/src/qcbor_tag_decode.c b/src/qcbor_tag_decode.c
index 658ac10..c6dc17e 100644
--- a/src/qcbor_tag_decode.c
+++ b/src/qcbor_tag_decode.c
@@ -126,7 +126,10 @@
    OneItemSeach[0].uDataType    = QCBOR_TYPE_ANY;
    OneItemSeach[1].uLabelType   = QCBOR_TYPE_NONE; // Indicates end of array
 
-   QCBORError uReturn = QCBORDecode_Private_MapSearch(pMe, OneItemSeach, &Info, NULL);
+   QCBORError uReturn = QCBORDecode_Private_MapSearch(pMe,
+                                                      OneItemSeach,
+                                                      &Info,
+                                                      NULL);
 
 
    uOffset = Info.uStartOffset;
@@ -289,13 +292,13 @@
                                   const size_t                 uOffset,
                                   const uint8_t               *uQCBORTypes,
                                   const uint64_t              *uTagNumbers,
-                                  const enum QCBORDecodeTagReq uTagRequirement,
+                                  const enum QCBORDecodeTagReq uTagReq,
                                   bool                        *bTypeMatched)
 {
    const uint8_t  *pTypeNum;
 
-   const enum QCBORDecodeTagReq nTagReq = (enum QCBORDecodeTagReq)((int)uTagRequirement & ~QCBOR_TAG_REQUIREMENT_ALLOW_ADDITIONAL_TAGS);
-
+   const int nTagReqTmp = (int)uTagReq & ~QCBOR_TAG_REQUIREMENT_ALLOW_ADDITIONAL_TAGS;
+   const enum QCBORDecodeTagReq nTagReq = (enum QCBORDecodeTagReq)nTagReqTmp;
 
    *bTypeMatched = false;
    for(pTypeNum = uQCBORTypes; *pTypeNum != QCBOR_TYPE_NONE; pTypeNum++) {
@@ -338,7 +341,7 @@
    }
 
    /* Now check if there are extra tags and if there's an error in them */
-   if(!(uTagRequirement & QCBOR_TAG_REQUIREMENT_ALLOW_ADDITIONAL_TAGS)) {
+   if(!(uTagReq & QCBOR_TAG_REQUIREMENT_ALLOW_ADDITIONAL_TAGS)) {
       /* The flag to ignore extra is not set, so keep checking */
       for(pTNum = uTagNumbers; *pTNum != CBOR_TAG_INVALID64; pTNum++) {
          uErr = QCBORDecode_Private_Check1TagNumber(pMe, pItem, *pTNum, uOffset);
@@ -368,7 +371,7 @@
 void
 QCBORDecode_Private_ProcessTagItemMulti(QCBORDecodeContext      *pMe,
                                         QCBORItem               *pItem,
-                                        enum QCBORDecodeTagReq   uTagRequirement,
+                                        enum QCBORDecodeTagReq   uTagReq,
                                         const uint8_t            uQCBORTypes[],
                                         const uint64_t           uTagNumbers[],
                                         QCBORTagContentCallBack *pfCB,
@@ -386,8 +389,9 @@
                                             uOffset,
                                             uQCBORTypes,
                                             uTagNumbers,
-                                            uTagRequirement,
-                                           &bTypeMatched);
+                                            uTagReq,
+                                            &bTypeMatched);
+
    if(uErr != QCBOR_SUCCESS) {
       goto Done;
    }
@@ -410,7 +414,7 @@
 void
 QCBORDecode_Private_ProcessTagItem(QCBORDecodeContext      *pMe,
                                    QCBORItem               *pItem,
-                                   enum QCBORDecodeTagReq   uTagRequirement,
+                                   enum QCBORDecodeTagReq   uTagReq,
                                    const uint8_t            uQCBORTypes[],
                                    const uint64_t           uTagNumber,
                                    QCBORTagContentCallBack *pfCB,
@@ -423,7 +427,7 @@
 
    QCBORDecode_Private_ProcessTagItemMulti(pMe,
                                            pItem,
-                                           uTagRequirement,
+                                           uTagReq,
                                            uQCBORTypes,
                                            auTagNumbers,
                                            pfCB,
@@ -434,7 +438,7 @@
 static void
 QCBORDecode_Private_ProcessTagOne(QCBORDecodeContext      *pMe,
                                   QCBORItem               *pItem,
-                                  enum QCBORDecodeTagReq uTagRequirement,
+                                  enum QCBORDecodeTagReq   uTagReq,
                                   const uint8_t            uQCBORType,
                                   const uint64_t           uTagNumber,
                                   QCBORTagContentCallBack *pfCB,
@@ -447,7 +451,7 @@
 
    QCBORDecode_Private_ProcessTagItem(pMe,
                                       pItem,
-                                      uTagRequirement,
+                                      uTagReq,
                                       auQCBORType,
                                       uTagNumber,
                                       pfCB,
@@ -457,7 +461,7 @@
 
 void
 QCBORDecode_Private_GetTaggedString(QCBORDecodeContext    *pMe,
-                                    enum QCBORDecodeTagReq uTagRequirement,
+                                    enum QCBORDecodeTagReq uTagReq,
                                     const uint8_t          uQCBOR_Type,
                                     const uint64_t         uTagNumber,
                                     UsefulBufC            *pStr)
@@ -468,7 +472,7 @@
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
    QCBORDecode_Private_ProcessTagOne(pMe,
                                     &Item,
-                                     uTagRequirement,
+                                     uTagReq,
                                      uQCBOR_Type,
                                      uTagNumber,
                                      QCBORDecode_StringsTagCB,
@@ -500,7 +504,7 @@
 void
 QCBORDecode_Private_GetTaggedStringInMapN(QCBORDecodeContext          *pMe,
                                           const int64_t                nLabel,
-                                          const enum QCBORDecodeTagReq uTagRequirement,
+                                          const enum QCBORDecodeTagReq uTagReq,
                                           const uint8_t                uQCBOR_Type,
                                           const uint64_t               uTagNumber,
                                           UsefulBufC                  *pString)
@@ -515,7 +519,7 @@
                                             &uOffset);
    QCBORDecode_Private_ProcessTagOne(pMe,
                                     &Item,
-                                     uTagRequirement,
+                                     uTagReq,
                                      uQCBOR_Type,
                                      uTagNumber,
                                      QCBORDecode_StringsTagCB,
@@ -545,7 +549,7 @@
 void
 QCBORDecode_Private_GetTaggedStringInMapSZ(QCBORDecodeContext          *pMe,
                                            const char                  *szLabel,
-                                           const enum QCBORDecodeTagReq uTagRequirement,
+                                           const enum QCBORDecodeTagReq uTagReq,
                                            uint8_t                      uQCBOR_Type,
                                            uint64_t                     uTagNumber,
                                            UsefulBufC                  *pString)
@@ -560,7 +564,7 @@
                                              &uOffset);
    QCBORDecode_Private_ProcessTagOne(pMe,
                                    &Item,
-                                    uTagRequirement,
+                                    uTagReq,
                                     uQCBOR_Type,
                                     uTagNumber,
                                     QCBORDecode_StringsTagCB,
@@ -592,7 +596,7 @@
 static QCBORError
 QCBORDecode_Private_EnterBstrWrapped(QCBORDecodeContext          *pMe,
                                      const QCBORItem             *pItem,
-                                     const enum QCBORDecodeTagReq uTagRequirement,
+                                     const enum QCBORDecodeTagReq uTagReq,
                                      const size_t                 uOffset,
                                      UsefulBufC                  *pBstr)
 {
@@ -624,7 +628,7 @@
                                               uOffset,
                                               uTypes,//TODO: maybe empty?
                                               uTagNumbers,
-                                              uTagRequirement,
+                                              uTagReq,
                                              &bTypeMatched);
 
    if(pItem->uDataType != QCBOR_TYPE_BYTE_STRING) {
@@ -659,8 +663,7 @@
       goto Done;
    }
 
-   const size_t uStartOfBstr = UsefulInputBuf_PointerToOffset(&(pMe->InBuf),
-                                                              pItem->val.string.ptr);
+   const size_t uStartOfBstr = UsefulInputBuf_PointerToOffset(&(pMe->InBuf), pItem->val.string.ptr);
    /* This check makes the cast of uStartOfBstr to uint32_t below safe. */
    if(uStartOfBstr == SIZE_MAX || uStartOfBstr > QCBOR_MAX_DECODE_INPUT_SIZE) {
       /* This should never happen because pItem->val.string.ptr should
@@ -686,7 +689,7 @@
 /* Public function; see qcbor_tag_decode.h */
 void
 QCBORDecode_EnterBstrWrapped(QCBORDecodeContext          *pMe,
-                             const enum QCBORDecodeTagReq uTagRequirement,
+                             const enum QCBORDecodeTagReq uTagReq,
                              UsefulBufC                  *pBstr)
 {
    QCBORItem Item;
@@ -695,7 +698,7 @@
    QCBORDecode_Private_GetAndTell(pMe, &Item, &uOffset);
    pMe->uLastError = (uint8_t)QCBORDecode_Private_EnterBstrWrapped(pMe,
                                                                   &Item,
-                                                                   uTagRequirement,
+                                                                   uTagReq,
                                                                    uOffset,
                                                                    pBstr);
 }
@@ -705,7 +708,7 @@
 void
 QCBORDecode_EnterBstrWrappedFromMapN(QCBORDecodeContext          *pMe,
                                      const int64_t                nLabel,
-                                     const enum QCBORDecodeTagReq uTagRequirement,
+                                     const enum QCBORDecodeTagReq uTagReq,
                                      UsefulBufC                  *pBstr)
 {
    QCBORItem Item;
@@ -718,7 +721,7 @@
                                             &uOffset);
    pMe->uLastError = (uint8_t)QCBORDecode_Private_EnterBstrWrapped(pMe,
                                                                   &Item,
-                                                                   uTagRequirement,
+                                                                   uTagReq,
                                                                    uOffset,
                                                                    pBstr);
 }
@@ -728,7 +731,7 @@
 void
 QCBORDecode_EnterBstrWrappedFromMapSZ(QCBORDecodeContext          *pMe,
                                       const char                  *szLabel,
-                                      const enum QCBORDecodeTagReq uTagRequirement,
+                                      const enum QCBORDecodeTagReq uTagReq,
                                       UsefulBufC                  *pBstr)
 {
    QCBORItem Item;
@@ -741,7 +744,7 @@
                                              &uOffset);
    pMe->uLastError = (uint8_t)QCBORDecode_Private_EnterBstrWrapped(pMe,
                                                                   &Item,
-                                                                   uTagRequirement,
+                                                                   uTagReq,
                                                                    uOffset,
                                                                    pBstr);
 }
@@ -768,7 +771,7 @@
     the bstr wrapped CBOR was entered.
     */
    UsefulInputBuf_SetBufferLength(&(pMe->InBuf),
-                               DecodeNesting_GetPreviousBoundedEnd(&(pMe->nesting)));
+                        DecodeNesting_GetPreviousBoundedEnd(&(pMe->nesting)));
 
 
    QCBORError uErr = QCBORDecode_Private_ExitBoundedLevel(pMe, uEndOfBstr);
@@ -937,8 +940,7 @@
    QCBORError uErr;
 
    const uint8_t puTypes[] = {QCBOR_TYPE_MIME, QCBOR_TYPE_BINARY_MIME, QCBOR_TYPE_NONE};
-
-   const uint64_t puTNs[] = {CBOR_TAG_MIME, CBOR_TAG_BINARY_MIME, CBOR_TAG_INVALID64};
+   const uint64_t puTNs[] =  {CBOR_TAG_MIME, CBOR_TAG_BINARY_MIME, CBOR_TAG_INVALID64};
 
    QCBORDecode_Private_ProcessTagItemMulti(pMe,
                                            pItem,
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index eb86736..ee19bbc 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -6244,7 +6244,7 @@
       true,
 
       QCBOR_SUCCESS, /* for GetNext */
-      QCBOR_TYPE_BIGFLOAT_POS_BIGNUM,
+      QCBOR_TYPE_BIGFLOAT_POS_BIGMANTISSA,
       -20,
       0,
       0UL,
@@ -6340,7 +6340,7 @@
       true,
 
       QCBOR_SUCCESS, /* for GetNext */
-      QCBOR_TYPE_BIGFLOAT_NEG_BIGNUM,
+      QCBOR_TYPE_BIGFLOAT_NEG_BIGMANTISSA,
       9223372036854775807,
       0,
       0UL,
@@ -6372,7 +6372,7 @@
       true,
 
       QCBOR_SUCCESS, /* for GetNext */
-      QCBOR_TYPE_BIGFLOAT_NEG_U64,
+      QCBOR_TYPE_BIGFLOAT_NEG_U64MANTISSA,
       9223372036854775807,
       0,
       0xffffffffffffffff,
@@ -6404,7 +6404,7 @@
       true,
 
       QCBOR_SUCCESS, /* for GetNext */
-      QCBOR_TYPE_BIGFLOAT_POS_U64,
+      QCBOR_TYPE_BIGFLOAT_POS_U64MANTISSA,
       9223372036854775807,
       0,
       0xffffffffffffffff,
@@ -6509,8 +6509,8 @@
                if(pT->nMantissaGN != Item.val.expAndMantissa.Mantissa.nInt) {
                    return (int32_t)(1+uIndex) * 1000 + 4;
                 }
-            } else if(Item.uDataType == QCBOR_TYPE_DECIMAL_FRACTION_NEG_U64 || Item.uDataType == QCBOR_TYPE_BIGFLOAT_NEG_U64 ||
-                      Item.uDataType == QCBOR_TYPE_DECIMAL_FRACTION_POS_U64 || Item.uDataType == QCBOR_TYPE_BIGFLOAT_POS_U64) {
+            } else if(Item.uDataType == QCBOR_TYPE_DECIMAL_FRACTION_NEG_U64 || Item.uDataType == QCBOR_TYPE_BIGFLOAT_NEG_U64MANTISSA ||
+                      Item.uDataType == QCBOR_TYPE_DECIMAL_FRACTION_POS_U64 || Item.uDataType == QCBOR_TYPE_BIGFLOAT_POS_U64MANTISSA) {
                if(pT->uMantissaGU != Item.val.expAndMantissa.Mantissa.uInt) {
                    return (int32_t)(1+uIndex) * 1000 + 4;
                 }
