Index: src/aubio.h
===================================================================
--- src/aubio.h	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/aubio.h	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -64,9 +64,5 @@
 #include "cvec.h"
 #include "lvec.h"
-#include "mathutils.h"
-#include "vecutils.h"
-#include "utils/scale.h"
-#include "utils/hist.h"
-#include "spectral/tss.h"
+#include "musicutils.h"
 #include "temporal/resampler.h"
 #include "temporal/filter.h"
@@ -74,11 +70,19 @@
 #include "temporal/a_weighting.h"
 #include "temporal/c_weighting.h"
+#include "spectral/fft.h"
+#include "spectral/phasevoc.h"
+#include "spectral/mfcc.h"
+#include "pitch/pitch.h"
+#include "onset/onset.h"
+#include "tempo/tempo.h"
+
+#if AUBIO_UNSTABLE
+#include "vecutils.h"
+#include "mathutils.h"
+#include "utils/scale.h"
+#include "utils/hist.h"
+#include "spectral/tss.h"
 #include "spectral/filterbank.h"
 #include "spectral/filterbank_mel.h"
-#include "spectral/mfcc.h"
-#include "spectral/fft.h"
-#include "spectral/phasevoc.h"
-#include "spectral/spectral_centroid.h"
-#include "pitch/pitch.h"
 #include "pitch/pitchmcomb.h"
 #include "pitch/pitchyin.h"
@@ -87,8 +91,8 @@
 #include "pitch/pitchfcomb.h"
 #include "onset/onsetdetection.h"
-#include "onset/onset.h"
+#include "spectral/spectral_centroid.h"
 #include "onset/peakpick.h"
 #include "tempo/beattracking.h"
-#include "tempo/tempo.h"
+#endif
 
 #ifdef __cplusplus
Index: src/aubio_priv.h
===================================================================
--- src/aubio_priv.h	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/aubio_priv.h	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -68,4 +68,8 @@
 
 #include "types.h"
+
+#define AUBIO_UNSTABLE 1
+
+#include "mathutils.h"
 
 /****
Index: src/mathutils.c
===================================================================
--- src/mathutils.c	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/mathutils.c	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -24,4 +24,5 @@
 #include "fvec.h"
 #include "mathutils.h"
+#include "musicutils.h"
 #include "config.h"
 
Index: src/mathutils.h
===================================================================
--- src/mathutils.h	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/mathutils.h	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -26,35 +26,10 @@
 #define MATHUTILS_H
 
+#include "fvec.h"
+#include "musicutils.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
-
-/** create window 
- 
-  References:
-    
-    - <a href="http://en.wikipedia.org/wiki/Window_function">Window
-function</a> on Wikipedia
-    - Amalia de Götzen, Nicolas Bernardini, and Daniel Arfib. Traditional (?)
-implementations of a phase vocoder: the tricks of the trade. In Proceedings of
-the International Conference on Digital Audio Effects (DAFx-00), pages 37–44,
-Uni- versity of Verona, Italy, 2000.
-  (<a href="http://profs.sci.univr.it/%7Edafx/Final-Papers/ps/Bernardini.ps.gz">
-  ps.gz</a>)
-
-*/
-fvec_t *new_aubio_window (char_t * window_type, uint_t size);
-
-/** compute the principal argument
-
-  This function maps the input phase to its corresponding value wrapped in the
-range \f$ [-\pi, \pi] \f$.
-
-  \param phase unwrapped phase to map to the unit circle
-  
-  \return equivalent phase wrapped to the unit circle
-
-*/
-smpl_t aubio_unwrap2pi (smpl_t phase);
 
 /** compute the mean of a vector
@@ -297,22 +272,4 @@
 uint_t fvec_peakpick (fvec_t * v, uint_t p);
 
-/** convert frequency bin to midi value */
-smpl_t aubio_bintomidi (smpl_t bin, smpl_t samplerate, smpl_t fftsize);
-
-/** convert midi value to frequency bin */
-smpl_t aubio_miditobin (smpl_t midi, smpl_t samplerate, smpl_t fftsize);
-
-/** convert frequency bin to frequency (Hz) */
-smpl_t aubio_bintofreq (smpl_t bin, smpl_t samplerate, smpl_t fftsize);
-
-/** convert frequency (Hz) to frequency bin */
-smpl_t aubio_freqtobin (smpl_t freq, smpl_t samplerate, smpl_t fftsize);
-
-/** convert frequency (Hz) to midi value (0-128) */
-smpl_t aubio_freqtomidi (smpl_t freq);
-
-/** convert midi value (0-128) to frequency (Hz) */
-smpl_t aubio_miditofreq (smpl_t midi);
-
 /** return 1 if a is a power of 2, 0 otherwise */
 uint_t aubio_is_power_of_two(uint_t a);
