diff --git a/inc/qcbor/qcbor_main_encode.h b/inc/qcbor/qcbor_main_encode.h
index 9b4396d..02b685f 100644
--- a/inc/qcbor/qcbor_main_encode.h
+++ b/inc/qcbor/qcbor_main_encode.h
@@ -285,19 +285,6 @@
 #define QCBOR_HEAD_BUFFER_SIZE  (sizeof(uint64_t) + 2)
 
 
-/**
- * Output the full CBOR tag. See @ref CBORTags, @ref Tag-Usage and
- * @ref Tags-Overview.
- */
-#define QCBOR_ENCODE_AS_TAG      0
-
-/**
- * Output only the 'borrowed' content format for the relevant tag.
- * See @ref CBORTags, @ref Tag-Usage and @ref Tags-Overview.
- */
-#define QCBOR_ENCODE_AS_BORROWED 1
-
-
 
 /**
  * This enum is the bit flags for configuring the encoder for things
diff --git a/inc/qcbor/qcbor_number_encode.h b/inc/qcbor/qcbor_number_encode.h
index 783b832..b3f00c8 100644
--- a/inc/qcbor/qcbor_number_encode.h
+++ b/inc/qcbor/qcbor_number_encode.h
@@ -131,18 +131,6 @@
 #define QCBOR_HEAD_BUFFER_SIZE  (sizeof(uint64_t) + 2)
 
 
-/**
- * Output the full CBOR tag. See @ref CBORTags, @ref Tag-Usage and
- * @ref Tags-Overview.
- */
-#define QCBOR_ENCODE_AS_TAG      0
-
-/**
- * Output only the 'borrowed' content format for the relevant tag.
- * See @ref CBORTags, @ref Tag-Usage and @ref Tags-Overview.
- */
-#define QCBOR_ENCODE_AS_BORROWED 1
-
 
 
 
diff --git a/inc/qcbor/qcbor_tag_encode.h b/inc/qcbor/qcbor_tag_encode.h
index a862056..adcdd4f 100644
--- a/inc/qcbor/qcbor_tag_encode.h
+++ b/inc/qcbor/qcbor_tag_encode.h
@@ -95,17 +95,21 @@
  */
 
 
-/**
- * Output the full CBOR tag. See @ref CBORTags, @ref Tag-Usage and
- * @ref Tags-Overview.
- */
-#define QCBOR_ENCODE_AS_TAG      0
+/** Enum to indicates whether a tag should be encoded as a full tag or
+ * as borrowed content. */
+enum QCBOREncodeTagReq {
+    /**
+     * Output the full CBOR tag. See @ref CBORTags, @ref Tag-Usage and
+     * @ref Tags-Overview.
+     */
+     QCBOR_ENCODE_AS_TAG =  0,
 
-/**
- * Output only the 'borrowed' content format for the relevant tag.
- * See @ref CBORTags, @ref Tag-Usage and @ref Tags-Overview.
- */
-#define QCBOR_ENCODE_AS_BORROWED 1
+    /**
+     * Output only the 'borrowed' content format for the relevant tag.
+     * See @ref CBORTags, @ref Tag-Usage and @ref Tags-Overview.
+     */
+    QCBOR_ENCODE_AS_BORROWED = 1
+};
 
 
 
@@ -171,23 +175,23 @@
  * See also QCBOREncode_AddTDaysEpoch().
  */
 static void
-QCBOREncode_AddTDateEpoch(QCBOREncodeContext *pCtx,
-                          uint8_t             uTagRequirement,
-                          int64_t             nDate);
+QCBOREncode_AddTDateEpoch(QCBOREncodeContext    *pCtx,
+                          enum QCBOREncodeTagReq uTagRequirement,
+                          int64_t                nDate);
 
 /** See QCBOREncode_AddTDateEpoch(). */
 static void
-QCBOREncode_AddTDateEpochToMapSZ(QCBOREncodeContext *pCtx,
-                                 const char         *szLabel,
-                                 uint8_t             uTagRequirement,
-                                 int64_t             nDate);
+QCBOREncode_AddTDateEpochToMapSZ(QCBOREncodeContext    *pCtx,
+                                 const char            *szLabel,
+                                 enum QCBOREncodeTagReq uTagRequirement,
+                                 int64_t                nDate);
 
 /** See QCBOREncode_AddTDateEpoch(). */
 static void
-QCBOREncode_AddTDateEpochToMapN(QCBOREncodeContext *pCtx,
-                                int64_t             nLabel,
-                                uint8_t             uTagRequirement,
-                                int64_t             nDate);
+QCBOREncode_AddTDateEpochToMapN(QCBOREncodeContext    *pCtx,
+                                int64_t                nLabel,
+                                enum QCBOREncodeTagReq uTagRequirement,
+                                int64_t                nDate);
 
 
 /**
@@ -209,23 +213,23 @@
  * See also QCBOREncode_AddTDateEpoch().
  */
 static void
-QCBOREncode_AddTDaysEpoch(QCBOREncodeContext *pCtx,
-                          uint8_t             uTagRequirement,
-                          int64_t             nDays);
+QCBOREncode_AddTDaysEpoch(QCBOREncodeContext    *pCtx,
+                          enum QCBOREncodeTagReq uTagRequirement,
+                          int64_t                nDays);
 
 /** See QCBOREncode_AddTDaysEpoch(). */
 static void
