diff --git a/apps/codecs/libwma/wmafixed.c b/apps/codecs/libwma/wmafixed.c
index b53a1da..9c3b211 100644
--- a/apps/codecs/libwma/wmafixed.c
+++ b/apps/codecs/libwma/wmafixed.c
@@ -43,56 +43,8 @@
   return (fixed64)x;
 }
 
-
 /*
-	Fixed precision multiply code.
-
-*/
-
-/*Sign-15.16 format */
-#ifdef CPU_ARM
-/* these are defines in wmafixed.h*/
-#elif defined(CPU_COLDFIRE)
-
-#else
-
-fixed32 fixmul32(fixed32 x, fixed32 y)
-{
-    fixed64 temp;
-    temp = x;
-    temp *= y;
-
-    temp >>= PRECISION;
-
-    return (fixed32)temp;
-}
-
-#endif
-/*
-	Special fixmul32 that does a 16.16 x 1.31 multiply that returns a 16.16 value.
-	this is needed because the fft constants are all normalized to be less then 1
-	and can't fit into a 16 bit number without excessive rounding
-
-
-*/
-#ifndef CPU_ARM
-fixed32 fixmul32b(fixed32 x, fixed32 y)
-{
-    fixed64 temp;
-
-    temp = x;
-    temp *= y;
-
-    temp >>= 31;        //16+31-16 = 31 bits
-
-    return (fixed32)temp;
-}
-#endif
-
-
-
-/*
-	Not performance senstitive code here
+    Not performance senstitive code here
 
 */
 
@@ -204,7 +156,7 @@
 
 /*
 
-	Below here functions do not use standard fixed precision!
+    Below here functions do not use standard fixed precision!
 */
 
 
@@ -270,7 +222,7 @@
 
 
 /*
-	Old trig functions.  Still used in 1 place each.
+    Old trig functions.  Still used in 1 place each.
 
 */
 
diff --git a/apps/codecs/libwma/wmafixed.h b/apps/codecs/libwma/wmafixed.h
index 32386dc..b92c12a 100644
--- a/apps/codecs/libwma/wmafixed.h
+++ b/apps/codecs/libwma/wmafixed.h
@@ -1,9 +1,9 @@
-/* 	fixed precision code.  We use a combination of Sign 15.16 and Sign.31
-	precision here.
+/*  fixed precision code.  We use a combination of Sign 15.16 and Sign.31
+     precision here.
 
-	The WMA decoder does not always follow this convention, and occasionally
-	renormalizes values to other formats in order to maximize precision.
-	However, only the two precisions above are provided in this file.
+    The WMA decoder does not always follow this convention, and occasionally
+    renormalizes values to other formats in order to maximize precision.
+    However, only the two precisions above are provided in this file.
 
 */
 
@@ -35,17 +35,8 @@
 fixed32 fixcos32(fixed32 x);
 long fsincos(unsigned long phase, fixed32 *cos);
 
-
-
-
-
 #ifdef CPU_ARM
 
-/*
-	Fixed precision multiply code ASM.
-
-*/
-
 /*Sign-15.16 format */
 
 #define fixmul32(x, y)  \
@@ -62,8 +53,7 @@
        __result;  \
     })
 
-
- #define fixmul32b(x, y)  \
+#define fixmul32b(x, y)  \
     ({ int32_t __hi;  \
        uint32_t __lo;  \
        int32_t __result;  \
@@ -76,6 +66,7 @@
     })
 
 #elif defined(CPU_COLDFIRE)
+
 static inline int32_t fixmul32(int32_t x, int32_t y)
 {
 #if PRECISION != 16
@@ -89,22 +80,49 @@
         "lsr.l   #1, %[t1]       \n"
         "move.w  %[t1], %[x]     \n"
         "swap    %[x]            \n"
-        : /* outputs */
-        [t1]"=&d"(t1),
-        [x] "+d" (x)
-        : /* inputs */
-        [y] "d"  (y)
+        : [t1] "=&d" (t1), [x] "+d" (x)
+        : [y] "d"  (y)
     );
     return x;
 }
 
-fixed32 fixmul32b(fixed32 x, fixed32 y);
+static inline int32_t fixmul32b(int32_t x, int32_t y)
+{
+    asm (
+        "mac.l   %[x], %[y], %%acc0  \n" /* multiply */
+        "movclr.l %%acc0, %[x]  \n"     /* get higher half */
+        : [x] "+d" (x)
+        : [y] "d"  (y)
+    );
+    return x;
+}
+
 #else
 
-fixed32 fixmul32(fixed32 x, fixed32 y);
-fixed32 fixmul32b(fixed32 x, fixed32 y);
-#endif
+static inline fixed32 fixmul32(fixed32 x, fixed32 y)
+{
+    fixed64 temp;
+    temp = x;
+    temp *= y;
 
+    temp >>= PRECISION;
+
+    return (fixed32)temp;
+}
+
+static inline fixed32 fixmul32b(fixed32 x, fixed32 y)
+{
+    fixed64 temp;
+
+    temp = x;
+    temp *= y;
+
+    temp >>= 31;        //16+31-16 = 31 bits
+
+    return (fixed32)temp;
+}
+
+#endif
 
 #ifdef CPU_ARM
 static inline
@@ -148,7 +166,6 @@
                 : "cc", "memory");
 }
 #else
-// PJJ : reinstate macro
 static inline
 void CMUL(fixed32 *pre,
           fixed32 *pim,