@@ -321,35 +278,4 @@
 uint_t aubio_next_power_of_two(uint_t a);
 
-/** compute sound pressure level (SPL) in dB
-
-  This quantity is often wrongly called 'loudness'.
-
-  \param v vector to compute dB SPL from
-
-  \return level of v in dB SPL
-
-*/
-smpl_t aubio_db_spl (fvec_t * v);
-
-/** check if buffer level in dB SPL is under a given threshold
- 
-  \param v vector to get level from
-  \param threshold threshold in dB SPL
-
-  \return 0 if level is under the given threshold, 1 otherwise
-
-*/
-uint_t aubio_silence_detection (fvec_t * v, smpl_t threshold);
-
-/** get buffer level if level >= threshold, 1. otherwise
-
-  \param v vector to get level from
-  \param threshold threshold in dB SPL
-
-  \return level in dB SPL if level >= threshold, 1. otherwise
-
-*/
-smpl_t aubio_level_detection (fvec_t * v, smpl_t threshold);
-
 /** compute normalised autocorrelation function
 
@@ -359,24 +285,4 @@
 */
 void aubio_autocorr (fvec_t * input, fvec_t * output);
-
-/** zero-crossing rate (ZCR)
-
-  The zero-crossing rate is the number of times a signal changes sign,
-  divided by the length of this signal.
-
-  \param v vector to compute ZCR from
-
-  \return zero-crossing rate of v
-
-*/
-smpl_t aubio_zero_crossing_rate (fvec_t * v);
-
-/** clean up cached memory at the end of program
- 
-  This function should be used at the end of programs to purge all cached
-  memory. So far it is only useful to clean FFTW's cache.
-
-*/
-void aubio_cleanup (void);
 
 #ifdef __cplusplus