-QCBOREncode_AddTDaysEpochToMapSZ(QCBOREncodeContext *pCtx,
-                                 const char         *szLabel,
-                                 uint8_t             uTagRequirement,
-                                 int64_t             nDays);
+QCBOREncode_AddTDaysEpochToMapSZ(QCBOREncodeContext    *pCtx,
+                                 const char            *szLabel,
+                                 enum QCBOREncodeTagReq uTagRequirement,
+                                 int64_t                nDays);
 
 /** See QCBOREncode_AddTDaysEpoch(). */
 static void
-QCBOREncode_AddTDaysEpochToMapN(QCBOREncodeContext *pCtx,
-                                int64_t             nLabel,
-                                uint8_t             uTagRequirement,
-                                int64_t             nDays);
+QCBOREncode_AddTDaysEpochToMapN(QCBOREncodeContext    *pCtx,
+                                int64_t                nLabel,
+                                enum QCBOREncodeTagReq uTagRequirement,
+                                int64_t                nDays);
 
 
 /**
@@ -244,23 +248,23 @@
  * CBOR_TAG_BIN_UUID indicating the binary string is a UUID.
  */
 static void
-QCBOREncode_AddTBinaryUUID(QCBOREncodeContext *pCtx,
-                           uint8_t             uTagRequirement,
-                           UsefulBufC          Bytes);
+QCBOREncode_AddTBinaryUUID(QCBOREncodeContext    *pCtx,
+                           enum QCBOREncodeTagReq uTagRequirement,
+                           UsefulBufC             UUID);
 
 /** See QCBOREncode_AddTBinaryUUID(). */
 static void
-QCBOREncode_AddTBinaryUUIDToMapSZ(QCBOREncodeContext *pCtx,
-                                  const char         *szLabel,
-                                  uint8_t             uTagRequirement,
-                                  UsefulBufC          Bytes);
+QCBOREncode_AddTBinaryUUIDToMapSZ(QCBOREncodeContext    *pCtx,
+                                  const char            *szLabel,
+                                  enum QCBOREncodeTagReq uTagRequirement,
+                                  UsefulBufC             UUID);
 
 /** See QCBOREncode_AddTBinaryUUID(). */
 static void
-QCBOREncode_AddTBinaryUUIDToMapN(QCBOREncodeContext *pCtx,
-                                 int64_t             nLabel,
-                                 uint8_t             uTagRequirement,
-                                 UsefulBufC          Bytes);
+QCBOREncode_AddTBinaryUUIDToMapN(QCBOREncodeContext    *pCtx,
+                                 int64_t                nLabel,
+                                 enum QCBOREncodeTagReq uTagRequirement,
+                                 UsefulBufC             UUID);
 
 
 /**
@@ -283,23 +287,23 @@
  *      QCBOREncode_AddTURI(pCtx, QCBOR_ENCODE_AS_TAG, UsefulBuf_FromSZ(szURI));
  */
 static void
-QCBOREncode_AddTURI(QCBOREncodeContext *pCtx,
-                    uint8_t             uTagRequirement,
-                    UsefulBufC          URI);
+QCBOREncode_AddTURI(QCBOREncodeContext    *pCtx,
+                    enum QCBOREncodeTagReq uTagRequirement,
+                    UsefulBufC             URI);
 
 /** See QCBOREncode_AddTURI(). */
 static void
-QCBOREncode_AddTURIToMapSZ(QCBOREncodeContext *pCtx,
-                           const char         *szLabel,
-                           uint8_t             uTagRequirement,
-                           UsefulBufC          URI);
+QCBOREncode_AddTURIToMapSZ(QCBOREncodeContext    *pCtx,
+                           const char            *szLabel,
+                           enum QCBOREncodeTagReq uTagRequirement,
+                           UsefulBufC             URI);
 
 /** See QCBOREncode_AddTURI(). */
 static void
-QCBOREncode_AddTURIToMapN(QCBOREncodeContext *pCtx,
-                          int64_t             nLabel,
-                          uint8_t             uTagRequirement,
-                          UsefulBufC          URI);
+QCBOREncode_AddTURIToMapN(QCBOREncodeContext    *pCtx,
+                          int64_t                nLabel,
+                          enum QCBOREncodeTagReq uTagRequirement,
+                          UsefulBufC             URI);
 
 
 /**
@@ -317,23 +321,23 @@
  * CBOR_TAG_B64 indicating the text string is Base64 encoded.
  */
 static void
-QCBOREncode_AddTB64Text(QCBOREncodeContext *pCtx,
-                        uint8_t             uTagRequirement,
-                        UsefulBufC          B64Text);
+QCBOREncode_AddTB64Text(QCBOREncodeContext    *pCtx,
+                        enum QCBOREncodeTagReq uTagRequirement,
+                        UsefulBufC             B64Text);
 
 /** See QCBOREncode_AddTB64Text(). */
 static void
