diff --git a/source/RISCV/specialize.h b/source/RISCV/specialize.h
index 4137bd7..ec9eda2 100644
--- a/source/RISCV/specialize.h
+++ b/source/RISCV/specialize.h
@@ -120,7 +120,7 @@
 /*----------------------------------------------------------------------------
 | The bit pattern for a default generated 16-bit BF16 floating-point NaN.
 *----------------------------------------------------------------------------*/
-#define defaultNaNF16UI 0x7FC0
+#define defaultNaNBF16UI 0x7FC0
 
 /*----------------------------------------------------------------------------
 | Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point
diff --git a/source/f32_to_bf16.c b/source/f32_to_bf16.c
index 82d9b16..059e05a 100644
--- a/source/f32_to_bf16.c
+++ b/source/f32_to_bf16.c
@@ -75,7 +75,8 @@
     }
     /*------------------------------------------------------------------------
     *------------------------------------------------------------------------*/
-    frac16 = frac>>16 | ((frac & 0xFFFF) != 0);
+    // frac is a 24-bit mantissa, right shifted by 
+    frac16 = frac>>9 | ((frac & 0x1FF) != 0);
     if ( ! (exp | frac16) ) {
         uiZ = packToBF16UI( sign, 0, 0 );
         goto uiZ;
diff --git a/source/s_roundPackToBF16.c b/source/s_roundPackToBF16.c
index 66e19be..57a7ae4 100644
--- a/source/s_roundPackToBF16.c
+++ b/source/s_roundPackToBF16.c
@@ -40,6 +40,7 @@
 #include "internals.h"
 #include "softfloat.h"
 
+/** sig last significant bit is sig[7], the 7 LSBs will be used for rounding */
 bfloat16_t
  softfloat_roundPackToBF16( bool sign, int_fast16_t exp, uint_fast16_t sig )
 {
@@ -54,18 +55,18 @@
     *------------------------------------------------------------------------*/
     roundingMode = softfloat_roundingMode;
     roundNearEven = (roundingMode == softfloat_round_near_even);
-    roundIncrement = 0x8;
+    roundIncrement = 0x40;
     if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) {
         roundIncrement =
             (roundingMode
                  == (sign ? softfloat_round_min : softfloat_round_max))
-                ? 0xF
+                ? 0x7F
                 : 0;
     }
-    roundBits = sig & 0xF;
+    roundBits = sig & 0x7F;
     /*------------------------------------------------------------------------
     *------------------------------------------------------------------------*/
-    if ( 0x1D <= (unsigned int) exp ) {
+    if ( 0xFD <= (unsigned int) exp ) {
         if ( exp < 0 ) {
             /*----------------------------------------------------------------
             *----------------------------------------------------------------*/
@@ -74,22 +75,22 @@
                     || (exp < -1) || (sig + roundIncrement < 0x8000);
             sig = softfloat_shiftRightJam32( sig, -exp );
             exp = 0;
-            roundBits = sig & 0xF;
+            roundBits = sig & 0x7F;
             if ( isTiny && roundBits ) {
                 softfloat_raiseFlags( softfloat_flag_underflow );
             }
-        } else if ( (0x1D < exp) || (0x8000 <= sig + roundIncrement) ) {
+        } else if ( (0xFD < exp) || (0x8000 <= sig + roundIncrement) ) {
             /*----------------------------------------------------------------
             *----------------------------------------------------------------*/
             softfloat_raiseFlags(
                 softfloat_flag_overflow | softfloat_flag_inexact );
-            uiZ = packToF16UI( sign, 0x1F, 0 ) - ! roundIncrement;
+            uiZ = packToBF16UI( sign, 0xFF, 0 ) - ! roundIncrement;
             goto uiZ;
         }
     }
     /*------------------------------------------------------------------------
     *------------------------------------------------------------------------*/
-    sig = (sig + roundIncrement)>>4;
+    sig = (sig + roundIncrement)>>7;
     if ( roundBits ) {
         softfloat_exceptionFlags |= softfloat_flag_inexact;
 #ifdef SOFTFLOAT_ROUND_ODD
@@ -99,12 +100,12 @@
         }
 #endif
     }
-    sig &= ~(uint_fast16_t) (! (roundBits ^ 8) & roundNearEven);
+    sig &= ~(uint_fast16_t) (! (roundBits ^ 0x40) & roundNearEven);
     if ( ! sig ) exp = 0;
     /*------------------------------------------------------------------------
     *------------------------------------------------------------------------*/
  packReturn:
-    uiZ = packToF16UI( sign, exp, sig );
+    uiZ = packToBF16UI( sign, exp, sig );
  uiZ:
     uZ.ui = uiZ;
     return uZ.f;