Index: src/musicutils.h
===================================================================
--- src/musicutils.h	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
+++ src/musicutils.h	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -0,0 +1,134 @@
+/*
+  Copyright (C) 2003-2009 Paul Brossier <piem@aubio.org>
+
+  This file is part of aubio.
+
+  aubio is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  aubio is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with aubio.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+/** @file
+ *  various math functions
+ */
+
+#ifndef MUSICUTILS_H
+#define MUSICUTILS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** create window 
+ 
+  References:
+    
+    - <a href="http://en.wikipedia.org/wiki/Window_function">Window
+function</a> on Wikipedia
+    - Amalia de Götzen, Nicolas Bernardini, and Daniel Arfib. Traditional (?)
+implementations of a phase vocoder: the tricks of the trade. In Proceedings of
+the International Conference on Digital Audio Effects (DAFx-00), pages 37–44,
+Uni- versity of Verona, Italy, 2000.
+  (<a href="http://profs.sci.univr.it/%7Edafx/Final-Papers/ps/Bernardini.ps.gz">
+  ps.gz</a>)
+
+*/
+fvec_t *new_aubio_window (char_t * window_type, uint_t size);
+
+/** compute the principal argument
+
+  This function maps the input phase to its corresponding value wrapped in the
+range \f$ [-\pi, \pi] \f$.
+
+  \param phase unwrapped phase to map to the unit circle
+  
+  \return equivalent phase wrapped to the unit circle
+
+*/
+smpl_t aubio_unwrap2pi (smpl_t phase);
+
+/** convert frequency bin to midi value */
+smpl_t aubio_bintomidi (smpl_t bin, smpl_t samplerate, smpl_t fftsize);
+
+/** convert midi value to frequency bin */
+smpl_t aubio_miditobin (smpl_t midi, smpl_t samplerate, smpl_t fftsize);
+
+/** convert frequency bin to frequency (Hz) */
+smpl_t aubio_bintofreq (smpl_t bin, smpl_t samplerate, smpl_t fftsize);
+
+/** convert frequency (Hz) to frequency bin */
+smpl_t aubio_freqtobin (smpl_t freq, smpl_t samplerate, smpl_t fftsize);
+
+/** convert frequency (Hz) to midi value (0-128) */
+smpl_t aubio_freqtomidi (smpl_t freq);
+
+/** convert midi value (0-128) to frequency (Hz) */
+smpl_t aubio_miditofreq (smpl_t midi);
+
+/** clean up cached memory at the end of program
+ 
+  This function should be used at the end of programs to purge all cached
+  memory. So far it is only useful to clean FFTW's cache.
+
+*/
+void aubio_cleanup (void);
+
+/** zero-crossing rate (ZCR)
+
+  The zero-crossing rate is the number of times a signal changes sign,
+  divided by the length of this signal.
+
+  \param v vector to compute ZCR from
+
+  \return zero-crossing rate of v
+
+*/
+smpl_t aubio_zero_crossing_rate (fvec_t * v);
+
+/** compute sound pressure level (SPL) in dB
+
+  This quantity is often wrongly called 'loudness'.
+
+  \param v vector to compute dB SPL from
+
+  \return level of v in dB SPL
+
+*/
+smpl_t aubio_db_spl (fvec_t * v);
+
+/** check if buffer level in dB SPL is under a given threshold
+ 
+  \param v vector to get level from
+  \param threshold threshold in dB SPL
+
+  \return 0 if level is under the given threshold, 1 otherwise
+
+*/
+uint_t aubio_silence_detection (fvec_t * v, smpl_t threshold);
+
+/** get buffer level if level >= threshold, 1. otherwise
+
+  \param v vector to get level from
+  \param threshold threshold in dB SPL
+
+  \return level in dB SPL if level >= threshold, 1. otherwise
+
+*/
+smpl_t aubio_level_detection (fvec_t * v, smpl_t threshold);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
Index: src/pitch/pitch.c
===================================================================
--- src/pitch/pitch.c	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/pitch/pitch.c	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -21,6 +21,7 @@
 #include "cvec.h"
 #include "lvec.h"
+#include "mathutils.h"
+#include "musicutils.h"
 #include "spectral/phasevoc.h"
-#include "mathutils.h"
 #include "temporal/filter.h"
 #include "temporal/c_weighting.h"
Index: src/pitch/pitchfcomb.c
===================================================================
--- src/pitch/pitchfcomb.c	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/pitch/pitchfcomb.c	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -22,4 +22,5 @@
 #include "cvec.h"
 #include "mathutils.h"
+#include "musicutils.h"
 #include "spectral/fft.h"
 #include "pitch/pitchfcomb.h"
Index: src/vecutils.c
===================================================================
--- src/vecutils.c	(revision 78429de1d232b71f5f409adf5e19e013f8c8212f)
+++ src/vecutils.c	(revision b2e706f39a1a65aa55e58f33ac7636e5a4f2f992)
@@ -1,7 +1,7 @@
 #include "config.h"
+#include "aubio_priv.h"
 #include "types.h"
 #include "fvec.h"
 #include "cvec.h"
-#include "aubio_priv.h"
 #include "vecutils.h"
 