-QCBOREncode_AddTB64TextToMapSZ(QCBOREncodeContext *pCtx,
-                               const char         *szLabel,
-                               uint8_t             uTagRequirement,
-                               UsefulBufC          B64Text);
+QCBOREncode_AddTB64TextToMapSZ(QCBOREncodeContext    *pCtx,
+                               const char            *szLabel,
+                               enum QCBOREncodeTagReq uTagRequirement,
+                               UsefulBufC             B64Text);
 
 /** See QCBOREncode_AddTB64Text(). */
 static void
-QCBOREncode_AddTB64TextToMapN(QCBOREncodeContext *pCtx,
-                              int64_t nLabel,
-                              uint8_t uTagRequirement,
-                              UsefulBufC B64Text);
+QCBOREncode_AddTB64TextToMapN(QCBOREncodeContext    *pCtx,
+                              int64_t                nLabel,
+                              enum QCBOREncodeTagReq uTagRequirement,
+                              UsefulBufC             B64Text);
 
 
 /**
@@ -352,23 +356,23 @@
  * encoded.
  */
 static void
-QCBOREncode_AddTB64URLText(QCBOREncodeContext *pCtx,
-                           uint8_t             uTagRequirement,
-                           UsefulBufC          B64Text);
+QCBOREncode_AddTB64URLText(QCBOREncodeContext    *pCtx,
+                           enum QCBOREncodeTagReq uTagRequirement,
+                           UsefulBufC             B64Text);
 
 /** See QCBOREncode_AddTB64URLText(). */
 static void
-QCBOREncode_AddTB64URLTextToMapSZ(QCBOREncodeContext *pCtx,
-                                  const char         *szLabel,
-                                  uint8_t             uTagRequirement,
-                                  UsefulBufC          B64Text);
+QCBOREncode_AddTB64URLTextToMapSZ(QCBOREncodeContext    *pCtx,
+                                  const char            *szLabel,
+                                  enum QCBOREncodeTagReq uTagRequirement,
+                                  UsefulBufC             B64Text);
 
 /** See QCBOREncode_AddTB64URLText(). */
 static void
-QCBOREncode_AddTB64URLTextToMapN(QCBOREncodeContext *pCtx,
-                                 int64_t             nLabel,
-                                 uint8_t             uTagRequirement,
-                                 UsefulBufC          B64Text);
+QCBOREncode_AddTB64URLTextToMapN(QCBOREncodeContext    *pCtx,
+                                 int64_t                nLabel,
+                                 enum QCBOREncodeTagReq uTagRequirement,
+                                 UsefulBufC             B64Text);
 
 
 /**
@@ -386,23 +390,23 @@
  * CBOR_TAG_REGEX indicating the text string is a regular expression.
  */
 static void
-QCBOREncode_AddTRegex(QCBOREncodeContext *pCtx,
-                      uint8_t            uTagRequirement,
-                      UsefulBufC         Regex);
+QCBOREncode_AddTRegex(QCBOREncodeContext    *pCtx,
+                      enum QCBOREncodeTagReq uTagRequirement,
+                      UsefulBufC             Regex);
 
 /** See QCBOREncode_AddTRegex(). */
 static void
-QCBOREncode_AddTRegexToMapSZ(QCBOREncodeContext *pCtx,
-                             const char         *szLabel,
-                             uint8_t             uTagRequirement,
-                             UsefulBufC          Regex);
+QCBOREncode_AddTRegexToMapSZ(QCBOREncodeContext    *pCtx,
+                             const char            *szLabel,
+                             enum QCBOREncodeTagReq uTagRequirement,
+                             UsefulBufC             Regex);
 
 /** See QCBOREncode_AddTRegex(). */
 static void
-QCBOREncode_AddTRegexToMapN(QCBOREncodeContext *pCtx,
-                            int64_t             nLabel,
-                            uint8_t             uTagRequirement,
-                            UsefulBufC          Regex);
+QCBOREncode_AddTRegexToMapN(QCBOREncodeContext    *pCtx,
+                            int64_t                nLabel,
+                            enum QCBOREncodeTagReq uTagRequirement,
+                            UsefulBufC             Regex);
 
 
 /**
@@ -434,23 +438,23 @@
  * for a discussion of line endings in CBOR.
  */
 static void
-QCBOREncode_AddTMIMEData(QCBOREncodeContext *pCtx,
-                         uint8_t             uTagRequirement,
-                         UsefulBufC          MIMEData);
+QCBOREncode_AddTMIMEData(QCBOREncodeContext    *pCtx,
+                         enum QCBOREncodeTagReq uTagRequirement,
+                         UsefulBufC             MIMEData);
 
 /** See QCBOREncode_AddTMIMEData(). */
 static void
-QCBOREncode_AddTMIMEDataToMapSZ(QCBOREncodeContext *pCtx,
-                                const char         *szLabel,
-                                uint8_t             uTagRequirement,
-                                UsefulBufC          MIMEData);
+QCBOREncode_AddTMIMEDataToMapSZ(QCBOREncodeContext    *pCtx,
+                                const char            *szLabel,
+                                enum QCBOREncodeTagReq uTagRequirement,
+                                UsefulBufC             MIMEData);
 
 /** See QCBOREncode_AddTMIMEData(). */
 static void
