diff --git a/src/ieee754.c b/src/ieee754.c
index e221f3d..aba7f32 100644
--- a/src/ieee754.c
+++ b/src/ieee754.c
@@ -403,20 +403,20 @@
     // Optimizer will re organize so there is only one call to IEEE754_FloatToHalf()
     if(uSingle == 0) {
         // Value is 0.0000, not a a subnormal
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_FloatToHalf(f);
+        result.uSize = IEEE754_UNION_IS_HALF;
+        result.uValue  = IEEE754_FloatToHalf(f);
     } else if(nSingleExponent == SINGLE_EXPONENT_INF_OR_NAN) {
         // NaN, +/- infinity
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_FloatToHalf(f);
+        result.uSize = IEEE754_UNION_IS_HALF;
+        result.uValue  = IEEE754_FloatToHalf(f);
     } else if((nSingleExponent >= HALF_EXPONENT_MIN) && nSingleExponent <= HALF_EXPONENT_MAX && (!(uSingleSignificand & uDroppedSingleBits))) {
         // Normal number in exponent range and precision won't be lost
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_FloatToHalf(f);
+        result.uSize = IEEE754_UNION_IS_HALF;
+        result.uValue  = IEEE754_FloatToHalf(f);
     } else {
         // Subnormal, exponent out of range, or precision will be lost
-        result.uTag = IEEE754_UNION_IS_SINGLE;
-        result.u32  = uSingle;
+        result.uSize = IEEE754_UNION_IS_SINGLE;
+        result.uValue  = uSingle;
     }
     
     return result;
@@ -439,24 +439,24 @@
     // The various cases
     if(d == 0.0) { // Take care of positive and negative zero
         // Value is 0.0000, not a a subnormal
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_DoubleToHalf(d);
+        result.uSize  = IEEE754_UNION_IS_HALF;
+        result.uValue = IEEE754_DoubleToHalf(d);
     } else if(nDoubleExponent == DOUBLE_EXPONENT_INF_OR_NAN) {
         // NaN, +/- infinity
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_DoubleToHalf(d);
+        result.uSize  = IEEE754_UNION_IS_HALF;
+        result.uValue = IEEE754_DoubleToHalf(d);
     } else if(bAllowHalfPrecision && (nDoubleExponent >= HALF_EXPONENT_MIN) && nDoubleExponent <= HALF_EXPONENT_MAX && (!(uDoubleSignificand & uDroppedDoubleBits))) {
         // Can convert to half without precision loss
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_DoubleToHalf(d);
+        result.uSize  = IEEE754_UNION_IS_HALF;
+        result.uValue = IEEE754_DoubleToHalf(d);
     } else if((nDoubleExponent >= SINGLE_EXPONENT_MIN) && nDoubleExponent <= SINGLE_EXPONENT_MAX && (!(uDoubleSignificand & uDroppedSingleBits))) {
         // Can convert to single without precision loss
-        result.uTag = IEEE754_UNION_IS_SINGLE;
-        result.u32  = CopyFloatToUint32((float)d);
+        result.uSize  = IEEE754_UNION_IS_SINGLE;
+        result.uValue = CopyFloatToUint32((float)d);
     } else {
         // Can't convert without precision loss
-        result.uTag = IEEE754_UNION_IS_DOUBLE;
-        result.u64  = uDouble;
+        result.uSize  = IEEE754_UNION_IS_DOUBLE;
+        result.uValue = uDouble;
     }
     
     return result;
diff --git a/src/ieee754.h b/src/ieee754.h
index 124d095..5cd36db 100644
--- a/src/ieee754.h
+++ b/src/ieee754.h
@@ -141,18 +141,14 @@
 
 
 
-
-#define IEEE754_UNION_IS_HALF   0
-#define IEEE754_UNION_IS_SINGLE 1
-#define IEEE754_UNION_IS_DOUBLE 2
+// Both tags the value and gives the size
+#define IEEE754_UNION_IS_HALF   2
+#define IEEE754_UNION_IS_SINGLE 4
+#define IEEE754_UNION_IS_DOUBLE 8
 
 typedef struct {
-    uint8_t uTag;  // One of IEEE754_IS_xxxx
-    union {
-        uint16_t u16;
-        uint32_t u32;
-        uint64_t u64;
-    };
+    uint8_t uSize;  // One of IEEE754_IS_xxxx
+    uint64_t uValue;
 } IEEE754_union;
 
 
diff --git a/src/qcbor_encode.c b/src/qcbor_encode.c
index 93f7203..3d88739 100644
--- a/src/qcbor_encode.c
+++ b/src/qcbor_encode.c
@@ -561,17 +561,7 @@
 
 static void QCBOREncode_AddFUnionAsSmallest_2(QCBOREncodeContext *me, const char *szLabel, int64_t nLabel, IEEE754_union uNum)
 {
-   switch(uNum.uTag) {
-      case IEEE754_UNION_IS_HALF:
-         QCBOREncode_AddType7_2(me, szLabel, nLabel, sizeof(uint16_t), uNum.u16);
-         break;
-      case IEEE754_UNION_IS_SINGLE:
-         QCBOREncode_AddType7_2(me, szLabel, nLabel, sizeof(uint32_t), uNum.u32);
-         break;
-      case IEEE754_UNION_IS_DOUBLE:
-         QCBOREncode_AddType7_2(me, szLabel, nLabel, sizeof(uint64_t), uNum.u64);
-         break;
-   }
+   QCBOREncode_AddType7_2(me, szLabel, nLabel, uNum.uSize, uNum.uValue);
 }
 
 void QCBOREncode_AddFloatAsSmallest_2(QCBOREncodeContext *me, const char *szLabel, int64_t nLabel, float fNum)
