diff --git a/libcelt/_kiss_fft_guts.h b/libcelt/_kiss_fft_guts.h
index 9cdff54d133fdba0fd15f87f525b054ab030dbaf..3baa90ed6d37612410cdf3a94328ecea716f6785 100644
--- a/libcelt/_kiss_fft_guts.h
+++ b/libcelt/_kiss_fft_guts.h
@@ -61,12 +61,15 @@ struct kiss_fft_state{
 #define TRIG_UPSCALE 65536
 #define TWID_MAX 2147483647
 #endif
+#define EXT32(a) (a)
+
 #else /* DOUBLE_PRECISION */
 
 # define FRACBITS 15
 # define SAMPPROD celt_int32_t 
 #define SAMP_MAX 32767
 #define TRIG_UPSCALE 1
+#define EXT32(a) EXTEND32(a)
 
 #endif /* !DOUBLE_PRECISION */
 
diff --git a/libcelt/fixed_debug.h b/libcelt/fixed_debug.h
index 84c35020d17cac5102e486b9a1c5437da0c763ef..66c0510c46f873ac961e81d8529adc2f2b3b3394 100644
--- a/libcelt/fixed_debug.h
+++ b/libcelt/fixed_debug.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Jean-Marc Valin */
+/* Copyright (C) 2003-2008 Jean-Marc Valin */
 /**
    @file fixed_debug.h
    @brief Fixed-point operations with debugging
@@ -171,6 +171,8 @@ static inline int SHL32(long long a, int shift)
 #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 
+#define ROUND(x,a) (EXTRACT16(PSHR32((x),(a))))
+
 //#define SHR(a,shift) ((a) >> (shift))
 //#define SHL(a,shift) ((a) << (shift))
 
diff --git a/libcelt/kiss_fftr.c b/libcelt/kiss_fftr.c
index 7e2280f2f9494f451d7bc49bd7033a4053beaa57..833699f4b4b46efcd95e226e3d5abd95b30801b2 100644
--- a/libcelt/kiss_fftr.c
+++ b/libcelt/kiss_fftr.c
@@ -109,11 +109,11 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar
 
    for ( k=1;k <= ncfft/2 ; ++k )
    {
-      f2k.r = SHR32(SUB32(EXTEND32(freqdata[2*k]), EXTEND32(freqdata[2*(ncfft-k)])),1);
-      f2k.i = PSHR32(ADD32(EXTEND32(freqdata[2*k+1]), EXTEND32(freqdata[2*(ncfft-k)+1])),1);
+      f2k.r = SHR32(SUB32(EXT32(freqdata[2*k]), EXT32(freqdata[2*(ncfft-k)])),1);
+      f2k.i = PSHR32(ADD32(EXT32(freqdata[2*k+1]), EXT32(freqdata[2*(ncfft-k)+1])),1);
       
-      f1k.r = SHR32(ADD32(EXTEND32(freqdata[2*k]), EXTEND32(freqdata[2*(ncfft-k)])),1);
-      f1k.i = SHR32(SUB32(EXTEND32(freqdata[2*k+1]), EXTEND32(freqdata[2*(ncfft-k)+1])),1);
+      f1k.r = SHR32(ADD32(EXT32(freqdata[2*k]), EXT32(freqdata[2*(ncfft-k)])),1);
+      f1k.i = SHR32(SUB32(EXT32(freqdata[2*k+1]), EXT32(freqdata[2*(ncfft-k)+1])),1);
       
       C_MULC( tw , f2k , st->super_twiddles[k]);