-QCBOREncode_AddTMIMEDataToMapN(QCBOREncodeContext *pCtx,
-                               int64_t             nLabel,
-                               uint8_t             uTagRequirement,
-                               UsefulBufC          MIMEData);
+QCBOREncode_AddTMIMEDataToMapN(QCBOREncodeContext    *pCtx,
+                               int64_t                nLabel,
+                               enum QCBOREncodeTagReq uTagRequirement,
+                               UsefulBufC             MIMEData);
 
 
 /**
@@ -477,23 +481,23 @@
  * See also QCBOREncode_AddTDayString().
  */
 static void
-QCBOREncode_AddTDateString(QCBOREncodeContext *pCtx,
-                           uint8_t             uTagRequirement,
-                           const char         *szDate);
+QCBOREncode_AddTDateString(QCBOREncodeContext    *pCtx,
+                           enum QCBOREncodeTagReq uTagRequirement,
+                           const char            *szDate);
 
 /** See QCBOREncode_AddTDateString(). */
 static void
-QCBOREncode_AddTDateStringToMapSZ(QCBOREncodeContext *pCtx,
-                                  const char         *szLabel,
-                                  uint8_t             uTagRequirement,
-                                  const char         *szDate);
+QCBOREncode_AddTDateStringToMapSZ(QCBOREncodeContext    *pCtx,
+                                  const char            *szLabel,
+                                  enum QCBOREncodeTagReq uTagRequirement,
+                                  const char            *szDate);
 
 /** See QCBOREncode_AddTDateString(). */
 static void
-QCBOREncode_AddTDateStringToMapN(QCBOREncodeContext *pCtx,
-                                 int64_t             nLabel,
-                                 uint8_t             uTagRequirement,
-                                 const char         *szDate);
+QCBOREncode_AddTDateStringToMapN(QCBOREncodeContext    *pCtx,
+                                 int64_t                nLabel,
+                                 enum QCBOREncodeTagReq uTagRequirement,
+                                 const char            *szDate);
 
 
 /**
@@ -522,23 +526,23 @@
  * See also QCBOREncode_AddTDateString().
  */
 static void
-QCBOREncode_AddTDaysString(QCBOREncodeContext *pCtx,
-                           uint8_t             uTagRequirement,
-                           const char         *szDate);
+QCBOREncode_AddTDaysString(QCBOREncodeContext    *pCtx,
+                           enum QCBOREncodeTagReq uTagRequirement,
+                           const char            *szDate);
 
 /** See QCBOREncode_AddTDaysString(). */
 static void
-QCBOREncode_AddTDaysStringToMapSZ(QCBOREncodeContext *pCtx,
-                                  const char         *szLabel,
-                                  uint8_t             uTagRequirement,
-                                  const char         *szDate);
+QCBOREncode_AddTDaysStringToMapSZ(QCBOREncodeContext    *pCtx,
+                                  const char            *szLabel,
+                                  enum QCBOREncodeTagReq uTagRequirement,
+                                  const char            *szDate);
 
 /** See QCBOREncode_AddTDaysString(). */
 static void
-QCBOREncode_AddTDaysStringToMapN(QCBOREncodeContext *pCtx,
-                                 int64_t             nLabel,
-                                 uint8_t             uTagRequirement,
-                                 const char         *szDate);
+QCBOREncode_AddTDaysStringToMapN(QCBOREncodeContext    *pCtx,
+                                 int64_t                nLabel,
+                                 enum QCBOREncodeTagReq uTagRequirement,
+                                 const char            *szDate);
 
 
 
@@ -564,15 +568,15 @@
 
 /** @deprecated Use QCBOREncode_AddTBinaryUUID() instead. */
 static void
-QCBOREncode_AddBinaryUUID(QCBOREncodeContext *pCtx, UsefulBufC Bytes);
+QCBOREncode_AddBinaryUUID(QCBOREncodeContext *pCtx, UsefulBufC UUID);
 
 /** @deprecated Use QCBOREncode_AddTBinaryUUIDToMapSZ() instead. */
 static void
-QCBOREncode_AddBinaryUUIDToMap(QCBOREncodeContext *pCtx, const char *szLabel, UsefulBufC Bytes);
+QCBOREncode_AddBinaryUUIDToMap(QCBOREncodeContext *pCtx, const char *szLabel, UsefulBufC UUID);
 
 /** @deprecated Use QCBOREncode_AddTBinaryUUIDToMapN() instead. */
 static void
-QCBOREncode_AddBinaryUUIDToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, UsefulBufC Bytes);
+QCBOREncode_AddBinaryUUIDToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, UsefulBufC UUID);
 
 /** @deprecated Use QCBOREncode_AddTagNumber() instead. */
 static void
@@ -694,34 +698,34 @@
 
 
 static inline void
-QCBOREncode_AddTDateEpoch(QCBOREncodeContext *pMe,
-                          const uint8_t       uTag,
-                          const int64_t       nDate)
+QCBOREncode_AddTDateEpoch(QCBOREncodeContext          *pMe,
+                          const enum QCBOREncodeTagReq uTagRequirement,
+                          const int64_t                nDate)
 {
-   if(uTag == QCBOR_ENCODE_AS_TAG) {
+   if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_DATE_EPOCH);
    }
    QCBOREncode_AddInt64(pMe, nDate);
 }
 
 static inline void
