more number conversion working
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index 03e8b28..203e000 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -2684,7 +2684,7 @@
     * UINT64_MAX < 10 ^^ 19. More than that will cause
     * exit with the overflow error
     */
-   while(nExponent > 0) {
+   while(nExponent > 1) {
       if(uResult > UINT64_MAX / 10) {
          return QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW; // Error overflow
       }
@@ -2851,7 +2851,7 @@
 
 
 
-static inline QCBORError ConvertPositiveBigNumToUnSigned(const UsefulBufC BigNum, uint64_t *pResult)
+static inline QCBORError ConvertPositiveBigNumToUnsigned(const UsefulBufC BigNum, uint64_t *pResult)
 {
    return ConvertBigNumToUnsigned(BigNum, UINT64_MAX, pResult);
 }
@@ -2877,6 +2877,7 @@
       return uError;
    }
    /* Cast is safe because ConvertBigNum is told to limit to INT64_MAX */
+   // TODO: this code is incorrect. See RFC 7049
    *pResult = -(int64_t)uResult;
    return QCBOR_SUCCESS;
 }
@@ -3016,10 +3017,15 @@
             int64_t nMantissa;
             pMe->uLastError = (uint8_t)ConvertPositiveBigNumToSigned(Item.val.expAndMantissa.Mantissa.bigNum, &nMantissa);
             if(!pMe->uLastError) {
-               pMe->uLastError = (uint8_t)ExponentiateNN(nMantissa,
-                                                 Item.val.expAndMantissa.nExponent,
-                                                 pValue,
-                                                &Exponentitate10UU);
+               int64_t nMultiplier;
+               pMe->uLastError = (uint8_t)ExponentiateNN(10,
+                                                         Item.val.expAndMantissa.nExponent,
+                                                        &nMultiplier,
+                                                        &Exponentitate10UU);
+               if(!pMe->uLastError) {
+                  // TODO: overflow
+                  *pValue = nMantissa * nMultiplier;
+               }
             }
          } else {
             pMe->uLastError = QCBOR_ERR_CONVERSION_NOT_REQUESTED;
@@ -3172,7 +3178,7 @@
 
       case QCBOR_TYPE_POSBIGNUM:
          if(uOptions & QCBOR_CONVERT_TYPE_BIG_NUM) {
-            pMe->uLastError = (uint8_t)ConvertPositiveBigNumToUnSigned(Item.val.bigNum, pValue);
+            pMe->uLastError = (uint8_t)ConvertPositiveBigNumToUnsigned(Item.val.bigNum, pValue);
          } else {
             pMe->uLastError = QCBOR_ERR_CONVERSION_NOT_REQUESTED;
          }
@@ -3214,13 +3220,17 @@
 
       case QCBOR_TYPE_DECIMAL_FRACTION_POS_BIGNUM:
          if(uOptions & QCBOR_CONVERT_TYPE_DECIMAL_FRACTION) {
-            int64_t nMantissa;
-            pMe->uLastError = (uint8_t)ConvertPositiveBigNumToSigned(Item.val.expAndMantissa.Mantissa.bigNum, &nMantissa);
+            uint64_t uMantissa;
+            pMe->uLastError = (uint8_t)ConvertPositiveBigNumToUnsigned(Item.val.expAndMantissa.Mantissa.bigNum, &uMantissa);
             if(!pMe->uLastError) {
-               pMe->uLastError = (uint8_t)ExponentitateNU(nMantissa,
+               uint64_t uMultiplier;
+               pMe->uLastError = (uint8_t)ExponentitateNU(10,
                                                  Item.val.expAndMantissa.nExponent,
-                                                   pValue,
+                                                   &uMultiplier,
                                                    Exponentitate10UU);
+               if(!pMe->uLastError) {
+                  *pValue = uMantissa * uMultiplier;
+               }
             }
          } else {
             pMe->uLastError = QCBOR_ERR_CONVERSION_NOT_REQUESTED;
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index d96c8a8..86e75e7 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -4002,6 +4002,49 @@
 
 static const struct NumberConversion NumberConversions[] = {
    {
+      "Decimal Fraction with negative bignum [3, 257]",
+      {(uint8_t[]){0xC4, 0x82, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+                               0xC2, 0x42, 0x01, 0x01}, 15},
+      257000,
+      QCBOR_SUCCESS,
+      257000,
+      QCBOR_SUCCESS,
+      257000.0,
+      QCBOR_SUCCESS
+   },
+   {
+      "bigfloat with negative bignum [3, 257]",
+      {(uint8_t[]){0xC5, 0x82, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+                               0xC3, 0x42, 0x01, 0x01}, 15},
+      -2056,
+      QCBOR_SUCCESS,
+      0,
+      QCBOR_ERR_NUMBER_SIGN_CONVERSION,
+      -2056.0,
+      QCBOR_SUCCESS
+   },
+   {
+      "bigfloat with positive bignum [3, 257]",
+      {(uint8_t[]){0xC5, 0x82, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+                               0xC2, 0x42, 0x01, 0x01}, 15},
+      2056,
+      QCBOR_SUCCESS,
+      2056,
+      QCBOR_SUCCESS,
+      2056.0,
+      QCBOR_SUCCESS
+   },
+   {
+      "negative bignum 0xc349010000000000000000",
+      {(uint8_t[]){0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 11},
+      0,
+      QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW,
+      0,
+      QCBOR_ERR_NUMBER_SIGN_CONVERSION,
+      -18446744073709551617.0,
+      QCBOR_SUCCESS
+   },
+   {
       "Positive bignum 0x01020304 indefinite length string",
       {(uint8_t[]){0xC2, 0x5f, 0x42, 0x01, 0x02, 0x41, 0x03, 0x41, 0x04, 0xff}, 10},
       0x01020304,
@@ -4012,7 +4055,7 @@
       QCBOR_SUCCESS
    },
    {
-      "Decimal Fraction [9223372036854775807, -4759477275222530853137]",
+      "Decimal Fraction with neg bignum [9223372036854775807, -4759477275222530853137]",
       {(uint8_t[]){0xC4, 0x82, 0x1B, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
                                0xC3, 0x4A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10,}, 23},
       0,
@@ -4053,17 +4096,6 @@
       18446744073709551615.0,
       QCBOR_SUCCESS
    },
-
- /*  {
-      "negative bignum 0xc349010000000000000000",
-      {(uint8_t[]){0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 11},
-      0,
-      QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW,
-      0,
-      QCBOR_ERR_NUMBER_SIGN_CONVERSION,
-      -18446744073709551617.0,
-      QCBOR_SUCCESS
-   }, */
    {
       "Positive bignum 0xffff",
       {(uint8_t[]){0xC2, 0x42, 0xff, 0xff}, 4},