Cleanup, TODO:'s ....
diff --git a/cmd_line_main.c b/cmd_line_main.c
index 9e4a819..ef59e43 100644
--- a/cmd_line_main.c
+++ b/cmd_line_main.c
@@ -32,7 +32,7 @@
 {
    (void)argc; // Avoid unused parameter error
 
-   RunQCborExample(); // TODO: organize this better
+   RunQCborExample();
 
 
    // This call prints out sizes of data structures to remind us
diff --git a/example.c b/example.c
index 39e6d55..f855194 100644
--- a/example.c
+++ b/example.c
@@ -256,7 +256,7 @@
 
     QCBORDecode_Init(&DecodeCtx, EncodedEngine, QCBOR_DECODE_MODE_NORMAL);
     QCBORDecode_EnterMap(&DecodeCtx);
-    QCBORDecode_GetTextInMapSZ(&DecodeCtx, "Manufacturer", &(pE->Manufacturer));
+    QCBORDecode_GetTextStringInMapSZ(&DecodeCtx, "Manufacturer", &(pE->Manufacturer));
     QCBORDecode_GetInt64InMapSZ(&DecodeCtx, "Displacement", &(pE->uDisplacement));
     QCBORDecode_GetInt64InMapSZ(&DecodeCtx, "Horsepower", &(pE->uHorsePower));
     QCBORDecode_GetDoubleInMapSZ(&DecodeCtx, "DesignedCompression", &(pE->dDesignedCompresion));
@@ -493,7 +493,7 @@
 {
     QCBORDecodeContext DecodeCtx;
 
-    QCBORDecode_Init(&DecodeCtx, EncodedEngine, 0);// TODO: fill in mode;
+    QCBORDecode_Init(&DecodeCtx, EncodedEngine, QCBOR_DECODE_MODE_NORMAL);
 
     QCBORItem Item;
     QCBORError uErr;
diff --git a/inc/qcbor/qcbor_common.h b/inc/qcbor/qcbor_common.h
index 04d9d04..aaa46a1 100644
--- a/inc/qcbor/qcbor_common.h
+++ b/inc/qcbor/qcbor_common.h
@@ -120,12 +120,12 @@
     mantissa and base-2 scaling factor. See QCBOREncode_AddBigFloat()
     and @ref expAndMantissa. */
 #define CBOR_TAG_BIGFLOAT       5
-/** Tag for COSE format encryption with no recipient
+/** Not Decoded by QCBOR. Tag for COSE format encryption with no recipient
     identification. See [RFC 8152, COSE]
     (https://tools.ietf.org/html/rfc8152). No API is provided for this
     tag. */
 #define CBOR_TAG_COSE_ENCRYPTO 16
-/** Tag for COSE format MAC'd data with no recipient
+/** Not Decoded by QCBOR. Tag for COSE format MAC'd data with no recipient
     identification. See [RFC 8152, COSE]
     (https://tools.ietf.org/html/rfc8152). No API is provided for this
     tag.*/
@@ -175,20 +175,19 @@
 /** Tag for COSE format encryption. See [RFC 8152, COSE]
     (https://tools.ietf.org/html/rfc8152). No API is provided for this
     tag. */
-
 #define CBOR_TAG_CBOR_SEQUENCE 63
 
 
 #define CBOR_TAG_ENCRYPT       96
-/** Tag for COSE format MAC. See [RFC 8152, COSE]
+/** Not Decoded by QCBOR. Tag for COSE format MAC. See [RFC 8152, COSE]
     (https://tools.ietf.org/html/rfc8152). No API is provided for this
     tag. */
 #define CBOR_TAG_MAC           97
-/** Tag for COSE format signed data. See [RFC 8152, COSE]
+/** Not Decoded by QCBOR. Tag for COSE format signed data. See [RFC 8152, COSE]
     (https://tools.ietf.org/html/rfc8152). No API is provided for this
     tag. */
 #define CBOR_TAG_SIGN          98
-/** World geographic coordinates. See ISO 6709, [RFC 5870]
+/** Not Decoded by QCBOR. World geographic coordinates. See ISO 6709, [RFC 5870]
     (https://tools.ietf.org/html/rfc5870) and WGS-84. No API is
     provided for this tag. */
 #define CBOR_TAG_GEO_COORD     103
diff --git a/inc/qcbor/qcbor_decode.h b/inc/qcbor/qcbor_decode.h
index be6697a..6982e54 100644
--- a/inc/qcbor/qcbor_decode.h
+++ b/inc/qcbor/qcbor_decode.h
@@ -304,7 +304,7 @@
        QCBOR_TYPE_XXXX */
    uint8_t  uDataType;
    /** How deep the nesting from arrays and maps is. 0 is the top
-    level with no arrays or maps entered. TODO: udpate this comment*/
+       level with no arrays or maps entered. */
    uint8_t  uNestingLevel;
     /** Tells what element of the label union to use. */
    uint8_t  uLabelType;
@@ -313,9 +313,9 @@
    uint8_t  uDataAlloc;
    /** Like @c uDataAlloc, but for label. */
    uint8_t  uLabelAlloc;
-   /** If less than @c uNestingLevel, this item was the last one
-       in an arry or map and closed out at least
-       one nesting level */
+   /** The nesting level of the next item after this one.  If less
+       than @c uNestingLevel, this item was the last one in an arry or
+       map and closed out at least one nesting level */
    uint8_t  uNextNestLevel;
 
    /** The union holding the item's value. Select union member based
@@ -829,37 +829,23 @@
  map or array has been encountered. This works the same for both
  definite and indefinite-length arrays.
 
- TODO: revise this documentation on tags. It is wrong.
- This decoder support CBOR type 6 tagging. The decoding of particular
- given tag value may be supported in one of three different ways.
+ QCBOR will automatically decode all the tags defined in RFC 7049
+ plus a few more. They will show up in a QCBORItem as QCBOR types
+ like QCBOR_TYPE_POS_BIGNUM.
 
- First, some common tags are fully and transparently supported by
- automatically decoding them and returning them in a @ref QCBORItem.
- These tags have a @c QCBOR_TYPE_XXX associated with them and manifest
- pretty much the same as a standard CBOR type. @ref
- QCBOR_TYPE_DATE_EPOCH and the @c epochDate member of @ref QCBORItem
- is an example.
+ Most tags with a CBOR_TAG_XXX define in qcbor_common.h like @ref
+ CBOR_TAG_DATE_STRING are automaticlly decoded by QCBOR. Those that
+ are defined but not decoded are so noted.
 
- Second are tags that are automatically recognized, but not decoded.
- These are tags that have a @c \#define of the form @c CBOR_TAG_XXX.
- These are recorded in the @c uTagBits member of @ref QCBORItem. There
- is an internal table that maps each bit to a particular tag value
- allowing up to 64 tags on an individual item to be reported (it is
- rare to have more than one or two). To find out if a particular tag
- value is set call QCBORDecode_IsTagged() on the @ref QCBORItem.  See
- also QCBORDecode_GetNextWithTags().
+ Tags that are not decoded by QCBOR will be identified and recorded in
+ a QCBORItem. Use QCBORDecode_GetNthTag() to get them. Only @ref
+ QCBOR_MAX_TAGS_PER_ITEM tags are recorded per item and an error is
+ returned if there are more than that.
 
- Third are tags that are not automatically recognized, because they
- are proprietary, custom or more recently registered with [IANA]
- (https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml). The
- internal mapping table has to be configured to recognize these. Call
- QCBORDecode_SetCallerConfiguredTagList() to do that. Then
- QCBORDecode_IsTagged() will work with them.
-
- The actual decoding of tags supported in the second and third way
- must be handled by the caller. Often this is simply verifying that
- the expected tag is present on a map, byte string or such.  In other
- cases, there might a complicated map structure to decode.
+ Previous versions of QCBOR handled tags in a more complex way using
+ QCBORDecode_SetCallerConfiguredTagList() and
+ QCBORDecode_GetNextWithTags().  This is largely compatible, but
+ imposes the limit of @ref QCBOR_MAX_TAGS_PER_ITEM tags per item
 
  See @ref Tags-Overview for a description of how to go about creating
  custom tags.
diff --git a/inc/qcbor/qcbor_private.h b/inc/qcbor/qcbor_private.h
index 3146a60..a00f54f 100644
--- a/inc/qcbor/qcbor_private.h
+++ b/inc/qcbor/qcbor_private.h
@@ -180,7 +180,7 @@
 #define QCBOR_COUNT_INDICATES_INDEFINITE_LENGTH UINT16_MAX
 #define QCBOR_COUNT_INDICATES_ZERO_LENGTH UINT16_MAX-1
             uint16_t uCountTotal;
-            uint16_t uCountCursor; // TODO: review all uses of this
+            uint16_t uCountCursor;
 #define QCBOR_NON_BOUNDED_OFFSET UINT32_MAX
             uint32_t uStartOffset;
          } ma; /* for maps and arrays */
diff --git a/inc/qcbor/qcbor_spiffy_decode.h b/inc/qcbor/qcbor_spiffy_decode.h
index 0e9178a..a37baf7 100644
--- a/inc/qcbor/qcbor_spiffy_decode.h
+++ b/inc/qcbor/qcbor_spiffy_decode.h
@@ -558,13 +558,13 @@
  If the CBOR tem to decode is not a byte string, the @ref
  QCBOR_ERR_UNEXPECTED_TYPE error is set.
  */
-static void QCBORDecode_GetBytes(QCBORDecodeContext *pCtx, UsefulBufC *pBytes);
+static void QCBORDecode_GetByteString(QCBORDecodeContext *pCtx, UsefulBufC *pBytes);
 
-static void QCBORDecode_GetBytesInMapN(QCBORDecodeContext *pCtx,
+static void QCBORDecode_GetByteStringInMapN(QCBORDecodeContext *pCtx,
                                        int64_t             nLabel,
                                        UsefulBufC         *pBytes);
 
-static void QCBORDecode_GetBytesInMapSZ(QCBORDecodeContext *pCtx,
+static void QCBORDecode_GetByteStringInMapSZ(QCBORDecodeContext *pCtx,
                                         const char         *szLabel,
                                         UsefulBufC         *pBytes);
 
@@ -581,13 +581,13 @@
  to decode is not a text string, the @ref QCBOR_ERR_UNEXPECTED_TYPE
  error is set.
 */
-static void QCBORDecode_GetText(QCBORDecodeContext *pCtx, UsefulBufC *pText);
+static void QCBORDecode_GetTextString(QCBORDecodeContext *pCtx, UsefulBufC *pText);
 
-static void QCBORDecode_GetTextInMapN(QCBORDecodeContext *pCtx,
+static void QCBORDecode_GetTextStringInMapN(QCBORDecodeContext *pCtx,
                                       int64_t             nLabel,
                                       UsefulBufC         *pText);
 
-static void QCBORDecode_GetTextInMapSZ(QCBORDecodeContext *pCtx,
+static void QCBORDecode_GetTextStringInMapSZ(QCBORDecodeContext *pCtx,
                                        const char         *szLabel,
                                        UsefulBufC         *pText);
 
@@ -1498,7 +1498,8 @@
  processing error that is not a CBOR error. The specific details of
  the protocol processing error can be returned the call back context.
  */
-typedef QCBORError (*QCBORItemCallback)(void *pCallbackCtx, const QCBORItem *pItem);
+typedef QCBORError (*QCBORItemCallback)(void *pCallbackCtx,
+                                        const QCBORItem *pItem);
 
 
 /**
@@ -1516,10 +1517,10 @@
 
  Like QCBORDecode_GetItemsInMap(), this only matches and calls back on
  the items at the top level of the map entered. Items in nested
- maps/arrays are skipped over and not candidate for matching or the
+ maps and arrays are skipped over and not candidate for matching or the
  callback.
 
- See QCBORItemCallback() for error handling. TODO: does this set last error?
+ See QCBORItemCallback() for error handling.
  */
 void QCBORDecode_GetItemsInMapWithCallback(QCBORDecodeContext *pCtx,
                                            QCBORItem          *pItemList,
@@ -1835,8 +1836,8 @@
 
 // Semi private
 #define QCBOR_TAGSPEC_NUM_TYPES 3
-// TODO: make content types 4 to help out epoch dates?
-/* TODO: This structure can probably be rearranged so the initialization
+// Improvement: make content types 4 to help out epoch dates?
+/* Improvement: This structure can probably be rearranged so the initialization
  of it takes much less code. */
 typedef struct {
    /* One of QCBOR_TAGSPEC_MATCH_xxx */
@@ -1879,7 +1880,7 @@
 
 
 static inline void
-QCBORDecode_GetBytes(QCBORDecodeContext *pMe,  UsefulBufC *pValue)
+QCBORDecode_GetByteString(QCBORDecodeContext *pMe,  UsefulBufC *pValue)
 {
    // Complier should make this just 64-bit integer parameter
    const TagSpecification TagSpec =
@@ -1893,7 +1894,7 @@
 }
 
 inline static void
-QCBORDecode_GetBytesInMapN(QCBORDecodeContext *pMe,
+QCBORDecode_GetByteStringInMapN(QCBORDecodeContext *pMe,
                            int64_t             nLabel,
                            UsefulBufC         *pBstr)
 {
@@ -1907,7 +1908,7 @@
 }
 
 inline static void
-QCBORDecode_GetBytesInMapSZ(QCBORDecodeContext *pMe,
+QCBORDecode_GetByteStringInMapSZ(QCBORDecodeContext *pMe,
                             const char         *szLabel,
                             UsefulBufC         *pBstr)
 {
@@ -1923,7 +1924,7 @@
 
 
 static inline void
-QCBORDecode_GetText(QCBORDecodeContext *pMe,  UsefulBufC *pValue)
+QCBORDecode_GetTextString(QCBORDecodeContext *pMe,  UsefulBufC *pValue)
 {
    // Complier should make this just 64-bit integer parameter
    const TagSpecification TagSpec =
@@ -1937,7 +1938,7 @@
 }
 
 inline static void
-QCBORDecode_GetTextInMapN(QCBORDecodeContext *pMe,
+QCBORDecode_GetTextStringInMapN(QCBORDecodeContext *pMe,
                           int64_t             nLabel,
                           UsefulBufC         *pText)
 {
@@ -1954,7 +1955,7 @@
 }
 
 inline static void
-QCBORDecode_GetTextInMapSZ(QCBORDecodeContext *pMe,
+QCBORDecode_GetTextStringInMapSZ(QCBORDecodeContext *pMe,
                            const               char *szLabel,
                            UsefulBufC         *pText)
 {
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index e534199..a3edc6a 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -36,7 +36,8 @@
 #include "ieee754.h" // Does not use math.h
 
 #ifndef QCBOR_DISABLE_FLOAT_HW_USE
-#include <math.h> // For isnan(), llround(), llroudf(), round(), roundf() TODO: list
+#include <math.h> // For isnan(), llround(), llroudf(), round(), roundf(),
+                  // pow(), exp2()
 #include <fenv.h> // feclearexcept(), fetestexcept()
 #endif
 
@@ -2502,7 +2503,7 @@
        */
       do {
          uReturn = QCBORDecode_GetNext(pMe, &Item);
-         if( QCBORDecode_IsNotWellFormed(uReturn)) {
+         if(QCBORDecode_IsNotWellFormed(uReturn)) {
             // TODO: also resource limit errors
             goto Done;
          }
@@ -2785,8 +2786,8 @@
 */
 void QCBORDecode_GetItemInMapSZ(QCBORDecodeContext *pMe,
                                 const char         *szLabel,
-                                uint8_t            uQcborType,
-                                QCBORItem         *pItem)
+                                uint8_t             uQcborType,
+                                QCBORItem          *pItem)
 {
    if(pMe->uLastError != QCBOR_SUCCESS) {
       return;
@@ -2954,7 +2955,9 @@
 
 static void SearchAndEnter(QCBORDecodeContext *pMe, QCBORItem pSearch[])
 {
-    // TODO: check that only one item is in pSearch?
+   // The first item in pSearch is the one that is to be
+   // entered. It should be the only one filled in. Any other
+   // will be ignored unless it causes an error.
    if(pMe->uLastError != QCBOR_SUCCESS) {
       // Already in error state; do nothing.
       return;
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index a965606..d046244 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -4661,9 +4661,9 @@
 
         QCBORDecode_EnterMapFromMapSZ(&DCtx, "map in a map");
            QCBORDecode_GetInt64InMapSZ(&DCtx,  "another int",  &nDecodedInt2);
-           QCBORDecode_GetBytesInMapSZ(&DCtx, "bytes 1",  &B1);
-           QCBORDecode_GetBytesInMapSZ(&DCtx, "bytes 2",  &B2);
-           QCBORDecode_GetTextInMapSZ(&DCtx, "text 2",  &S1);
+           QCBORDecode_GetByteStringInMapSZ(&DCtx, "bytes 1",  &B1);
+           QCBORDecode_GetByteStringInMapSZ(&DCtx, "bytes 2",  &B2);
+           QCBORDecode_GetTextStringInMapSZ(&DCtx, "text 2",  &S1);
         QCBORDecode_ExitMap(&DCtx);
 
         QCBORDecode_EnterArrayFromMapSZ(&DCtx, "an array of two strings");
@@ -4676,8 +4676,8 @@
 
         // Parse the same array again using GetText() instead of GetItem()
         QCBORDecode_EnterArrayFromMapSZ(&DCtx, "an array of two strings");
-           QCBORDecode_GetText(&DCtx, &S2);
-           QCBORDecode_GetText(&DCtx, &S3);
+           QCBORDecode_GetTextString(&DCtx, &S2);
+           QCBORDecode_GetTextString(&DCtx, &S3);
            if(QCBORDecode_GetError(&DCtx) != QCBOR_SUCCESS) {
               return 5000;
            }
@@ -4920,7 +4920,7 @@
       return 2008;
    }
    UsefulBufC String;
-   QCBORDecode_GetTextInMapN(&DCtx, 88, &String);
+   QCBORDecode_GetTextStringInMapN(&DCtx, 88, &String);
    if(uErr != QCBOR_ERR_MAP_NOT_ENTERED){
       return 2009;
    }
@@ -4958,7 +4958,7 @@
 
    QCBORDecode_Init(&DCtx, UsefulBuf_FROM_BYTE_ARRAY_LITERAL(spArrayOfEmpty), 0);
    QCBORDecode_EnterArray(&DCtx);
-   QCBORDecode_GetBytes(&DCtx, &String);
+   QCBORDecode_GetByteString(&DCtx, &String);
    QCBORDecode_EnterMap(&DCtx);
    QCBORDecode_ExitMap(&DCtx);
    QCBORDecode_EnterArray(&DCtx);
diff --git a/test/qcbor_encode_tests.c b/test/qcbor_encode_tests.c
index 1e91378..2a5e5d9 100644
--- a/test/qcbor_encode_tests.c
+++ b/test/qcbor_encode_tests.c
@@ -514,7 +514,7 @@
 
 int32_t AllAddMethodsTest()
 {
-   // TODO: this test should be broken down into several so it is more
+   // Improvement: this test should be broken down into several so it is more
    // managable. Tags and labels could be more sensible
    QCBOREncodeContext ECtx;
    int nReturn = 0;
@@ -1950,7 +1950,7 @@
       return nReturn;
    }
    if(Item.uDataType != QCBOR_TYPE_BYTE_STRING) {
-      return -1; // TODO: better type?
+      return QCBOR_ERR_UNEXPECTED_TYPE;
    }
 
    *pBstr = Item.val.string;