-QCBOREncode_AddTDateEpochToMapSZ(QCBOREncodeContext *pMe,
-                                 const char         *szLabel,
-                                 const uint8_t       uTag,
-                                 const int64_t       nDate)
+QCBOREncode_AddTDateEpochToMapSZ(QCBOREncodeContext          *pMe,
+                                 const char                  *szLabel,
+                                 const enum QCBOREncodeTagReq uTagRequirement,
+                                 const int64_t                nDate)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
-   QCBOREncode_AddTDateEpoch(pMe, uTag, nDate);
+   QCBOREncode_AddTDateEpoch(pMe, uTagRequirement, nDate);
 }
 
 static inline void
-QCBOREncode_AddTDateEpochToMapN(QCBOREncodeContext *pMe,
-                                const int64_t       nLabel,
-                                const uint8_t       uTag,
-                                const int64_t       nDate)
+QCBOREncode_AddTDateEpochToMapN(QCBOREncodeContext          *pMe,
+                                const int64_t                nLabel,
+                                const enum QCBOREncodeTagReq uTagRequirement,
+                                const int64_t                nDate)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
-   QCBOREncode_AddTDateEpoch(pMe, uTag, nDate);
+   QCBOREncode_AddTDateEpoch(pMe, uTagRequirement, nDate);
 }
 
 static inline void
@@ -751,99 +755,99 @@
 
 
 static inline void
-QCBOREncode_AddTDaysEpoch(QCBOREncodeContext *pMe,
-                          const uint8_t       uTag,
-                          const int64_t       nDays)
+QCBOREncode_AddTDaysEpoch(QCBOREncodeContext          *pMe,
+                          const enum QCBOREncodeTagReq uTagRequirement,
+                          const int64_t                nDays)
 {
-   if(uTag == QCBOR_ENCODE_AS_TAG) {
+   if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_DAYS_EPOCH);
    }
    QCBOREncode_AddInt64(pMe, nDays);
 }
 
 static inline void
-QCBOREncode_AddTDaysEpochToMapSZ(QCBOREncodeContext *pMe,
-                                 const char         *szLabel,
-                                 const uint8_t       uTag,
-                                 const int64_t       nDays)
+QCBOREncode_AddTDaysEpochToMapSZ(QCBOREncodeContext          *pMe,
+                                 const char                  *szLabel,
+                                 const enum QCBOREncodeTagReq uTagRequirement,
+                                 const int64_t                nDays)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
-   QCBOREncode_AddTDaysEpoch(pMe, uTag, nDays);
+   QCBOREncode_AddTDaysEpoch(pMe, uTagRequirement, nDays);
 }
 
 static inline void
-QCBOREncode_AddTDaysEpochToMapN(QCBOREncodeContext *pMe,
-                                const int64_t       nLabel,
-                                const uint8_t       uTag,
-                                const int64_t       nDays)
+QCBOREncode_AddTDaysEpochToMapN(QCBOREncodeContext          *pMe,
+                                const int64_t                nLabel,
+                                const enum QCBOREncodeTagReq uTagRequirement,
+                                const int64_t                nDays)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
-   QCBOREncode_AddTDaysEpoch(pMe, uTag, nDays);
+   QCBOREncode_AddTDaysEpoch(pMe, uTagRequirement, nDays);
 }
 
 
 
 static inline void
-QCBOREncode_AddTBinaryUUID(QCBOREncodeContext *pMe,
-                           const uint8_t       uTagRequirement,
-                           const UsefulBufC    Bytes)
+QCBOREncode_AddTBinaryUUID(QCBOREncodeContext          *pMe,
+                           const enum QCBOREncodeTagReq uTagRequirement,
+                           const UsefulBufC             UUID)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_BIN_UUID);
    }
-   QCBOREncode_AddBytes(pMe, Bytes);
+   QCBOREncode_AddBytes(pMe, UUID);
 }
 
 static inline void
-QCBOREncode_AddTBinaryUUIDToMapSZ(QCBOREncodeContext *pMe,
-                                  const char         *szLabel,
-                                  const uint8_t       uTagRequirement,
-                                  const UsefulBufC    Bytes)
+QCBOREncode_AddTBinaryUUIDToMapSZ(QCBOREncodeContext          *pMe,
+                                  const char                  *szLabel,
+                                  const enum QCBOREncodeTagReq uTagRequirement,
+                                  const UsefulBufC             UUID)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
-   QCBOREncode_AddTBinaryUUID(pMe, uTagRequirement, Bytes);
+   QCBOREncode_AddTBinaryUUID(pMe, uTagRequirement, UUID);
 }
 
 static inline void
-QCBOREncode_AddTBinaryUUIDToMapN(QCBOREncodeContext *pMe,
-                                 const int64_t       nLabel,
-                                 const uint8_t       uTagRequirement,
-                                 const UsefulBufC    Bytes)
+QCBOREncode_AddTBinaryUUIDToMapN(QCBOREncodeContext         *pMe,
+                                 const int64_t                nLabel,
+                                 const enum QCBOREncodeTagReq uTagRequirement,
+                                 const UsefulBufC             UUID)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
-   QCBOREncode_AddTBinaryUUID(pMe, uTagRequirement, Bytes);
+   QCBOREncode_AddTBinaryUUID(pMe, uTagRequirement, UUID);
 }
 
 static inline void
-QCBOREncode_AddBinaryUUID(QCBOREncodeContext *pMe, const UsefulBufC Bytes)
+QCBOREncode_AddBinaryUUID(QCBOREncodeContext *pMe, const UsefulBufC UUID)
 {
-   QCBOREncode_AddTBinaryUUID(pMe, QCBOR_ENCODE_AS_TAG, Bytes);
+   QCBOREncode_AddTBinaryUUID(pMe, QCBOR_ENCODE_AS_TAG, UUID);
 }
 
 static inline void
 QCBOREncode_AddBinaryUUIDToMap(QCBOREncodeContext *pMe,
                                const char         *szLabel,
-                               const UsefulBufC    Bytes)
+                               const UsefulBufC    UUID)
 {
-   QCBOREncode_AddTBinaryUUIDToMapSZ(pMe, szLabel, QCBOR_ENCODE_AS_TAG, Bytes);
+   QCBOREncode_AddTBinaryUUIDToMapSZ(pMe, szLabel, QCBOR_ENCODE_AS_TAG, UUID);
 }
 
 static inline void
 QCBOREncode_AddBinaryUUIDToMapN(QCBOREncodeContext *pMe,
                                 const int64_t       nLabel,
-                                const UsefulBufC    Bytes)
+                                const UsefulBufC    UUID)
 {
    QCBOREncode_AddTBinaryUUIDToMapN(pMe,
                                     nLabel,
                                     QCBOR_ENCODE_AS_TAG,
-                                    Bytes);
+                                    UUID);
 }
 
 
 static inline void
-QCBOREncode_AddTURI(QCBOREncodeContext *pMe,
-                    const uint8_t       uTagRequirement,
-                    const UsefulBufC    URI)
+QCBOREncode_AddTURI(QCBOREncodeContext          *pMe,
+                    const enum QCBOREncodeTagReq uTagRequirement,
+                    const UsefulBufC             URI)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_URI);
@@ -852,20 +856,20 @@
 }
 
 static inline void
-QCBOREncode_AddTURIToMapSZ(QCBOREncodeContext *pMe,
-                           const char         *szLabel,
-                           const uint8_t       uTagRequirement,
-                           const UsefulBufC    URI)
+QCBOREncode_AddTURIToMapSZ(QCBOREncodeContext          *pMe,
+                           const char                  *szLabel,
+                           const enum QCBOREncodeTagReq uTagRequirement,
+                           const UsefulBufC             URI)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
    QCBOREncode_AddTURI(pMe, uTagRequirement, URI);
 }
 
 static inline void
-QCBOREncode_AddTURIToMapN(QCBOREncodeContext *pMe,
-                          const int64_t       nLabel,
-                          const uint8_t       uTagRequirement,
-                          const UsefulBufC    URI)
+QCBOREncode_AddTURIToMapN(QCBOREncodeContext          *pMe,
+                          const int64_t                nLabel,
+                          const enum QCBOREncodeTagReq uTagRequirement,
+                          const UsefulBufC             URI)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
    QCBOREncode_AddTURI(pMe, uTagRequirement, URI);
@@ -896,9 +900,9 @@
 
 
 static inline void
-QCBOREncode_AddTB64Text(QCBOREncodeContext *pMe,
-                        const uint8_t       uTagRequirement,
-                        const UsefulBufC    B64Text)
+QCBOREncode_AddTB64Text(QCBOREncodeContext          *pMe,
+                        const enum QCBOREncodeTagReq uTagRequirement,
+                        const UsefulBufC             B64Text)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_B64);
@@ -907,20 +911,20 @@
 }
 
 static inline void
-QCBOREncode_AddTB64TextToMapSZ(QCBOREncodeContext *pMe,
-                               const char         *szLabel,
-                               const uint8_t       uTagRequirement,
-                               const UsefulBufC    B64Text)
+QCBOREncode_AddTB64TextToMapSZ(QCBOREncodeContext          *pMe,
+                               const char                  *szLabel,
+                               const enum QCBOREncodeTagReq uTagRequirement,
+                               const UsefulBufC             B64Text)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
    QCBOREncode_AddTB64Text(pMe, uTagRequirement, B64Text);
 }
 
 static inline void
-QCBOREncode_AddTB64TextToMapN(QCBOREncodeContext *pMe,
-                              const int64_t       nLabel,
-                              const uint8_t       uTagRequirement,
-                              const UsefulBufC    B64Text)
+QCBOREncode_AddTB64TextToMapN(QCBOREncodeContext          *pMe,
+                              const int64_t                nLabel,
+                              const enum QCBOREncodeTagReq uTagRequirement,
+                              const UsefulBufC             B64Text)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
    QCBOREncode_AddTB64Text(pMe, uTagRequirement, B64Text);
@@ -951,9 +955,9 @@
 
 
 static inline void
-QCBOREncode_AddTB64URLText(QCBOREncodeContext *pMe,
-                           const uint8_t       uTagRequirement,
-                           const UsefulBufC    B64Text)
+QCBOREncode_AddTB64URLText(QCBOREncodeContext          *pMe,
+                           const enum QCBOREncodeTagReq uTagRequirement,
+                           const UsefulBufC             B64Text)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_B64URL);
@@ -962,20 +966,20 @@
 }
 
 static inline void
-QCBOREncode_AddTB64URLTextToMapSZ(QCBOREncodeContext *pMe,
-                                  const char         *szLabel,
-                                  const uint8_t       uTagRequirement,
-                                  const UsefulBufC    B64Text)
+QCBOREncode_AddTB64URLTextToMapSZ(QCBOREncodeContext          *pMe,
+                                  const char                  *szLabel,
+                                  const enum QCBOREncodeTagReq uTagRequirement,
+                                  const UsefulBufC             B64Text)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
    QCBOREncode_AddTB64URLText(pMe, uTagRequirement, B64Text);
 }
 
 static inline void
-QCBOREncode_AddTB64URLTextToMapN(QCBOREncodeContext *pMe,
-                                 const int64_t       nLabel,
-                                 const uint8_t       uTagRequirement,
-                                 const UsefulBufC    B64Text)
+QCBOREncode_AddTB64URLTextToMapN(QCBOREncodeContext          *pMe,
+                                 const int64_t                nLabel,
+                                 const enum QCBOREncodeTagReq uTagRequirement,
+                                 const UsefulBufC             B64Text)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
    QCBOREncode_AddTB64URLText(pMe, uTagRequirement, B64Text);
@@ -1008,64 +1012,64 @@
 
 
 static inline void
-QCBOREncode_AddTRegex(QCBOREncodeContext *pMe,
-                      const uint8_t       uTagRequirement,
-                      const UsefulBufC    Bytes)
+QCBOREncode_AddTRegex(QCBOREncodeContext          *pMe,
+                      const enum QCBOREncodeTagReq uTagRequirement,
+                      const UsefulBufC             Regex)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_REGEX);
    }
-   QCBOREncode_AddText(pMe, Bytes);
+   QCBOREncode_AddText(pMe, Regex);
 }
 
 static inline void
-QCBOREncode_AddTRegexToMapSZ(QCBOREncodeContext *pMe,
-                             const char         *szLabel,
-                             const uint8_t       uTagRequirement,
-                             const UsefulBufC    Bytes)
+QCBOREncode_AddTRegexToMapSZ(QCBOREncodeContext          *pMe,
+                             const char                  *szLabel,
+                             const enum QCBOREncodeTagReq uTagRequirement,
+                             const UsefulBufC             Regex)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
-   QCBOREncode_AddTRegex(pMe, uTagRequirement, Bytes);
+   QCBOREncode_AddTRegex(pMe, uTagRequirement, Regex);
 }
 
 static inline void
-QCBOREncode_AddTRegexToMapN(QCBOREncodeContext *pMe,
-                            const int64_t       nLabel,
-                            const uint8_t       uTagRequirement,
-                            const UsefulBufC    Bytes)
+QCBOREncode_AddTRegexToMapN(QCBOREncodeContext          *pMe,
+                            const int64_t                nLabel,
+                            const enum QCBOREncodeTagReq uTagRequirement,
+                            const UsefulBufC             Regex)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
-   QCBOREncode_AddTRegex(pMe, uTagRequirement, Bytes);
+   QCBOREncode_AddTRegex(pMe, uTagRequirement, Regex);
 }
 
 static inline void
-QCBOREncode_AddRegex(QCBOREncodeContext *pMe, const UsefulBufC Bytes)
+QCBOREncode_AddRegex(QCBOREncodeContext *pMe, const UsefulBufC Regex)
 {
-   QCBOREncode_AddTRegex(pMe, QCBOR_ENCODE_AS_TAG, Bytes);
+   QCBOREncode_AddTRegex(pMe, QCBOR_ENCODE_AS_TAG, Regex);
 }
 
 static inline void
 QCBOREncode_AddRegexToMap(QCBOREncodeContext *pMe,
                           const char         *szLabel,
-                          const UsefulBufC    Bytes)
+                          const UsefulBufC    Regex)
 {
-   QCBOREncode_AddTRegexToMapSZ(pMe, szLabel, QCBOR_ENCODE_AS_TAG, Bytes);
+   QCBOREncode_AddTRegexToMapSZ(pMe, szLabel, QCBOR_ENCODE_AS_TAG, Regex);
 }
 
 static inline void
 QCBOREncode_AddRegexToMapN(QCBOREncodeContext *pMe,
                            const int64_t       nLabel,
-                           const UsefulBufC    Bytes)
+                           const UsefulBufC    Regex)
 {
-   QCBOREncode_AddTRegexToMapN(pMe, nLabel, QCBOR_ENCODE_AS_TAG, Bytes);
+   QCBOREncode_AddTRegexToMapN(pMe, nLabel, QCBOR_ENCODE_AS_TAG, Regex);
 
 }
 
 
 static inline void
-QCBOREncode_AddTMIMEData(QCBOREncodeContext *pMe,
-                         const uint8_t       uTagRequirement,
-                         const UsefulBufC    MIMEData)
+QCBOREncode_AddTMIMEData(QCBOREncodeContext          *pMe,
+                         const enum QCBOREncodeTagReq uTagRequirement,
+                         const UsefulBufC             MIMEData)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_BINARY_MIME);
@@ -1074,20 +1078,20 @@
 }
 
 static inline void
-QCBOREncode_AddTMIMEDataToMapSZ(QCBOREncodeContext *pMe,
-                                const char         *szLabel,
-                                const uint8_t       uTagRequirement,
-                                const UsefulBufC    MIMEData)
+QCBOREncode_AddTMIMEDataToMapSZ(QCBOREncodeContext          *pMe,
+                                const char                  *szLabel,
+                                const enum QCBOREncodeTagReq uTagRequirement,
+                                const UsefulBufC             MIMEData)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
    QCBOREncode_AddTMIMEData(pMe, uTagRequirement, MIMEData);
 }
 
 static inline void
-QCBOREncode_AddTMIMEDataToMapN(QCBOREncodeContext *pMe,
-                               const int64_t       nLabel,
-                               const uint8_t       uTagRequirement,
-                               const UsefulBufC    MIMEData)
+QCBOREncode_AddTMIMEDataToMapN(QCBOREncodeContext          *pMe,
+                               const int64_t                nLabel,
+                               const enum QCBOREncodeTagReq uTagRequirement,
+                               const UsefulBufC             MIMEData)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
    QCBOREncode_AddTMIMEData(pMe, uTagRequirement, MIMEData);
@@ -1117,9 +1121,9 @@
 
 
 static inline void
-QCBOREncode_AddTDateString(QCBOREncodeContext *pMe,
-                           const uint8_t       uTagRequirement,
-                           const char         *szDate)
+QCBOREncode_AddTDateString(QCBOREncodeContext          *pMe,
+                           const enum QCBOREncodeTagReq uTagRequirement,
+                           const char                  *szDate)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_DATE_STRING);
@@ -1128,20 +1132,20 @@
 }
 
 static inline void
-QCBOREncode_AddTDateStringToMapSZ(QCBOREncodeContext *pMe,
-                                  const char         *szLabel,
-                                  const uint8_t       uTagRequirement,
-                                  const char         *szDate)
+QCBOREncode_AddTDateStringToMapSZ(QCBOREncodeContext          *pMe,
+                                  const char                  *szLabel,
+                                  const enum QCBOREncodeTagReq uTagRequirement,
+                                  const char                  *szDate)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
    QCBOREncode_AddTDateString(pMe, uTagRequirement, szDate);
 }
 
 static inline void
-QCBOREncode_AddTDateStringToMapN(QCBOREncodeContext *pMe,
-                                 const int64_t       nLabel,
-                                 const uint8_t       uTagRequirement,
-                                 const char         *szDate)
+QCBOREncode_AddTDateStringToMapN(QCBOREncodeContext          *pMe,
+                                 const int64_t                nLabel,
+                                 const enum QCBOREncodeTagReq uTagRequirement,
+                                 const char                  *szDate)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
    QCBOREncode_AddTDateString(pMe, uTagRequirement, szDate);
@@ -1171,9 +1175,9 @@
 
 
 static inline void
-QCBOREncode_AddTDaysString(QCBOREncodeContext *pMe,
-                           const uint8_t       uTagRequirement,
-                           const char         *szDate)
+QCBOREncode_AddTDaysString(QCBOREncodeContext          *pMe,
+                           const enum QCBOREncodeTagReq uTagRequirement,
+                           const char                  *szDate)
 {
    if(uTagRequirement == QCBOR_ENCODE_AS_TAG) {
       QCBOREncode_AddTagNumber(pMe, CBOR_TAG_DAYS_STRING);
@@ -1182,20 +1186,20 @@
 }
 
 static inline void
-QCBOREncode_AddTDaysStringToMapSZ(QCBOREncodeContext *pMe,
-                                  const char         *szLabel,
-                                  const uint8_t       uTagRequirement,
-                                  const char         *szDate)
+QCBOREncode_AddTDaysStringToMapSZ(QCBOREncodeContext          *pMe,
+                                  const char                  *szLabel,
+                                  const enum QCBOREncodeTagReq uTagRequirement,
+                                  const char                  *szDate)
 {
    QCBOREncode_AddSZString(pMe, szLabel);
    QCBOREncode_AddTDaysString(pMe, uTagRequirement, szDate);
 }
 
 static inline void
-QCBOREncode_AddTDaysStringToMapN(QCBOREncodeContext *pMe,
-                                 const int64_t       nLabel,
-                                 const uint8_t       uTagRequirement,
-                                 const char         *szDate)
+QCBOREncode_AddTDaysStringToMapN(QCBOREncodeContext          *pMe,
+                                 const int64_t                nLabel,
+                                 const enum QCBOREncodeTagReq uTagRequirement,
+                                 const char                  *szDate)
 {
    QCBOREncode_AddInt64(pMe, nLabel);
    QCBOREncode_AddTDaysString(pMe, uTagRequirement, szDate);
