From 1ef5dbac0253c2955901d4b99fab7631051881d7 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@vt.edu>
Date: Tue, 7 Oct 2014 11:15:26 -0400
Subject: [PATCH] *synced iemlib and externals TODO

---
 externals/iemlib/Make.include                 |  43 +-
 externals/iemlib/Makefile                     |  18 +-
 externals/iemlib/alias/ii.c                   |   5 +
 externals/iemlib/alias/tm.c                   |   5 +
 externals/iemlib/alias/unsym.c                |   5 +
 externals/iemlib/iem_mp3/src/makefile         |   4 +
 externals/iemlib/iem_mp3/src/makefile_d_fat   |  63 +-
 externals/iemlib/iem_mp3/src/makefile_linux   |  47 -
 externals/iemlib/iem_t3_lib/src/iemlib.h      | 102 --
 externals/iemlib/iem_t3_lib/src/makefile      |   9 +
 .../iemlib/iem_t3_lib/src/makefile_d_fat      |  63 +-
 .../iemlib/iem_t3_lib/src/makefile_linux      |  52 -
 externals/iemlib/iemabs/ap1_dp~-help.pd       |  62 ++
 externals/iemlib/iemabs/ap1_dp~.pd            |  24 +
 externals/iemlib/iemabs/ap2_dp~-help.pd       |  66 ++
 externals/iemlib/iemabs/ap2_dp~.pd            |  28 +
 externals/iemlib/iemabs/bp2_dp~.pd            |  29 +
 externals/iemlib/iemabs/bpq2_dp~-help.pd      |  61 ++
 externals/iemlib/iemabs/bpq2_dp~.pd           |  29 +
 externals/iemlib/iemabs/bpw2_dp~-help.pd      |  61 ++
 externals/iemlib/iemabs/bpw2_dp~.pd           |  29 +
 externals/iemlib/iemabs/bs2_dp~.pd            |  29 +
 externals/iemlib/iemabs/bsq2_dp~-help.pd      |  61 ++
 externals/iemlib/iemabs/bsq2_dp~.pd           |  29 +
 externals/iemlib/iemabs/bsw2_dp~-help.pd      |  61 ++
 externals/iemlib/iemabs/bsw2_dp~.pd           |  29 +
 externals/iemlib/iemabs/hp1_dp~-help.pd       |  56 +
 externals/iemlib/iemabs/hp1_dp~.pd            |  24 +
 externals/iemlib/iemabs/hp1c_dp~.pd           |  39 +
 externals/iemlib/iemabs/hp2_dp~-help.pd       |  60 ++
 externals/iemlib/iemabs/hp2_dp~.pd            |  28 +
 externals/iemlib/iemabs/hp2c_dp~.pd           |  41 +
 externals/iemlib/iemabs/init_popup.pd         |  38 +
 .../{lp1_d~-help.pd => lp1_dp~-help.pd}       |  26 +-
 .../iemlib/iemabs/{lp1_d~.pd => lp1_dp~.pd}   |  10 +-
 externals/iemlib/iemabs/lp1c_dp~.pd           |  39 +
 externals/iemlib/iemabs/lp2_dp~-help.pd       |  60 ++
 externals/iemlib/iemabs/lp2_dp~.pd            |  28 +
 .../iemlib/iemabs/{lp2c_d~.pd => lp2c_dp~.pd} |  27 +-
 externals/iemlib/iemabs/output~.pd            |  54 +-
 externals/iemlib/iemabs/popup.pd              |  25 +
 externals/iemlib/iemlib1/sin_freq~-help.pd    |  47 +
 externals/iemlib/iemlib1/sin_phase~-help.pd   | 136 +--
 externals/iemlib/iemlib1/sparse_FIR~-help.pd  | 214 ++--
 externals/iemlib/iemlib1/src/FIR~.c           | 123 +--
 .../iemlib/iemlib1/src/{ => VC6}/iemlib1.dsp  |   0
 .../iemlib/iemlib1/src/{ => VC6}/iemlib1.dsw  |   0
 externals/iemlib/iemlib1/src/VC6/makefile_win |  59 ++
 .../iemlib/iemlib1/src/VC7/iemlib1.vcproj     |  52 +
 .../iemlib/iemlib1/src/VC7/makefile_vc7proj   |  57 ++
 externals/iemlib/iemlib1/src/VC9/iemlib1.sln  |  20 +
 .../iemlib/iemlib1/src/VC9/iemlib1.vcproj     |  77 ++
 externals/iemlib/iemlib1/src/VC9/makefile_win |  56 +
 .../iemlib/iemlib1/src/biquad_freq_resp.c     |  58 +-
 externals/iemlib/iemlib1/src/filter~.c        | 969 +++++++++---------
 externals/iemlib/iemlib1/src/for++.c          | 192 ++--
 externals/iemlib/iemlib1/src/hml_shelf~.c     |  19 +-
 externals/iemlib/iemlib1/src/iem_cot4~.c      |   7 +-
 externals/iemlib/iemlib1/src/iem_delay~.c     |   6 +-
 externals/iemlib/iemlib1/src/iem_pow4~.c      |  58 +-
 externals/iemlib/iemlib1/src/iem_sqrt4~.c     |  60 +-
 externals/iemlib/iemlib1/src/iemlib.h         | 102 --
 externals/iemlib/iemlib1/src/iemlib1.c        |   4 +-
 externals/iemlib/iemlib1/src/iemlib1.sln      |  20 +
 externals/iemlib/iemlib1/src/iemlib1.vcproj   |  77 ++
 externals/iemlib/iemlib1/src/lp1_t~.c         |  65 +-
 externals/iemlib/iemlib1/src/makefile         |  30 +
 externals/iemlib/iemlib1/src/makefile_d_fat   |  72 +-
 externals/iemlib/iemlib1/src/makefile_d_ppc   |  56 +-
 externals/iemlib/iemlib1/src/makefile_darwin  |  68 +-
 externals/iemlib/iemlib1/src/makefile_linux   |  72 --
 externals/iemlib/iemlib1/src/makefile_win     |  19 +-
 externals/iemlib/iemlib1/src/mov_avrg_kern~.c |  20 +-
 externals/iemlib/iemlib1/src/para_bp2~.c      | 187 ++--
 externals/iemlib/iemlib1/src/peakenv_hold~.c  |  21 +-
 externals/iemlib/iemlib1/src/peakenv~.c       |  21 +-
 externals/iemlib/iemlib1/src/prvu~.c          | 127 ++-
 externals/iemlib/iemlib1/src/pvu~.c           |  67 +-
 externals/iemlib/iemlib1/src/rvu~.c           |  79 +-
 externals/iemlib/iemlib1/src/sin_freq~.c      | 102 ++
 externals/iemlib/iemlib1/src/sin_phase~.c     |  79 +-
 externals/iemlib/iemlib1/src/soundfile_info.c | 182 +++-
 externals/iemlib/iemlib1/src/sparse_FIR~.c    | 204 +++-
 externals/iemlib/iemlib1/src/vcf_filter~.c    | 191 ++--
 externals/iemlib/iemlib2/iem_pbank.pbank      |   2 +-
 .../iemlib/iemlib2/src/VC6/iem_atan2.dsp      |  85 ++
 .../iemlib/iemlib2/src/VC6/iem_atan2.dsw      |  29 +
 externals/iemlib/iemlib2/src/VC6/makefile_win |  37 +
 .../iemlib/iemlib2/src/VC7/iem_atan2.vcproj   |  52 +
 .../iemlib/iemlib2/src/VC7/makefile_vc7proj   |  31 +
 .../iemlib/iemlib2/src/VC9/iem_atan2.sln      |  20 +
 .../iemlib/iemlib2/src/VC9/iem_atan2.vcproj   |  77 ++
 .../iemlib/iemlib2/src/VC9/makefile_vc9proj   |  30 +
 externals/iemlib/iemlib2/src/dollarg.c        |   6 +-
 externals/iemlib/iemlib2/src/iemlib.h         | 102 --
 externals/iemlib/iemlib2/src/iemlib2.c        |   4 +-
 externals/iemlib/iemlib2/src/iemlib2.sln      |  20 +
 externals/iemlib/iemlib2/src/iemlib2.vcproj   |  77 ++
 externals/iemlib/iemlib2/src/makefile         |  44 +
 externals/iemlib/iemlib2/src/makefile_d_fat   |  66 +-
 externals/iemlib/iemlib2/src/makefile_d_ppc   |  58 +-
 externals/iemlib/iemlib2/src/makefile_darwin  |  70 +-
 externals/iemlib/iemlib2/src/makefile_linux   |  84 --
 externals/iemlib/iemlib2/src/makefile_vc9proj |  70 ++
 externals/iemlib/iemlib2/src/makefile_win     |   2 +-
 .../iemlib/iemlib2/src/parentdollarzero.c     |   9 +-
 .../iemlib/iemlib2/src/protect_against_open.c |  27 +-
 .../iemlib/{iem_mp3/src => include}/iemlib.h  |  22 +-
 externals/pd-l2ork-TODO.txt                   |   3 +-
 109 files changed, 4414 insertions(+), 2257 deletions(-)
 create mode 100644 externals/iemlib/alias/ii.c
 create mode 100644 externals/iemlib/alias/tm.c
 create mode 100644 externals/iemlib/alias/unsym.c
 delete mode 100644 externals/iemlib/iem_mp3/src/makefile_linux
 delete mode 100644 externals/iemlib/iem_t3_lib/src/iemlib.h
 delete mode 100644 externals/iemlib/iem_t3_lib/src/makefile_linux
 create mode 100644 externals/iemlib/iemabs/ap1_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/ap1_dp~.pd
 create mode 100644 externals/iemlib/iemabs/ap2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/ap2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/bp2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/bpq2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/bpq2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/bpw2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/bpw2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/bs2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/bsq2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/bsq2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/bsw2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/bsw2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/hp1_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/hp1_dp~.pd
 create mode 100644 externals/iemlib/iemabs/hp1c_dp~.pd
 create mode 100644 externals/iemlib/iemabs/hp2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/hp2_dp~.pd
 create mode 100644 externals/iemlib/iemabs/hp2c_dp~.pd
 create mode 100644 externals/iemlib/iemabs/init_popup.pd
 rename externals/iemlib/iemabs/{lp1_d~-help.pd => lp1_dp~-help.pd} (76%)
 rename externals/iemlib/iemabs/{lp1_d~.pd => lp1_dp~.pd} (77%)
 create mode 100644 externals/iemlib/iemabs/lp1c_dp~.pd
 create mode 100644 externals/iemlib/iemabs/lp2_dp~-help.pd
 create mode 100644 externals/iemlib/iemabs/lp2_dp~.pd
 rename externals/iemlib/iemabs/{lp2c_d~.pd => lp2c_dp~.pd} (69%)
 create mode 100644 externals/iemlib/iemabs/popup.pd
 create mode 100644 externals/iemlib/iemlib1/sin_freq~-help.pd
 rename externals/iemlib/iemlib1/src/{ => VC6}/iemlib1.dsp (100%)
 rename externals/iemlib/iemlib1/src/{ => VC6}/iemlib1.dsw (100%)
 create mode 100644 externals/iemlib/iemlib1/src/VC6/makefile_win
 create mode 100644 externals/iemlib/iemlib1/src/VC7/iemlib1.vcproj
 create mode 100644 externals/iemlib/iemlib1/src/VC7/makefile_vc7proj
 create mode 100644 externals/iemlib/iemlib1/src/VC9/iemlib1.sln
 create mode 100644 externals/iemlib/iemlib1/src/VC9/iemlib1.vcproj
 create mode 100644 externals/iemlib/iemlib1/src/VC9/makefile_win
 delete mode 100644 externals/iemlib/iemlib1/src/iemlib.h
 create mode 100644 externals/iemlib/iemlib1/src/iemlib1.sln
 create mode 100644 externals/iemlib/iemlib1/src/iemlib1.vcproj
 delete mode 100644 externals/iemlib/iemlib1/src/makefile_linux
 create mode 100644 externals/iemlib/iemlib1/src/sin_freq~.c
 create mode 100644 externals/iemlib/iemlib2/src/VC6/iem_atan2.dsp
 create mode 100644 externals/iemlib/iemlib2/src/VC6/iem_atan2.dsw
 create mode 100644 externals/iemlib/iemlib2/src/VC6/makefile_win
 create mode 100644 externals/iemlib/iemlib2/src/VC7/iem_atan2.vcproj
 create mode 100644 externals/iemlib/iemlib2/src/VC7/makefile_vc7proj
 create mode 100644 externals/iemlib/iemlib2/src/VC9/iem_atan2.sln
 create mode 100644 externals/iemlib/iemlib2/src/VC9/iem_atan2.vcproj
 create mode 100644 externals/iemlib/iemlib2/src/VC9/makefile_vc9proj
 delete mode 100644 externals/iemlib/iemlib2/src/iemlib.h
 create mode 100644 externals/iemlib/iemlib2/src/iemlib2.sln
 create mode 100644 externals/iemlib/iemlib2/src/iemlib2.vcproj
 delete mode 100644 externals/iemlib/iemlib2/src/makefile_linux
 create mode 100644 externals/iemlib/iemlib2/src/makefile_vc9proj
 rename externals/iemlib/{iem_mp3/src => include}/iemlib.h (76%)

diff --git a/externals/iemlib/Make.include b/externals/iemlib/Make.include
index 13c6c2ff7..aaca607a9 100644
--- a/externals/iemlib/Make.include
+++ b/externals/iemlib/Make.include
@@ -1,25 +1,39 @@
 current: all
 
+PD_DEFINES = -DPD -DUNIX
+
+#################################
+# path to private Pd-headers 
 PDSOURCE ?= /usr/local/src/pd/src
 
+# path to iemlib.h
+IEMLIB_INCLUDE = ../../include
+
+#define to true if private Pd-header g_canvas.h is in out search-path
+PD_DEFINES += -DHAVE_G_CANVAS_H 
+#################################
+
+
 .SUFFIXES: .pd_linux
 
 EXT = pd_linux
 
-LDFLAGS = --export-dynamic -shared
-LIB = -ldl -lm -lpthread
+STRIP = strip
+
+PD_LDFLAGS = --export-dynamic -shared $(LD_FLAGS)
+PD_LIB = -lm -lc $(LIB)
 
 #select either the DBG and OPT compiler flags below:
-CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
-	-DDL_OPEN -fPIC -fno-stack-protector
 
+DBG_CFLAGS=-W -Wno-parentheses -Wno-switch -Wno-unused
+CFLAGS=-O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing
+PD_CFLAGS = $(PD_DEFINES) -fPIC -fno-stack-protector $(DBG_CFLAGS) $(CFLAGS)
 
-INCLUDE = -I. -I$(PDSOURCE)
+PD_INCLUDES = -I. -I$(IEMLIB_INCLUDE) -I$(PDSOURCE) -I../../../../pd/src
 
 # the sources
-SRC = $(sort $(filter %.c, $(wildcard *.c)))
-
+#SRC = $(sort $(filter %.c, $(wildcard *.c)))
+	
 OBJ = $(SRC:.c=.o) 
 
 #
@@ -27,19 +41,16 @@ OBJ = $(SRC:.c=.o)
 #
 
 clean:
-	-rm ../../lib/$(TARGET).$(EXT) $(TARGET).$(EXT)
-	-rm *.o
+	-rm -f ../../lib/$(TARGET).$(EXT) $(TARGET).$(EXT)
+	-rm -f *.o
 
 all: $(OBJ)
 	@echo :: $(OBJ)
-	ld $(LDFLAGS) -o $(TARGET).$(EXT) *.o $(LIB)
-	strip --strip-unneeded $(TARGET).$(EXT)
+	$(LD) $(PD_LDFLAGS) -o $(TARGET).$(EXT) *.o $(PD_LIB)
+	$(STRIP) --strip-unneeded $(TARGET).$(EXT)
 	-cp $(TARGET).$(EXT) ../../lib/
 
 $(OBJ) : %.o : %.c
 	touch $*.c
-	cc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
-
-
-
+	$(CC) $(PD_CFLAGS) $(PD_INCLUDES) -c -o $*.o $*.c
 
diff --git a/externals/iemlib/Makefile b/externals/iemlib/Makefile
index ebd1129d2..37ca2eea1 100644
--- a/externals/iemlib/Makefile
+++ b/externals/iemlib/Makefile
@@ -22,22 +22,22 @@ $(IEMLIBS):
 install: install-bin install-doc install-abs
 
 install-bin:
-	-install -d ${INSTALL_BIN}
-	-install -m 644 lib/*.* $(INSTALL_BIN)
+	-install -d $(DESTDIR)$(INSTALL_BIN)
+	-install -m 644 lib/*.* $(DESTDIR)$(INSTALL_BIN)
 
 install-doc:
-	-install -d ${INSTALL_DOC}
-	-for d in ${IEMLIBS}; do \
+	-install -d $(DESTDIR)$(INSTALL_DOC)
+	-for d in $(IEMLIBS); do \
 	 for e in pd wav; do \
-	  install -m644 $$d/*.$$e $(INSTALL_DOC); \
+	  install -m644 $$d/*.$$e $(DESTDIR)$(INSTALL_DOC); \
 	 done; \
 	done
 
 install-abs:
-	-install -d ${INSTALL_BIN}
-	-install -m 644 iemabs/*.pd $(INSTALL_BIN)
+	-install -d $(DESTDIR)$(INSTALL_BIN)
+	-install -m 644 iemabs/*.pd $(DESTDIR)$(INSTALL_BIN)
 
 clean:
-	for d in ${IEMLIBS}; do \
-	  ${MAKE} -C $$d/src clean; \
+	for d in $(IEMLIBS); do \
+	  $(MAKE) -C $$d/src clean; \
 	done
diff --git a/externals/iemlib/alias/ii.c b/externals/iemlib/alias/ii.c
new file mode 100644
index 000000000..cf959fde6
--- /dev/null
+++ b/externals/iemlib/alias/ii.c
@@ -0,0 +1,5 @@
+#include "../iemlib2/src/init.c"
+void ii_setup()
+{
+  init_setup();
+}
diff --git a/externals/iemlib/alias/tm.c b/externals/iemlib/alias/tm.c
new file mode 100644
index 000000000..cfe609890
--- /dev/null
+++ b/externals/iemlib/alias/tm.c
@@ -0,0 +1,5 @@
+#include "../iemlib2/src/toggle_mess.c"
+void tm_setup()
+{
+  toggle_mess_setup();
+}
diff --git a/externals/iemlib/alias/unsym.c b/externals/iemlib/alias/unsym.c
new file mode 100644
index 000000000..19cd0d92f
--- /dev/null
+++ b/externals/iemlib/alias/unsym.c
@@ -0,0 +1,5 @@
+#include "../iemlib2/src/unsymbol.c"
+void unsym_setup()
+{
+  unsymbol_setup();
+}
diff --git a/externals/iemlib/iem_mp3/src/makefile b/externals/iemlib/iem_mp3/src/makefile
index 700376d24..ff92c1fab 100644
--- a/externals/iemlib/iem_mp3/src/makefile
+++ b/externals/iemlib/iem_mp3/src/makefile
@@ -1,4 +1,8 @@
 TARGET = iem_mp3
 
+
+SRC = 	mp3play~.c \
+	$(TARGET).c
+
 include ../../Make.include
 
diff --git a/externals/iemlib/iem_mp3/src/makefile_d_fat b/externals/iemlib/iem_mp3/src/makefile_d_fat
index 8d6ef57ac..146331771 100644
--- a/externals/iemlib/iem_mp3/src/makefile_d_fat
+++ b/externals/iemlib/iem_mp3/src/makefile_d_fat
@@ -1,16 +1,22 @@
-current: all
-
+current: all
+
 .SUFFIXES: .d_fat
 
-PD_INSTALL_PATH ?= "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-CFLAGS =-DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-        -Wno-unused -Wno-parentheses -Wno-switch
-
-LFLAGS = -bundle -undefined suppress -flat_namespace
-
+PDSOURCE = "/Applications/Pd.app/Contents/Resources/src"
+
+IEMLIB_INCLUDE = ../../include
+
+PD_INCLUDES = -I. -I$(IEMLIB_INCLUDE) -I$(PDSOURCE)
+
+PD_DEFINES = -DPD
+
+CFLAGS =-O2 -Wall -W -Wshadow -Wstrict-prototypes \
+        -Wno-unused -Wno-parentheses -Wno-switch -fPIC
+
+LFLAGS = -bundle -undefined suppress -flat_namespace
+
+ARCH_FLAGS=-arch i386 -arch ppc
+
 # the sources
 
 SRC = 	mp3play~.c \
@@ -19,26 +25,23 @@ SRC = 	mp3play~.c \
 TARGET = iem_mp3.d_fat
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(CC) -arch i386 -arch ppc $(LFLAGS) -o $(TARGET) *.o
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
-	$(CC) -arch i386 -arch ppc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm -f ../$(TARGET)
+	rm -f *.o
 
+all: $(OBJ)
+	@echo :: $(OBJ)
+	$(CC) $(ARCH_FLAGS) $(LFLAGS) -o $(TARGET) *.o
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
 
+$(OBJ) : %.o : %.c
+	$(CC) $(ARCH_FLAGS) $(PD_DEFINES) $(CFLAGS) $(PD_INCLUDES) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iem_mp3/src/makefile_linux b/externals/iemlib/iem_mp3/src/makefile_linux
deleted file mode 100644
index 4fe23a43f..000000000
--- a/externals/iemlib/iem_mp3/src/makefile_linux
+++ /dev/null
@@ -1,47 +0,0 @@
-current: all
-
-.SUFFIXES: .pd_linux
-
-INCLUDE = -I. -I/usr/local/src/pd/src
-
-LDFLAGS = -export-dynamic -shared
-LIB = -ldl -lm -lpthread
-
-#select either the DBG and OPT compiler flags below:
-
-CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
-        -DDL_OPEN -fPIC
-
-SYSTEM = $(shell uname -m)
-
-# the sources
-
-SRC = 	mp3play~.c \
-	iem_mp3.c
-
-TARGET = iem_mp3.pd_linux
-
-
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB)
-	strip --strip-unneeded $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
-
-
-
-
diff --git a/externals/iemlib/iem_t3_lib/src/iemlib.h b/externals/iemlib/iem_t3_lib/src/iemlib.h
deleted file mode 100644
index 973bfebcd..000000000
--- a/externals/iemlib/iem_t3_lib/src/iemlib.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
-
-iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */
-
-#ifndef __IEMLIB_H__
-#define __IEMLIB_H__
-
-
-#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
-#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
-#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
-#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
-#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
-#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
-#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
-
-/* now miller's code starts : 
-     for 4 point interpolation
-     for lookup tables
-     for denormal floats
- */
-
-#ifdef MSW
-int sys_noloadbang;
-//t_symbol *iemgui_key_sym=0;
-#include <io.h>
-#else
-extern int sys_noloadbang;
-//extern t_symbol *iemgui_key_sym;
-#include <unistd.h>
-#endif
-
-#define DEFDELVS 64
-#define XTRASAMPS 4
-#define SAMPBLK 4
-
-#define UNITBIT32 1572864.  /* 3*2^19; bit 32 has place value 1 */
-
-    /* machine-dependent definitions.  These ifdefs really
-    should have been by CPU type and not by operating system! */
-#ifdef IRIX
-    /* big-endian.  Most significant byte is at low address in memory */
-#define HIOFFSET 0    /* word offset to find MSB */
-#define LOWOFFSET 1    /* word offset to find LSB */
-#define int32 long  /* a data type that has 32 bits */
-#endif /* IRIX */
-
-#ifdef MSW
-    /* little-endian; most significant byte is at highest address */
-#define HIOFFSET 1
-#define LOWOFFSET 0
-#define int32 long
-#endif /* MSW */
-
-#if defined(__FreeBSD__) || defined(__APPLE__)
-#include <machine/endian.h>
-#endif
-
-#ifdef __linux__
-#include <endian.h>
-#endif
-
-#if defined(__unix__) || defined(__APPLE__)
-#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)                         
-#error No byte order defined                                                    
-#endif                                                                          
-
-#if BYTE_ORDER == LITTLE_ENDIAN                                             
-#define HIOFFSET 1                                                              
-#define LOWOFFSET 0                                                             
-#else                                                                           
-#define HIOFFSET 0    /* word offset to find MSB */                             
-#define LOWOFFSET 1    /* word offset to find LSB */                            
-#endif /* __BYTE_ORDER */                                                       
-#include <sys/types.h>
-#define int32 int32_t
-#endif /* __unix__ or __APPLE__*/
-
-union tabfudge_d
-{
-  double tf_d;
-  int32 tf_i[2];
-};
-
-union tabfudge_f
-{
-  float tf_f;
-  long  tf_l;
-};
-
-#if defined __i386__ || defined __x86_64__
-#define IEM_DENORMAL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
-(((*(unsigned int*)&(f))&0x60000000)==0x60000000))
-/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
-#else
-
-#define IEM_DENORMAL(f) 0
-
-#endif
-
-#endif
diff --git a/externals/iemlib/iem_t3_lib/src/makefile b/externals/iemlib/iem_t3_lib/src/makefile
index 597ccdf68..1aff68872 100644
--- a/externals/iemlib/iem_t3_lib/src/makefile
+++ b/externals/iemlib/iem_t3_lib/src/makefile
@@ -1,4 +1,13 @@
 TARGET = iem_t3_lib
 
+
+SRC = t3_bpe.c \
+	t3_delay.c \
+	t3_line~.c \
+	t3_metro.c \
+	t3_sig~.c \
+	t3_timer.c \
+	$(TARGET).c
+
 include ../../Make.include
 
diff --git a/externals/iemlib/iem_t3_lib/src/makefile_d_fat b/externals/iemlib/iem_t3_lib/src/makefile_d_fat
index 120068b3d..8ac96a1ee 100644
--- a/externals/iemlib/iem_t3_lib/src/makefile_d_fat
+++ b/externals/iemlib/iem_t3_lib/src/makefile_d_fat
@@ -1,16 +1,22 @@
-current: all
-
+current: all
+
 .SUFFIXES: .d_fat
 
-PD_INSTALL_PATH ?= "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-CFLAGS =-DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-        -Wno-unused -Wno-parentheses -Wno-switch
-
-LFLAGS = -bundle -undefined suppress -flat_namespace
-
+PDSOURCE = "/Applications/Pd.app/Contents/Resources/src"
+
+IEMLIB_INCLUDE = ../../include
+
+PD_INCLUDES = -I. -I$(IEMLIB_INCLUDE) -I$(PDSOURCE)
+
+PD_DEFINES = -DPD
+
+CFLAGS =-O2 -Wall -W -Wshadow -Wstrict-prototypes \
+        -Wno-unused -Wno-parentheses -Wno-switch -fPIC
+
+LFLAGS = -bundle -undefined suppress -flat_namespace
+
+ARCH_FLAGS=-arch i386 -arch ppc
+
 # the sources
 
 SRC = 	t3_bpe.c \
@@ -24,26 +30,23 @@ SRC = 	t3_bpe.c \
 TARGET = iem_t3_lib.d_fat
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(CC) -arch i386 -arch ppc $(LFLAGS) -o $(TARGET) *.o
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
-	$(CC) -arch i386 -arch ppc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm -f ../$(TARGET)
+	rm -f *.o
 
+all: $(OBJ)
+	@echo :: $(OBJ)
+	$(CC) $(ARCH_FLAGS) $(LFLAGS) -o $(TARGET) *.o
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
 
+$(OBJ) : %.o : %.c
+	$(CC) $(ARCH_FLAGS) $(PD_DEFINES) $(CFLAGS) $(PD_INCLUDES) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iem_t3_lib/src/makefile_linux b/externals/iemlib/iem_t3_lib/src/makefile_linux
deleted file mode 100644
index aac782606..000000000
--- a/externals/iemlib/iem_t3_lib/src/makefile_linux
+++ /dev/null
@@ -1,52 +0,0 @@
-current: all
-
-.SUFFIXES: .pd_linux
-
-INCLUDE = -I. -I/usr/local/src/pd/src
-
-LDFLAGS = -export-dynamic -shared
-LIB = -ldl -lm -lpthread
-
-#select either the DBG and OPT compiler flags below:
-
-CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
-        -DDL_OPEN -fPIC
-
-SYSTEM = $(shell uname -m)
-
-# the sources
-
-SRC = 	t3_bpe.c \
-	t3_delay.c \
-	t3_line~.c \
-	t3_metro.c \
-	t3_sig~.c \
-	t3_timer.c \
-	iem_t3_lib.c
-
-TARGET = iem_t3_lib.pd_linux
-
-
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB)
-	strip --strip-unneeded $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
-
-
-
-
diff --git a/externals/iemlib/iemabs/ap1_dp~-help.pd b/externals/iemlib/iemabs/ap1_dp~-help.pd
new file mode 100644
index 000000000..7b2db6577
--- /dev/null
+++ b/externals/iemlib/iemabs/ap1_dp~-help.pd
@@ -0,0 +1,62 @@
+#N canvas 375 118 410 467 10;
+#X text 3 233 ~signal_in~;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 79 164 3 15 133 0 - - -;
+#X obj 79 185 mtof;
+#X floatatom 79 206 9 0 22000 0 - - -;
+#X text 149 205 Hz;
+#X text 58 262 ~signal_out~;
+#X floatatom 45 332 7 0 0 0 - - -;
+#X text 203 290 dB;
+#X floatatom 110 163 9 0 22000 0 - - -;
+#X text 180 163 Hz;
+#X floatatom 46 119 3 15 133 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X floatatom 128 227 5 2 9999 0 - - -;
+#X text 171 226 ms;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 46 309 gainvu~ 300;
+#X obj 203 167 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 259 178 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 46 141 testtone~ 200;
+#X obj 115 101 init 69;
+#X text 73 120 midi;
+#X text 15 362 2.arg:<float> interpolation_time [ms];
+#X text 15 352 1.arg:<float> -90_degree_freq. [Hz];
+#X obj 14 266 +~;
+#X obj 14 287 *~ 0.5;
+#X text 58 287 (like lp1~);
+#X floatatom 234 327 7 0 0 0 - - -;
+#X text 291 328 dB;
+#X obj 13 19 cnv 8 1 1 empty empty ap1_dp~ 1 2 1 18 -262144 -1109 0
+;
+#X text 184 414 IEM KUG;
+#X text 162 402 musil;
+#X text 198 402 @;
+#X text 206 402 iem.at;
+#X text 167 424 Graz \, Austria;
+#X text 119 391 (c) Thomas Musil 2000 - 2010;
+#X text 120 13 allpass 1.order with double precision;
+#X obj 46 248 ap1_dp~ 440 200;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 39 1;
+#X connect 11 0 21 0;
+#X connect 14 0 39 2;
+#X connect 16 0 12 0;
+#X connect 17 0 16 0;
+#X connect 18 1 29 0;
+#X connect 18 2 19 0;
+#X connect 19 1 7 0;
+#X connect 20 0 18 1;
+#X connect 21 0 26 0;
+#X connect 21 0 39 0;
+#X connect 21 1 9 0;
+#X connect 22 0 11 0;
+#X connect 26 0 27 0;
+#X connect 27 0 18 0;
+#X connect 39 0 26 1;
diff --git a/externals/iemlib/iemabs/ap1_dp~.pd b/externals/iemlib/iemabs/ap1_dp~.pd
new file mode 100644
index 000000000..ac9f5aa67
--- /dev/null
+++ b/externals/iemlib/iemabs/ap1_dp~.pd
@@ -0,0 +1,24 @@
+#N canvas 256 230 453 306 10;
+#X obj 22 42 inlet~;
+#X obj 52 65 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 143 100 inlet;
+#X text 178 101 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X text 89 64 <float> -90_degree_frequency [Hz];
+#X text 84 182 1.arg: <float> -90_degree_frequency [Hz];
+#X text 84 193 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 199 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X obj 22 133 filter~ dap1 \$1 1 0 \$2;
+#X text 11 9 ap1_dp~;
+#X text 83 10 allpass 1.order with double precision;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 4 0 15 4;
+#X connect 15 0 2 0;
diff --git a/externals/iemlib/iemabs/ap2_dp~-help.pd b/externals/iemlib/iemabs/ap2_dp~-help.pd
new file mode 100644
index 000000000..8a5bbbb82
--- /dev/null
+++ b/externals/iemlib/iemabs/ap2_dp~-help.pd
@@ -0,0 +1,66 @@
+#N canvas 375 118 402 502 10;
+#X text 9 240 ~signal_in~;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 83 150 3 15 133 0 - - -;
+#X obj 83 172 mtof;
+#X floatatom 83 193 9 0 22000 0 - - -;
+#X text 154 193 Hz;
+#X text 55 270 ~signal_out~;
+#X floatatom 20 341 7 0 0 0 - - -;
+#X text 76 341 dB;
+#X floatatom 123 151 9 0 22000 0 - - -;
+#X text 194 152 Hz;
+#X floatatom 52 111 3 15 133 0 - - -;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 62 80 % cpu;
+#X floatatom 145 233 5 2 9999 0 - - -;
+#X text 188 233 ms;
+#X obj 17 60 dsp;
+#X floatatom 114 213 4 0.01 1000 0 - - -;
+#X text 154 212 Q;
+#X text 57 372 2.arg:<float> Q [-];
+#X text 57 382 3.arg:<float> interpolation_time [ms];
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 20 319 gainvu~ 300;
+#X obj 214 194 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 275 188 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 52 130 testtone~ 200;
+#X obj 120 93 init 69;
+#X text 79 112 midi;
+#X text 57 362 1.arg:<float> -180_degree_freq. [Hz];
+#X obj 20 276 +~;
+#X obj 20 298 *~ 0.5;
+#X text 64 297 (like bs2~);
+#X floatatom 241 337 7 0 0 0 - - -;
+#X text 298 338 dB;
+#X obj 12 15 cnv 8 1 1 empty empty ap2_dp~ 1 2 1 18 -262144 -1109 0
+;
+#X text 184 444 IEM KUG;
+#X text 163 432 musil;
+#X text 198 432 @;
+#X text 205 432 iem.at;
+#X text 167 454 Graz \, Austria;
+#X text 119 421 (c) Thomas Musil 2000 - 2010;
+#X text 98 8 allpass 2.order with double precision;
+#X obj 52 255 ap2_dp~ 440 2 200;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 42 1;
+#X connect 11 0 25 0;
+#X connect 14 0 42 3;
+#X connect 16 0 12 0;
+#X connect 17 0 42 2;
+#X connect 21 0 16 0;
+#X connect 22 1 32 0;
+#X connect 22 2 23 0;
+#X connect 23 1 7 0;
+#X connect 24 0 22 1;
+#X connect 25 0 29 0;
+#X connect 25 0 42 0;
+#X connect 25 1 9 0;
+#X connect 26 0 11 0;
+#X connect 29 0 30 0;
+#X connect 30 0 22 0;
+#X connect 42 0 29 1;
diff --git a/externals/iemlib/iemabs/ap2_dp~.pd b/externals/iemlib/iemabs/ap2_dp~.pd
new file mode 100644
index 000000000..a1ab77472
--- /dev/null
+++ b/externals/iemlib/iemabs/ap2_dp~.pd
@@ -0,0 +1,28 @@
+#N canvas 269 270 379 285 10;
+#X obj 22 42 inlet~;
+#X obj 53 63 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 85 88 inlet;
+#X text 184 113 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 149 113 inlet;
+#X text 121 88 <float> quality [-];
+#X text 89 65 <float> -180_degree_frequency [Hz];
+#X text 82 174 1.arg: <float> -180_degree_frequency [Hz];
+#X text 82 183 2.arg: <float> quality [-];
+#X text 82 193 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 153 233 musil;
+#X text 190 233 @;
+#X text 199 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 73 10 allpass 2.order with double precision;
+#X text 12 9 ap2_dp~;
+#X obj 22 134 filter~ dap2 \$1 \$2 1 \$3;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 20 0;
+#X connect 1 0 20 1;
+#X connect 4 0 20 2;
+#X connect 7 0 20 4;
+#X connect 20 0 2 0;
diff --git a/externals/iemlib/iemabs/bp2_dp~.pd b/externals/iemlib/iemabs/bp2_dp~.pd
new file mode 100644
index 000000000..3b85ddc93
--- /dev/null
+++ b/externals/iemlib/iemabs/bp2_dp~.pd
@@ -0,0 +1,29 @@
+#N canvas 319 273 417 319 10;
+#X obj 22 42 inlet~;
+#X obj 55 63 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 190 112 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 155 112 inlet;
+#X text 92 64 <float> center_frequency [Hz];
+#X text 124 89 <float> Q [-];
+#X text 85 176 1.arg: <float> center_frequency [Hz];
+#X text 85 185 2.arg: <float> Q [-];
+#X text 85 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 199 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X obj 22 134 filter~ dbpq2 \$1 \$2 1 \$3;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X text 12 9 bp2_dp~;
+#X text 99 24 with double precision;
+#X text 70 10 bandpass 2.order with Q-inlet (like bpq2_dp~);
+#X connect 0 0 18 0;
+#X connect 1 0 18 1;
+#X connect 4 0 18 2;
+#X connect 7 0 18 4;
+#X connect 18 0 2 0;
diff --git a/externals/iemlib/iemabs/bpq2_dp~-help.pd b/externals/iemlib/iemabs/bpq2_dp~-help.pd
new file mode 100644
index 000000000..01bc657d6
--- /dev/null
+++ b/externals/iemlib/iemabs/bpq2_dp~-help.pd
@@ -0,0 +1,61 @@
+#N canvas 375 118 454 507 10;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 8 265 ~signal_in~;
+#X floatatom 81 180 3 15 133 0 - - -;
+#X obj 81 199 mtof;
+#X floatatom 81 218 9 0 22000 0 - - -;
+#X text 145 219 Hz;
+#X text 63 294 ~signal_out~;
+#X floatatom 51 338 7 0 0 0 - - -;
+#X text 102 339 dB;
+#X floatatom 124 163 9 0 22000 0 - - -;
+#X text 188 164 Hz;
+#X floatatom 51 124 3 15 133 0 - - -;
+#X floatatom 171 260 5 2 9999 0 - - -;
+#X text 212 261 ms;
+#X floatatom 128 240 4 0.01 1000 0 - - -;
+#X text 161 240 Q;
+#X text 26 371 2.arg:<float> Q [-];
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X obj 51 314 gainvu~ 300;
+#X obj 239 140 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 304 183 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 51 143 testtone~ 200;
+#X obj 115 109 init 69;
+#X text 78 125 midi;
+#X floatatom 298 329 7 0 0 0 - - -;
+#X text 349 330 dB;
+#X text 117 10 bandpass 2.order with Q-inlet;
+#X obj 10 17 cnv 8 1 1 empty empty bpq2_dp~ 1 2 1 18 -262144 -1109
+0;
+#X text 184 453 IEM KUG;
+#X text 164 441 musil;
+#X text 198 441 @;
+#X text 206 441 iem.at;
+#X text 167 463 Graz \, Austria;
+#X text 119 430 (c) Thomas Musil 2000 - 2010;
+#X text 136 24 with double precision;
+#X obj 51 280 bpq2_dp~ 440 10 200;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 40 1;
+#X connect 15 0 26 0;
+#X connect 16 0 40 3;
+#X connect 18 0 40 2;
+#X connect 23 1 29 0;
+#X connect 23 2 24 0;
+#X connect 24 1 11 0;
+#X connect 25 0 23 1;
+#X connect 26 0 40 0;
+#X connect 26 1 13 0;
+#X connect 27 0 15 0;
+#X connect 40 0 23 0;
diff --git a/externals/iemlib/iemabs/bpq2_dp~.pd b/externals/iemlib/iemabs/bpq2_dp~.pd
new file mode 100644
index 000000000..3f9743c94
--- /dev/null
+++ b/externals/iemlib/iemabs/bpq2_dp~.pd
@@ -0,0 +1,29 @@
+#N canvas 319 273 395 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 63 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 190 112 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 155 112 inlet;
+#X text 92 64 <float> center_frequency [Hz];
+#X text 124 89 <float> Q [-];
+#X text 89 10 bandpass 2.order with Q-inlet;
+#X text 85 176 1.arg: <float> center_frequency [Hz];
+#X text 85 185 2.arg: <float> Q [-];
+#X text 85 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 199 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 12 9 bpq2_dp~;
+#X text 116 25 with double precision;
+#X obj 22 135 filter~ dbpq2 \$1 \$2 1 \$3;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 21 0;
+#X connect 1 0 21 1;
+#X connect 4 0 21 2;
+#X connect 7 0 21 4;
+#X connect 21 0 2 0;
diff --git a/externals/iemlib/iemabs/bpw2_dp~-help.pd b/externals/iemlib/iemabs/bpw2_dp~-help.pd
new file mode 100644
index 000000000..6c01de216
--- /dev/null
+++ b/externals/iemlib/iemabs/bpw2_dp~-help.pd
@@ -0,0 +1,61 @@
+#N canvas 375 118 381 493 10;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 8 265 ~signal_in~;
+#X floatatom 81 180 3 15 133 0 - - -;
+#X obj 81 199 mtof;
+#X floatatom 81 218 9 0 22000 0 - - -;
+#X text 145 219 Hz;
+#X text 63 294 ~signal_out~;
+#X floatatom 51 337 7 0 0 0 - - -;
+#X text 102 338 dB;
+#X floatatom 124 163 9 0 22000 0 - - -;
+#X text 188 164 Hz;
+#X floatatom 51 124 3 15 133 0 - - -;
+#X floatatom 172 260 5 2 9999 0 - - -;
+#X text 213 261 ms;
+#X floatatom 121 241 4 0.01 1000 0 - - -;
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X obj 51 314 gainvu~ 300;
+#X obj 249 140 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 304 183 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 51 143 testtone~ 200;
+#X obj 115 109 init 69;
+#X text 78 125 midi;
+#X floatatom 298 329 7 0 0 0 - - -;
+#X text 349 330 dB;
+#X text 118 6 bandpass 2.order with bandwidth-inlet;
+#X text 154 241 bandwidth Hz;
+#X text 26 371 2.arg:<float> bandwidth [Hz];
+#X obj 10 17 cnv 8 1 1 empty empty bpw2_dp~ 1 2 1 18 -262144 -1109
+0;
+#X text 184 454 IEM KUG;
+#X text 163 442 musil;
+#X text 198 442 @;
+#X text 206 442 iem.at;
+#X text 167 464 Graz \, Austria;
+#X text 119 431 (c) Thomas Musil 2000 - 2010;
+#X text 138 22 with double precision;
+#X obj 51 280 bpw2_dp~ 440 44 200;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 40 1;
+#X connect 15 0 24 0;
+#X connect 16 0 40 3;
+#X connect 18 0 40 2;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 11 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 13 0;
+#X connect 25 0 15 0;
+#X connect 40 0 21 0;
diff --git a/externals/iemlib/iemabs/bpw2_dp~.pd b/externals/iemlib/iemabs/bpw2_dp~.pd
new file mode 100644
index 000000000..c6663aec0
--- /dev/null
+++ b/externals/iemlib/iemabs/bpw2_dp~.pd
@@ -0,0 +1,29 @@
+#N canvas 314 262 446 285 10;
+#X obj 22 42 inlet~;
+#X obj 55 63 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 190 112 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 155 112 inlet;
+#X text 92 64 <float> center_frequency [Hz];
+#X text 81 9 bandpass 2.order with bandwidth-inlet;
+#X text 124 90 <float> bandwidth [Hz];
+#X text 97 174 1.arg: <float> center_frequency [Hz];
+#X text 97 183 2.arg: <float> bandwidth [Hz];
+#X text 97 192 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 12 9 bpw2_dp~;
+#X text 126 22 with double precision;
+#X obj 22 133 filter~ dbpw2 \$1 \$2 1 \$3;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 21 0;
+#X connect 1 0 21 1;
+#X connect 4 0 21 2;
+#X connect 7 0 21 4;
+#X connect 21 0 2 0;
diff --git a/externals/iemlib/iemabs/bs2_dp~.pd b/externals/iemlib/iemabs/bs2_dp~.pd
new file mode 100644
index 000000000..74cc984b0
--- /dev/null
+++ b/externals/iemlib/iemabs/bs2_dp~.pd
@@ -0,0 +1,29 @@
+#N canvas 299 265 427 285 10;
+#X obj 22 42 inlet~;
+#X obj 55 65 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 191 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 155 113 inlet;
+#X text 91 64 <float> center_frequency [Hz];
+#X text 123 89 <float> Q [-];
+#X text 102 176 1.arg: <float> center_frequency [Hz];
+#X text 102 185 2.arg: <float> Q [-];
+#X text 102 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 11 9 bs2_dp~;
+#X text 136 24 with double precision;
+#X text 92 10 bandstop 2.order with Q-inlet;
+#X obj 22 136 filter~ dbsq2 \$1 \$2 1 \$3;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 21 0;
+#X connect 1 0 21 1;
+#X connect 4 0 21 2;
+#X connect 7 0 21 4;
+#X connect 21 0 2 0;
diff --git a/externals/iemlib/iemabs/bsq2_dp~-help.pd b/externals/iemlib/iemabs/bsq2_dp~-help.pd
new file mode 100644
index 000000000..bb9ead6c0
--- /dev/null
+++ b/externals/iemlib/iemabs/bsq2_dp~-help.pd
@@ -0,0 +1,61 @@
+#N canvas 375 118 381 493 10;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 26 371 2.arg:<float> Q [-];
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X text 10 258 ~signal_in~;
+#X floatatom 81 174 3 15 133 0 - - -;
+#X obj 81 193 mtof;
+#X floatatom 81 212 9 0 22000 0 - - -;
+#X text 145 213 Hz;
+#X text 65 287 ~signal_out~;
+#X floatatom 54 328 7 0 0 0 - - -;
+#X text 105 329 dB;
+#X floatatom 126 156 9 0 22000 0 - - -;
+#X text 190 157 Hz;
+#X floatatom 53 117 3 15 133 0 - - -;
+#X floatatom 168 253 5 2 9999 0 - - -;
+#X text 209 254 ms;
+#X floatatom 129 234 4 0.01 1000 0 - - -;
+#X text 162 234 Q;
+#X obj 53 307 gainvu~ 300;
+#X obj 235 161 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 294 176 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 53 136 testtone~ 200;
+#X obj 117 102 init 69;
+#X text 80 118 midi;
+#X floatatom 274 322 7 0 0 0 - - -;
+#X text 325 323 dB;
+#X text 116 10 bandstop 2.order with Q-inlet;
+#X obj 13 16 cnv 8 1 1 empty empty bsq2_dp~ 1 2 1 18 -262144 -1109
+0;
+#X text 184 454 IEM KUG;
+#X text 160 442 musil;
+#X text 198 442 @;
+#X text 207 442 iem.at;
+#X text 167 464 Graz \, Austria;
+#X text 119 431 (c) Thomas Musil 2000 - 2010;
+#X text 136 24 with double precision;
+#X obj 53 273 bsq2_dp~ 440 1 200;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 40 1;
+#X connect 18 0 26 0;
+#X connect 19 0 40 3;
+#X connect 21 0 40 2;
+#X connect 23 1 29 0;
+#X connect 23 2 24 0;
+#X connect 24 1 14 0;
+#X connect 25 0 23 1;
+#X connect 26 0 40 0;
+#X connect 26 1 16 0;
+#X connect 27 0 18 0;
+#X connect 40 0 23 0;
diff --git a/externals/iemlib/iemabs/bsq2_dp~.pd b/externals/iemlib/iemabs/bsq2_dp~.pd
new file mode 100644
index 000000000..678972453
--- /dev/null
+++ b/externals/iemlib/iemabs/bsq2_dp~.pd
@@ -0,0 +1,29 @@
+#N canvas 299 265 393 285 10;
+#X obj 22 42 inlet~;
+#X obj 55 65 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 191 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 155 113 inlet;
+#X text 91 64 <float> center_frequency [Hz];
+#X text 123 89 <float> Q [-];
+#X text 94 8 bandstop 2.order with Q-inlet;
+#X text 102 176 1.arg: <float> center_frequency [Hz];
+#X text 102 185 2.arg: <float> Q [-];
+#X text 102 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 11 9 bsq2_dp~;
+#X text 119 21 with double precision;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X obj 22 136 filter~ dbsq2 \$1 \$2 1 \$3;
+#X connect 0 0 22 0;
+#X connect 1 0 22 1;
+#X connect 4 0 22 2;
+#X connect 7 0 22 4;
+#X connect 22 0 2 0;
diff --git a/externals/iemlib/iemabs/bsw2_dp~-help.pd b/externals/iemlib/iemabs/bsw2_dp~-help.pd
new file mode 100644
index 000000000..a84b16e0e
--- /dev/null
+++ b/externals/iemlib/iemabs/bsw2_dp~-help.pd
@@ -0,0 +1,61 @@
+#N canvas 361 130 381 493 10;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X text 26 371 2.arg:<float> bandwidth [Hz];
+#X text 8 264 ~signal_in~;
+#X floatatom 83 181 3 15 133 0 - - -;
+#X obj 83 200 mtof;
+#X floatatom 83 219 9 0 22000 0 - - -;
+#X text 147 220 Hz;
+#X text 63 293 ~signal_out~;
+#X floatatom 52 334 7 0 0 0 - - -;
+#X text 105 335 dB;
+#X floatatom 124 162 9 0 22000 0 - - -;
+#X text 188 163 Hz;
+#X floatatom 51 123 3 15 133 0 - - -;
+#X floatatom 168 257 5 2 9999 0 - - -;
+#X text 209 257 ms;
+#X floatatom 115 239 4 0.01 1000 0 - - -;
+#X obj 51 313 gainvu~ 300;
+#X obj 233 167 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 292 182 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 51 142 testtone~ 200;
+#X obj 115 108 init 69;
+#X text 78 124 midi;
+#X floatatom 272 328 7 0 0 0 - - -;
+#X text 323 329 dB;
+#X text 148 238 bandwidth Hz;
+#X text 109 9 bandstop 2.order with bandwidth-inlet;
+#X obj 12 15 cnv 8 1 1 empty empty bsw2_dp~ 1 2 1 18 -262144 -1109
+0;
+#X text 184 454 IEM KUG;
+#X text 163 442 musil;
+#X text 198 442 @;
+#X text 207 442 iem.at;
+#X text 167 464 Graz \, Austria;
+#X text 119 431 (c) Thomas Musil 2000 - 2010;
+#X text 136 24 with double precision;
+#X obj 51 279 bsw2_dp~ 440 220 200;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 40 1;
+#X connect 18 0 25 0;
+#X connect 19 0 40 3;
+#X connect 21 0 40 2;
+#X connect 22 1 28 0;
+#X connect 22 2 23 0;
+#X connect 23 1 14 0;
+#X connect 24 0 22 1;
+#X connect 25 0 40 0;
+#X connect 25 1 16 0;
+#X connect 26 0 18 0;
+#X connect 40 0 22 0;
diff --git a/externals/iemlib/iemabs/bsw2_dp~.pd b/externals/iemlib/iemabs/bsw2_dp~.pd
new file mode 100644
index 000000000..c92145bdb
--- /dev/null
+++ b/externals/iemlib/iemabs/bsw2_dp~.pd
@@ -0,0 +1,29 @@
+#N canvas 299 265 393 285 10;
+#X obj 22 42 inlet~;
+#X obj 55 65 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 191 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 155 113 inlet;
+#X text 91 64 <float> center_frequency [Hz];
+#X text 84 9 bandstop 2.order with bandwidth-inlet;
+#X text 123 89 <float> bandwidth [Hz];
+#X text 97 178 1.arg: <float> center_frequency [Hz];
+#X text 97 188 2.arg: <float> bandwidth [Hz];
+#X text 97 198 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 153 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 11 9 bsw2_dp~;
+#X text 130 24 with double precision;
+#X obj 22 136 filter~ dbsw2 \$1 \$2 1 \$3;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 21 0;
+#X connect 1 0 21 1;
+#X connect 4 0 21 2;
+#X connect 7 0 21 4;
+#X connect 21 0 2 0;
diff --git a/externals/iemlib/iemabs/hp1_dp~-help.pd b/externals/iemlib/iemabs/hp1_dp~-help.pd
new file mode 100644
index 000000000..d3648e6db
--- /dev/null
+++ b/externals/iemlib/iemabs/hp1_dp~-help.pd
@@ -0,0 +1,56 @@
+#N canvas 245 78 377 495 10;
+#X text 7 256 ~signal_in~;
+#X text 32 44 dsp ON/OFF;
+#X floatatom 83 173 3 15 133 0 - - -;
+#X obj 83 192 mtof;
+#X floatatom 83 211 9 0 22000 0 - - -;
+#X text 147 212 Hz;
+#X text 62 285 ~signal_out~;
+#X floatatom 51 327 7 0 0 0 - - -;
+#X text 102 328 dB;
+#X floatatom 123 154 9 0 22000 0 - - -;
+#X text 187 155 Hz;
+#X floatatom 50 115 3 15 133 0 - - -;
+#X floatatom 15 84 5 0 0 0 - - -;
+#X text 54 85 % cpu;
+#X floatatom 137 246 5 2 9999 0 - - -;
+#X text 178 247 ms;
+#X obj 15 64 dsp;
+#X obj 15 44 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 50 305 gainvu~ 300;
+#X obj 227 143 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 291 174 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 50 134 testtone~ 200;
+#X obj 114 100 init 69;
+#X text 77 116 midi;
+#X text 14 355 1.arg:<float> cutoff_freq. [Hz];
+#X text 14 365 2.arg:<float> interpolation_time [ms];
+#X floatatom 280 320 7 0 0 0 - - -;
+#X text 331 321 dB;
+#X obj 13 15 cnv 8 1 1 empty empty hp1_dp~ 1 2 1 18 -262144 -1109 0
+;
+#X text 78 427 IEM KUG;
+#X text 56 415 musil;
+#X text 92 415 @;
+#X text 101 415 iem.at;
+#X text 61 437 Graz \, Austria;
+#X text 13 404 (c) Thomas Musil 2000 - 2010;
+#X text 102 8 highpass 1.order with double precision;
+#X obj 50 271 hp1_dp~ 440 200;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 36 1;
+#X connect 11 0 21 0;
+#X connect 14 0 36 2;
+#X connect 16 0 12 0;
+#X connect 17 0 16 0;
+#X connect 18 1 26 0;
+#X connect 18 2 19 0;
+#X connect 19 1 7 0;
+#X connect 20 0 18 1;
+#X connect 21 0 36 0;
+#X connect 21 1 9 0;
+#X connect 22 0 11 0;
+#X connect 36 0 18 0;
diff --git a/externals/iemlib/iemabs/hp1_dp~.pd b/externals/iemlib/iemabs/hp1_dp~.pd
new file mode 100644
index 000000000..7e3cb3241
--- /dev/null
+++ b/externals/iemlib/iemabs/hp1_dp~.pd
@@ -0,0 +1,24 @@
+#N canvas 274 213 379 285 10;
+#X obj 22 42 inlet~;
+#X obj 52 63 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X text 89 64 <float> cutoff_frequency [Hz];
+#X obj 143 85 inlet;
+#X text 181 84 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X text 92 192 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 92 182 1.arg: <float> cutoff_frequency [Hz];
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 12 8 hp1_dp~;
+#X text 75 7 highpass 1.order with double precision;
+#X obj 22 123 filter~ dhp1 \$1 1 0 \$2;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 17 0;
+#X connect 1 0 17 1;
+#X connect 5 0 17 4;
+#X connect 17 0 2 0;
diff --git a/externals/iemlib/iemabs/hp1c_dp~.pd b/externals/iemlib/iemabs/hp1c_dp~.pd
new file mode 100644
index 000000000..0d501594a
--- /dev/null
+++ b/externals/iemlib/iemabs/hp1c_dp~.pd
@@ -0,0 +1,39 @@
+#N canvas 325 243 417 352 10;
+#X obj 22 42 inlet~;
+#X obj 55 66 inlet;
+#X obj 22 196 outlet~;
+#X text 62 42 ~signal_in~;
+#X text 92 67 <float> cutoff_frequency [Hz];
+#X text 189 134 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 88 93 inlet;
+#X obj 155 134 inlet;
+#X text 124 93 <float> frequency-shift [-];
+#X text 87 9 highpass 1.order for filter-cascades;
+#X obj 55 214 outlet;
+#X obj 86 232 outlet;
+#X obj 115 251 outlet;
+#X obj 155 271 outlet;
+#X text 127 231 dummy;
+#X text 155 250 dummy;
+#X obj 123 113 inlet;
+#X text 158 113 dummy;
+#X text 120 192 1.arg: <float> cutoff_frequency [Hz];
+#X text 120 202 2.arg: <float> frequency-shift [-];
+#X text 120 212 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 315 IEM KUG;
+#X text 154 303 musil;
+#X text 190 303 @;
+#X text 198 303 iem.at;
+#X text 159 325 Graz \, Austria;
+#X text 12 8 hp1c_dp~;
+#X text 135 24 with double precision;
+#X obj 22 157 filter~ dhp1c \$1 \$2 1 \$3;
+#X text 111 292 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 29 0;
+#X connect 1 0 11 0;
+#X connect 1 0 29 1;
+#X connect 7 0 29 2;
+#X connect 8 0 14 0;
+#X connect 8 0 29 4;
+#X connect 29 0 2 0;
diff --git a/externals/iemlib/iemabs/hp2_dp~-help.pd b/externals/iemlib/iemabs/hp2_dp~-help.pd
new file mode 100644
index 000000000..920521ab0
--- /dev/null
+++ b/externals/iemlib/iemabs/hp2_dp~-help.pd
@@ -0,0 +1,60 @@
+#N canvas 278 100 406 471 10;
+#X text 6 249 ~signal_in~;
+#X text 31 37 dsp ON/OFF;
+#X floatatom 83 165 3 15 133 0 - - -;
+#X obj 83 184 mtof;
+#X floatatom 83 203 9 0 22000 0 - - -;
+#X text 147 204 Hz;
+#X text 61 278 ~signal_out~;
+#X floatatom 49 320 7 0 0 0 - - -;
+#X text 100 321 dB;
+#X floatatom 122 147 9 0 22000 0 - - -;
+#X text 186 148 Hz;
+#X floatatom 49 108 3 15 133 0 - - -;
+#X floatatom 14 77 5 0 0 0 - - -;
+#X text 54 78 % cpu;
+#X floatatom 172 244 5 2 9999 0 - - -;
+#X text 213 245 ms;
+#X obj 14 57 dsp;
+#X floatatom 137 226 4 0.01 1000 0 - - -;
+#X text 172 226 Q;
+#X text 14 358 2.arg:<float> Q [-];
+#X text 14 368 3.arg:<float> interpolation_time [ms];
+#X obj 14 37 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 49 298 gainvu~ 300;
+#X obj 261 148 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 314 167 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 49 127 testtone~ 200;
+#X obj 113 93 init 69;
+#X text 76 109 midi;
+#X text 14 348 1.arg:<float> cutoff_freq. [Hz];
+#X floatatom 301 313 7 0 0 0 - - -;
+#X text 352 314 dB;
+#X obj 12 14 cnv 8 1 1 empty empty hp2_dp~ 1 2 1 18 -262144 -1109 0
+;
+#X text 78 417 IEM KUG;
+#X text 57 405 musil;
+#X text 92 405 @;
+#X text 100 405 iem.at;
+#X text 61 427 Graz \, Austria;
+#X text 13 394 (c) Thomas Musil 2000 - 2010;
+#X text 101 9 highpass 2.order with double precision;
+#X obj 49 264 hp2_dp~ 440 0.707 200;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 39 1;
+#X connect 11 0 25 0;
+#X connect 14 0 39 3;
+#X connect 16 0 12 0;
+#X connect 17 0 39 2;
+#X connect 21 0 16 0;
+#X connect 22 1 29 0;
+#X connect 22 2 23 0;
+#X connect 23 1 7 0;
+#X connect 24 0 22 1;
+#X connect 25 0 39 0;
+#X connect 25 1 9 0;
+#X connect 26 0 11 0;
+#X connect 39 0 22 0;
diff --git a/externals/iemlib/iemabs/hp2_dp~.pd b/externals/iemlib/iemabs/hp2_dp~.pd
new file mode 100644
index 000000000..0176ec3f7
--- /dev/null
+++ b/externals/iemlib/iemabs/hp2_dp~.pd
@@ -0,0 +1,28 @@
+#N canvas 435 244 379 285 10;
+#X obj 22 42 inlet~;
+#X obj 53 65 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X text 89 64 <float> cutoff_frequency [Hz];
+#X obj 85 89 inlet;
+#X text 184 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 149 112 inlet;
+#X text 120 89 <float> Q [-];
+#X text 88 177 1.arg: <float> cutoff_frequency [Hz];
+#X text 88 186 2.arg: <float> Q [-];
+#X text 88 196 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X text 11 9 hp2_dp~;
+#X text 79 9 highpass 2.order with double precision;
+#X obj 22 136 filter~ dhp2 \$1 \$2 1 \$3;
+#X text 113 223 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 20 0;
+#X connect 1 0 20 1;
+#X connect 5 0 20 2;
+#X connect 8 0 20 4;
+#X connect 20 0 2 0;
diff --git a/externals/iemlib/iemabs/hp2c_dp~.pd b/externals/iemlib/iemabs/hp2c_dp~.pd
new file mode 100644
index 000000000..d309d401d
--- /dev/null
+++ b/externals/iemlib/iemabs/hp2c_dp~.pd
@@ -0,0 +1,41 @@
+#N canvas 406 261 412 351 10;
+#X obj 22 42 inlet~;
+#X obj 56 63 inlet;
+#X obj 22 193 outlet~;
+#X text 62 42 ~signal_in~;
+#X text 93 64 <float> cutoff_frequency [Hz];
+#X obj 91 87 inlet;
+#X text 195 136 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 126 111 inlet;
+#X obj 161 136 inlet;
+#X text 127 87 <float> damping [-];
+#X text 162 111 <float> frequency-shift [-];
+#X text 79 8 highpass 2.order for filter-cascades;
+#X obj 56 211 outlet;
+#X obj 88 236 outlet;
+#X obj 119 255 outlet;
+#X obj 161 274 outlet;
+#X text 129 235 dummy;
+#X text 159 254 dummy;
+#X text 128 190 1.arg: <float> cutoff_frequency [Hz];
+#X text 128 199 2.arg: <float> damping [-];
+#X text 128 208 3.arg: <float> frequency-shift [-];
+#X text 128 218 4.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 315 IEM KUG;
+#X text 154 303 musil;
+#X text 190 303 @;
+#X text 198 303 iem.at;
+#X text 159 325 Graz \, Austria;
+#X text 12 8 hp2c_dp~;
+#X text 122 23 with double precision;
+#X obj 22 157 filter~ dhp2c \$1 \$2 \$3 \$4;
+#X text 111 292 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 30 0;
+#X connect 1 0 13 0;
+#X connect 1 0 30 1;
+#X connect 5 0 30 2;
+#X connect 8 0 30 3;
+#X connect 9 0 16 0;
+#X connect 9 0 30 4;
+#X connect 30 0 2 0;
diff --git a/externals/iemlib/iemabs/init_popup.pd b/externals/iemlib/iemabs/init_popup.pd
new file mode 100644
index 000000000..6c748cad2
--- /dev/null
+++ b/externals/iemlib/iemabs/init_popup.pd
@@ -0,0 +1,38 @@
+#N canvas 187 157 554 392 10;

+#X obj 187 219 textfile;

+#X obj 204 31 loadbang;

+#X obj 204 57 t b b b b;

+#X msg 203 162 rewind;

+#X obj 80 121 for++ 0 100000 20;

+#X obj 238 250 bang;

+#X msg 88 82 stop;

+#X obj 102 293 pack symbol float;

+#X obj 80 146 t b f;

+#X obj 102 317 pp set_pop_name;

+#X obj 102 350 outlet;

+#X obj 174 34 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1

+-1;

+#X text 14 6 init_popup;

+#X obj 170 349 s \$2;

+#X text 330 223 1.arg: <sym> item-file-name;

+#X text 329 236 2.arg: <sym> send-name;

+#X obj 288 99 any \$1 cr;

+#X obj 288 124 pp read;

+#X connect 0 0 7 0;

+#X connect 0 1 5 0;

+#X connect 1 0 2 0;

+#X connect 2 0 4 0;

+#X connect 2 1 3 0;

+#X connect 2 3 16 0;

+#X connect 3 0 0 0;

+#X connect 4 0 8 0;

+#X connect 5 0 6 0;

+#X connect 6 0 4 0;

+#X connect 7 0 9 0;

+#X connect 8 0 0 0;

+#X connect 8 1 7 1;

+#X connect 9 0 10 0;

+#X connect 9 0 13 0;

+#X connect 11 0 2 0;

+#X connect 16 0 17 0;

+#X connect 17 0 0 0;

diff --git a/externals/iemlib/iemabs/lp1_d~-help.pd b/externals/iemlib/iemabs/lp1_dp~-help.pd
similarity index 76%
rename from externals/iemlib/iemabs/lp1_d~-help.pd
rename to externals/iemlib/iemabs/lp1_dp~-help.pd
index 8872d8431..24f166e2c 100644
--- a/externals/iemlib/iemabs/lp1_d~-help.pd
+++ b/externals/iemlib/iemabs/lp1_dp~-help.pd
@@ -6,8 +6,8 @@
 #X floatatom 103 202 9 0 22000 0 - - -;
 #X text 167 203 Hz;
 #X text 68 274 ~signal_out~;
-#X floatatom 195 258 7 0 0 0 - - -;
-#X text 246 259 dB;
+#X floatatom 56 317 7 0 0 0 - - -;
+#X text 107 318 dB;
 #X floatatom 129 143 9 0 22000 0 - - -;
 #X text 193 144 Hz;
 #X floatatom 56 104 3 15 133 0 - - -;
@@ -16,7 +16,7 @@
 #X floatatom 149 235 5 2 9999 0 - - -;
 #X text 190 236 ms;
 #X obj 21 53 dsp;
-#X obj 21 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+#X obj 21 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
 ;
 #X obj 56 294 gainvu~ 300;
 #X obj 234 136 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
@@ -29,28 +29,28 @@
 #X text 21 354 2.arg:<float> interpolation_time [ms];
 #X floatatom 266 309 7 0 0 0 - - -;
 #X text 317 310 dB;
-#X obj 13 13 cnv 8 1 1 empty empty lp1_d~ 1 2 1 18 -262144 -1109 0
+#X obj 14 15 cnv 8 1 1 empty empty lp1_dp~ 1 2 1 18 -262144 -1109 0
 ;
 #X text 106 415 IEM KUG;
-#X text 90 403 musil;
+#X text 84 403 musil;
 #X text 120 403 @;
-#X text 126 403 iem.at;
+#X text 128 403 iem.at;
 #X text 89 425 Graz \, Austria;
-#X text 83 6 lowpass 1.order with double precission;
-#X obj 56 260 lp1_d~ 440 200;
-#X text 41 391 (c) Thomas Musil 2000 - 2008;
+#X text 102 8 lowpass 1.order with double precision;
+#X text 41 391 (c) Thomas Musil 2000 - 2010;
+#X obj 56 260 lp1_dp~ 440 200;
 #X connect 2 0 3 0;
 #X connect 3 0 4 0;
-#X connect 4 0 35 1;
+#X connect 4 0 36 1;
 #X connect 11 0 21 0;
-#X connect 14 0 35 2;
+#X connect 14 0 36 2;
 #X connect 16 0 12 0;
 #X connect 17 0 16 0;
 #X connect 18 1 26 0;
 #X connect 18 2 19 0;
 #X connect 19 1 7 0;
 #X connect 20 0 18 1;
-#X connect 21 0 35 0;
+#X connect 21 0 36 0;
 #X connect 21 1 9 0;
 #X connect 22 0 11 0;
-#X connect 35 0 18 0;
+#X connect 36 0 18 0;
diff --git a/externals/iemlib/iemabs/lp1_d~.pd b/externals/iemlib/iemabs/lp1_dp~.pd
similarity index 77%
rename from externals/iemlib/iemabs/lp1_d~.pd
rename to externals/iemlib/iemabs/lp1_dp~.pd
index 534d0bbff..e50d29645 100644
--- a/externals/iemlib/iemabs/lp1_d~.pd
+++ b/externals/iemlib/iemabs/lp1_dp~.pd
@@ -10,14 +10,14 @@
 #X text 92 192 2.arg: <float> interpolation_time [ms] (opt.);
 #X text 92 182 1.arg: <float> cutoff_frequency [Hz];
 #X text 176 245 IEM KUG;
-#X text 160 233 musil;
+#X text 154 233 musil;
 #X text 190 233 @;
-#X text 196 233 iem.at;
+#X text 198 233 iem.at;
 #X text 159 255 Graz \, Austria;
 #X obj 22 123 filter~ dlp1 \$1 1 0 \$2;
-#X text 12 7 lp1_d~;
-#X text 60 8 lowpass 1.order with double precission;
-#X text 111 222 (c) Thomas Musil 2000 - 2008;
+#X text 76 8 lowpass 1.order with double precission;
+#X text 12 7 lp1_dp~;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
 #X connect 0 0 15 0;
 #X connect 1 0 15 1;
 #X connect 5 0 15 4;
diff --git a/externals/iemlib/iemabs/lp1c_dp~.pd b/externals/iemlib/iemabs/lp1c_dp~.pd
new file mode 100644
index 000000000..b9d506a04
--- /dev/null
+++ b/externals/iemlib/iemabs/lp1c_dp~.pd
@@ -0,0 +1,39 @@
+#N canvas 406 261 397 357 10;
+#X obj 22 42 inlet~;
+#X obj 55 66 inlet;
+#X obj 22 194 outlet~;
+#X text 62 42 ~signal_in~;
+#X text 92 67 <float> cutoff_frequency [Hz];
+#X text 189 134 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 88 93 inlet;
+#X obj 155 134 inlet;
+#X text 124 93 <float> frequency-shift [-];
+#X text 81 8 lowpass 1.order for filter-cascades;
+#X obj 55 214 outlet;
+#X obj 86 232 outlet;
+#X obj 115 251 outlet;
+#X obj 155 271 outlet;
+#X text 127 231 dummy;
+#X text 155 250 dummy;
+#X obj 123 113 inlet;
+#X text 158 113 dummy;
+#X text 120 192 1.arg: <float> cutoff_frequency [Hz];
+#X text 120 202 2.arg: <float> frequency-shift [-];
+#X text 120 212 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 315 IEM KUG;
+#X text 154 303 musil;
+#X text 190 303 @;
+#X text 198 303 iem.at;
+#X text 159 325 Graz \, Austria;
+#X text 12 9 lp1c_dp~;
+#X text 121 23 with double precision;
+#X obj 22 157 filter~ dlp1c \$1 \$2 1 \$3;
+#X text 111 292 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 29 0;
+#X connect 1 0 11 0;
+#X connect 1 0 29 1;
+#X connect 7 0 29 2;
+#X connect 8 0 14 0;
+#X connect 8 0 29 4;
+#X connect 29 0 2 0;
diff --git a/externals/iemlib/iemabs/lp2_dp~-help.pd b/externals/iemlib/iemabs/lp2_dp~-help.pd
new file mode 100644
index 000000000..41cdbe931
--- /dev/null
+++ b/externals/iemlib/iemabs/lp2_dp~-help.pd
@@ -0,0 +1,60 @@
+#N canvas 285 129 395 468 10;
+#X text 11 255 ~signal_in~;
+#X text 36 43 dsp ON/OFF;
+#X floatatom 88 171 3 15 133 0 - - -;
+#X obj 88 190 mtof;
+#X floatatom 88 209 9 0 22000 0 - - -;
+#X text 152 210 Hz;
+#X text 66 284 ~signal_out~;
+#X floatatom 54 325 7 0 0 0 - - -;
+#X text 105 326 dB;
+#X floatatom 127 153 9 0 22000 0 - - -;
+#X text 191 154 Hz;
+#X floatatom 54 114 3 15 133 0 - - -;
+#X floatatom 19 83 5 0 0 0 - - -;
+#X text 61 83 % cpu;
+#X floatatom 175 250 5 2 9999 0 - - -;
+#X text 216 251 ms;
+#X obj 19 63 dsp;
+#X floatatom 132 232 4 0.01 1000 0 - - -;
+#X text 167 232 Q;
+#X text 88 354 2.arg:<float> Q [-];
+#X text 88 364 3.arg:<float> interpolation_time [ms];
+#X obj 19 43 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 54 304 gainvu~ 300;
+#X obj 236 162 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 296 173 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8000 1;
+#X obj 54 133 testtone~ 200;
+#X obj 118 99 init 69;
+#X text 81 115 midi;
+#X text 88 344 1.arg:<float> cutoff_freq. [Hz];
+#X floatatom 278 319 7 0 0 0 - - -;
+#X text 329 320 dB;
+#X obj 14 17 cnv 8 1 1 empty empty lp2_dp~ 1 2 1 18 -262144 -1109 0
+;
+#X text 106 415 IEM KUG;
+#X text 83 403 musil;
+#X text 120 403 @;
+#X text 129 403 iem.at;
+#X text 89 425 Graz \, Austria;
+#X text 41 392 (c) Thomas Musil 2000 - 2010;
+#X text 102 10 lowpass 2.order with double precision;
+#X obj 54 270 lp2_dp~ 440 0.707 200;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 39 1;
+#X connect 11 0 25 0;
+#X connect 14 0 39 3;
+#X connect 16 0 12 0;
+#X connect 17 0 39 2;
+#X connect 21 0 16 0;
+#X connect 22 1 29 0;
+#X connect 22 2 23 0;
+#X connect 23 1 7 0;
+#X connect 24 0 22 1;
+#X connect 25 0 39 0;
+#X connect 25 1 9 0;
+#X connect 26 0 11 0;
+#X connect 39 0 22 0;
diff --git a/externals/iemlib/iemabs/lp2_dp~.pd b/externals/iemlib/iemabs/lp2_dp~.pd
new file mode 100644
index 000000000..0c9702e09
--- /dev/null
+++ b/externals/iemlib/iemabs/lp2_dp~.pd
@@ -0,0 +1,28 @@
+#N canvas 406 261 379 285 10;
+#X obj 22 42 inlet~;
+#X obj 53 63 inlet;
+#X obj 22 186 outlet~;
+#X text 62 42 ~signal_in~;
+#X text 90 64 <float> cutoff_frequency [Hz];
+#X obj 85 88 inlet;
+#X text 184 113 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 149 113 inlet;
+#X text 121 88 <float> Q [-];
+#X text 88 177 1.arg: <float> cutoff_frequency [Hz];
+#X text 88 186 2.arg: <float> Q [-];
+#X text 88 196 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 176 245 IEM KUG;
+#X text 154 233 musil;
+#X text 190 233 @;
+#X text 198 233 iem.at;
+#X text 159 255 Graz \, Austria;
+#X obj 22 134 filter~ dlp2 \$1 \$2 1 \$3;
+#X text 12 8 lp2_dp~;
+#X text 80 9 lowpass 2.order with double precision;
+#X text 111 222 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 18 0;
+#X connect 1 0 18 1;
+#X connect 5 0 18 2;
+#X connect 8 0 18 4;
+#X connect 18 0 2 0;
diff --git a/externals/iemlib/iemabs/lp2c_d~.pd b/externals/iemlib/iemabs/lp2c_dp~.pd
similarity index 69%
rename from externals/iemlib/iemabs/lp2c_d~.pd
rename to externals/iemlib/iemabs/lp2c_dp~.pd
index 6b7b9f803..727b787ac 100644
--- a/externals/iemlib/iemabs/lp2c_d~.pd
+++ b/externals/iemlib/iemabs/lp2c_dp~.pd
@@ -8,8 +8,7 @@
 #X text 195 136 <float> interpolation_time [ms];
 #X text 32 176 ~filtered signal_out~;
 #X obj 126 111 inlet;
-#X text 12 8 lp2c~;
-#X text 60 8 lowpass 2.order for filter-cascades;
+#X text 77 8 lowpass 2.order for filter-cascades;
 #X obj 161 136 inlet;
 #X text 127 87 <float> damping [-];
 #X text 162 111 <float> frequency-shift [-];
@@ -24,17 +23,19 @@
 #X text 128 208 3.arg: <float> frequency-shift [-];
 #X text 128 218 4.arg: <float> interpolation_time [ms] (opt.);
 #X text 176 325 IEM KUG;
-#X text 160 313 musil;
+#X text 154 313 musil;
 #X text 190 313 @;
-#X text 196 313 iem.at;
-#X text 111 302 (c) Thomas Musil 2000 - 2005;
+#X text 198 313 iem.at;
 #X text 159 335 Graz \, Austria;
 #X obj 22 157 filter~ dlp2c \$1 \$2 \$3 \$4;
-#X connect 0 0 30 0;
-#X connect 1 0 14 0;
-#X connect 1 0 30 1;
-#X connect 5 0 30 2;
-#X connect 8 0 30 3;
-#X connect 11 0 17 0;
-#X connect 11 0 30 4;
-#X connect 30 0 2 0;
+#X text 12 8 lp2c_dp~;
+#X text 129 23 with double precision;
+#X text 111 302 (c) Thomas Musil 2000 - 2010;
+#X connect 0 0 28 0;
+#X connect 1 0 13 0;
+#X connect 1 0 28 1;
+#X connect 5 0 28 2;
+#X connect 8 0 28 3;
+#X connect 10 0 16 0;
+#X connect 10 0 28 4;
+#X connect 28 0 2 0;
diff --git a/externals/iemlib/iemabs/output~.pd b/externals/iemlib/iemabs/output~.pd
index 964b10ad4..70bd6399a 100644
--- a/externals/iemlib/iemabs/output~.pd
+++ b/externals/iemlib/iemabs/output~.pd
@@ -1,27 +1,27 @@
-#N canvas 191 63 365 293 10;
-#X obj 141 169 dbtorms;
-#X obj 94 87 inlet;
-#X text 94 64 level;
-#X obj 141 215 line~;
-#X obj 19 136 dac~;
-#X text 19 67 audio;
-#X text 151 151 show level;
-#X obj 19 87 inlet~;
-#X obj 19 109 *~;
-#X obj 20 223 outlet;
-#X msg 141 127 95;
-#X obj 141 193 pack 0 500;
-#X obj 20 200 pvu~;
-#X obj 141 106 r newbang;
-#X text 15 20 ouput~;
-#X connect 0 0 11 0;
-#X connect 1 0 0 0;
-#X connect 3 0 8 1;
-#X connect 7 0 8 0;
-#X connect 8 0 4 1;
-#X connect 8 0 4 0;
-#X connect 8 0 12 0;
-#X connect 10 0 0 0;
-#X connect 11 0 3 0;
-#X connect 12 0 9 0;
-#X connect 13 0 10 0;
+#N canvas 191 63 365 293 10;
+#X obj 141 169 dbtorms;
+#X obj 94 87 inlet;
+#X text 94 64 level;
+#X obj 141 215 line~;
+#X obj 19 136 dac~;
+#X text 19 67 audio;
+#X text 151 151 show level;
+#X obj 19 87 inlet~;
+#X obj 19 109 *~;
+#X obj 20 223 outlet;
+#X msg 141 127 95;
+#X obj 141 193 pack 0 500;
+#X obj 20 200 pvu~;
+#X obj 141 106 r newbang;
+#X text 15 20 ouput~;
+#X connect 0 0 11 0;
+#X connect 1 0 0 0;
+#X connect 3 0 8 1;
+#X connect 7 0 8 0;
+#X connect 8 0 4 1;
+#X connect 8 0 4 0;
+#X connect 8 0 12 0;
+#X connect 10 0 0 0;
+#X connect 11 0 3 0;
+#X connect 12 0 9 0;
+#X connect 13 0 10 0;
diff --git a/externals/iemlib/iemabs/popup.pd b/externals/iemlib/iemabs/popup.pd
new file mode 100644
index 000000000..b36babeec
--- /dev/null
+++ b/externals/iemlib/iemabs/popup.pd
@@ -0,0 +1,25 @@
+#N canvas 194 110 646 379 10;

+#X obj 39 65 pop 6 17 0 0 play_cmd play_cmd play_cmd 82 9 192 17 -225280

+-1109 -260818 0 5 open rewind start stop quit;

+#X obj 105 196 init_popup help-popup.txt play_cmd;

+#X obj 25 196 r play_cmd;

+#X obj 25 218 route set_pop_name;

+#X text 11 9 popup = pop;

+#X obj 263 236 pp set;

+#X msg 263 258 0 open;

+#X obj 69 276 unpack float symbol;

+#X floatatom 69 299 5 0 0;

+#X symbolatom 197 300 10 0 0;

+#X obj 413 93 pop 7 14 0 0 empty empty empty 50 7 0 10 -262144 -1 -1

+0 1 pop;

+#X floatatom 413 128 5 0 0;

+#X symbolatom 460 129 10 0 0;

+#X connect 1 0 10 0;

+#X connect 2 0 3 0;

+#X connect 3 1 5 0;

+#X connect 3 1 7 0;

+#X connect 5 0 6 0;

+#X connect 7 0 8 0;

+#X connect 7 1 9 0;

+#X connect 10 0 11 0;

+#X connect 10 1 12 0;

diff --git a/externals/iemlib/iemlib1/sin_freq~-help.pd b/externals/iemlib/iemlib1/sin_freq~-help.pd
new file mode 100644
index 000000000..332455757
--- /dev/null
+++ b/externals/iemlib/iemlib1/sin_freq~-help.pd
@@ -0,0 +1,47 @@
+#N canvas 375 118 488 460 10;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 155 63 3 15 133 0 - - -;
+#X obj 155 81 mtof;
+#X floatatom 155 102 9 0 22000 0 - - -;
+#X text 224 100 Hz;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X text 180 61 midi-pitch;
+#X obj 336 305 unsig~;
+#X text 149 400 IEM KUG;
+#X text 126 388 musil;
+#X text 163 388 @;
+#X text 172 388 iem.at;
+#X text 132 410 Graz \, Austria;
+#X obj 154 241 sin_freq~;
+#X obj 155 140 osc~ 440;
+#X text 406 326 Hz;
+#X text 84 377 (c) Thomas Musil 2000 - 2011;
+#X text 10 7 sin_freq~;
+#X text 105 8 calculate frequency of a;
+#X text 105 20 sine-wave \, in Hz (signal-out);
+#X floatatom 27 299 9 0 0 0 - - -;
+#X floatatom 336 327 9 0 0 0 - - -;
+#X obj 154 305 unsig~;
+#X text 224 326 Hz;
+#X floatatom 154 327 9 0 0 0 - - -;
+#X obj 154 283 lp1~ 100;
+#X obj 336 283 lp1_dp~ 10;
+#X obj 27 276 unsig~ 10;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 17 0;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 10 0 24 0;
+#X connect 16 0 28 0;
+#X connect 16 0 29 0;
+#X connect 16 0 30 0;
+#X connect 17 0 16 0;
+#X connect 25 0 27 0;
+#X connect 28 0 25 0;
+#X connect 29 0 10 0;
+#X connect 30 0 23 0;
diff --git a/externals/iemlib/iemlib1/sin_phase~-help.pd b/externals/iemlib/iemlib1/sin_phase~-help.pd
index e1e6b9e07..263f1aa3e 100644
--- a/externals/iemlib/iemlib1/sin_phase~-help.pd
+++ b/externals/iemlib/iemlib1/sin_phase~-help.pd
@@ -1,64 +1,72 @@
-#N canvas 375 118 488 460 10;
-#X text 28 48 dsp ON/OFF;
-#X floatatom 155 63 3 15 133 0 - - -;
-#X obj 155 81 mtof;
-#X floatatom 155 102 9 0 22000 0 - - -;
-#X text 214 101 Hz;
-#X floatatom 294 158 6 -360 360 0 - - -;
-#X floatatom 11 88 5 0 0 0 - - -;
-#X text 46 87 % cpu;
-#X obj 11 68 dsp;
-#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
-;
-#X text 10 7 sin_phase~;
-#X text 105 8 calculate phase-difference between 2;
-#X text 105 20 sine-waves \, in samples (signal-out);
-#X obj 155 241 sin_phase~;
-#X obj 209 216 cos~;
-#X obj 154 220 cos~;
-#X obj 154 198 +~ 0;
-#X obj 155 122 phasor~ 440;
-#X text 340 155 percent;
-#X text 180 61 midi-pitch;
-#X text 295 140 phase-difference;
-#X obj 156 264 lp1~ 10 100;
-#X obj 157 286 unsig~;
-#X floatatom 157 372 5 0 0 0 - - -;
-#X obj 157 308 / 44100;
-#X floatatom 92 326 5 0 0 0 - - -;
-#X obj 157 330 * 10;
-#X obj 157 350 * 360;
-#X text 195 371 degree;
-#X obj 61 268 unsig~;
-#X floatatom 61 291 5 0 0 0 - - -;
-#X obj 294 181 / 360;
-#X obj 268 116 f;
-#X text 115 418 IEM KUG;
-#X text 99 406 musil;
-#X text 129 406 @;
-#X text 135 406 iem.at;
-#X text 50 395 (c) Thomas Musil 2000 - 2005;
-#X text 98 428 Graz \, Austria;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 17 0;
-#X connect 3 0 32 0;
-#X connect 5 0 31 0;
-#X connect 8 0 6 0;
-#X connect 9 0 8 0;
-#X connect 13 0 21 0;
-#X connect 13 0 29 0;
-#X connect 14 0 13 1;
-#X connect 15 0 13 0;
-#X connect 16 0 15 0;
-#X connect 17 0 14 0;
-#X connect 17 0 16 0;
-#X connect 21 0 22 0;
-#X connect 22 0 24 0;
-#X connect 22 0 25 0;
-#X connect 24 0 26 0;
-#X connect 26 0 27 0;
-#X connect 27 0 23 0;
-#X connect 29 0 30 0;
-#X connect 31 0 16 1;
-#X connect 32 0 26 1;
+#N canvas 375 118 502 514 10;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 155 63 3 15 133 0 - - -;
+#X obj 155 81 mtof;
+#X floatatom 155 102 9 0 22000 0 - - -;
+#X text 214 101 Hz;
+#X floatatom 338 75 6 -360 360 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X text 10 7 sin_phase~;
+#X text 105 8 calculate phase-difference between 2;
+#X text 105 20 sine-waves \, in samples (signal-out);
+#X obj 155 241 sin_phase~;
+#X obj 213 197 cos~;
+#X obj 155 197 cos~;
+#X obj 155 175 +~ 0;
+#X obj 155 122 phasor~ 440;
+#X text 180 61 midi-pitch;
+#X text 339 57 phase-difference;
+#X obj 155 325 lp1~ 10 100;
+#X obj 156 347 unsig~;
+#X floatatom 156 393 5 0 0 0 - - -;
+#X floatatom 90 359 5 0 0 0 - - -;
+#X obj 156 371 * 360;
+#X text 194 392 degree;
+#X obj 31 271 unsig~;
+#X floatatom 31 294 5 0 0 0 - - -;
+#X obj 338 98 / 360;
+#X obj 237 117 f;
+#X text 113 451 IEM KUG;
+#X text 97 439 musil;
+#X text 127 439 @;
+#X text 133 439 iem.at;
+#X text 48 428 (c) Thomas Musil 2000 - 2005;
+#X text 96 461 Graz \, Austria;
+#X text 384 72 degree;
+#X obj 240 242 sin_freq~;
+#X obj 155 272 *~;
+#X obj 24 316 unsig~;
+#X floatatom 24 339 9 0 0 0 - - -;
+#X obj 156 298 /~ 44100;
+#X floatatom 303 282 5 0 0 0 - - -;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 17 0;
+#X connect 3 0 29 0;
+#X connect 5 0 28 0;
+#X connect 8 0 6 0;
+#X connect 9 0 8 0;
+#X connect 13 0 26 0;
+#X connect 13 0 38 0;
+#X connect 14 0 13 1;
+#X connect 14 0 37 0;
+#X connect 15 0 13 0;
+#X connect 16 0 15 0;
+#X connect 17 0 14 0;
+#X connect 17 0 16 0;
+#X connect 20 0 21 0;
+#X connect 21 0 23 0;
+#X connect 21 0 24 0;
+#X connect 24 0 22 0;
+#X connect 26 0 27 0;
+#X connect 28 0 16 1;
+#X connect 37 0 38 1;
+#X connect 38 0 39 0;
+#X connect 38 0 41 0;
+#X connect 39 0 40 0;
+#X connect 41 0 20 0;
+#X connect 42 0 20 1;
diff --git a/externals/iemlib/iemlib1/sparse_FIR~-help.pd b/externals/iemlib/iemlib1/sparse_FIR~-help.pd
index b4b6370cb..56f8ca94a 100644
--- a/externals/iemlib/iemlib1/sparse_FIR~-help.pd
+++ b/externals/iemlib/iemlib1/sparse_FIR~-help.pd
@@ -1,83 +1,97 @@
-#N canvas 125 49 971 642 10;
-#X floatatom 4 133 5 0 0 0 - - -;
-#X text 32 96 % cpu;
-#X obj 4 93 dsp;
-#X obj 4 73 tgl 15 0 empty empty dsp_ON/OFF 2 -8 0 10 -225271 -42246
--90881 1 1;
-#X floatatom 183 494 7 0 0 0 - - -;
-#X obj 112 373 dac~;
-#X obj 112 347 gainvu~ 300;
-#X obj 174 369 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
-#X obj 294 216 vsl 15 128 0 127 0 0 empty empty gain -7 -8 0 10 -225271
--42246 -90881 7300 1;
-#X obj 113 95 noise~;
-#X floatatom 173 512 7 0 0 0 - - -;
-#X floatatom 17 113 5 0 0 0 - - -;
-#X text 170 567 IEM KUG;
-#X text 146 555 musil;
-#X text 182 555 @;
-#X text 190 555 iem.at;
-#X text 153 577 Graz \, Austria;
-#X floatatom 142 323 5 0 0 0 - - -;
-#X msg 353 118 size 256;
-#X msg 370 523 0 1 1 1;
-#X msg 366 321 0 1 10 1 20 1 30 1 40 1 50 1 60 1 70 1 80 1;
-#X obj 707 38 t b b;
-#X msg 767 101 set;
-#X msg 668 101 add2 \$1 \$2;
-#X obj 707 18 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+#N canvas 125 49 986 684 10;
+#X floatatom 4 149 5 0 0 0 - - -;
+#X text 32 112 % cpu;
+#X obj 4 109 dsp;
+#X obj 4 89 tgl 15 0 empty empty dsp_ON/OFF 2 -8 0 10 -225271 -42246
+-90881 0 1;
+#X floatatom 183 510 7 0 0 0 - - -;
+#X obj 112 389 dac~;
+#X obj 112 363 gainvu~ 300;
+#X obj 174 385 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 294 232 vsl 15 128 0 127 0 0 empty empty gain -7 -8 0 10 -225271
+-42246 -90881 6000 1;
+#X obj 113 111 noise~;
+#X floatatom 173 528 7 0 0 0 - - -;
+#X floatatom 17 129 5 0 0 0 - - -;
+#X text 170 583 IEM KUG;
+#X text 146 571 musil;
+#X text 182 571 @;
+#X text 190 571 iem.at;
+#X text 153 593 Graz \, Austria;
+#X floatatom 142 339 5 0 0 0 - - -;
+#X msg 353 134 size 256;
+#X msg 409 500 0 1 1 1;
+#X msg 405 348 0 1 10 1 20 1 30 1 40 1 50 1 60 1 70 1 80 1;
+#X obj 707 54 t b b;
+#X msg 767 117 set;
+#X msg 668 117 add2 \$1 \$2;
+#X obj 707 34 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
 -1;
-#X msg 354 140 order 384;
-#X msg 366 342 matrix 9 2 0 1 10 1 20 1 30 1 40 1 50 1 60 1 70 1 80
+#X msg 354 156 order 384;
+#X msg 405 369 matrix 9 2 0 1 10 1 20 1 30 1 40 1 50 1 60 1 70 1 80
 1;
-#X msg 366 363 matrix 2 9 0 1 10 1 20 1 30 1 40 1 50 1 60 1 70 1 80
-1;
-#X text 17 16 sparse_FIR~;
-#X msg 370 581 0 0;
-#X msg 370 489 0 -0.1 1 -0.18 2 -0.1 3 0.15 4 0.4 5 0.7 6 0.4 7 0.15
+#X text 17 14 sparse_FIR~;
+#X msg 409 560 0 0;
+#X msg 409 466 0 -0.1 1 -0.18 2 -0.1 3 0.15 4 0.4 5 0.7 6 0.4 7 0.15
 8 -0.1 9 -0.18 10 -0.1;
-#X msg 510 126 0 0.04 1 0.04 2 0.04 3 0.04 4 0.04 5 0.04 6 0.04 7 0.04
+#X msg 510 142 0 0.04 1 0.04 2 0.04 3 0.04 4 0.04 5 0.04 6 0.04 7 0.04
 8 0.04 9 0.04 10 0.04 11 0.04 12 0.04 13 0.04 14 0.04 15 0.04 16 0.04
 17 0.04 18 0.04 19 0.04 20 0.04 21 0.04 22 0.04 23 0.04 24 0.04 25
 0.04 26 0.04 27 0.04 28 0.04 29 0.04;
-#X obj 668 81 pack 0 0.04;
-#X obj 668 59 for++ 0 29;
-#X text 366 217 A list of alternating index- and value- doubles will
+#X obj 668 97 pack 0 0.04;
+#X obj 668 75 for++ 0 29;
+#X text 405 204 A list of alternating index- and value- doubles will
 change the coefficients of convolution. The number of pairs should
 be less than the order of FIR.;
-#X text 365 291 A matrix message will do the same.;
-#X obj 568 93 loadbang;
-#X text 134 16 convolve a signal with a coefficent list of non zero
+#X text 404 318 A matrix message will do the same.;
+#X obj 568 109 loadbang;
+#X text 134 14 convolve a signal with a coefficent list of non zero
 index/value pairs. All values between the determined values will be
 set to zero and won't be calculated (sparse).;
-#X text 227 182 1.arg: <float> convolution-length (FIR order or size)
-;
-#X text 175 60 will change the max. order of FIR filter (or size).
-;
-#X text 366 263 Each pair or double begins with an index followed by
+#X text 405 250 Each pair or double begins with an index followed by
 its value.;
-#X obj 113 180 sparse_FIR~ 256;
-#X msg 286 97 size 16;
-#X obj 327 198 init 60;
-#X text 103 543 (c) Thomas Musil 2000 - 2011;
-#X msg 370 544 0 1 40 -1 80 1 120 -1 160 1 200 -1 240 1 280 -1 320
+#X obj 113 196 sparse_FIR~ 256;
+#X msg 286 113 size 16;
+#X obj 327 214 init 60;
+#X text 103 559 (c) Thomas Musil 2000 - 2011;
+#X msg 409 521 0 1 40 -1 80 1 120 -1 160 1 200 -1 240 1 280 -1 320
 1 360 -1 400 1;
-#X msg 353 97 size 128;
-#X msg 287 141 size 64;
-#X msg 287 119 size 32;
-#X msg 221 139 size 8;
-#X msg 222 117 size 4;
-#X text 770 318 same as;
-#X text 771 341 same as;
-#X text 770 363 same as;
-#X msg 35 236 size 0;
-#X msg 223 97 size 3;
-#X msg 163 142 size 2;
-#X msg 165 120 size 1;
-#X text 847 104 sparse list;
-#X text 680 470 sparse list;
-#X text 490 384 sparse matrix;
-#X text 29 219 ignored;
+#X msg 353 113 size 128;
+#X msg 287 157 size 64;
+#X msg 287 135 size 32;
+#X msg 221 155 size 8;
+#X msg 222 133 size 4;
+#X text 799 345 same as;
+#X text 800 368 same as;
+#X msg 35 252 size 0;
+#X msg 223 113 size 3;
+#X msg 163 158 size 2;
+#X msg 165 136 size 1;
+#X text 847 120 sparse list;
+#X text 719 447 sparse list;
+#X text 529 411 sparse matrix;
+#X text 29 235 ignored;
+#X msg 429 134 order 4;
+#X msg 428 156 order 8;
+#X msg 409 436 0 0.1 3 0.1 6 0.1 9 0.1 12 0.1;
+#X msg 408 585 0 0.3 1 0.3 2 0.3 3 0.3;
+#X msg 569 586 10 0.3 11 0.3 12 0.3 13 0.3;
+#X msg 755 585 size 4;
+#X msg 808 586 size 14;
+#X text 183 67 "size" or "order" followed by a number change the max.
+order of FIR filter (or size = order) and the memory-management.;
+#X text 404 283 All other values will reset to zero (not calculated).
+;
+#X text 134 311 (FIR order or size=order);
+#X text 135 297 max. convolution-length;
+#X text 123 283 1.arg: <float>;
+#X text 853 301 matrix 9 2 \; 0 1 \; 10 1 \; 20 1 \; 30 1 \; 40 1 \;
+50 1 \; 60 1 \; 70 1 \; 80 1;
+#X text 1068 321 matrix 2 9 \; 0 10 20 30 40 50 60 70 80 \; 1 1 1 1
+1 1 1 1 1;
+#X msg 1073 368 matrix 2 9 0 1 10 1 20 1 30 1 40 1 50 1 60 1 70 1 80
+1;
+#X text 1073 392 not same as;
 #X connect 2 0 0 0;
 #X connect 2 1 11 0;
 #X connect 3 0 2 0;
@@ -88,34 +102,40 @@ its value.;
 #X connect 7 0 10 0;
 #X connect 7 1 4 0;
 #X connect 8 0 6 1;
-#X connect 9 0 41 0;
-#X connect 18 0 41 0;
-#X connect 19 0 41 0;
-#X connect 20 0 41 0;
-#X connect 21 0 33 0;
+#X connect 9 0 38 0;
+#X connect 18 0 38 0;
+#X connect 19 0 38 0;
+#X connect 20 0 38 0;
+#X connect 21 0 32 0;
 #X connect 21 1 22 0;
-#X connect 22 0 31 0;
-#X connect 23 0 31 0;
+#X connect 22 0 30 0;
+#X connect 23 0 30 0;
 #X connect 24 0 21 0;
-#X connect 25 0 41 0;
-#X connect 26 0 41 0;
-#X connect 27 0 41 0;
-#X connect 29 0 41 0;
-#X connect 30 0 41 0;
-#X connect 31 0 41 0;
-#X connect 32 0 23 0;
-#X connect 33 0 32 0;
-#X connect 36 0 31 0;
-#X connect 41 0 6 0;
-#X connect 42 0 41 0;
-#X connect 43 0 8 0;
-#X connect 45 0 41 0;
-#X connect 46 0 41 0;
-#X connect 47 0 41 0;
-#X connect 48 0 41 0;
-#X connect 49 0 41 0;
-#X connect 50 0 41 0;
-#X connect 54 0 41 0;
-#X connect 55 0 41 0;
-#X connect 56 0 41 0;
-#X connect 57 0 41 0;
+#X connect 25 0 38 0;
+#X connect 26 0 38 0;
+#X connect 28 0 38 0;
+#X connect 29 0 38 0;
+#X connect 30 0 38 0;
+#X connect 31 0 23 0;
+#X connect 32 0 31 0;
+#X connect 35 0 30 0;
+#X connect 38 0 6 0;
+#X connect 39 0 38 0;
+#X connect 40 0 8 0;
+#X connect 42 0 38 0;
+#X connect 43 0 38 0;
+#X connect 44 0 38 0;
+#X connect 45 0 38 0;
+#X connect 46 0 38 0;
+#X connect 47 0 38 0;
+#X connect 50 0 38 0;
+#X connect 51 0 38 0;
+#X connect 52 0 38 0;
+#X connect 53 0 38 0;
+#X connect 58 0 38 0;
+#X connect 59 0 38 0;
+#X connect 60 0 38 0;
+#X connect 61 0 38 0;
+#X connect 62 0 38 0;
+#X connect 63 0 38 0;
+#X connect 64 0 38 0;
diff --git a/externals/iemlib/iemlib1/src/FIR~.c b/externals/iemlib/iemlib1/src/FIR~.c
index 608898bc8..07f841759 100644
--- a/externals/iemlib/iemlib1/src/FIR~.c
+++ b/externals/iemlib/iemlib1/src/FIR~.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2012 */
 
 
 #include "m_pd.h"
@@ -12,34 +12,35 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006
 
 typedef struct _FIR_tilde
 {
-  t_object  x_obj;
-  t_float   *x_coef_beg;
-  t_float   *x_history_beg;
-  int       x_rw_index;
-  int       x_fir_order;
-  t_symbol  *x_table_name;
-  t_float   x_msi;
+  t_object    x_obj;
+  iemarray_t  *x_array_coef_beg;
+  t_sample    *x_history_beg;
+  int         x_rw_index;
+  int         x_fir_order;
+  int         x_malloc_history;
+  t_symbol    *x_table_name;
+  t_float     x_float_sig_in;
 } t_FIR_tilde;
 
 static t_class *FIR_tilde_class;
 
 static t_int *FIR_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_FIR_tilde *x = (t_FIR_tilde *)(w[3]);
   int n = (t_int)(w[4]);
   int rw_index = x->x_rw_index;
   int i, j;
   int order = x->x_fir_order;
   int ord16 = order / 16;
-  t_float sum=0.0f;
-  t_float *coef = x->x_coef_beg;
-  t_float *write_hist1=x->x_history_beg;
-  t_float *write_hist2;
-  t_float *read_hist;
-  t_float *coef_vec;
-  t_float *hist_vec;
+  t_sample sum=0.0;
+  iemarray_t *coef = x->x_array_coef_beg;
+  t_sample *write_hist1=x->x_history_beg;
+  t_sample *write_hist2;
+  t_sample *read_hist;
+  iemarray_t *coef_vec;
+  t_sample *hist_vec;
   
   if(!coef)
     goto FIR_tildeperfzero;
@@ -53,33 +54,33 @@ static t_int *FIR_tilde_perform(t_int *w)
     write_hist1[rw_index] = in[i];
     write_hist2[rw_index] = in[i];
     
-    sum = 0.0f;
+    sum = 0.0;
     coef_vec = coef;
     hist_vec = &read_hist[rw_index];
     for(j=0; j<ord16; j++)
     {
-      sum += coef_vec[0] * hist_vec[0];
-      sum += coef_vec[1] * hist_vec[-1];
-      sum += coef_vec[2] * hist_vec[-2];
-      sum += coef_vec[3] * hist_vec[-3];
-      sum += coef_vec[4] * hist_vec[-4];
-      sum += coef_vec[5] * hist_vec[-5];
-      sum += coef_vec[6] * hist_vec[-6];
-      sum += coef_vec[7] * hist_vec[-7];
-      sum += coef_vec[8] * hist_vec[-8];
-      sum += coef_vec[9] * hist_vec[-9];
-      sum += coef_vec[10] * hist_vec[-10];
-      sum += coef_vec[11] * hist_vec[-11];
-      sum += coef_vec[12] * hist_vec[-12];
-      sum += coef_vec[13] * hist_vec[-13];
-      sum += coef_vec[14] * hist_vec[-14];
-      sum += coef_vec[15] * hist_vec[-15];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 0)) * hist_vec[0];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 1)) * hist_vec[-1];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 2)) * hist_vec[-2];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 3)) * hist_vec[-3];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 4)) * hist_vec[-4];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 5)) * hist_vec[-5];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 6)) * hist_vec[-6];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 7)) * hist_vec[-7];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 8)) * hist_vec[-8];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 9)) * hist_vec[-9];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 10)) * hist_vec[-10];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 11)) * hist_vec[-11];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 12)) * hist_vec[-12];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 13)) * hist_vec[-13];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 14)) * hist_vec[-14];
+      sum += (t_sample)(iemarray_getfloat(coef_vec, 15)) * hist_vec[-15];
       coef_vec += 16;
       hist_vec -= 16;
     }
     for(j=ord16*16; j<order; j++)
     {
-      sum += coef[j] * read_hist[rw_index-j];
+      sum += (t_sample)(iemarray_getfloat(coef, j)) * read_hist[rw_index-j];
     }
     out[i] = sum;
     
@@ -94,7 +95,7 @@ static t_int *FIR_tilde_perform(t_int *w)
 FIR_tildeperfzero:
   
   while(n--)
-    *out++ = 0.0f;
+    *out++ = 0.0;
   return(w+5);
 }
 
@@ -103,30 +104,38 @@ void FIR_tilde_set(t_FIR_tilde *x, t_symbol *table_name, t_floatarg forder)
   t_garray *ga;
   int table_size;
   int order = (int)forder;
+  int i;
   
   x->x_table_name = table_name;
+  if(order < 1)
+    order = 1;
+  x->x_fir_order = order;
   if(!(ga = (t_garray *)pd_findbyclass(x->x_table_name, garray_class)))
   {
     if(*table_name->s_name)
       error("FIR~: %s: no such table~", x->x_table_name->s_name);
-    x->x_coef_beg = 0;
+    x->x_array_coef_beg = (iemarray_t *)0;
   }
-  else if(!garray_getfloatarray(ga, &table_size, &x->x_coef_beg))
+  else if(!iemarray_getarray(ga, &table_size, &x->x_array_coef_beg))
   {
     error("%s: bad template for FIR~", x->x_table_name->s_name);
-    x->x_coef_beg = 0;
+    x->x_array_coef_beg = (iemarray_t *)0;
   }
   else if(table_size < order)
   {
     error("FIR~: tablesize %d < order %d !!!!", table_size, order);
-    x->x_coef_beg = 0;
+    x->x_array_coef_beg = (iemarray_t *)0;
   }
   else
-    garray_usedindsp(ga);
+  {
+    garray_usedindsp(ga);/* good */
+  }
   x->x_rw_index = 0;
-  if(order > x->x_fir_order)/* resize */
-    x->x_history_beg =  (t_float *)resizebytes(x->x_history_beg, 2*x->x_fir_order*sizeof(t_float), 2*order*sizeof(float));
-  x->x_fir_order = order;
+  if(x->x_fir_order > x->x_malloc_history)/* resize */
+  {
+    x->x_history_beg =  (t_sample *)resizebytes(x->x_history_beg, 2*x->x_malloc_history*sizeof(t_sample), 2*x->x_fir_order*sizeof(t_sample));
+    x->x_malloc_history = x->x_fir_order;
+  }
 }
 
 static void FIR_tilde_dsp(t_FIR_tilde *x, t_signal **sp)
@@ -135,18 +144,20 @@ static void FIR_tilde_dsp(t_FIR_tilde *x, t_signal **sp)
   dsp_add(FIR_tilde_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
 }
 
-static void *FIR_tilde_new(t_symbol *ref, t_floatarg np)
+static void *FIR_tilde_new(t_symbol *array_name, t_floatarg forder)
 {
   t_FIR_tilde *x = (t_FIR_tilde *)pd_new(FIR_tilde_class);
+  int order = (int)forder;
   
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
-  x->x_table_name = ref;
-  x->x_coef_beg = 0;
-  if((int)np < 1)
-    np = 1.0;
-  x->x_fir_order = (int)np;
-  x->x_history_beg = (t_float *)getbytes((2*x->x_fir_order)*sizeof(t_float));
+  x->x_float_sig_in = 0;
+  x->x_table_name = array_name;
+  x->x_array_coef_beg = 0;
+  if(order < 1)
+    order = 1;
+  x->x_fir_order = order;
+  x->x_malloc_history = order;
+  x->x_history_beg = (t_sample *)getbytes((2*x->x_malloc_history)*sizeof(t_sample));
   x->x_rw_index = 0;
   return(x);
 }
@@ -154,16 +165,14 @@ static void *FIR_tilde_new(t_symbol *ref, t_floatarg np)
 static void FIR_tilde_free(t_FIR_tilde *x)
 {
   if(x->x_history_beg)
-    freebytes(x->x_history_beg, (2*x->x_fir_order)*sizeof(t_float));
+    freebytes(x->x_history_beg, (2*x->x_malloc_history)*sizeof(t_sample));
 }
 
 void FIR_tilde_setup(void)
 {
   FIR_tilde_class = class_new(gensym("FIR~"), (t_newmethod)FIR_tilde_new,
     (t_method)FIR_tilde_free, sizeof(t_FIR_tilde), 0, A_DEFSYM, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(FIR_tilde_class, t_FIR_tilde, x_msi);
+  CLASS_MAINSIGNALIN(FIR_tilde_class, t_FIR_tilde, x_float_sig_in);
   class_addmethod(FIR_tilde_class, (t_method)FIR_tilde_dsp, gensym("dsp"), 0);
-  class_addmethod(FIR_tilde_class, (t_method)FIR_tilde_set,
-    gensym("set"), A_SYMBOL, A_FLOAT, 0);
-//  class_sethelpsymbol(FIR_tilde_class, gensym("iemhelp/help-FIR~"));
+  class_addmethod(FIR_tilde_class, (t_method)FIR_tilde_set, gensym("set"), A_SYMBOL, A_FLOAT, 0);
 }
diff --git a/externals/iemlib/iemlib1/src/iemlib1.dsp b/externals/iemlib/iemlib1/src/VC6/iemlib1.dsp
similarity index 100%
rename from externals/iemlib/iemlib1/src/iemlib1.dsp
rename to externals/iemlib/iemlib1/src/VC6/iemlib1.dsp
diff --git a/externals/iemlib/iemlib1/src/iemlib1.dsw b/externals/iemlib/iemlib1/src/VC6/iemlib1.dsw
similarity index 100%
rename from externals/iemlib/iemlib1/src/iemlib1.dsw
rename to externals/iemlib/iemlib1/src/VC6/iemlib1.dsw
diff --git a/externals/iemlib/iemlib1/src/VC6/makefile_win b/externals/iemlib/iemlib1/src/VC6/makefile_win
new file mode 100644
index 000000000..161bf97aa
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/VC6/makefile_win
@@ -0,0 +1,59 @@
+TARGET = iemlib1
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+PD_INST_PATH = "C:\Programme\pd"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+	$(VIS_CPP_PATH)\lib\libc.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_CPP_PATH)\lib\kernel32.lib \
+	$(VIS_CPP_PATH)\lib\wsock32.lib \
+	$(VIS_CPP_PATH)\lib\winmm.lib \
+	$(PD_INST_PATH)\bin\pthreadVC.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	biquad_freq_resp.c \
+		db2v.c \
+		f2note.c \
+		filter~.c \
+		FIR~.c \
+		for++.c \
+		gate.c \
+		hml_shelf~.c \
+		iem_cot4~.c \
+		iem_delay~.c \
+		iem_pow4~.c \
+		iem_sqrt4~.c \
+		lp1_t~.c \
+		mov_avrg_kern~.c \
+		para_bp2~.c \
+		peakenv~.c \
+		peakenv_hold~.c \
+		prvu~.c \
+		pvu~.c \
+		rvu~.c \
+		sin_phase~.c \
+		sparse_FIR~ \
+		soundfile_info.c \
+		split.c \
+		v2db.c \
+		vcf_filter~.c \
+		$(TARGET).c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib1/src/VC7/iemlib1.vcproj b/externals/iemlib/iemlib1/src/VC7/iemlib1.vcproj
new file mode 100644
index 000000000..a49d2df3a
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/VC7/iemlib1.vcproj
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="iemlib1"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	SccProjectName=""
+	SccLocalPath=""
+	Keyword="MakeFileProj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc7proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc7proj /a"
+				Output="iemlib1.exe"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc7proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc7proj /a"
+				Output="iemlib1.exe"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iemlib1.bsc">
+		</File>
+		<File
+			RelativePath="makefile_vc7proj">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iemlib/iemlib1/src/VC7/makefile_vc7proj b/externals/iemlib/iemlib1/src/VC7/makefile_vc7proj
new file mode 100644
index 000000000..af741d8a9
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/VC7/makefile_vc7proj
@@ -0,0 +1,57 @@
+TARGET = iemlib1
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7"
+VIS_SDK_PATH = "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK"
+PD_INST_PATH = "C:\Programme\pd-0.42-5"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	biquad_freq_resp.c \
+		db2v.c \
+		f2note.c \
+		filter~.c \
+		FIR~.c \
+		for++.c \
+		gate.c \
+		hml_shelf~.c \
+		iem_cot4~.c \
+		iem_delay~.c \
+		iem_pow4~.c \
+		iem_sqrt4~.c \
+		lp1_t~.c \
+		mov_avrg_kern~.c \
+		para_bp2~.c \
+		peakenv~.c \
+		peakenv_hold~.c \
+		prvu~.c \
+		pvu~.c \
+		rvu~.c \
+		sin_phase~.c \
+		soundfile_info.c \
+		sparse_FIR~.c \
+		split.c \
+		v2db.c \
+		vcf_filter~.c \
+		$(TARGET).c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib1/src/VC9/iemlib1.sln b/externals/iemlib/iemlib1/src/VC9/iemlib1.sln
new file mode 100644
index 000000000..ddf7a5570
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/VC9/iemlib1.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iemlib1", "iemlib1.vcproj", "{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Debug|Win32.ActiveCfg = Release|Win32
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Debug|Win32.Build.0 = Release|Win32
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Release|Win32.ActiveCfg = Release|Win32
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/externals/iemlib/iemlib1/src/VC9/iemlib1.vcproj b/externals/iemlib/iemlib1/src/VC9/iemlib1.vcproj
new file mode 100644
index 000000000..47d01192c
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/VC9/iemlib1.vcproj
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="iemlib1"
+	ProjectGUID="{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}"
+	Keyword="MakeFileProj"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_win"
+				ReBuildCommandLine="NMAKE /f makefile_win /a"
+				CleanCommandLine=""
+				Output="iemlib1.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_win"
+				ReBuildCommandLine="NMAKE /f makefile_win /a"
+				CleanCommandLine=""
+				Output="iemlib1.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iemlib1.bsc"
+			>
+		</File>
+		<File
+			RelativePath="makefile_win"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iemlib/iemlib1/src/VC9/makefile_win b/externals/iemlib/iemlib1/src/VC9/makefile_win
new file mode 100644
index 000000000..c611e8e93
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/VC9/makefile_win
@@ -0,0 +1,56 @@
+TARGET = iemlib1
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "$(PROGRAMFILES)\Microsoft Visual Studio 9.0\VC"
+VIS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDKs\Windows\v6.0A"
+PD_INST_PATH = "$(PROGRAMFILES)\pd"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /DHAVE_G_CANVAS_H /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	biquad_freq_resp.c \
+		db2v.c \
+		f2note.c \
+		filter~.c \
+		FIR~.c \
+		for++.c \
+		gate.c \
+		hml_shelf~.c \
+		iem_cot4~.c \
+		iem_delay~.c \
+		iem_pow4~.c \
+		iem_sqrt4~.c \
+		lp1_t~.c \
+		mov_avrg_kern~.c \
+		para_bp2~.c \
+		peakenv~.c \
+		peakenv_hold~.c \
+		prvu~.c \
+		pvu~.c \
+		rvu~.c \
+		sin_phase~.c \
+		soundfile_info.c \
+		split.c \
+		v2db.c \
+		vcf_filter~.c \
+		$(TARGET).c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib1/src/biquad_freq_resp.c b/externals/iemlib/iemlib1/src/biquad_freq_resp.c
index e95a84c1c..aaadfac4c 100644
--- a/externals/iemlib/iemlib1/src/biquad_freq_resp.c
+++ b/externals/iemlib/iemlib1/src/biquad_freq_resp.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
 
 
 #include "m_pd.h"
@@ -21,32 +21,39 @@ typedef struct _biquad_freq_resp
   t_float   b2;
   t_outlet  *x_out_re;
   t_outlet  *x_out_im;
+  t_outlet  *x_out_abs;
+  t_outlet  *x_out_arg;
 } t_biquad_freq_resp;
 
 static t_class *biquad_freq_resp_class;
 
-static void biquad_freq_resp_float(t_biquad_freq_resp *x, t_floatarg f)
+static void biquad_freq_resp_float(t_biquad_freq_resp *x, t_floatarg freq_phase)
 {
-  t_float re1, im1, re2, im2;
-  t_float c, s, a;
+  t_float re1, im1, re2, im2, re, im;
+  t_float c, s, ra;
+  t_float pi = 4.0 * atan(1.0);
   
-  if(f < 0.0f)
-    f = 0.0f;
-  else if(f > 180.0f)
-    f = 180.0;
-  f *= 3.14159265f;
-  f /= 180.0f;
+  if(freq_phase < 0.0)
+    freq_phase = 0.0;
+  else if(freq_phase > 180.0)
+    freq_phase = 180.0;
+  freq_phase *= pi;
+  freq_phase /= 180.0;
   
-  c = cos(f);
-  s = sin(f);
+  c = cos(freq_phase);
+  s = sin(freq_phase);
   
   re1 = x->a0 + x->a1*c + x->a2*(c*c - s*s);
-  im1 = x->a1*s + x->a2*2.0f*(s*c);
-  re2 = 1.0f - x->b1*c - x->b2*(c*c - s*s);
-  im2 = -x->b1*s - x->b2*2.0f*(s*c);
-  a = re2*re2 + im2*im2;
-  outlet_float(x->x_out_im, (re1*im2 - re2*im1)/a);/* because z^-1 = e^-jwt, negative sign */
-  outlet_float(x->x_out_re, (re1*re2 + im1*im2)/a);
+  im1 = x->a1*s + x->a2*2.0*(s*c);
+  re2 = 1.0 - x->b1*c - x->b2*(c*c - s*s);
+  im2 = -x->b1*s - x->b2*2.0*(s*c);
+  ra = 1.0 / (re2*re2 + im2*im2);
+  im = (re1*im2 - re2*im1) * ra; /* because z^-1 = e^-jwt, negative sign */
+  re = (re1*re2 + im1*im2) * ra;
+  outlet_float(x->x_out_arg, 180.0*atan2(im, re)/pi);
+  outlet_float(x->x_out_abs, sqrt(re*re + im*im));
+  outlet_float(x->x_out_im, im);
+  outlet_float(x->x_out_re, re);
   
 }
 /* y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
@@ -68,11 +75,13 @@ static void *biquad_freq_resp_new(void)
   t_biquad_freq_resp *x = (t_biquad_freq_resp *)pd_new(biquad_freq_resp_class);
   x->x_out_re = outlet_new(&x->x_obj, &s_float);
   x->x_out_im = outlet_new(&x->x_obj, &s_float);
-  x->b1 = 0.0f;
-  x->b2 = 0.0f;
-  x->a0 = 0.0f;
-  x->a1 = 0.0f;
-  x->a2 = 0.0f;
+  x->x_out_abs = outlet_new(&x->x_obj, &s_float);
+  x->x_out_arg = outlet_new(&x->x_obj, &s_float);
+  x->b1 = 0.0;
+  x->b2 = 0.0;
+  x->a0 = 0.0;
+  x->a1 = 0.0;
+  x->a2 = 0.0;
   return (x);
 }
 
@@ -81,6 +90,5 @@ void biquad_freq_resp_setup(void)
   biquad_freq_resp_class = class_new(gensym("biquad_freq_resp"), (t_newmethod)biquad_freq_resp_new, 0,
     sizeof(t_biquad_freq_resp), 0, 0);
   class_addfloat(biquad_freq_resp_class, biquad_freq_resp_float);
-    class_addlist(biquad_freq_resp_class, (t_method)biquad_freq_resp_list);
-//    class_sethelpsymbol(biquad_freq_resp_class, gensym("iemhelp/help-biquad_freq_resp"));
+  class_addlist(biquad_freq_resp_class, (t_method)biquad_freq_resp_list);
 }
diff --git a/externals/iemlib/iemlib1/src/filter~.c b/externals/iemlib/iemlib1/src/filter~.c
index c26b4c8bd..9b9cc7b14 100644
--- a/externals/iemlib/iemlib1/src/filter~.c
+++ b/externals/iemlib/iemlib1/src/filter~.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2008 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
 
 
 #include "m_pd.h"
@@ -10,9 +10,14 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2008
 
 
 /* ---------- filter~ - slow dynamic filter-kernel 1. and 2. order ----------- */
-/* ---------- with double precision option ----------------------------------- */
+/* -------------- now with single and double precision option ---------------- */
+/* ------- sp ..... single precision, ---- dp ..... double precision --------- */
 
-typedef struct _float_filter_para_tilde
+typedef struct _filter_tilde_sp_para t_filter_tilde_sp_para;
+
+typedef void (*filt_calc_sp_fun_ptr)(t_filter_tilde_sp_para *);
+
+struct _filter_tilde_sp_para
 {
   t_float   wn1;// old wn of biquad recursion
   t_float   wn2;// two times old wn of biquad recursion
@@ -39,14 +44,18 @@ typedef struct _float_filter_para_tilde
   int       counter_f;// number of dsp ticks to compute new frequency
   int       counter_a;// number of dsp ticks to compute new damping
   int       counter_b;// number of dsp ticks to compute new frequency shift
-  int       inlet3_is_Q1_or_damping0;// if flag is HIGH, the third inlet (Q) has to be inverted to damping
+  int       inlet3_is_Q;// if flag is HIGH, the third inlet (Q) has to be inverted to damping
   int       filter_function_is_highpass;// flag is HIGH if filter has highpass characteristic
   int       filter_function_is_first_order;// flag is HIGH if filter is first order
   int       event_mask;// a three bit mask: Bit 0 is HIGH during frequency ramp, Bit 1 is HIGH during damping ramp, Bit 2 is HIGH during frequency shift ramp
-  void      (*calc)();
-} t_float_filter_para_tilde;
+  filt_calc_sp_fun_ptr   calc;
+};
+
+typedef struct _filter_tilde_dp_para t_filter_tilde_dp_para;
 
-typedef struct _double_filter_para_tilde
+typedef void (*filt_calc_dp_fun_ptr)(t_filter_tilde_dp_para*);
+
+struct _filter_tilde_dp_para
 {
   double    wn1;// old wn of biquad recursion
   double    wn2;// two times old wn of biquad recursion
@@ -73,32 +82,42 @@ typedef struct _double_filter_para_tilde
   int       counter_f;// number of dsp ticks to compute new frequency
   int       counter_a;// number of dsp ticks to compute new damping
   int       counter_b;// number of dsp ticks to compute new frequency shift
-  int       inlet3_is_Q1_or_damping0;// if flag is HIGH, the third inlet (Q) has to be inverted to damping
+  int       inlet3_is_Q;// if flag is HIGH, the third inlet (Q) has to be inverted to damping
   int       filter_function_is_highpass;// flag is HIGH if filter has highpass characteristic
   int       filter_function_is_first_order;// flag is HIGH if filter is first order
   int       event_mask;// a three bit mask: Bit 0 is HIGH during frequency ramp, Bit 1 is HIGH during damping ramp, Bit 2 is HIGH during frequency shift ramp
-  void      (*calc)();
-} t_double_filter_para_tilde;
+  filt_calc_dp_fun_ptr   calc;
+};
+
+typedef union _filt_para
+{
+  t_filter_tilde_sp_para sp;
+  t_filter_tilde_dp_para dp;
+} t_filt_para;
 
 typedef struct _filter_tilde
 {
-  t_object  x_obj;
-  t_float_filter_para_tilde fp;
-  t_double_filter_para_tilde dp;
-  int       precision_d1_f0;
-  void      *x_debug_outlet;
-  t_atom    x_at[5];
-  t_float   x_msi;
+  t_object    x_obj;
+  t_filt_para x_para;
+  int         x_precision_dp1_sp0;
+  t_outlet    *x_debug_outlet;
+  t_atom      x_at[5];
+  t_float     x_float_sig_in;
 } t_filter_tilde;
 
 static t_class *filter_tilde_class;
 
-static void filter_tilde_snafu(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_dummy(t_filter_tilde_sp_para *x)
+{
+  
+}
+
+static void filter_tilde_dp_dummy(t_filter_tilde_dp_para *x)
 {
   
 }
 
-static void filter_tilde_lp1(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_lp1(t_filter_tilde_sp_para *x)
 {
   t_float al;
   
@@ -108,7 +127,7 @@ static void filter_tilde_lp1(t_float_filter_para_tilde *x)
   x->b1 = (al - 1.0f)*x->a0;
 }
 
-static void filter_tilde_lp2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_lp2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, bl2, rcp;
   
@@ -123,7 +142,7 @@ static void filter_tilde_lp2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - bl2);
 }
 
-static void filter_tilde_hp1(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_hp1(t_filter_tilde_sp_para *x)
 {
   t_float al, rcp;
   
@@ -134,7 +153,7 @@ static void filter_tilde_hp1(t_float_filter_para_tilde *x)
   x->b1 = rcp*(al - 1.0f);
 }
 
-static void filter_tilde_hp2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_hp2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, bl2, rcp;
   
@@ -149,7 +168,7 @@ static void filter_tilde_hp2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - bl2);
 }
 
-static void filter_tilde_rp2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_rp2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, l2, rcp;
   
@@ -163,7 +182,7 @@ static void filter_tilde_rp2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_bp2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_bp2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, l2, rcp;
   
@@ -177,7 +196,7 @@ static void filter_tilde_bp2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_bs2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_bs2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, l2, rcp;
   
@@ -192,7 +211,7 @@ static void filter_tilde_bs2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_rpw2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_rpw2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, l2, rcp;
   
@@ -206,7 +225,7 @@ static void filter_tilde_rpw2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_bpw2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_bpw2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, l2, rcp;
   
@@ -220,7 +239,7 @@ static void filter_tilde_bpw2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_bsw2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_bsw2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, l2, rcp;
   
@@ -235,7 +254,7 @@ static void filter_tilde_bsw2(t_float_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_ap1(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_ap1(t_filter_tilde_sp_para *x)
 {
   t_float al;
   
@@ -244,7 +263,7 @@ static void filter_tilde_ap1(t_float_filter_para_tilde *x)
   x->b1 = -x->a0;
 }
 
-static void filter_tilde_ap2(t_float_filter_para_tilde *x)
+static void filter_tilde_sp_ap2(t_filter_tilde_sp_para *x)
 {
   t_float l, al, bl2, rcp;
   
@@ -258,21 +277,7 @@ static void filter_tilde_ap2(t_float_filter_para_tilde *x)
   x->b2 = -x->a0;
 }
 
-/*static void filter_tilde_bp2(t_filter_tilde *x)
-{
-t_float l, al, l2, rcp;
-
-  l = x->cur_l;
-  l2 = l*l + 1.0;
-  al = l*x->cur_a;
-  rcp = 1.0f/(al + l2);
-  x->a0 = rcp*al;
-  x->a2 = -x->a0;
-  x->b1 = rcp*2.0f*(2.0f - l2);
-  x->b2 = rcp*(l2 - al);
-}*/
-
-static void filter_tilde_dlp1(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_lp1(t_filter_tilde_dp_para *x)
 {
   double al;
   
@@ -282,7 +287,7 @@ static void filter_tilde_dlp1(t_double_filter_para_tilde *x)
   x->b1 = (al - 1.0)*x->a0;
 }
 
-static void filter_tilde_dlp2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_lp2(t_filter_tilde_dp_para *x)
 {
   double l, al, bl2, rcp;
   
@@ -297,7 +302,7 @@ static void filter_tilde_dlp2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - bl2);
 }
 
-static void filter_tilde_dhp1(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_hp1(t_filter_tilde_dp_para *x)
 {
   double al, rcp;
   
@@ -308,7 +313,7 @@ static void filter_tilde_dhp1(t_double_filter_para_tilde *x)
   x->b1 = rcp*(al - 1.0);
 }
 
-static void filter_tilde_dhp2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_hp2(t_filter_tilde_dp_para *x)
 {
   double l, al, bl2, rcp;
   
@@ -323,7 +328,7 @@ static void filter_tilde_dhp2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - bl2);
 }
 
-static void filter_tilde_drp2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_rp2(t_filter_tilde_dp_para *x)
 {
   double l, al, l2, rcp;
   
@@ -337,7 +342,7 @@ static void filter_tilde_drp2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_dbp2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_bp2(t_filter_tilde_dp_para *x)
 {
   double l, al, l2, rcp;
   
@@ -351,7 +356,7 @@ static void filter_tilde_dbp2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_dbs2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_bs2(t_filter_tilde_dp_para *x)
 {
   double l, al, l2, rcp;
   
@@ -366,7 +371,7 @@ static void filter_tilde_dbs2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_drpw2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_rpw2(t_filter_tilde_dp_para *x)
 {
   double l, al, l2, rcp;
   
@@ -380,7 +385,7 @@ static void filter_tilde_drpw2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_dbpw2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_bpw2(t_filter_tilde_dp_para *x)
 {
   double l, al, l2, rcp;
   
@@ -394,7 +399,7 @@ static void filter_tilde_dbpw2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_dbsw2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_bsw2(t_filter_tilde_dp_para *x)
 {
   double l, al, l2, rcp;
   
@@ -409,7 +414,7 @@ static void filter_tilde_dbsw2(t_double_filter_para_tilde *x)
   x->b2 = rcp*(al - l2);
 }
 
-static void filter_tilde_dap1(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_ap1(t_filter_tilde_dp_para *x)
 {
   double al;
   
@@ -418,7 +423,7 @@ static void filter_tilde_dap1(t_double_filter_para_tilde *x)
   x->b1 = -x->a0;
 }
 
-static void filter_tilde_dap2(t_double_filter_para_tilde *x)
+static void filter_tilde_dp_ap2(t_filter_tilde_dp_para *x)
 {
   double l, al, bl2, rcp;
   
@@ -432,7 +437,7 @@ static void filter_tilde_dap2(t_double_filter_para_tilde *x)
   x->b2 = -x->a0;
 }
 
-static void filter_tilde_dsp_tick(t_float_filter_para_tilde *x)
+static void filter_tilde_dsp_sp_tick(t_filter_tilde_sp_para *x)
 {
   if(x->event_mask)
   {
@@ -528,7 +533,7 @@ static void filter_tilde_dsp_tick(t_float_filter_para_tilde *x)
   }
 }
 
-static void filter_tilde_dsp_dtick(t_double_filter_para_tilde *x)
+static void filter_tilde_dsp_dp_tick(t_filter_tilde_dp_para *x)
 {
   if(x->event_mask)
   {
@@ -624,21 +629,21 @@ static void filter_tilde_dsp_dtick(t_double_filter_para_tilde *x)
   }
 }
 
-static t_int *filter_tilde_perform_2o(t_int *w)
+static t_int *filter_tilde_sp_perform_2o(t_int *w)
 {
-  t_float *in = (float *)(w[1]);
-  t_float *out = (float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
-  t_float wn0, wn1=x->fp.wn1, wn2=x->fp.wn2;
-  t_float a0=x->fp.a0, a1=x->fp.a1, a2=x->fp.a2;
-  t_float b1=x->fp.b1, b2=x->fp.b2;
+  t_float wn0, wn1=x->x_para.sp.wn1, wn2=x->x_para.sp.wn2;
+  t_float a0=x->x_para.sp.a0, a1=x->x_para.sp.a1, a2=x->x_para.sp.a2;
+  t_float b1=x->x_para.sp.b1, b2=x->x_para.sp.b2;
   
-  filter_tilde_dsp_tick(&x->fp);
+  filter_tilde_dsp_sp_tick(&x->x_para.sp);
   for(i=0; i<n; i++)
   {
-    wn0 = *in++ + b1*wn1 + b2*wn2;
-    *out++ = a0*wn0 + a1*wn1 + a2*wn2;
+    wn0 = (t_float)(*in++) + b1*wn1 + b2*wn2;
+    *out++ = (t_sample)(a0*wn0 + a1*wn1 + a2*wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
@@ -648,8 +653,8 @@ static t_int *filter_tilde_perform_2o(t_int *w)
   if(IEM_DENORMAL(wn1))
     wn1 = 0.0f;
   
-  x->fp.wn1 = wn1;
-  x->fp.wn2 = wn2;
+  x->x_para.sp.wn1 = wn1;
+  x->x_para.sp.wn2 = wn2;
   return(w+5);
 }
 /*   yn0 = *out;
@@ -663,37 +668,37 @@ xn1 = xn0;
 *************************
 y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
 
-static t_int *filter_tilde_perf8_2o(t_int *w)
+static t_int *filter_tilde_sp_perf8_2o(t_int *w)
 {
-  t_float *in = (float *)(w[1]);
-  t_float *out = (float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   t_float wn[10];
-  t_float a0=x->fp.a0, a1=x->fp.a1, a2=x->fp.a2;
-  t_float b1=x->fp.b1, b2=x->fp.b2;
+  t_float a0=x->x_para.sp.a0, a1=x->x_para.sp.a1, a2=x->x_para.sp.a2;
+  t_float b1=x->x_para.sp.b1, b2=x->x_para.sp.b2;
   
-  filter_tilde_dsp_tick(&x->fp);
-  wn[0] = x->fp.wn2;
-  wn[1] = x->fp.wn1;
+  filter_tilde_dsp_sp_tick(&x->x_para.sp);
+  wn[0] = x->x_para.sp.wn2;
+  wn[1] = x->x_para.sp.wn1;
   for(i=0; i<n; i+=8, in+=8, out+=8)
   {
-    wn[2] = in[0] + b1*wn[1] + b2*wn[0];
-    out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0];
-    wn[3] = in[1] + b1*wn[2] + b2*wn[1];
-    out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1];
-    wn[4] = in[2] + b1*wn[3] + b2*wn[2];
-    out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2];
-    wn[5] = in[3] + b1*wn[4] + b2*wn[3];
-    out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3];
-    wn[6] = in[4] + b1*wn[5] + b2*wn[4];
-    out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4];
-    wn[7] = in[5] + b1*wn[6] + b2*wn[5];
-    out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5];
-    wn[8] = in[6] + b1*wn[7] + b2*wn[6];
-    out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6];
-    wn[9] = in[7] + b1*wn[8] + b2*wn[7];
-    out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7];
+    wn[2] = (t_float)(in[0]) + b1*wn[1] + b2*wn[0];
+    out[0] = (t_sample)(a0*wn[2] + a1*wn[1] + a2*wn[0]);
+    wn[3] = (t_float)(in[1]) + b1*wn[2] + b2*wn[1];
+    out[1] = (t_sample)(a0*wn[3] + a1*wn[2] + a2*wn[1]);
+    wn[4] = (t_float)(in[2]) + b1*wn[3] + b2*wn[2];
+    out[2] = (t_sample)(a0*wn[4] + a1*wn[3] + a2*wn[2]);
+    wn[5] = (t_float)(in[3]) + b1*wn[4] + b2*wn[3];
+    out[3] = (t_sample)(a0*wn[5] + a1*wn[4] + a2*wn[3]);
+    wn[6] = (t_float)(in[4]) + b1*wn[5] + b2*wn[4];
+    out[4] = (t_sample)(a0*wn[6] + a1*wn[5] + a2*wn[4]);
+    wn[7] = (t_float)(in[5]) + b1*wn[6] + b2*wn[5];
+    out[5] = (t_sample)(a0*wn[7] + a1*wn[6] + a2*wn[5]);
+    wn[8] = (t_float)(in[6]) + b1*wn[7] + b2*wn[6];
+    out[6] = (t_sample)(a0*wn[8] + a1*wn[7] + a2*wn[6]);
+    wn[9] = (t_float)(in[7]) + b1*wn[8] + b2*wn[7];
+    out[7] = (t_sample)(a0*wn[9] + a1*wn[8] + a2*wn[7]);
     wn[0] = wn[8];
     wn[1] = wn[9];
   }
@@ -703,91 +708,91 @@ static t_int *filter_tilde_perf8_2o(t_int *w)
   if(IEM_DENORMAL(wn[1]))
     wn[1] = 0.0f;
   
-  x->fp.wn1 = wn[1];
-  x->fp.wn2 = wn[0];
+  x->x_para.sp.wn1 = wn[1];
+  x->x_para.sp.wn2 = wn[0];
   return(w+5);
 }
 
-static t_int *filter_tilde_perform_1o(t_int *w)
+static t_int *filter_tilde_sp_perform_1o(t_int *w)
 {
-  t_float *in = (float *)(w[1]);
-  t_float *out = (float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
-  t_float wn0, wn1=x->fp.wn1;
-  t_float a0=x->fp.a0, a1=x->fp.a1;
-  t_float b1=x->fp.b1;
+  t_float wn0, wn1=x->x_para.sp.wn1;
+  t_float a0=x->x_para.sp.a0, a1=x->x_para.sp.a1;
+  t_float b1=x->x_para.sp.b1;
   
-  filter_tilde_dsp_tick(&x->fp);
+  filter_tilde_dsp_sp_tick(&x->x_para.sp);
   for(i=0; i<n; i++)
   {
-    wn0 = *in++ + b1*wn1;
-    *out++ = a0*wn0 + a1*wn1;
+    wn0 = (t_float)(*in++) + b1*wn1;
+    *out++ = (t_sample)(a0*wn0 + a1*wn1);
     wn1 = wn0;
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn1))
     wn1 = 0.0f;
   
-  x->fp.wn1 = wn1;
+  x->x_para.sp.wn1 = wn1;
   return(w+5);
 }
 
-static t_int *filter_tilde_perf8_1o(t_int *w)
+static t_int *filter_tilde_sp_perf8_1o(t_int *w)
 {
-  t_float *in = (float *)(w[1]);
-  t_float *out = (float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   t_float wn[9];
-  t_float a0=x->fp.a0, a1=x->fp.a1;
-  t_float b1=x->fp.b1;
+  t_float a0=x->x_para.sp.a0, a1=x->x_para.sp.a1;
+  t_float b1=x->x_para.sp.b1;
   
-  filter_tilde_dsp_tick(&x->fp);
-  wn[0] = x->fp.wn1;
+  filter_tilde_dsp_sp_tick(&x->x_para.sp);
+  wn[0] = x->x_para.sp.wn1;
   for(i=0; i<n; i+=8, in+=8, out+=8)
   {
-    wn[1] = in[0] + b1*wn[0];
-    out[0] = a0*wn[1] + a1*wn[0];
-    wn[2] = in[1] + b1*wn[1];
-    out[1] = a0*wn[2] + a1*wn[1];
-    wn[3] = in[2] + b1*wn[2];
-    out[2] = a0*wn[3] + a1*wn[2];
-    wn[4] = in[3] + b1*wn[3];
-    out[3] = a0*wn[4] + a1*wn[3];
-    wn[5] = in[4] + b1*wn[4];
-    out[4] = a0*wn[5] + a1*wn[4];
-    wn[6] = in[5] + b1*wn[5];
-    out[5] = a0*wn[6] + a1*wn[5];
-    wn[7] = in[6] + b1*wn[6];
-    out[6] = a0*wn[7] + a1*wn[6];
-    wn[8] = in[7] + b1*wn[7];
-    out[7] = a0*wn[8] + a1*wn[7];
+    wn[1] = (t_float)(in[0]) + b1*wn[0];
+    out[0] = (t_sample)(a0*wn[1] + a1*wn[0]);
+    wn[2] = (t_float)(in[1]) + b1*wn[1];
+    out[1] = (t_sample)(a0*wn[2] + a1*wn[1]);
+    wn[3] = (t_float)(in[2]) + b1*wn[2];
+    out[2] = (t_sample)(a0*wn[3] + a1*wn[2]);
+    wn[4] = (t_float)(in[3]) + b1*wn[3];
+    out[3] = (t_sample)(a0*wn[4] + a1*wn[3]);
+    wn[5] = (t_float)(in[4]) + b1*wn[4];
+    out[4] = (t_sample)(a0*wn[5] + a1*wn[4]);
+    wn[6] = (t_float)(in[5]) + b1*wn[5];
+    out[5] = (t_sample)(a0*wn[6] + a1*wn[5]);
+    wn[7] = (t_float)(in[6]) + b1*wn[6];
+    out[6] = (t_sample)(a0*wn[7] + a1*wn[6]);
+    wn[8] = (t_float)(in[7]) + b1*wn[7];
+    out[7] = (t_sample)(a0*wn[8] + a1*wn[7]);
     wn[0] = wn[8];
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn[0]))
     wn[0] = 0.0f;
   
-  x->fp.wn1 = wn[0];
+  x->x_para.sp.wn1 = wn[0];
   return(w+5);
 }
 
-static t_int *filter_tilde_dperform_2o(t_int *w)
+static t_int *filter_tilde_dp_perform_2o(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
-  double wn0, wn1=x->dp.wn1, wn2=x->dp.wn2;
-  double a0=x->dp.a0, a1=x->dp.a1, a2=x->dp.a2;
-  double b1=x->dp.b1, b2=x->dp.b2;
+  double wn0, wn1=x->x_para.dp.wn1, wn2=x->x_para.dp.wn2;
+  double a0=x->x_para.dp.a0, a1=x->x_para.dp.a1, a2=x->x_para.dp.a2;
+  double b1=x->x_para.dp.b1, b2=x->x_para.dp.b2;
   
-  filter_tilde_dsp_dtick(&x->dp);
+  filter_tilde_dsp_dp_tick(&x->x_para.dp);
   for(i=0; i<n; i++)
   {
     wn0 = (double)(*in++) + b1*wn1 + b2*wn2;
-    *out++ = (t_float)(a0*wn0 + a1*wn1 + a2*wn2);
+    *out++ = (t_sample)(a0*wn0 + a1*wn1 + a2*wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
@@ -797,8 +802,8 @@ static t_int *filter_tilde_dperform_2o(t_int *w)
   //  if(IEM_DENORMAL(wn1))
   //    wn1 = 0.0f;
   
-  x->dp.wn1 = wn1;
-  x->dp.wn2 = wn2;
+  x->x_para.dp.wn1 = wn1;
+  x->x_para.dp.wn2 = wn2;
   return(w+5);
 }
 /*   yn0 = *out;
@@ -812,37 +817,37 @@ xn1 = xn0;
 *************************
 y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
 
-static t_int *filter_tilde_dperf8_2o(t_int *w)
+static t_int *filter_tilde_dp_perf8_2o(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   double wn[10];
-  double a0=x->dp.a0, a1=x->dp.a1, a2=x->dp.a2;
-  double b1=x->dp.b1, b2=x->dp.b2;
+  double a0=x->x_para.dp.a0, a1=x->x_para.dp.a1, a2=x->x_para.dp.a2;
+  double b1=x->x_para.dp.b1, b2=x->x_para.dp.b2;
   
-  filter_tilde_dsp_dtick(&x->dp);
-  wn[0] = x->dp.wn2;
-  wn[1] = x->dp.wn1;
+  filter_tilde_dsp_dp_tick(&x->x_para.dp);
+  wn[0] = x->x_para.dp.wn2;
+  wn[1] = x->x_para.dp.wn1;
   for(i=0; i<n; i+=8, in+=8, out+=8)
   {
     wn[2] = (double)(in[0]) + b1*wn[1] + b2*wn[0];
-    out[0] = (t_float)(a0*wn[2] + a1*wn[1] + a2*wn[0]);
+    out[0] = (t_sample)(a0*wn[2] + a1*wn[1] + a2*wn[0]);
     wn[3] = (double)(in[1]) + b1*wn[2] + b2*wn[1];
-    out[1] = (t_float)(a0*wn[3] + a1*wn[2] + a2*wn[1]);
+    out[1] = (t_sample)(a0*wn[3] + a1*wn[2] + a2*wn[1]);
     wn[4] = (double)(in[2]) + b1*wn[3] + b2*wn[2];
-    out[2] = (t_float)(a0*wn[4] + a1*wn[3] + a2*wn[2]);
+    out[2] = (t_sample)(a0*wn[4] + a1*wn[3] + a2*wn[2]);
     wn[5] = (double)(in[3]) + b1*wn[4] + b2*wn[3];
-    out[3] = (t_float)(a0*wn[5] + a1*wn[4] + a2*wn[3]);
+    out[3] = (t_sample)(a0*wn[5] + a1*wn[4] + a2*wn[3]);
     wn[6] = (double)(in[4]) + b1*wn[5] + b2*wn[4];
-    out[4] = (t_float)(a0*wn[6] + a1*wn[5] + a2*wn[4]);
+    out[4] = (t_sample)(a0*wn[6] + a1*wn[5] + a2*wn[4]);
     wn[7] = (double)(in[5]) + b1*wn[6] + b2*wn[5];
-    out[5] = (t_float)(a0*wn[7] + a1*wn[6] + a2*wn[5]);
+    out[5] = (t_sample)(a0*wn[7] + a1*wn[6] + a2*wn[5]);
     wn[8] = (double)(in[6]) + b1*wn[7] + b2*wn[6];
-    out[6] = (t_float)(a0*wn[8] + a1*wn[7] + a2*wn[6]);
+    out[6] = (t_sample)(a0*wn[8] + a1*wn[7] + a2*wn[6]);
     wn[9] = (double)(in[7]) + b1*wn[8] + b2*wn[7];
-    out[7] = (t_float)(a0*wn[9] + a1*wn[8] + a2*wn[7]);
+    out[7] = (t_sample)(a0*wn[9] + a1*wn[8] + a2*wn[7]);
     wn[0] = wn[8];
     wn[1] = wn[9];
   }
@@ -882,211 +887,218 @@ static t_int *filter_tilde_dperf8_2o(t_int *w)
     
     */
   
-  x->dp.wn1 = wn[1];
-  x->dp.wn2 = wn[0];
+  x->x_para.dp.wn1 = wn[1];
+  x->x_para.dp.wn2 = wn[0];
   return(w+5);
 }
 
-static t_int *filter_tilde_dperform_1o(t_int *w)
+static t_int *filter_tilde_dp_perform_1o(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
-  double wn0, wn1=x->dp.wn1;
-  double a0=x->dp.a0, a1=x->dp.a1;
-  double b1=x->dp.b1;
+  double wn0, wn1=x->x_para.dp.wn1;
+  double a0=x->x_para.dp.a0, a1=x->x_para.dp.a1;
+  double b1=x->x_para.dp.b1;
   
-  filter_tilde_dsp_dtick(&x->dp);
+  filter_tilde_dsp_dp_tick(&x->x_para.dp);
   for(i=0; i<n; i++)
   {
     wn0 = (double)(*in++) + b1*wn1;
-    *out++ = (t_float)(a0*wn0 + a1*wn1);
+    *out++ = (t_sample)(a0*wn0 + a1*wn1);
     wn1 = wn0;
   }
   /* NAN protect */
   //  if(IEM_DENORMAL(wn1))
   //    wn1 = 0.0f;
   
-  x->dp.wn1 = wn1;
+  x->x_para.dp.wn1 = wn1;
   return(w+5);
 }
 
-static t_int *filter_tilde_dperf8_1o(t_int *w)
+static t_int *filter_tilde_dp_perf8_1o(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_filter_tilde *x = (t_filter_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   double wn[9];
-  double a0=x->dp.a0, a1=x->dp.a1;
-  double b1=x->dp.b1;
+  double a0=x->x_para.dp.a0, a1=x->x_para.dp.a1;
+  double b1=x->x_para.dp.b1;
   
-  filter_tilde_dsp_dtick(&x->dp);
-  wn[0] = x->dp.wn1;
+  filter_tilde_dsp_dp_tick(&x->x_para.dp);
+  wn[0] = x->x_para.dp.wn1;
   for(i=0; i<n; i+=8, in+=8, out+=8)
   {
     wn[1] = (double)(in[0]) + b1*wn[0];
-    out[0] = (t_float)(a0*wn[1] + a1*wn[0]);
+    out[0] = (t_sample)(a0*wn[1] + a1*wn[0]);
     wn[2] = (double)(in[1]) + b1*wn[1];
-    out[1] = (t_float)(a0*wn[2] + a1*wn[1]);
+    out[1] = (t_sample)(a0*wn[2] + a1*wn[1]);
     wn[3] = (double)(in[2]) + b1*wn[2];
-    out[2] = (t_float)(a0*wn[3] + a1*wn[2]);
+    out[2] = (t_sample)(a0*wn[3] + a1*wn[2]);
     wn[4] = (double)(in[3]) + b1*wn[3];
-    out[3] = (t_float)(a0*wn[4] + a1*wn[3]);
+    out[3] = (t_sample)(a0*wn[4] + a1*wn[3]);
     wn[5] = (double)(in[4]) + b1*wn[4];
-    out[4] = (t_float)(a0*wn[5] + a1*wn[4]);
+    out[4] = (t_sample)(a0*wn[5] + a1*wn[4]);
     wn[6] = (double)(in[5]) + b1*wn[5];
-    out[5] = (t_float)(a0*wn[6] + a1*wn[5]);
+    out[5] = (t_sample)(a0*wn[6] + a1*wn[5]);
     wn[7] = (double)(in[6]) + b1*wn[6];
-    out[6] = (t_float)(a0*wn[7] + a1*wn[6]);
+    out[6] = (t_sample)(a0*wn[7] + a1*wn[6]);
     wn[8] = (double)(in[7]) + b1*wn[7];
-    out[7] = (t_float)(a0*wn[8] + a1*wn[7]);
+    out[7] = (t_sample)(a0*wn[8] + a1*wn[7]);
     wn[0] = wn[8];
   }
   /* NAN protect */
   //  if(IEM_DENORMAL(wn[0]))
   //    wn[0] = 0.0f;
   
-  x->dp.wn1 = wn[0];
+  x->x_para.dp.wn1 = wn[0];
   return(w+5);
 }
 
-static void filter_tilde_ft4(t_filter_tilde *x, t_float t)
+static void filter_tilde_ft4(t_filter_tilde *x, t_floatarg t)
 {
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
-    double dt=(double)t;
-    int di = (int)((x->dp.ticks_per_interpol_time)*dt+0.49999);
+    double dt = (double)t;
+    int di = (int)((x->x_para.dp.ticks_per_interpol_time)*dt+0.49999);
     
-    x->dp.interpol_time = dt;
+    x->x_para.dp.interpol_time = dt;
     if(di <= 0)
     {
-      x->dp.ticks = 1;
-      x->dp.rcp_ticks = 1.0;
+      x->x_para.dp.ticks = 1;
+      x->x_para.dp.rcp_ticks = 1.0;
     }
     else
     {
-      x->dp.ticks = di;
-      x->dp.rcp_ticks = 1.0 / (double)di;
+      x->x_para.dp.ticks = di;
+      x->x_para.dp.rcp_ticks = 1.0 / (double)di;
     }
   }
   else
   {
-    int i = (int)((x->fp.ticks_per_interpol_time)*t+0.49999f);
+    t_float st = (t_float)t;
+    int i = (int)((x->x_para.sp.ticks_per_interpol_time)*st+0.49999f);
     
-    x->fp.interpol_time = t;
+    x->x_para.sp.interpol_time = st;
     if(i <= 0)
     {
-      x->fp.ticks = 1;
-      x->fp.rcp_ticks = 1.0;
+      x->x_para.sp.ticks = 1;
+      x->x_para.sp.rcp_ticks = 1.0f;
     }
     else
     {
-      x->fp.ticks = i;
-      x->fp.rcp_ticks = 1.0 / (t_float)i;
+      x->x_para.sp.ticks = i;
+      x->x_para.sp.rcp_ticks = 1.0f / (t_float)i;
     }
   }
 }
 
-static void filter_tilde_ft3(t_filter_tilde *x, t_float b)
+static void filter_tilde_ft3(t_filter_tilde *x, t_floatarg b)
 {
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
-    double db=(double)b;
+    double db = (double)b;
     
     if(db <= 0.0)
       db = 0.000001;
-    if(x->dp.filter_function_is_highpass)
+    if(x->x_para.dp.filter_function_is_highpass)
       db = 1.0 / db;
-    if(db != x->dp.cur_b)
+    if(db != x->x_para.dp.cur_b)
     {
-      x->dp.end_b = db;
-      x->dp.counter_b = x->dp.ticks;
-      x->dp.delta_b = exp(log(db/x->dp.cur_b)*x->dp.rcp_ticks);
-      x->dp.event_mask |= 4;/*set event_mask_bit 2 = 1*/
+      x->x_para.dp.end_b = db;
+      x->x_para.dp.counter_b = x->x_para.dp.ticks;
+      x->x_para.dp.delta_b = exp(log(db/x->x_para.dp.cur_b)*x->x_para.dp.rcp_ticks);
+      x->x_para.dp.event_mask |= 4;/*set event_mask_bit 2 = 1*/
     }
   }
   else
   {
-    if(b <= 0.0f)
-      b = 0.000001f;
-    if(x->fp.filter_function_is_highpass)
-      b = 1.0f / b;
-    if(b != x->fp.cur_b)
+    t_float sb = (t_float)b;
+    
+    if(sb <= 0.0f)
+      sb = 0.000001f;
+    if(x->x_para.sp.filter_function_is_highpass)
+      sb = 1.0f / sb;
+    if(sb != x->x_para.sp.cur_b)
     {
-      x->fp.end_b = b;
-      x->fp.counter_b = x->fp.ticks;
-      x->fp.delta_b = exp(log(b/x->fp.cur_b)*x->fp.rcp_ticks);
-      x->fp.event_mask |= 4;/*set event_mask_bit 2 = 1*/
+      x->x_para.sp.end_b = sb;
+      x->x_para.sp.counter_b = x->x_para.sp.ticks;
+      x->x_para.sp.delta_b = exp(log(sb/x->x_para.sp.cur_b)*x->x_para.sp.rcp_ticks);
+      x->x_para.sp.event_mask |= 4;/*set event_mask_bit 2 = 1*/
     }
   }
 }
 
-static void filter_tilde_ft2(t_filter_tilde *x, t_float a)
+static void filter_tilde_ft2(t_filter_tilde *x, t_floatarg a)
 {
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
-    double da=(double)a;
+    double da = (double)a;
     
     if(da <= 0.0)
       da = 0.000001;
-    if(x->dp.inlet3_is_Q1_or_damping0)
+    if(x->x_para.dp.inlet3_is_Q)
       da = 1.0 / da;
-    if(x->dp.filter_function_is_highpass)
-      da /= x->dp.cur_b;
-    if(da != x->dp.cur_a)
+    if(x->x_para.dp.filter_function_is_highpass)
+      da /= x->x_para.dp.cur_b;
+    if(da != x->x_para.dp.cur_a)
     {
-      x->dp.end_a = da;
-      x->dp.counter_a = x->dp.ticks;
-      x->dp.delta_a = exp(log(da/x->dp.cur_a)*x->dp.rcp_ticks);
-      x->dp.event_mask |= 2;/*set event_mask_bit 1 = 1*/
+      x->x_para.dp.end_a = da;
+      x->x_para.dp.counter_a = x->x_para.dp.ticks;
+      x->x_para.dp.delta_a = exp(log(da/x->x_para.dp.cur_a)*x->x_para.dp.rcp_ticks);
+      x->x_para.dp.event_mask |= 2;/*set event_mask_bit 1 = 1*/
     }
   }
   else
   {
-    if(a <= 0.0f)
-      a = 0.000001f;
-    if(x->fp.inlet3_is_Q1_or_damping0)
-      a = 1.0f / a;
-    if(x->fp.filter_function_is_highpass)
-      a /= x->fp.cur_b;
-    if(a != x->fp.cur_a)
+    t_float sa = (t_float)a;
+    
+    if(sa <= 0.0f)
+      sa = 0.000001f;
+    if(x->x_para.sp.inlet3_is_Q)
+      sa = 1.0f / sa;
+    if(x->x_para.sp.filter_function_is_highpass)
+      sa /= x->x_para.sp.cur_b;
+    if(sa != x->x_para.sp.cur_a)
     {
-      x->fp.end_a = a;
-      x->fp.counter_a = x->fp.ticks;
-      x->fp.delta_a = exp(log(a/x->fp.cur_a)*x->fp.rcp_ticks);
-      x->fp.event_mask |= 2;/*set event_mask_bit 1 = 1*/
+      x->x_para.sp.end_a = sa;
+      x->x_para.sp.counter_a = x->x_para.sp.ticks;
+      x->x_para.sp.delta_a = exp(log(sa/x->x_para.sp.cur_a)*x->x_para.sp.rcp_ticks);
+      x->x_para.sp.event_mask |= 2;/*set event_mask_bit 1 = 1*/
     }
   }
 }
 
-static void filter_tilde_ft1(t_filter_tilde *x, t_float f)
+static void filter_tilde_ft1(t_filter_tilde *x, t_floatarg f)
 {
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
-    double df=(double)f;
+    double df = (double)f;
     
     if(df <= 0.0)
       df = 0.000001;
-    if(df != x->dp.cur_f)
+    if(df != x->x_para.dp.cur_f)
     {
-      x->dp.end_f = df;
-      x->dp.counter_f = x->dp.ticks;
-      x->dp.delta_f = exp(log(df/x->dp.cur_f)*x->dp.rcp_ticks);
-      x->dp.event_mask |= 1;/*set event_mask_bit 0 = 1*/
+      x->x_para.dp.end_f = df;
+      x->x_para.dp.counter_f = x->x_para.dp.ticks;
+      x->x_para.dp.delta_f = exp(log(df/x->x_para.dp.cur_f)*x->x_para.dp.rcp_ticks);
+      x->x_para.dp.event_mask |= 1;/*set event_mask_bit 0 = 1*/
     }
   }
   else
   {
-    if(f <= 0.0f)
-      f = 0.000001f;
-    if(f != x->fp.cur_f)
+    t_float sf = (t_float)f;
+    
+    if(sf <= 0.0f)
+      sf = 0.000001f;
+    if(sf != x->x_para.sp.cur_f)
     {
-      x->fp.end_f = f;
-      x->fp.counter_f = x->fp.ticks;
-      x->fp.delta_f = exp(log(f/x->fp.cur_f)*x->fp.rcp_ticks);
-      x->fp.event_mask |= 1;/*set event_mask_bit 0 = 1*/
+      x->x_para.sp.end_f = sf;
+      x->x_para.sp.counter_f = x->x_para.sp.ticks;
+      x->x_para.sp.delta_f = exp(log(sf/x->x_para.sp.cur_f)*x->x_para.sp.rcp_ticks);
+      x->x_para.sp.event_mask |= 1;/*set event_mask_bit 0 = 1*/
     }
   }
 }
@@ -1094,113 +1106,131 @@ static void filter_tilde_ft1(t_filter_tilde *x, t_float f)
 static void filter_tilde_print(t_filter_tilde *x)
 {
   //  post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
-    x->x_at[0].a_w.w_float = (t_float)x->dp.b1;
-    x->x_at[1].a_w.w_float = (t_float)x->dp.b2;
-    x->x_at[2].a_w.w_float = (t_float)x->dp.a0;
-    x->x_at[3].a_w.w_float = (t_float)x->dp.a1;
-    x->x_at[4].a_w.w_float = (t_float)x->dp.a2;
+    x->x_at[0].a_w.w_float = (t_float)x->x_para.dp.b1;
+    x->x_at[1].a_w.w_float = (t_float)x->x_para.dp.b2;
+    x->x_at[2].a_w.w_float = (t_float)x->x_para.dp.a0;
+    x->x_at[3].a_w.w_float = (t_float)x->x_para.dp.a1;
+    x->x_at[4].a_w.w_float = (t_float)x->x_para.dp.a2;
   }
   else
   {
-    x->x_at[0].a_w.w_float = x->fp.b1;
-    x->x_at[1].a_w.w_float = x->fp.b2;
-    x->x_at[2].a_w.w_float = x->fp.a0;
-    x->x_at[3].a_w.w_float = x->fp.a1;
-    x->x_at[4].a_w.w_float = x->fp.a2;
+    x->x_at[0].a_w.w_float = x->x_para.sp.b1;
+    x->x_at[1].a_w.w_float = x->x_para.sp.b2;
+    x->x_at[2].a_w.w_float = x->x_para.sp.a0;
+    x->x_at[3].a_w.w_float = x->x_para.sp.a1;
+    x->x_at[4].a_w.w_float = x->x_para.sp.a2;
   }
   outlet_list(x->x_debug_outlet, &s_list, 5, x->x_at);
 }
 
+static void filter_tilde_set(t_filter_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+  if((argc >= 1) && IS_A_FLOAT(argv, 0))
+  {
+    if(x->x_precision_dp1_sp0)
+      x->x_para.dp.wn1 = (double)atom_getfloatarg(0, argc, argv);
+    else
+      x->x_para.sp.wn1 = (t_float)atom_getfloatarg(0, argc, argv);
+  }
+  if((argc >= 2) && IS_A_FLOAT(argv, 1) && (x->x_para.dp.filter_function_is_first_order == 0))
+  {
+    if(x->x_precision_dp1_sp0)
+      x->x_para.dp.wn2 = (double)atom_getfloatarg(1, argc, argv);
+    else
+      x->x_para.sp.wn2 = (t_float)atom_getfloatarg(1, argc, argv);
+  }
+}
+
 static void filter_tilde_dsp(t_filter_tilde *x, t_signal **sp)
 {
   int i, n=(int)sp[0]->s_n;
   
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
     double si, co, f;
     
-    x->dp.pi_over_sr = 3.14159265358979323846 / (double)(sp[0]->s_sr);
-    x->dp.ticks_per_interpol_time = 0.001 * (double)(sp[0]->s_sr) / (double)n;
-    i = (int)((x->dp.ticks_per_interpol_time)*(x->dp.interpol_time)+0.49999);
+    x->x_para.dp.pi_over_sr = 3.14159265358979323846 / (double)(sp[0]->s_sr);
+    x->x_para.dp.ticks_per_interpol_time = 0.001 * (double)(sp[0]->s_sr) / (double)n;
+    i = (int)((x->x_para.dp.ticks_per_interpol_time)*(x->x_para.dp.interpol_time)+0.49999);
     if(i <= 0)
     {
-      x->dp.ticks = 1;
-      x->dp.rcp_ticks = 1.0;
+      x->x_para.dp.ticks = 1;
+      x->x_para.dp.rcp_ticks = 1.0;
     }
     else
     {
-      x->dp.ticks = i;
-      x->dp.rcp_ticks = 1.0 / (double)i;
+      x->x_para.dp.ticks = i;
+      x->x_para.dp.rcp_ticks = 1.0 / (double)i;
     }
-    f = x->dp.cur_f * x->dp.pi_over_sr;
+    f = x->x_para.dp.cur_f * x->x_para.dp.pi_over_sr;
     if(f < 1.0e-20)
-      x->dp.cur_l = 1.0e20;
+      x->x_para.dp.cur_l = 1.0e20;
     else if(f > 1.57079632)
-      x->dp.cur_l = 0.0;
+      x->x_para.dp.cur_l = 0.0;
     else
     {
       si = sin(f);
       co = cos(f);
-      x->dp.cur_l = co/si;
+      x->x_para.dp.cur_l = co/si;
     }
-    if(x->dp.filter_function_is_first_order)
+    if(x->x_para.dp.filter_function_is_first_order)
     {
       if(n&7)
-        dsp_add(filter_tilde_dperform_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_dp_perform_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
       else
-        dsp_add(filter_tilde_dperf8_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_dp_perf8_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
     }
     else
     {
       if(n&7)
-        dsp_add(filter_tilde_dperform_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_dp_perform_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
       else
-        dsp_add(filter_tilde_dperf8_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_dp_perf8_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
     }
   }
   else
   {
     t_float si, co, f;
     
-    x->fp.pi_over_sr = 3.14159265358979323846f / (t_float)(sp[0]->s_sr);
-    x->fp.ticks_per_interpol_time = 0.001f * (t_float)(sp[0]->s_sr) / (t_float)n;
-    i = (int)((x->fp.ticks_per_interpol_time)*(x->fp.interpol_time)+0.49999f);
+    x->x_para.sp.pi_over_sr = 3.14159265358979323846f / (t_float)(sp[0]->s_sr);
+    x->x_para.sp.ticks_per_interpol_time = 0.001f * (t_float)(sp[0]->s_sr) / (t_float)n;
+    i = (int)((x->x_para.sp.ticks_per_interpol_time)*(x->x_para.sp.interpol_time)+0.49999f);
     if(i <= 0)
     {
-      x->fp.ticks = 1;
-      x->fp.rcp_ticks = 1.0f;
+      x->x_para.sp.ticks = 1;
+      x->x_para.sp.rcp_ticks = 1.0f;
     }
     else
     {
-      x->fp.ticks = i;
-      x->fp.rcp_ticks = 1.0f / (t_float)i;
+      x->x_para.sp.ticks = i;
+      x->x_para.sp.rcp_ticks = 1.0f / (t_float)i;
     }
-    f = x->fp.cur_f * x->fp.pi_over_sr;
+    f = x->x_para.sp.cur_f * x->x_para.sp.pi_over_sr;
     if(f < 1.0e-20f)
-      x->fp.cur_l = 1.0e20f;
+      x->x_para.sp.cur_l = 1.0e20f;
     else if(f > 1.57079632f)
-      x->fp.cur_l = 0.0f;
+      x->x_para.sp.cur_l = 0.0f;
     else
     {
       si = sin(f);
       co = cos(f);
-      x->fp.cur_l = co/si;
+      x->x_para.sp.cur_l = co/si;
     }
-    if(x->fp.filter_function_is_first_order)
+    if(x->x_para.sp.filter_function_is_first_order)
     {
       if(n&7)
-        dsp_add(filter_tilde_perform_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_sp_perform_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
       else
-        dsp_add(filter_tilde_perf8_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_sp_perf8_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
     }
     else
     {
       if(n&7)
-        dsp_add(filter_tilde_perform_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_sp_perform_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
       else
-        dsp_add(filter_tilde_perf8_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+        dsp_add(filter_tilde_sp_perf8_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
     }
   }
 }
@@ -1217,7 +1247,7 @@ static void *filter_tilde_new(t_symbol *s, int argc, t_atom *argv)
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft4"));
   outlet_new(&x->x_obj, &s_signal);
   x->x_debug_outlet = outlet_new(&x->x_obj, &s_list);
-  x->x_msi = 0.0f;
+  x->x_float_sig_in = 0.0f;
   
   x->x_at[0].a_type = A_FLOAT;
   x->x_at[1].a_type = A_FLOAT;
@@ -1225,51 +1255,51 @@ static void *filter_tilde_new(t_symbol *s, int argc, t_atom *argv)
   x->x_at[3].a_type = A_FLOAT;
   x->x_at[4].a_type = A_FLOAT;
   
-  x->dp.delta_f = 0.0;
-  x->dp.delta_a = 0.0;
-  x->dp.delta_b = 0.0;
-  x->dp.interpol_time = 0.0;
-  x->dp.wn1 = 0.0;
-  x->dp.wn2 = 0.0;
-  x->dp.a0 = 0.0;
-  x->dp.a1 = 0.0;
-  x->dp.a2 = 0.0;
-  x->dp.b1 = 0.0;
-  x->dp.b2 = 0.0;
-  x->dp.pi_over_sr = 3.14159265358979323846 / 44100.0;
-  x->dp.event_mask = 1;
-  x->dp.counter_f = 1;
-  x->dp.counter_a = 0;
-  x->dp.counter_b = 0;
-  x->dp.filter_function_is_first_order = 0;
+  x->x_para.dp.delta_f = 0.0;
+  x->x_para.dp.delta_a = 0.0;
+  x->x_para.dp.delta_b = 0.0;
+  x->x_para.dp.interpol_time = 0.0;
+  x->x_para.dp.wn1 = 0.0;
+  x->x_para.dp.wn2 = 0.0;
+  x->x_para.dp.a0 = 0.0;
+  x->x_para.dp.a1 = 0.0;
+  x->x_para.dp.a2 = 0.0;
+  x->x_para.dp.b1 = 0.0;
+  x->x_para.dp.b2 = 0.0;
+  x->x_para.dp.pi_over_sr = 3.14159265358979323846 / 44100.0;
+  x->x_para.dp.event_mask = 1;
+  x->x_para.dp.counter_f = 1;
+  x->x_para.dp.counter_a = 0;
+  x->x_para.dp.counter_b = 0;
+  x->x_para.dp.filter_function_is_first_order = 0;
   
-  x->fp.delta_f = 0.0f;
-  x->fp.delta_a = 0.0f;
-  x->fp.delta_b = 0.0f;
-  x->fp.interpol_time = 0.0f;
-  x->fp.wn1 = 0.0f;
-  x->fp.wn2 = 0.0f;
-  x->fp.a0 = 0.0f;
-  x->fp.a1 = 0.0f;
-  x->fp.a2 = 0.0f;
-  x->fp.b1 = 0.0f;
-  x->fp.b2 = 0.0f;
-  x->fp.pi_over_sr = 3.14159265358979323846f / 44100.0f;
-  x->fp.event_mask = 1;
-  x->fp.counter_f = 1;
-  x->fp.counter_a = 0;
-  x->fp.counter_b = 0;
-  x->fp.filter_function_is_first_order = 0;
+  x->x_para.sp.delta_f = 0.0f;
+  x->x_para.sp.delta_a = 0.0f;
+  x->x_para.sp.delta_b = 0.0f;
+  x->x_para.sp.interpol_time = 0.0f;
+  x->x_para.sp.wn1 = 0.0f;
+  x->x_para.sp.wn2 = 0.0f;
+  x->x_para.sp.a0 = 0.0f;
+  x->x_para.sp.a1 = 0.0f;
+  x->x_para.sp.a2 = 0.0f;
+  x->x_para.sp.b1 = 0.0f;
+  x->x_para.sp.b2 = 0.0f;
+  x->x_para.sp.pi_over_sr = 3.14159265358979323846f / 44100.0f;
+  x->x_para.sp.event_mask = 1;
+  x->x_para.sp.counter_f = 1;
+  x->x_para.sp.counter_a = 0;
+  x->x_para.sp.counter_b = 0;
+  x->x_para.sp.filter_function_is_first_order = 0;
   
   if((argc >= 1) && IS_A_SYMBOL(argv,0))
     filt_typ = atom_getsymbolarg(0, argc, argv);
   
   if(filt_typ->s_name[0] == 'd')
-    x->precision_d1_f0 = 1;
+    x->x_precision_dp1_sp0 = 1;
   else
-    x->precision_d1_f0 = 0;
+    x->x_precision_dp1_sp0 = 0;
   
-  if(x->precision_d1_f0)
+  if(x->x_precision_dp1_sp0)
   {
     double si, co, f=0.0, a=0.0, b=0.0, interpol=0.0;
     
@@ -1280,17 +1310,17 @@ static void *filter_tilde_new(t_symbol *s, int argc, t_atom *argv)
       b = (double)atom_getfloatarg(3, argc, argv);
       interpol = (double)atom_getfloatarg(4, argc, argv);
     }
-    x->dp.cur_f = f;
-    f *= x->dp.pi_over_sr;
+    x->x_para.dp.cur_f = f;
+    f *= x->x_para.dp.pi_over_sr;
     if(f < 1.0e-20)
-      x->dp.cur_l = 1.0e20;
+      x->x_para.dp.cur_l = 1.0e20;
     else if(f > 1.57079632)
-      x->dp.cur_l = 0.0;
+      x->x_para.dp.cur_l = 0.0;
     else
     {
       si = sin(f);
       co = cos(f);
-      x->dp.cur_l = co/si;
+      x->x_para.dp.cur_l = co/si;
     }
     if(a <= 0.0)
       a = 0.000001;
@@ -1299,128 +1329,128 @@ static void *filter_tilde_new(t_symbol *s, int argc, t_atom *argv)
     
     if(interpol <= 0.0)
       interpol = 0.0;
-    x->dp.interpol_time = interpol;
-    x->dp.ticks_per_interpol_time = 0.001 * 44100.0 / 64.0;
-    i = (int)((x->dp.ticks_per_interpol_time)*(x->dp.interpol_time)+0.49999);
+    x->x_para.dp.interpol_time = interpol;
+    x->x_para.dp.ticks_per_interpol_time = 0.001 * 44100.0 / 64.0;
+    i = (int)((x->x_para.dp.ticks_per_interpol_time)*(x->x_para.dp.interpol_time)+0.49999);
     if(i <= 0)
     {
-      x->dp.ticks = 1;
-      x->dp.rcp_ticks = 1.0;
+      x->x_para.dp.ticks = 1;
+      x->x_para.dp.rcp_ticks = 1.0;
     }
     else
     {
-      x->dp.ticks = i;
-      x->dp.rcp_ticks = 1.0 / (double)i;
+      x->x_para.dp.ticks = i;
+      x->x_para.dp.rcp_ticks = 1.0 / (double)i;
     }
     
-    x->dp.cur_b = b;
-    x->dp.cur_a = 1.0/a; /*"a" is default Q*/
-    x->dp.inlet3_is_Q1_or_damping0 = 1;
-    x->dp.filter_function_is_highpass = 0;
-    x->dp.calc = filter_tilde_snafu;
+    x->x_para.dp.cur_b = b;
+    x->x_para.dp.cur_a = 1.0/a; /*"a" is default Q*/
+    x->x_para.dp.inlet3_is_Q = 1;
+    x->x_para.dp.filter_function_is_highpass = 0;
+    x->x_para.dp.calc = filter_tilde_dp_dummy;
     
     if(filt_typ->s_name)
     {
       if(filt_typ == gensym("dap1"))
       {
-        x->dp.calc = filter_tilde_dap1;
-        x->dp.a1 = 1.0;
-        x->dp.filter_function_is_first_order = 1;
+        x->x_para.dp.calc = filter_tilde_dp_ap1;
+        x->x_para.dp.a1 = 1.0;
+        x->x_para.dp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("dap2"))
       {
-        x->dp.calc = filter_tilde_dap2;
-        x->dp.a2 = 1.0;
+        x->x_para.dp.calc = filter_tilde_dp_ap2;
+        x->x_para.dp.a2 = 1.0;
       }
       else if(filt_typ == gensym("dap1c"))
       {
-        x->dp.calc = filter_tilde_dap1;
-        x->dp.a1 = 1.0;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was damping*/
-        x->dp.filter_function_is_first_order = 1;
+        x->x_para.dp.calc = filter_tilde_dp_ap1;
+        x->x_para.dp.a1 = 1.0;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was damping*/
+        x->x_para.dp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("dap2c"))
       {
-        x->dp.calc = filter_tilde_dap2;
-        x->dp.a2 = 1.0;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was damping*/
+        x->x_para.dp.calc = filter_tilde_dp_ap2;
+        x->x_para.dp.a2 = 1.0;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was damping*/
       }
       else if(filt_typ == gensym("dbpq2"))
       {
-        x->dp.calc = filter_tilde_dbp2;
+        x->x_para.dp.calc = filter_tilde_dp_bp2;
       }
       else if(filt_typ == gensym("drbpq2"))
       {
-        x->dp.calc = filter_tilde_drp2;
+        x->x_para.dp.calc = filter_tilde_dp_rp2;
       }
       else if(filt_typ == gensym("dbsq2"))
       {
-        x->dp.calc = filter_tilde_dbs2;
+        x->x_para.dp.calc = filter_tilde_dp_bs2;
       }
       else if(filt_typ == gensym("dbpw2"))
       {
-        x->dp.calc = filter_tilde_dbpw2;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was bw*/
+        x->x_para.dp.calc = filter_tilde_dp_bpw2;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was bw*/
       }
       else if(filt_typ == gensym("drbpw2"))
       {
-        x->dp.calc = filter_tilde_drpw2;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was bw*/
+        x->x_para.dp.calc = filter_tilde_dp_rpw2;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was bw*/
       }
       else if(filt_typ == gensym("dbsw2"))
       {
-        x->dp.calc = filter_tilde_dbsw2;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was bw*/
+        x->x_para.dp.calc = filter_tilde_dp_bsw2;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was bw*/
       }
       else if(filt_typ == gensym("dhp1"))
       {
-        x->dp.calc = filter_tilde_dhp1;
-        x->dp.filter_function_is_first_order = 1;
+        x->x_para.dp.calc = filter_tilde_dp_hp1;
+        x->x_para.dp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("dhp2"))
       {
-        x->dp.calc = filter_tilde_dhp2;
+        x->x_para.dp.calc = filter_tilde_dp_hp2;
       }
       else if(filt_typ == gensym("dlp1"))
       {
-        x->dp.calc = filter_tilde_dlp1;
-        x->dp.filter_function_is_first_order = 1;
+        x->x_para.dp.calc = filter_tilde_dp_lp1;
+        x->x_para.dp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("dlp2"))
       {
-        x->dp.calc = filter_tilde_dlp2;
+        x->x_para.dp.calc = filter_tilde_dp_lp2;
       }
       else if(filt_typ == gensym("dhp1c"))
       {
-        x->dp.calc = filter_tilde_dhp1;
-        x->dp.cur_a = 1.0 / a;
-        x->dp.filter_function_is_first_order = 1;
+        x->x_para.dp.calc = filter_tilde_dp_hp1;
+        x->x_para.dp.cur_a = 1.0 / a;
+        x->x_para.dp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("dhp2c"))
       {
-        x->dp.calc = filter_tilde_dhp2;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a / b;
-        x->dp.cur_b = 1.0 / b;
-        x->dp.filter_function_is_highpass = 1;
+        x->x_para.dp.calc = filter_tilde_dp_hp2;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a / b;
+        x->x_para.dp.cur_b = 1.0 / b;
+        x->x_para.dp.filter_function_is_highpass = 1;
       }
       else if(filt_typ == gensym("dlp1c"))
       {
-        x->dp.calc = filter_tilde_dlp1;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was damping*/
-        x->dp.filter_function_is_first_order = 1;
+        x->x_para.dp.calc = filter_tilde_dp_lp1;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was damping*/
+        x->x_para.dp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("dlp2c"))
       {
-        x->dp.calc = filter_tilde_dlp2;
-        x->dp.inlet3_is_Q1_or_damping0 = 0;
-        x->dp.cur_a = a; /*"a" was damping*/
+        x->x_para.dp.calc = filter_tilde_dp_lp2;
+        x->x_para.dp.inlet3_is_Q = 0;
+        x->x_para.dp.cur_a = a; /*"a" was damping*/
       }
       else
       {
@@ -1436,9 +1466,9 @@ dap1, dap2, dap1c, dap2c, \
 dbpq2, drbpq2, dbsq2, \
 dbpw2, drbpw2, dbsw2 !");
       }
-      x->dp.end_f = x->dp.cur_f;
-      x->dp.end_a = x->dp.cur_a;
-      x->dp.end_b = x->dp.cur_b;
+      x->x_para.dp.end_f = x->x_para.dp.cur_f;
+      x->x_para.dp.end_a = x->x_para.dp.cur_a;
+      x->x_para.dp.end_b = x->x_para.dp.cur_b;
     }
   }
   else
@@ -1452,17 +1482,17 @@ dbpw2, drbpw2, dbsw2 !");
       b = (t_float)atom_getfloatarg(3, argc, argv);
       interpol = (t_float)atom_getfloatarg(4, argc, argv);
     }
-    x->fp.cur_f = f;
-    f *= x->fp.pi_over_sr;
+    x->x_para.sp.cur_f = f;
+    f *= x->x_para.sp.pi_over_sr;
     if(f < 1.0e-20f)
-      x->fp.cur_l = 1.0e20f;
+      x->x_para.sp.cur_l = 1.0e20f;
     else if(f > 1.57079632f)
-      x->fp.cur_l = 0.0f;
+      x->x_para.sp.cur_l = 0.0f;
     else
     {
       si = sin(f);
       co = cos(f);
-      x->fp.cur_l = co/si;
+      x->x_para.sp.cur_l = co/si;
     }
     if(a <= 0.0f)
       a = 0.000001f;
@@ -1471,128 +1501,128 @@ dbpw2, drbpw2, dbsw2 !");
     
     if(interpol <= 0.0f)
       interpol = 0.0f;
-    x->fp.interpol_time = interpol;
-    x->fp.ticks_per_interpol_time = 0.001f * 44100.0f / 64.0f;
-    i = (int)((x->fp.ticks_per_interpol_time)*(x->fp.interpol_time)+0.49999f);
+    x->x_para.sp.interpol_time = interpol;
+    x->x_para.sp.ticks_per_interpol_time = 0.001f * 44100.0f / 64.0f;
+    i = (int)((x->x_para.sp.ticks_per_interpol_time)*(x->x_para.sp.interpol_time)+0.49999f);
     if(i <= 0)
     {
-      x->fp.ticks = 1;
-      x->fp.rcp_ticks = 1.0f;
+      x->x_para.sp.ticks = 1;
+      x->x_para.sp.rcp_ticks = 1.0f;
     }
     else
     {
-      x->fp.ticks = i;
-      x->fp.rcp_ticks = 1.0f / (t_float)i;
+      x->x_para.sp.ticks = i;
+      x->x_para.sp.rcp_ticks = 1.0f / (t_float)i;
     }
     
-    x->fp.cur_b = b;
-    x->fp.cur_a = 1.0f/a; /*"a" is default Q*/
-    x->fp.inlet3_is_Q1_or_damping0 = 1;
-    x->fp.filter_function_is_highpass = 0;
-    x->fp.calc = filter_tilde_snafu;
+    x->x_para.sp.cur_b = b;
+    x->x_para.sp.cur_a = 1.0f/a; /*"a" is default Q*/
+    x->x_para.sp.inlet3_is_Q = 1;
+    x->x_para.sp.filter_function_is_highpass = 0;
+    x->x_para.sp.calc = filter_tilde_sp_dummy;
     
     if(filt_typ->s_name)
     {
       if(filt_typ == gensym("ap1"))
       {
-        x->fp.calc = filter_tilde_ap1;
-        x->fp.a1 = 1.0f;
-        x->fp.filter_function_is_first_order = 1;
+        x->x_para.sp.calc = filter_tilde_sp_ap1;
+        x->x_para.sp.a1 = 1.0f;
+        x->x_para.sp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("ap2"))
       {
-        x->fp.calc = filter_tilde_ap2;
-       x->fp.a2 = 1.0f;
+        x->x_para.sp.calc = filter_tilde_sp_ap2;
+        x->x_para.sp.a2 = 1.0f;
       }
       else if(filt_typ == gensym("ap1c"))
       {
-        x->fp.calc = filter_tilde_ap1;
-        x->fp.a1 = 1.0f;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was damping*/
-        x->fp.filter_function_is_first_order = 1;
+        x->x_para.sp.calc = filter_tilde_sp_ap1;
+        x->x_para.sp.a1 = 1.0f;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was damping*/
+        x->x_para.sp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("ap2c"))
       {
-        x->fp.calc = filter_tilde_ap2;
-        x->fp.a2 = 1.0f;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was damping*/
+        x->x_para.sp.calc = filter_tilde_sp_ap2;
+        x->x_para.sp.a2 = 1.0f;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was damping*/
       }
       else if(filt_typ == gensym("bpq2"))
       {
-        x->fp.calc = filter_tilde_bp2;
+        x->x_para.sp.calc = filter_tilde_sp_bp2;
       }
       else if(filt_typ == gensym("rbpq2"))
       {
-        x->fp.calc = filter_tilde_rp2;
+        x->x_para.sp.calc = filter_tilde_sp_rp2;
       }
       else if(filt_typ == gensym("bsq2"))
       {
-        x->fp.calc = filter_tilde_bs2;
+        x->x_para.sp.calc = filter_tilde_sp_bs2;
       }
       else if(filt_typ == gensym("bpw2"))
       {
-        x->fp.calc = filter_tilde_bpw2;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was bw*/
+        x->x_para.sp.calc = filter_tilde_sp_bpw2;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was bw*/
       }
       else if(filt_typ == gensym("rbpw2"))
       {
-        x->fp.calc = filter_tilde_rpw2;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was bw*/
+        x->x_para.sp.calc = filter_tilde_sp_rpw2;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was bw*/
       }
       else if(filt_typ == gensym("bsw2"))
       {
-        x->fp.calc = filter_tilde_bsw2;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was bw*/
+        x->x_para.sp.calc = filter_tilde_sp_bsw2;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was bw*/
       }
       else if(filt_typ == gensym("hp1"))
       {
-        x->fp.calc = filter_tilde_hp1;
-        x->fp.filter_function_is_first_order = 1;
+        x->x_para.sp.calc = filter_tilde_sp_hp1;
+        x->x_para.sp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("hp2"))
       {
-        x->fp.calc = filter_tilde_hp2;
+        x->x_para.sp.calc = filter_tilde_sp_hp2;
       }
       else if(filt_typ == gensym("lp1"))
       {
-        x->fp.calc = filter_tilde_lp1;
-        x->fp.filter_function_is_first_order = 1;
+        x->x_para.sp.calc = filter_tilde_sp_lp1;
+        x->x_para.sp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("lp2"))
       {
-        x->fp.calc = filter_tilde_lp2;
+        x->x_para.sp.calc = filter_tilde_sp_lp2;
       }
       else if(filt_typ == gensym("hp1c"))
       {
-        x->fp.calc = filter_tilde_hp1;
-        x->fp.cur_a = 1.0f / a;
-        x->fp.filter_function_is_first_order = 1;
+        x->x_para.sp.calc = filter_tilde_sp_hp1;
+        x->x_para.sp.cur_a = 1.0f / a;
+        x->x_para.sp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("hp2c"))
       {
-        x->fp.calc = filter_tilde_hp2;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a / b;
-        x->fp.cur_b = 1.0f / b;
-        x->fp.filter_function_is_highpass = 1;
+        x->x_para.sp.calc = filter_tilde_sp_hp2;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a / b;
+        x->x_para.sp.cur_b = 1.0f / b;
+        x->x_para.sp.filter_function_is_highpass = 1;
       }
       else if(filt_typ == gensym("lp1c"))
       {
-        x->fp.calc = filter_tilde_lp1;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was damping*/
-        x->fp.filter_function_is_first_order = 1;
+        x->x_para.sp.calc = filter_tilde_sp_lp1;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was damping*/
+        x->x_para.sp.filter_function_is_first_order = 1;
       }
       else if(filt_typ == gensym("lp2c"))
       {
-        x->fp.calc = filter_tilde_lp2;
-        x->fp.inlet3_is_Q1_or_damping0 = 0;
-        x->fp.cur_a = a; /*"a" was damping*/
+        x->x_para.sp.calc = filter_tilde_sp_lp2;
+        x->x_para.sp.inlet3_is_Q = 0;
+        x->x_para.sp.cur_a = a; /*"a" was damping*/
       }
       else
       {
@@ -1608,9 +1638,9 @@ dap1, dap2, dap1c, dap2c, \
 dbpq2, drbpq2, dbsq2, \
 dbpw2, drbpw2, dbsw2 !");
       }
-      x->fp.end_f = x->fp.cur_f;
-      x->fp.end_a = x->fp.cur_a;
-      x->fp.end_b = x->fp.cur_b;
+      x->x_para.sp.end_f = x->x_para.sp.cur_f;
+      x->x_para.sp.end_a = x->x_para.sp.cur_a;
+      x->x_para.sp.end_b = x->x_para.sp.cur_b;
     }
   }
   return (x);
@@ -1620,11 +1650,12 @@ void filter_tilde_setup(void)
 {
   filter_tilde_class = class_new(gensym("filter~"), (t_newmethod)filter_tilde_new,
         0, sizeof(t_filter_tilde), 0, A_GIMME, 0);
-  CLASS_MAINSIGNALIN(filter_tilde_class, t_filter_tilde, x_msi);
+  CLASS_MAINSIGNALIN(filter_tilde_class, t_filter_tilde, x_float_sig_in);
   class_addmethod(filter_tilde_class, (t_method)filter_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(filter_tilde_class, (t_method)filter_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(filter_tilde_class, (t_method)filter_tilde_ft2, gensym("ft2"), A_FLOAT, 0);
   class_addmethod(filter_tilde_class, (t_method)filter_tilde_ft3, gensym("ft3"), A_FLOAT, 0);
   class_addmethod(filter_tilde_class, (t_method)filter_tilde_ft4, gensym("ft4"), A_FLOAT, 0);
+  class_addmethod(filter_tilde_class, (t_method)filter_tilde_set, gensym("set"), A_GIMME, 0);
   class_addmethod(filter_tilde_class, (t_method)filter_tilde_print, gensym("print"), 0);
 }
diff --git a/externals/iemlib/iemlib1/src/for++.c b/externals/iemlib/iemlib1/src/for++.c
index 76daecc24..5c3bf189c 100644
--- a/externals/iemlib/iemlib1/src/for++.c
+++ b/externals/iemlib/iemlib1/src/for++.c
@@ -1,88 +1,86 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
 
 
 #include "m_pd.h"
 #include "iemlib.h"
 
-/* ----------------------------- for++ -------------------------------- */
-/* -- an internal timed counter (start-, stop-number and metro-time) -- */
+/* ------------------------------------ for++ -------------------------------------- */
+/* -- an optional timed counter (begin number, end number, metro time, increment) -- */
 
 typedef struct _forpp
 {
   t_object  x_obj;
-  int       x_beg;
-  int       x_end;
-  t_float   x_delay;
-  int       x_cur;
-  int       x_incr;
-  void      *x_out_end;
-  void      *x_clock;
-  void      *x_clock2;
+  double    x_beg;
+  double    x_end;
+  double    x_delay;
+  double    x_cur;
+  double    x_incr;
+  t_outlet  *x_out_counter;
+  t_outlet  *x_out_end;
+  t_clock   *x_clock_incr;
+  t_clock   *x_clock_end;
 } t_forpp;
 
 static t_class *forpp_class;
 
-static void forpp_tick2(t_forpp *x)
+static void forpp_tick_end(t_forpp *x)
 {
   outlet_bang(x->x_out_end);
-  clock_unset(x->x_clock2);
+  clock_unset(x->x_clock_end);
 }
 
-static void forpp_tick(t_forpp *x)
+static void forpp_tick_incr(t_forpp *x)
 {
-  outlet_float(x->x_obj.ob_outlet, x->x_cur);
+  int stop_it=1;
+  
+  outlet_float(x->x_out_counter, (t_float)x->x_cur);
   x->x_cur += x->x_incr;
   if(x->x_incr > 0)
   {
     if(x->x_cur <= x->x_end)
-      clock_delay(x->x_clock, x->x_delay);
-    else
-    {
-      clock_unset(x->x_clock);
-      clock_delay(x->x_clock2, x->x_delay);
-    }
+      stop_it = 0;
   }
   else
   {
     if(x->x_cur >= x->x_end)
-      clock_delay(x->x_clock, x->x_delay);
-    else
-    {
-      clock_unset(x->x_clock);
-      clock_delay(x->x_clock2, x->x_delay);
-    }
+      stop_it = 0;
   }
+  
+  if(stop_it)
+  {
+    clock_unset(x->x_clock_incr);
+    clock_delay(x->x_clock_end, x->x_delay);
+  }
+  else
+    clock_delay(x->x_clock_incr, x->x_delay);
 }
 
 static void forpp_bang(t_forpp *x)
 {
-  x->x_cur = x->x_beg;
-  outlet_float(x->x_obj.ob_outlet, x->x_cur);
-  x->x_cur += x->x_incr;
-  if(x->x_incr > 0)
+  if(x->x_delay > 0.0)
   {
-    if(x->x_cur <= x->x_end)
-      clock_delay(x->x_clock, x->x_delay);
-    else
-    {
-      clock_unset(x->x_clock);
-      clock_delay(x->x_clock2, x->x_delay);
-    }
+    x->x_cur = x->x_beg;
+    forpp_tick_incr(x);
   }
   else
   {
-    if(x->x_cur >= x->x_end)
-      clock_delay(x->x_clock, x->x_delay);
+    double cur=x->x_beg, end=x->x_end, incr=x->x_incr;
+    
+    if(x->x_end < x->x_beg)
+    {
+      for(; cur >= end; cur += incr)
+        outlet_float(x->x_out_counter, (t_float)cur);
+    }
     else
     {
-      clock_unset(x->x_clock);
-      clock_delay(x->x_clock2, x->x_delay);
+      for(; cur <= end; cur += incr)
+        outlet_float(x->x_out_counter, (t_float)cur);
     }
+    outlet_bang(x->x_out_end);
   }
-  
 }
 
 static void forpp_start(t_forpp *x)
@@ -92,90 +90,99 @@ static void forpp_start(t_forpp *x)
 
 static void forpp_stop(t_forpp *x)
 {
-  if(x->x_incr > 0)
-    x->x_cur = x->x_end + 1;
-  else
-    x->x_cur = x->x_end - 1;
-  clock_unset(x->x_clock);
-  clock_unset(x->x_clock2);
+  x->x_cur = x->x_end + x->x_incr;
+  clock_unset(x->x_clock_incr);
+  clock_unset(x->x_clock_end);
 }
 
-static void forpp_float(t_forpp *x, t_floatarg beg)
+static void forpp_ft3(t_forpp *x, t_floatarg incr)
 {
-  x->x_beg = (int)beg;
   if(x->x_end < x->x_beg)
-    x->x_incr = -1;
+  {
+    if(incr > 0.0)
+      incr = -incr;
+  }
   else
-    x->x_incr = 1;
+  {
+    if(incr < 0.0)
+      incr = -incr;
+  }
+  x->x_incr = (double)incr;
+}
+
+static void forpp_ft2(t_forpp *x, t_floatarg delay)
+{
+  if(delay < 0.0)
+    delay = 0.0;
+  x->x_delay = (double)delay;
 }
 
 static void forpp_ft1(t_forpp *x, t_floatarg end)
 {
-  x->x_end = (int)end;
-  if(x->x_end < x->x_beg)
-    x->x_incr = -1;
-  else
-    x->x_incr = 1;
+  x->x_end = (double)end;
+  forpp_ft3(x, (t_floatarg)x->x_incr);
 }
 
-static void forpp_ft2(t_forpp *x, t_floatarg delay)
+static void forpp_float(t_forpp *x, t_floatarg beg)
 {
-  if(delay < 0.0)
-    delay = 0.0;
-  x->x_delay = delay;
+  x->x_beg = (double)beg;
+  forpp_ft3(x, (t_floatarg)x->x_incr);
 }
 
 static void forpp_list(t_forpp *x, t_symbol *s, int argc, t_atom *argv)
 {
-  if(argc == 2)
-  {
-    forpp_float(x, atom_getfloatarg(0, argc, argv));
+  if((argc >= 4) && IS_A_FLOAT(argv, 3))
+    forpp_ft3(x, atom_getfloatarg(3, argc, argv));
+  if((argc >= 3) && IS_A_FLOAT(argv, 2))
+    forpp_ft2(x, atom_getfloatarg(2, argc, argv));
+  if((argc >= 2) && IS_A_FLOAT(argv, 1))
     forpp_ft1(x, atom_getfloatarg(1, argc, argv));
-  }
-  else if(argc == 3)
-  {
+  if((argc >= 1) && IS_A_FLOAT(argv, 0))
     forpp_float(x, atom_getfloatarg(0, argc, argv));
-    forpp_ft1(x, atom_getfloatarg(1, argc, argv));
-    forpp_ft2(x, atom_getfloatarg(2, argc, argv));
-  }
 }
 
-static void *forpp_new(t_floatarg beg, t_floatarg end, t_floatarg delay)
+static void *forpp_new(t_symbol *s, int argc, t_atom *argv)
 {
   t_forpp *x = (t_forpp *)pd_new(forpp_class);
+  t_float fbeg=0.0, fend=0.0, fdelay=0.0, fincr=1.0; // default
+  
+  if((argc >= 1) && IS_A_FLOAT(argv, 0))
+    fbeg = (t_float)atom_getfloatarg(0, argc, argv);
+  if((argc >= 2) && IS_A_FLOAT(argv, 1))
+    fend = (t_float)atom_getfloatarg(1, argc, argv);
+  if((argc >= 3) && IS_A_FLOAT(argv, 2))
+    fdelay = (t_float)atom_getfloatarg(2, argc, argv);
+  if((argc >= 4) && IS_A_FLOAT(argv, 3))
+    fincr = (t_float)atom_getfloatarg(3, argc, argv);
   
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
-  outlet_new(&x->x_obj, &s_float);
+  inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft3"));
+  x->x_out_counter = outlet_new(&x->x_obj, &s_float);
   x->x_out_end = outlet_new(&x->x_obj, &s_bang);
-  x->x_clock = clock_new(x, (t_method)forpp_tick);
-  x->x_clock2 = clock_new(x, (t_method)forpp_tick2);
-  x->x_beg = (int)beg;
-  x->x_end = (int)end;
-  if(x->x_end < x->x_beg)
-    x->x_incr = -1;
-  else
-    x->x_incr = 1;
-  if(delay < 0.0)
-    delay = 0.0;
-  x->x_delay = delay;
+  x->x_clock_incr = clock_new(x, (t_method)forpp_tick_incr);
+  x->x_clock_end = clock_new(x, (t_method)forpp_tick_end);
+  
+  x->x_beg = (double)fbeg;
+  x->x_end = (double)fend;
+  forpp_ft3(x, (t_floatarg)fincr);
+  forpp_ft2(x, (t_floatarg)fdelay);
   x->x_cur = x->x_beg;
   return(x);
 }
 
 static void forpp_ff(t_forpp *x)
 {
-  clock_free(x->x_clock);
-  clock_free(x->x_clock2);
+  clock_free(x->x_clock_incr);
+  clock_free(x->x_clock_end);
 }
 
 void forpp_setup(void)
 {
   forpp_class = class_new(gensym("for++"), (t_newmethod)forpp_new,
     (t_method)forpp_ff, sizeof(t_forpp),
-    0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-  class_addcreator((t_newmethod)forpp_new, gensym("for_pp"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-
+    0, A_GIMME, 0);
+  class_addcreator((t_newmethod)forpp_new, gensym("for_pp"), A_GIMME, 0);
   class_addbang(forpp_class, forpp_bang);
   class_addfloat(forpp_class, forpp_float);
   class_addlist(forpp_class, forpp_list);
@@ -183,5 +190,10 @@ void forpp_setup(void)
   class_addmethod(forpp_class, (t_method)forpp_stop, gensym("stop"), 0);
   class_addmethod(forpp_class, (t_method)forpp_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(forpp_class, (t_method)forpp_ft2, gensym("ft2"), A_FLOAT, 0);
-//  class_sethelpsymbol(forpp_class, gensym("iemhelp/help-for++"));
+  class_addmethod(forpp_class, (t_method)forpp_ft3, gensym("ft3"), A_FLOAT, 0);
+}
+
+void setup_for0x2b0x2b(void)
+{
+    forpp_setup();
 }
diff --git a/externals/iemlib/iemlib1/src/hml_shelf~.c b/externals/iemlib/iemlib1/src/hml_shelf~.c
index f2ec44254..cad58b0a7 100644
--- a/externals/iemlib/iemlib1/src/hml_shelf~.c
+++ b/externals/iemlib/iemlib1/src/hml_shelf~.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
 
 #include "m_pd.h"
 #include "iemlib.h"
@@ -47,7 +47,7 @@ typedef struct _hml_shelf_tilde
   int       event_mask;
   void      *x_debug_outlet;
   t_atom    x_at[5];
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_hml_shelf_tilde;
 
 static t_class *hml_shelf_tilde_class;
@@ -425,6 +425,15 @@ static void hml_shelf_tilde_ft1(t_hml_shelf_tilde *x, t_floatarg ll)
   }
 }
 
+static void hml_shelf_tilde_set(t_hml_shelf_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+  if((argc >= 2) && IS_A_FLOAT(argv, 1) && IS_A_FLOAT(argv, 0))
+  {
+    x->wn1 = (t_float)atom_getfloatarg(0, argc, argv);
+    x->wn2 = (t_float)atom_getfloatarg(1, argc, argv);
+  }
+}
+
 static void hml_shelf_tilde_print(t_hml_shelf_tilde *x)
 {
   //  post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
@@ -467,7 +476,7 @@ static void *hml_shelf_tilde_new(t_symbol *s, int argc, t_atom *argv)
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft6"));
   outlet_new(&x->x_obj, &s_signal);
   x->x_debug_outlet = outlet_new(&x->x_obj, &s_list);
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0f;
   
   x->x_at[0].a_type = A_FLOAT;
   x->x_at[1].a_type = A_FLOAT;
@@ -535,7 +544,7 @@ void hml_shelf_tilde_setup(void)
 {
   hml_shelf_tilde_class = class_new(gensym("hml_shelf~"), (t_newmethod)hml_shelf_tilde_new,
     0, sizeof(t_hml_shelf_tilde), 0, A_GIMME, 0);
-  CLASS_MAINSIGNALIN(hml_shelf_tilde_class, t_hml_shelf_tilde, x_msi);
+  CLASS_MAINSIGNALIN(hml_shelf_tilde_class, t_hml_shelf_tilde, x_float_sig_in);
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_ft2, gensym("ft2"), A_FLOAT, 0);
@@ -543,6 +552,6 @@ void hml_shelf_tilde_setup(void)
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_ft4, gensym("ft4"), A_FLOAT, 0);
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_ft5, gensym("ft5"), A_FLOAT, 0);
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_ft6, gensym("ft6"), A_FLOAT, 0);
+  class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_set, gensym("set"), A_GIMME, 0);
   class_addmethod(hml_shelf_tilde_class, (t_method)hml_shelf_tilde_print, gensym("print"), 0);
-//  class_sethelpsymbol(hml_shelf_tilde_class, gensym("iemhelp/help-hml_shelf~"));
 }
diff --git a/externals/iemlib/iemlib1/src/iem_cot4~.c b/externals/iemlib/iemlib1/src/iem_cot4~.c
index c4e5dc75a..70de93fe5 100644
--- a/externals/iemlib/iemlib1/src/iem_cot4~.c
+++ b/externals/iemlib/iemlib1/src/iem_cot4~.c
@@ -19,7 +19,7 @@ typedef struct _iem_cot4_tilde
 {
   t_object  x_obj;
   t_float   x_sr;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_iem_cot4_tilde;
 
 static t_int *iem_cot4_tilde_perform(t_int *w)
@@ -152,7 +152,7 @@ static void *iem_cot4_tilde_new(void)
   t_iem_cot4_tilde *x = (t_iem_cot4_tilde *)pd_new(iem_cot4_tilde_class);
   
   outlet_new(&x->x_obj, gensym("signal"));
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0f;
   return (x);
 }
 
@@ -161,8 +161,7 @@ void iem_cot4_tilde_setup(void)
   iem_cot4_tilde_class = class_new(gensym("iem_cot4~"), (t_newmethod)iem_cot4_tilde_new, 0,
     sizeof(t_iem_cot4_tilde), 0, 0);
   class_addcreator((t_newmethod)iem_cot4_tilde_new, gensym("iem_cot~"), 0);
-  CLASS_MAINSIGNALIN(iem_cot4_tilde_class, t_iem_cot4_tilde, x_msi);
+  CLASS_MAINSIGNALIN(iem_cot4_tilde_class, t_iem_cot4_tilde, x_float_sig_in);
   class_addmethod(iem_cot4_tilde_class, (t_method)iem_cot4_tilde_dsp, gensym("dsp"), 0);
   iem_cot4_tilde_maketable();
-//  class_sethelpsymbol(iem_cot4_tilde_class, gensym("iemhelp/help-iem_cot4~"));
 }
diff --git a/externals/iemlib/iemlib1/src/iem_delay~.c b/externals/iemlib/iemlib1/src/iem_delay~.c
index 03a1636ec..dd9c9e405 100644
--- a/externals/iemlib/iemlib1/src/iem_delay~.c
+++ b/externals/iemlib/iemlib1/src/iem_delay~.c
@@ -25,7 +25,7 @@ typedef struct _iem_delay_tilde
   int       x_blocksize;
   int       x_delay_samples;
   t_float   x_sr;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_iem_delay_tilde;
 
 static void iem_delay_tilde_cur_del(t_iem_delay_tilde *x, t_floatarg f)
@@ -182,7 +182,7 @@ static void *iem_delay_tilde_new(t_floatarg max_delay_ms, t_floatarg current_del
   x->x_sr = 0.0f;
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0.0f;
+  x->x_float_sig_in = 0.0f;
   return (x);
 }
 
@@ -195,7 +195,7 @@ void iem_delay_tilde_setup(void)
 {
   iem_delay_tilde_class = class_new(gensym("iem_delay~"), (t_newmethod)iem_delay_tilde_new, (t_method)iem_delay_tilde_free,
     sizeof(t_iem_delay_tilde), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(iem_delay_tilde_class, t_iem_delay_tilde, x_msi);
+  CLASS_MAINSIGNALIN(iem_delay_tilde_class, t_iem_delay_tilde, x_float_sig_in);
   class_addmethod(iem_delay_tilde_class, (t_method)iem_delay_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(iem_delay_tilde_class, (t_method)iem_delay_tilde_cur_del, gensym("ft1"), A_FLOAT, 0);
 }
diff --git a/externals/iemlib/iemlib1/src/iem_pow4~.c b/externals/iemlib/iemlib1/src/iem_pow4~.c
index 838ed5fe7..3a870647b 100644
--- a/externals/iemlib/iemlib1/src/iem_pow4~.c
+++ b/externals/iemlib/iemlib1/src/iem_pow4~.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2012 */
 
 #include "m_pd.h"
 #include "iemlib.h"
@@ -14,37 +14,49 @@ static t_class *iem_pow4_tilde_class;
 typedef struct _iem_pow4_tilde
 {
   t_object  x_obj;
-  t_float   x_exp;
-  t_float   x_msi;
+  t_sample  x_expo;
+  t_float   x_float_sig_in;
 } t_iem_pow4_tilde;
 
 static void iem_pow4_tilde_ft1(t_iem_pow4_tilde *x, t_floatarg f)
 {
-  x->x_exp = f;
+  x->x_expo = (t_sample)f;
 }
 
 static t_int *iem_pow4_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_iem_pow4_tilde *x = (t_iem_pow4_tilde *)(w[3]);
-  t_float y=x->x_exp;
-  t_float f, g;
+  t_sample expo=x->x_expo;
+  t_sample f, g;
   int n = (int)(w[4])/4;
   
   while (n--)
   {
-    f = *in;
-    if(f < 0.01f)
-      f = 0.01f;
-    else if(f > 1000.0f)
-      f = 1000.0f;
-    g = log(f);
-    f = exp(g*y);
-    *out++ = f;
-    *out++ = f;
-    *out++ = f;
-    *out++ = f;
+    f = (t_sample)(*in);
+    if(f > 0.0)
+    {
+      g = log(f);
+      f = exp(g * expo);
+      *out++ = f;
+      *out++ = f;
+      *out++ = f;
+      *out++ = f;
+      
+      /*g = pow(f, expo);
+      *out++ = g;
+      *out++ = g;
+      *out++ = g;
+      *out++ = g;*/
+    }
+    else
+    {
+      *out++ = 0.0;
+      *out++ = 0.0;
+      *out++ = 0.0;
+      *out++ = 0.0;
+    }
     in += 4;
   }
   return (w+5);
@@ -59,10 +71,10 @@ static void *iem_pow4_tilde_new(t_floatarg f)
 {
   t_iem_pow4_tilde *x = (t_iem_pow4_tilde *)pd_new(iem_pow4_tilde_class);
   
-  x->x_exp = f;
+  x->x_expo = (t_sample)f;
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   outlet_new(&x->x_obj, gensym("signal"));
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   return (x);
 }
 
@@ -70,9 +82,7 @@ void iem_pow4_tilde_setup(void)
 {
   iem_pow4_tilde_class = class_new(gensym("iem_pow4~"), (t_newmethod)iem_pow4_tilde_new, 0,
     sizeof(t_iem_pow4_tilde), 0, A_DEFFLOAT, 0);
-  class_addcreator((t_newmethod)iem_pow4_tilde_new, gensym("icot~"), 0);
-  CLASS_MAINSIGNALIN(iem_pow4_tilde_class, t_iem_pow4_tilde, x_msi);
+  CLASS_MAINSIGNALIN(iem_pow4_tilde_class, t_iem_pow4_tilde, x_float_sig_in);
   class_addmethod(iem_pow4_tilde_class, (t_method)iem_pow4_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(iem_pow4_tilde_class, (t_method)iem_pow4_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
-//  class_sethelpsymbol(iem_pow4_tilde_class, gensym("iemhelp/help-iem_pow4~"));
 }
diff --git a/externals/iemlib/iemlib1/src/iem_sqrt4~.c b/externals/iemlib/iemlib1/src/iem_sqrt4~.c
index 50d837a0c..0b4049d1e 100644
--- a/externals/iemlib/iemlib1/src/iem_sqrt4~.c
+++ b/externals/iemlib/iemlib1/src/iem_sqrt4~.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2012 */
 
 #include "m_pd.h"
 #include "iemlib.h"
@@ -12,40 +12,40 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006
 
 /* ------------------------ iem_sqrt4~ ----------------------------- */
 
-t_float *iem_sqrt4_tilde_exptab=(t_float *)0L;
-t_float *iem_sqrt4_tilde_mantissatab=(t_float *)0L;
+static t_float iem_rsqrt4_tilde_exptab[IEMSQRT4TAB1SIZE];
+static t_float iem_rsqrt4_tilde_mantissatab[IEMSQRT4TAB2SIZE];
 
 static t_class *iem_sqrt4_tilde_class;
 
 typedef struct _iem_sqrt4_tilde
 {
   t_object  x_obj;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_iem_sqrt4_tilde;
 
 static t_int *iem_sqrt4_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_int n = (t_int)(w[3])/4;
   
   while(n--)
   {
-    t_float f = *in;
-    t_float g, h;
+    t_sample f = *in;
+    t_sample g, h;
     union tabfudge_f tf;
     
-    if(f < 0.0f)
+    if(f <= 0.0)
     {
-      *out++ = 0.0f;
-      *out++ = 0.0f;
-      *out++ = 0.0f;
-      *out++ = 0.0f;
+      *out++ = 0.0;
+      *out++ = 0.0;
+      *out++ = 0.0;
+      *out++ = 0.0;
     }
     else
     {
       tf.tf_f = f;
-      g = iem_sqrt4_tilde_exptab[((tf.tf_l) >> 23) & 0xff] * iem_sqrt4_tilde_mantissatab[((tf.tf_l) >> 13) & 0x3ff];
+      g = iem_rsqrt4_tilde_exptab[((tf.tf_l) >> 23) & 0xff] * iem_rsqrt4_tilde_mantissatab[((tf.tf_l) >> 13) & 0x3ff];
       h = f * (1.5f * g - 0.5f * g * g * g * f);
       *out++ = h;
       *out++ = h;
@@ -62,30 +62,21 @@ static void iem_sqrt4_tilde_dsp(t_iem_sqrt4_tilde *x, t_signal **sp)
   dsp_add(iem_sqrt4_tilde_perform, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
 }
 
-static void iem_sqrt4_tilde_maketable(void)
+static void iem_sqrt4_tilde_init(void)
 {
   int i;
   t_float f;
-  long l;
+  union tabfudge_f tf;
   
-  if(!iem_sqrt4_tilde_exptab)
+  for(i=0; i<IEMSQRT4TAB1SIZE; i++)
   {
-    iem_sqrt4_tilde_exptab = (t_float *)getbytes(sizeof(t_float) * IEMSQRT4TAB1SIZE);
-    for(i=0; i<IEMSQRT4TAB1SIZE; i++)
-    {
-      l = (i ? (i == IEMSQRT4TAB1SIZE-1 ? IEMSQRT4TAB1SIZE-2 : i) : 1)<< 23;
-      *(long *)(&f) = l;
-      iem_sqrt4_tilde_exptab[i] = 1.0f/sqrt(f); 
-    }
+    tf.tf_l = (i ? (i == IEMSQRT4TAB1SIZE-1 ? IEMSQRT4TAB1SIZE-2 : i) : 1)<< 23;
+    iem_rsqrt4_tilde_exptab[i] = 1.0/sqrt(tf.tf_f); 
   }
-  if(!iem_sqrt4_tilde_mantissatab)
+  for(i=0; i<IEMSQRT4TAB2SIZE; i++)
   {
-    iem_sqrt4_tilde_mantissatab = (t_float *)getbytes(sizeof(t_float) * IEMSQRT4TAB2SIZE);
-    for(i=0; i<IEMSQRT4TAB2SIZE; i++)
-    {
-      f = 1.0f + (1.0f/(t_float)IEMSQRT4TAB2SIZE) * (t_float)i;
-      iem_sqrt4_tilde_mantissatab[i] = 1.0f/sqrt(f);  
-    }
+    f = 1.0 + (1.0/(t_float)IEMSQRT4TAB2SIZE) * (t_float)i;
+    iem_rsqrt4_tilde_mantissatab[i] = 1.0/sqrt(f);  
   }
 }
 
@@ -94,16 +85,15 @@ static void *iem_sqrt4_tilde_new(void)
   t_iem_sqrt4_tilde *x = (t_iem_sqrt4_tilde *)pd_new(iem_sqrt4_tilde_class);
   
   outlet_new(&x->x_obj, gensym("signal"));
-  x->x_msi = 0;
+  x->x_float_sig_in = 0;
   return (x);
 }
 
 void iem_sqrt4_tilde_setup(void)
 {
+  iem_sqrt4_tilde_init();
   iem_sqrt4_tilde_class = class_new(gensym("iem_sqrt4~"), (t_newmethod)iem_sqrt4_tilde_new, 0,
     sizeof(t_iem_sqrt4_tilde), 0, 0);
-  CLASS_MAINSIGNALIN(iem_sqrt4_tilde_class, t_iem_sqrt4_tilde, x_msi);
+  CLASS_MAINSIGNALIN(iem_sqrt4_tilde_class, t_iem_sqrt4_tilde, x_float_sig_in);
   class_addmethod(iem_sqrt4_tilde_class, (t_method)iem_sqrt4_tilde_dsp, gensym("dsp"), 0);
-  iem_sqrt4_tilde_maketable();
-//  class_sethelpsymbol(iem_sqrt4_tilde_class, gensym("iemhelp/help-iem_sqrt4~"));
 }
diff --git a/externals/iemlib/iemlib1/src/iemlib.h b/externals/iemlib/iemlib1/src/iemlib.h
deleted file mode 100644
index 973bfebcd..000000000
--- a/externals/iemlib/iemlib1/src/iemlib.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
-
-iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */
-
-#ifndef __IEMLIB_H__
-#define __IEMLIB_H__
-
-
-#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
-#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
-#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
-#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
-#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
-#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
-#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
-
-/* now miller's code starts : 
-     for 4 point interpolation
-     for lookup tables
-     for denormal floats
- */
-
-#ifdef MSW
-int sys_noloadbang;
-//t_symbol *iemgui_key_sym=0;
-#include <io.h>
-#else
-extern int sys_noloadbang;
-//extern t_symbol *iemgui_key_sym;
-#include <unistd.h>
-#endif
-
-#define DEFDELVS 64
-#define XTRASAMPS 4
-#define SAMPBLK 4
-
-#define UNITBIT32 1572864.  /* 3*2^19; bit 32 has place value 1 */
-
-    /* machine-dependent definitions.  These ifdefs really
-    should have been by CPU type and not by operating system! */
-#ifdef IRIX
-    /* big-endian.  Most significant byte is at low address in memory */
-#define HIOFFSET 0    /* word offset to find MSB */
-#define LOWOFFSET 1    /* word offset to find LSB */
-#define int32 long  /* a data type that has 32 bits */
-#endif /* IRIX */
-
-#ifdef MSW
-    /* little-endian; most significant byte is at highest address */
-#define HIOFFSET 1
-#define LOWOFFSET 0
-#define int32 long
-#endif /* MSW */
-
-#if defined(__FreeBSD__) || defined(__APPLE__)
-#include <machine/endian.h>
-#endif
-
-#ifdef __linux__
-#include <endian.h>
-#endif
-
-#if defined(__unix__) || defined(__APPLE__)
-#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)                         
-#error No byte order defined                                                    
-#endif                                                                          
-
-#if BYTE_ORDER == LITTLE_ENDIAN                                             
-#define HIOFFSET 1                                                              
-#define LOWOFFSET 0                                                             
-#else                                                                           
-#define HIOFFSET 0    /* word offset to find MSB */                             
-#define LOWOFFSET 1    /* word offset to find LSB */                            
-#endif /* __BYTE_ORDER */                                                       
-#include <sys/types.h>
-#define int32 int32_t
-#endif /* __unix__ or __APPLE__*/
-
-union tabfudge_d
-{
-  double tf_d;
-  int32 tf_i[2];
-};
-
-union tabfudge_f
-{
-  float tf_f;
-  long  tf_l;
-};
-
-#if defined __i386__ || defined __x86_64__
-#define IEM_DENORMAL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
-(((*(unsigned int*)&(f))&0x60000000)==0x60000000))
-/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
-#else
-
-#define IEM_DENORMAL(f) 0
-
-#endif
-
-#endif
diff --git a/externals/iemlib/iemlib1/src/iemlib1.c b/externals/iemlib/iemlib1/src/iemlib1.c
index fcc6615c9..c4aa6b23a 100644
--- a/externals/iemlib/iemlib1/src/iemlib1.c
+++ b/externals/iemlib/iemlib1/src/iemlib1.c
@@ -36,6 +36,7 @@ void peakenv_hold_tilde_setup(void);
 void prvu_tilde_setup(void);
 void pvu_tilde_setup(void);
 void rvu_tilde_setup(void);
+void sin_freq_tilde_setup(void);
 void sin_phase_tilde_setup(void);
 void sparse_FIR_tilde_setup(void);
 void soundfile_info_setup(void);
@@ -70,6 +71,7 @@ void iemlib1_setup(void)
   prvu_tilde_setup();
   pvu_tilde_setup();
   rvu_tilde_setup();
+  sin_freq_tilde_setup();
   sin_phase_tilde_setup();
   sparse_FIR_tilde_setup();
   soundfile_info_setup();
@@ -77,6 +79,6 @@ void iemlib1_setup(void)
   v2db_setup();
   vcf_filter_tilde_setup();
   
-	post("iemlib1 (R-1.17) library loaded!   (c) Thomas Musil 11.2010");
+	post("iemlib1 (R-1.20) library loaded!   (c) Thomas Musil 07.2013");
 	post("   musil%ciem.at iem KUG Graz Austria", '@');
 }
diff --git a/externals/iemlib/iemlib1/src/iemlib1.sln b/externals/iemlib/iemlib1/src/iemlib1.sln
new file mode 100644
index 000000000..ddf7a5570
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/iemlib1.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iemlib1", "iemlib1.vcproj", "{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Debug|Win32.ActiveCfg = Release|Win32
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Debug|Win32.Build.0 = Release|Win32
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Release|Win32.ActiveCfg = Release|Win32
+		{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/externals/iemlib/iemlib1/src/iemlib1.vcproj b/externals/iemlib/iemlib1/src/iemlib1.vcproj
new file mode 100644
index 000000000..47d01192c
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/iemlib1.vcproj
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="iemlib1"
+	ProjectGUID="{5ECC5EEF-09A4-4DDD-B1C8-D4FA1D5B8BD5}"
+	Keyword="MakeFileProj"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_win"
+				ReBuildCommandLine="NMAKE /f makefile_win /a"
+				CleanCommandLine=""
+				Output="iemlib1.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_win"
+				ReBuildCommandLine="NMAKE /f makefile_win /a"
+				CleanCommandLine=""
+				Output="iemlib1.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iemlib1.bsc"
+			>
+		</File>
+		<File
+			RelativePath="makefile_win"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iemlib/iemlib1/src/lp1_t~.c b/externals/iemlib/iemlib1/src/lp1_t~.c
index 96e4a4ecb..1444e21a5 100644
--- a/externals/iemlib/iemlib1/src/lp1_t~.c
+++ b/externals/iemlib/iemlib1/src/lp1_t~.c
@@ -1,13 +1,14 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2010 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
 
 #include "m_pd.h"
 #include "iemlib.h"
 #include <math.h>
 
-/* -- lp1_t~ - slow dynamic lowpass-filter 1. order with tau input --- */
+/* -- lp1_t~ - slow dynamic lowpass-filter 1. order controlled by time constant tau input --- */
+/* -- now with double precision; for low-frequency filters it is important to calculate the filter in double precision -- */
 
 typedef struct _lp1_t_tilde
 {
@@ -24,7 +25,7 @@ typedef struct _lp1_t_tilde
   t_float   interpol_time;
   int       ticks;
   int       counter_t;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_lp1_t_tilde;
 
 static t_class *lp1_t_tilde_class;
@@ -53,8 +54,8 @@ static void lp1_t_tilde_dsp_tick(t_lp1_t_tilde *x)
 
 static t_int *lp1_t_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_lp1_t_tilde *x = (t_lp1_t_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   double yn0, yn1=x->yn1;
@@ -64,7 +65,7 @@ static t_int *lp1_t_tilde_perform(t_int *w)
   for(i=0; i<n; i++)
   {
     yn0 = (double)(*in++)*c0 + yn1*c1;
-    *out++ = (t_float)yn0;
+    *out++ = (t_sample)yn0;
     yn1 = yn0;
   }
   /* NAN protect */
@@ -76,8 +77,8 @@ static t_int *lp1_t_tilde_perform(t_int *w)
 
 static t_int *lp1_t_tilde_perf8(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_lp1_t_tilde *x = (t_lp1_t_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   double ynn[9];
@@ -88,21 +89,21 @@ static t_int *lp1_t_tilde_perf8(t_int *w)
   for(i=0; i<n; i+=8, in+=8, out+=8)
   {
     ynn[1] = (double)in[0]*c0 + ynn[0]*c1;
-    out[0] = (t_float)ynn[1];
+    out[0] = (t_sample)ynn[1];
     ynn[2] = (double)in[1]*c0 + ynn[1]*c1;
-    out[1] = (t_float)ynn[2];
+    out[1] = (t_sample)ynn[2];
     ynn[3] = (double)in[2]*c0 + ynn[2]*c1;
-    out[2] = (t_float)ynn[3];
+    out[2] = (t_sample)ynn[3];
     ynn[4] = (double)in[3]*c0 + ynn[3]*c1;
-    out[3] = (t_float)ynn[4];
+    out[3] = (t_sample)ynn[4];
     ynn[5] = (double)in[4]*c0 + ynn[4]*c1;
-    out[4] = (t_float)ynn[5];
+    out[4] = (t_sample)ynn[5];
     ynn[6] = (double)in[5]*c0 + ynn[5]*c1;
-    out[5] = (t_float)ynn[6];
+    out[5] = (t_sample)ynn[6];
     ynn[7] = (double)in[6]*c0 + ynn[6]*c1;
-    out[6] = (t_float)ynn[7];
+    out[6] = (t_sample)ynn[7];
     ynn[8] = (double)in[7]*c0 + ynn[7]*c1;
-    out[7] = (t_float)ynn[8];
+    out[7] = (t_sample)ynn[8];
     ynn[0] = ynn[8];
   }
   /* NAN protect */
@@ -121,15 +122,15 @@ static void lp1_t_tilde_ft2(t_lp1_t_tilde *x, t_floatarg interpol)
   if(i <= 0)
     i = 1;
   x->ticks = i;
-  x->rcp_ticks = 1.0f / (t_float)i;
+  x->rcp_ticks = 1.0 / (t_float)i;
 }
 
 static void lp1_t_tilde_ft1(t_lp1_t_tilde *x, t_floatarg f_time_const)
 {
   double d_time_const;
   
-  if(f_time_const < 0.0f)
-    f_time_const = 0.0f;
+  if(f_time_const < 0.0)
+    f_time_const = 0.0;
   d_time_const = (double)f_time_const;
   if(d_time_const != x->cur_t)
   {
@@ -139,17 +140,22 @@ static void lp1_t_tilde_ft1(t_lp1_t_tilde *x, t_floatarg f_time_const)
   }
 }
 
+static void lp1_t_tilde_set(t_lp1_t_tilde *x, t_floatarg w1)
+{
+  x->yn1 = (double)w1;
+}
+
 static void lp1_t_tilde_dsp(t_lp1_t_tilde *x, t_signal **sp)
 {
   int i, n=(int)sp[0]->s_n;
   
   x->sr = -1000.0 / (double)(sp[0]->s_sr);
-  x->ticks_per_interpol_time = 0.001f * (t_float)(sp[0]->s_sr) / (t_float)n;
+  x->ticks_per_interpol_time = 0.001 * (t_float)(sp[0]->s_sr) / (t_float)n;
   i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
   if(i <= 0)
     i = 1;
   x->ticks = i;
-  x->rcp_ticks = 1.0f / (t_float)i;
+  x->rcp_ticks = 1.0 / (t_float)i;
   if(x->cur_t == 0.0)
     x->c1 = 0.0;
   else
@@ -165,16 +171,16 @@ static void *lp1_t_tilde_new(t_symbol *s, int argc, t_atom *argv)
 {
   t_lp1_t_tilde *x = (t_lp1_t_tilde *)pd_new(lp1_t_tilde_class);
   int i;
-  t_float interpol=0.0f;
+  t_float interpol=0.0;
   double time_const=0.0;
   
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   x->counter_t = 1;
   x->delta_t = 0.0;
-  x->interpol_time = 0.0f;
+  x->interpol_time = 0.0;
   x->yn1 = 0.0;
   x->sr = -1.0 / 44.1;
   if((argc >= 1)&&IS_A_FLOAT(argv,0))
@@ -189,15 +195,15 @@ static void *lp1_t_tilde_new(t_symbol *s, int argc, t_atom *argv)
   else
     x->c1 = exp((x->sr)/time_const);
   x->c0 = 1.0 - x->c1;
-  if(interpol < 0.0f)
-    interpol = 0.0f;
+  if(interpol < 0.0)
+    interpol = 0.0;
   x->interpol_time = interpol;
-  x->ticks_per_interpol_time = 0.5f;
+  x->ticks_per_interpol_time = 0.5;
   i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
   if(i <= 0)
     i = 1;
   x->ticks = i;
-  x->rcp_ticks = 1.0f / (t_float)i;
+  x->rcp_ticks = 1.0 / (t_float)i;
   x->end_t = x->cur_t;
   return (x);
 }
@@ -206,8 +212,9 @@ void lp1_t_tilde_setup(void)
 {
   lp1_t_tilde_class = class_new(gensym("lp1_t~"), (t_newmethod)lp1_t_tilde_new,
         0, sizeof(t_lp1_t_tilde), 0, A_GIMME, 0);
-  CLASS_MAINSIGNALIN(lp1_t_tilde_class, t_lp1_t_tilde, x_msi);
+  CLASS_MAINSIGNALIN(lp1_t_tilde_class, t_lp1_t_tilde, x_float_sig_in);
   class_addmethod(lp1_t_tilde_class, (t_method)lp1_t_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(lp1_t_tilde_class, (t_method)lp1_t_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(lp1_t_tilde_class, (t_method)lp1_t_tilde_ft2, gensym("ft2"), A_FLOAT, 0);
+  class_addmethod(lp1_t_tilde_class, (t_method)lp1_t_tilde_set, gensym("set"), A_FLOAT, 0);
 }
diff --git a/externals/iemlib/iemlib1/src/makefile b/externals/iemlib/iemlib1/src/makefile
index f1fa0e469..3e23fcfa4 100644
--- a/externals/iemlib/iemlib1/src/makefile
+++ b/externals/iemlib/iemlib1/src/makefile
@@ -1,4 +1,34 @@
 TARGET = iemlib1
 
+
+SRC = biquad_freq_resp.c \
+	db2v.c \
+	f2note.c \
+	filter~.c \
+	FIR~.c \
+	for++.c \
+	gate.c \
+	hml_shelf~.c \
+	iem_cot4~.c \
+	iem_delay~.c \
+	iem_pow4~.c \
+	iem_sqrt4~.c \
+	lp1_t~.c \
+	mov_avrg_kern~.c \
+	para_bp2~.c \
+	peakenv~.c \
+	peakenv_hold~.c \
+	prvu~.c \
+	pvu~.c \
+	rvu~.c \
+	sin_freq~.c \
+	sin_phase~.c \
+	sparse_FIR~.c \
+	soundfile_info.c \
+	split.c \
+	v2db.c \
+	vcf_filter~.c \
+	$(TARGET).c
+
 include ../../Make.include
 
diff --git a/externals/iemlib/iemlib1/src/makefile_d_fat b/externals/iemlib/iemlib1/src/makefile_d_fat
index b0c6b9a34..d8ac5f8e1 100644
--- a/externals/iemlib/iemlib1/src/makefile_d_fat
+++ b/externals/iemlib/iemlib1/src/makefile_d_fat
@@ -1,19 +1,25 @@
-current: all
-
+current: all
+
 .SUFFIXES: .d_fat
 
-PD_INSTALL_PATH ?= "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-CFLAGS =-DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-        -Wno-unused -Wno-parentheses -Wno-switch
-
-LFLAGS = -bundle -undefined suppress -flat_namespace
-
-# the sources
-
-SRC = biquad_freq_resp.c \
+PDSOURCE = "/Applications/Pd.app/Contents/Resources/src"
+
+IEMLIB_INCLUDE = ../../include
+
+PD_INCLUDES = -I. -I$(IEMLIB_INCLUDE) -I$(PDSOURCE)
+
+PD_DEFINES = -DPD
+
+CFLAGS =-O2 -Wall -W -Wshadow -Wstrict-prototypes \
+        -Wno-unused -Wno-parentheses -Wno-switch -fPIC
+
+LFLAGS = -bundle -undefined suppress -flat_namespace
+
+ARCH_FLAGS=-arch i386 -arch ppc
+
+# the sources
+
+SRC =	biquad_freq_resp.c \
 	db2v.c \
 	f2note.c \
 	filter~.c \
@@ -33,8 +39,9 @@ SRC = biquad_freq_resp.c \
 	prvu~.c \
 	pvu~.c \
 	rvu~.c \
+	sin_freq~.c \
 	sin_phase~.c \
-	sparse_FIR~ \
+	sparse_FIR~.c \
 	soundfile_info.c \
 	split.c \
 	v2db.c \
@@ -44,26 +51,23 @@ SRC = biquad_freq_resp.c \
 TARGET = iemlib1.d_fat
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(CC) -arch i386 -arch ppc $(LFLAGS) -o $(TARGET) *.o
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
-	$(CC) -arch i386 -arch ppc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm -f ../$(TARGET)
+	rm -f *.o
 
+all: $(OBJ)
+	@echo :: $(OBJ)
+	$(CC) $(ARCH_FLAGS) $(LFLAGS) -o $(TARGET) *.o
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
 
+$(OBJ) : %.o : %.c
+	$(CC) $(ARCH_FLAGS) $(PD_DEFINES) $(CFLAGS) $(PD_INCLUDES) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iemlib1/src/makefile_d_ppc b/externals/iemlib/iemlib1/src/makefile_d_ppc
index a90c68b2b..1b5c6914a 100644
--- a/externals/iemlib/iemlib1/src/makefile_d_ppc
+++ b/externals/iemlib/iemlib1/src/makefile_d_ppc
@@ -1,17 +1,17 @@
-current: all
-
+current: all
+
 .SUFFIXES: .d_ppc
 
-PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
+PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
+
+INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
+
 CFLAGS =-DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-        -Wno-unused -Wno-parentheses -Wno-switch
-
-LFLAGS = -bundle -undefined suppress -flat_namespace
-
-# the sources
+        -Wno-unused -Wno-parentheses -Wno-switch
+
+LFLAGS = -bundle -undefined suppress -flat_namespace
+
+# the sources
 
 SRC = biquad_freq_resp.c \
 	db2v.c \
@@ -43,24 +43,24 @@ SRC = biquad_freq_resp.c \
 TARGET = iemlib1.d_ppc
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm ../$(TARGET)
+	rm *.o
+
+all: $(OBJ)
+	@echo :: $(OBJ)
 	$(CC) $(LFLAGS) -o $(TARGET) *.o
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
+
+$(OBJ) : %.o : %.c
+	touch $*.c
 	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iemlib1/src/makefile_darwin b/externals/iemlib/iemlib1/src/makefile_darwin
index 11e7d68cc..1d0869ed7 100644
--- a/externals/iemlib/iemlib1/src/makefile_darwin
+++ b/externals/iemlib/iemlib1/src/makefile_darwin
@@ -1,22 +1,22 @@
-current: all
-
+current: all
+
 .SUFFIXES: .pd_darwin
 
-PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-LIB = -ldl -lm -lpthread
-
-CFLAGS = -DPD -DUNIX -g -Wall -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O2 -fno-strict-aliasing \
-	$(INCLUDE) $(UCFLAGS) $(AFLAGS) \
-
-MACOSXLINKFLAGS = -bundle -bundle_loader $(PD_INSTALL_PATH)/bin/pd
-
-SYSTEM = $(shell uname -m)
-
-# the sources
+PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
+
+INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
+
+LIB = -ldl -lm -lpthread
+
+CFLAGS = -DPD -DUNIX -g -Wall -W -Werror -Wno-unused \
+	-Wno-parentheses -Wno-switch -O2 -fno-strict-aliasing \
+	$(INCLUDE) $(UCFLAGS) $(AFLAGS) \
+
+MACOSXLINKFLAGS = -bundle -bundle_loader $(PD_INSTALL_PATH)/bin/pd
+
+SYSTEM = $(shell uname -m)
+
+# the sources
 
 SRC = biquad_freq_resp.c \
 	db2v.c \
@@ -48,24 +48,24 @@ SRC = biquad_freq_resp.c \
 TARGET = iemlib1.pd_darwin
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm ../$(TARGET)
+	rm *.o
+
+all: $(OBJ)
+	@echo :: $(OBJ)
 	$(CC) $(MACOSXLINKFLAGS) -o $(TARGET) *.o $(LIB)
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
+
+$(OBJ) : %.o : %.c
+	touch $*.c
 	$(CC) $(CFLAGS) -DPD $(INCLUDE) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iemlib1/src/makefile_linux b/externals/iemlib/iemlib1/src/makefile_linux
deleted file mode 100644
index 6eb4543fe..000000000
--- a/externals/iemlib/iemlib1/src/makefile_linux
+++ /dev/null
@@ -1,72 +0,0 @@
-current: all
-
-.SUFFIXES: .pd_linux
-
-INCLUDE = -I. -I/usr/local/src/pd/src
-
-LDFLAGS = -export-dynamic -shared
-LIB = -ldl -lm -lpthread
-
-#select either the DBG and OPT compiler flags below:
-
-CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
-        -DDL_OPEN -fPIC
-
-SYSTEM = $(shell uname -m)
-
-# the sources
-
-SRC = 	biquad_freq_resp.c \
-	db2v.c \
-	f2note.c \
-	filter~.c \
-	FIR~.c \
-	for++.c \
-	gate.c \
-	hml_shelf~.c \
-	iem_cot4~.c \
-	iem_delay~.c \
-	iem_pow4~.c \
-	iem_sqrt4~.c \
-	lp1_t~.c \
-	mov_avrg_kern~.c \
-	para_bp2~.c \
-	peakenv~.c \
-	peakenv_hold~.c \
-	prvu~.c \
-	pvu~.c \
-	rvu~.c \
-	sin_phase~.c \
-	sparse_FIR~ \
-	soundfile_info.c \
-	split.c \
-	v2db.c \
-	vcf_filter~.c \
-	iemlib1.c
-
-TARGET = iemlib1.pd_linux
-
-
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB)
-	strip --strip-unneeded $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
-
-
-
-
diff --git a/externals/iemlib/iemlib1/src/makefile_win b/externals/iemlib/iemlib1/src/makefile_win
index 161bf97aa..c611e8e93 100644
--- a/externals/iemlib/iemlib1/src/makefile_win
+++ b/externals/iemlib/iemlib1/src/makefile_win
@@ -2,19 +2,17 @@ TARGET = iemlib1
 
 all: ..\$(TARGET).dll
 
-VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
-PD_INST_PATH = "C:\Programme\pd"
+VIS_CPP_PATH = "$(PROGRAMFILES)\Microsoft Visual Studio 9.0\VC"
+VIS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDKs\Windows\v6.0A"
+PD_INST_PATH = "$(PROGRAMFILES)\pd"
 PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
-PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /DHAVE_G_CANVAS_H /Ox -D_CRT_SECURE_NO_WARNINGS
 PD_WIN_L_FLAGS = /nologo
 
-PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
-	$(VIS_CPP_PATH)\lib\libc.lib \
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
 	$(VIS_CPP_PATH)\lib\oldnames.lib \
-	$(VIS_CPP_PATH)\lib\kernel32.lib \
-	$(VIS_CPP_PATH)\lib\wsock32.lib \
-	$(VIS_CPP_PATH)\lib\winmm.lib \
-	$(PD_INST_PATH)\bin\pthreadVC.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
 	$(PD_INST_PATH)\bin\pd.lib
 
 SRC =	biquad_freq_resp.c \
@@ -37,8 +35,7 @@ SRC =	biquad_freq_resp.c \
 		prvu~.c \
 		pvu~.c \
 		rvu~.c \
-		sin_phase~.c \
-		sparse_FIR~ \
+		sin_phase~.c \
 		soundfile_info.c \
 		split.c \
 		v2db.c \
diff --git a/externals/iemlib/iemlib1/src/mov_avrg_kern~.c b/externals/iemlib/iemlib1/src/mov_avrg_kern~.c
index 0b7c160aa..20a6f855e 100644
--- a/externals/iemlib/iemlib1/src/mov_avrg_kern~.c
+++ b/externals/iemlib/iemlib1/src/mov_avrg_kern~.c
@@ -19,16 +19,16 @@ typedef struct _mov_avrg_kern_tilde
   double   x_mstime;
   int      x_nsamps;
   int      x_counter;
-  t_float  x_msi;
+  t_float  x_float_sig_in;
 } t_mov_avrg_kern_tilde;
 
 static t_class *mov_avrg_kern_tilde_class;
 
 static t_int *mov_avrg_kern_tilde_perform(t_int *w)
 {
-  t_float *in_direct = (t_float *)(w[1]);
-  t_float *in_delayed = (t_float *)(w[2]);
-  t_float *out = (t_float *)(w[3]);
+  t_sample *in_direct = (t_sample *)(w[1]);
+  t_sample *in_delayed = (t_sample *)(w[2]);
+  t_sample *out = (t_sample *)(w[3]);
   t_mov_avrg_kern_tilde *x = (t_mov_avrg_kern_tilde *)(w[4]);
   int i, n = (int)(w[5]);
   double wn0, wn1=x->x_wn1, a0=x->x_a0;
@@ -43,7 +43,7 @@ static t_int *mov_avrg_kern_tilde_perform(t_int *w)
       for(i=0; i<n; i++)
       {
         wn0 = wn1 + a0*(double)(*in_direct++);
-        *out++ = (t_float)wn0;
+        *out++ = (t_sample)wn0;
         wn1 = wn0;
       }
     }
@@ -53,13 +53,13 @@ static t_int *mov_avrg_kern_tilde_perform(t_int *w)
       for(i=0; i<counter; i++)
       {
         wn0 = wn1 + a0*(double)(*in_direct++);
-        *out++ = (t_float)wn0;
+        *out++ = (t_sample)wn0;
         wn1 = wn0;
       }
       for(i=counter; i<n; i++)
       {
         wn0 = wn1 + a0*(double)(*in_direct++ - *in_delayed++);
-        *out++ = (t_float)wn0;
+        *out++ = (t_sample)wn0;
         wn1 = wn0;
       }
     }
@@ -69,7 +69,7 @@ static t_int *mov_avrg_kern_tilde_perform(t_int *w)
     for(i=0; i<n; i++)
     {
       wn0 = wn1 + a0*(double)(*in_direct++ - *in_delayed++);
-      *out++ = (t_float)wn0;
+      *out++ = (t_sample)wn0;
       wn1 = wn0;
     }
   }
@@ -120,7 +120,7 @@ static void *mov_avrg_kern_tilde_new(t_floatarg mstime)
   inlet_new(&x->x_obj,  &x->x_obj.ob_pd, &s_signal, &s_signal);
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   return(x);
 }
 
@@ -128,7 +128,7 @@ void mov_avrg_kern_tilde_setup(void)
 {
   mov_avrg_kern_tilde_class = class_new(gensym("mov_avrg_kern~"), (t_newmethod)mov_avrg_kern_tilde_new,
         0, sizeof(t_mov_avrg_kern_tilde), 0, A_FLOAT, 0);
-  CLASS_MAINSIGNALIN(mov_avrg_kern_tilde_class, t_mov_avrg_kern_tilde, x_msi);
+  CLASS_MAINSIGNALIN(mov_avrg_kern_tilde_class, t_mov_avrg_kern_tilde, x_float_sig_in);
   class_addmethod(mov_avrg_kern_tilde_class, (t_method)mov_avrg_kern_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(mov_avrg_kern_tilde_class, (t_method)mov_avrg_kern_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(mov_avrg_kern_tilde_class, (t_method)mov_avrg_kern_tilde_reset, gensym("reset"), 0);
diff --git a/externals/iemlib/iemlib1/src/para_bp2~.c b/externals/iemlib/iemlib1/src/para_bp2~.c
index d946c7115..9ee17e8f8 100644
--- a/externals/iemlib/iemlib1/src/para_bp2~.c
+++ b/externals/iemlib/iemlib1/src/para_bp2~.c
@@ -1,7 +1,7 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
 
 #include "m_pd.h"
 #include "iemlib.h"
@@ -41,7 +41,7 @@ typedef struct _para_bp2_tilde
   int      event_mask;
   void     *x_debug_outlet;
   t_atom   x_at[5];
-  t_float  x_msi;
+  t_float  x_float_sig_in;
 } t_para_bp2_tilde;
 
 static t_class *para_bp2_tilde_class;
@@ -51,12 +51,12 @@ static void para_bp2_tilde_calc(t_para_bp2_tilde *x)
   t_float l, al, gal, l2, rcp;
   
   l = x->cur_l;
-  l2 = l*l + 1.0f;
+  l2 = l*l + 1.0;
   al = l*x->cur_a;
   gal = al*x->cur_g;
-  rcp = 1.0f/(al + l2);
+  rcp = 1.0/(al + l2);
   x->a0 = rcp*(l2 + gal);
-  x->a1 = rcp*2.0f*(2.0f - l2);
+  x->a1 = rcp*2.0*(2.0 - l2);
   x->a2 = rcp*(l2 - gal);
   x->b1 = -x->a1;
   x->b2 = rcp*(al - l2);
@@ -84,10 +84,10 @@ static void para_bp2_tilde_dsp_tick(t_para_bp2_tilde *x)
         x->cur_f *= x->delta_f;
       }
       l = x->cur_f * x->sr;
-      if(l < 1.0e-20f)
-        x->cur_l = 1.0e20f;
-      else if(l > 1.57079632f)
-        x->cur_l = 0.0f;
+      if(l < 1.0e-20)
+        x->cur_l = 1.0e20;
+      else if(l > 1.57079632)
+        x->cur_l = 0.0;
       else
       {
         si = sin(l);
@@ -128,31 +128,31 @@ static void para_bp2_tilde_dsp_tick(t_para_bp2_tilde *x)
     
     /* stability check */
     
-    discriminant = x->b1 * x->b1 + 4.0f * x->b2;
-    if(x->b1 <= -1.9999996f)
-      x->b1 = -1.9999996f;
-    else if(x->b1 >= 1.9999996f)
-      x->b1 = 1.9999996f;
+    discriminant = x->b1 * x->b1 + 4.0 * x->b2;
+    if(x->b1 <= -1.9999996)
+      x->b1 = -1.9999996;
+    else if(x->b1 >= 1.9999996)
+      x->b1 = 1.9999996;
     
-    if(x->b2 <= -0.9999998f)
-      x->b2 = -0.9999998f;
-    else if(x->b2 >= 0.9999998f)
-      x->b2 = 0.9999998f;
+    if(x->b2 <= -0.9999998)
+      x->b2 = -0.9999998;
+    else if(x->b2 >= 0.9999998)
+      x->b2 = 0.9999998;
     
-    if(discriminant >= 0.0f)
+    if(discriminant >= 0.0)
     {
-      if(0.9999998f - x->b1 - x->b2 < 0.0f)
-        x->b2 = 0.9999998f - x->b1;
-      if(0.9999998f + x->b1 - x->b2 < 0.0f)
-        x->b2 = 0.9999998f + x->b1;
+      if(0.9999998 - x->b1 - x->b2 < 0.0)
+        x->b2 = 0.9999998 - x->b1;
+      if(0.9999998 + x->b1 - x->b2 < 0.0)
+        x->b2 = 0.9999998 + x->b1;
     }
   }
 }
 
 static t_int *para_bp2_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_para_bp2_tilde *x = (t_para_bp2_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   t_float wn0, wn1=x->wn1, wn2=x->wn2;
@@ -162,16 +162,16 @@ static t_int *para_bp2_tilde_perform(t_int *w)
   para_bp2_tilde_dsp_tick(x);
   for(i=0; i<n; i++)
   {
-    wn0 = *in++ + b1*wn1 + b2*wn2;
-    *out++ = a0*wn0 + a1*wn1 + a2*wn2;
+    wn0 = (t_float)(*in++) + b1*wn1 + b2*wn2;
+    *out++ = (t_sample)(a0*wn0 + a1*wn1 + a2*wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn2))
-    wn2 = 0.0f;
+    wn2 = 0.0;
   if(IEM_DENORMAL(wn1))
-    wn1 = 0.0f;
+    wn1 = 0.0;
   
   x->wn1 = wn1;
   x->wn2 = wn2;
@@ -190,8 +190,8 @@ y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
 
 static t_int *para_bp2_tilde_perf8(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_para_bp2_tilde *x = (t_para_bp2_tilde *)(w[3]);
   int i, n = (t_int)(w[4]);
   t_float wn[10];
@@ -203,22 +203,22 @@ static t_int *para_bp2_tilde_perf8(t_int *w)
   wn[1] = x->wn1;
   for(i=0; i<n; i+=8, in+=8, out+=8)
   {
-    wn[2] = in[0] + b1*wn[1] + b2*wn[0];
-    out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0];
-    wn[3] = in[1] + b1*wn[2] + b2*wn[1];
-    out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1];
-    wn[4] = in[2] + b1*wn[3] + b2*wn[2];
-    out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2];
-    wn[5] = in[3] + b1*wn[4] + b2*wn[3];
-    out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3];
-    wn[6] = in[4] + b1*wn[5] + b2*wn[4];
-    out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4];
-    wn[7] = in[5] + b1*wn[6] + b2*wn[5];
-    out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5];
-    wn[8] = in[6] + b1*wn[7] + b2*wn[6];
-    out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6];
-    wn[9] = in[7] + b1*wn[8] + b2*wn[7];
-    out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7];
+    wn[2] = (t_float)in[0] + b1*wn[1] + b2*wn[0];
+    out[0] = (t_sample)(a0*wn[2] + a1*wn[1] + a2*wn[0]);
+    wn[3] = (t_float)in[1] + b1*wn[2] + b2*wn[1];
+    out[1] = (t_sample)(a0*wn[3] + a1*wn[2] + a2*wn[1]);
+    wn[4] = (t_float)in[2] + b1*wn[3] + b2*wn[2];
+    out[2] = (t_sample)(a0*wn[4] + a1*wn[3] + a2*wn[2]);
+    wn[5] = (t_float)in[3] + b1*wn[4] + b2*wn[3];
+    out[3] = (t_sample)(a0*wn[5] + a1*wn[4] + a2*wn[3]);
+    wn[6] = (t_float)in[4] + b1*wn[5] + b2*wn[4];
+    out[4] = (t_sample)(a0*wn[6] + a1*wn[5] + a2*wn[4]);
+    wn[7] = (t_float)in[5] + b1*wn[6] + b2*wn[5];
+    out[5] = (t_sample)(a0*wn[7] + a1*wn[6] + a2*wn[5]);
+    wn[8] = (t_float)in[6] + b1*wn[7] + b2*wn[6];
+    out[6] = (t_sample)(a0*wn[8] + a1*wn[7] + a2*wn[6]);
+    wn[9] = (t_float)in[7] + b1*wn[8] + b2*wn[7];
+    out[7] = (t_sample)(a0*wn[9] + a1*wn[8] + a2*wn[7]);
     wn[0] = wn[8];
     wn[1] = wn[9];
   }
@@ -261,9 +261,9 @@ static void para_bp2_tilde_ft2(t_para_bp2_tilde *x, t_floatarg q)
 {
   t_float a;
   
-  if(q <= 0.0f)
-    q = 0.000001f;
-  a = 1.0f/q;
+  if(q <= 0.0)
+    q = 0.000001;
+  a = 1.0/q;
   if(a != x->cur_a)
   {
     x->end_a = a;
@@ -275,8 +275,8 @@ static void para_bp2_tilde_ft2(t_para_bp2_tilde *x, t_floatarg q)
 
 static void para_bp2_tilde_ft1(t_para_bp2_tilde *x, t_floatarg f)
 {
-  if(f <= 0.0f)
-    f = 0.000001f;
+  if(f <= 0.0)
+    f = 0.000001;
   if(f != x->cur_f)
   {
     x->end_f = f;
@@ -286,6 +286,15 @@ static void para_bp2_tilde_ft1(t_para_bp2_tilde *x, t_floatarg f)
   }
 }
 
+static void para_bp2_tilde_set(t_para_bp2_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+  if((argc >= 2) && IS_A_FLOAT(argv, 1) && IS_A_FLOAT(argv, 0))
+  {
+    x->wn1 = (t_float)atom_getfloatarg(0, argc, argv);
+    x->wn2 = (t_float)atom_getfloatarg(1, argc, argv);
+  }
+}
+
 static void para_bp2_tilde_print(t_para_bp2_tilde *x)
 {
   //  post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
@@ -302,18 +311,18 @@ static void para_bp2_tilde_dsp(t_para_bp2_tilde *x, t_signal **sp)
   t_float si, co, f;
   int i, n=(int)sp[0]->s_n;
   
-  x->sr = 3.14159265358979323846f / (t_float)(sp[0]->s_sr);
-  x->ticks_per_interpol_time = 0.001f * (t_float)(sp[0]->s_sr) / (t_float)n;
+  x->sr = 3.14159265358979323846 / (t_float)(sp[0]->s_sr);
+  x->ticks_per_interpol_time = 0.001 * (t_float)(sp[0]->s_sr) / (t_float)n;
   i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
   if(i <= 0)
     i = 1;
   x->ticks = i;
-  x->rcp_ticks = 1.0f / (t_float)i;
+  x->rcp_ticks = 1.0 / (t_float)i;
   f = x->cur_f * x->sr;
-  if(f < 1.0e-20f)
-    x->cur_l = 1.0e20f;
-  else if(f > 1.57079632f)
-    x->cur_l = 0.0f;
+  if(f < 1.0e-20)
+    x->cur_l = 1.0e20;
+  else if(f > 1.57079632)
+    x->cur_l = 0.0;
   else
   {
     si = sin(f);
@@ -330,7 +339,7 @@ static void *para_bp2_tilde_new(t_symbol *s, int argc, t_atom *argv)
 {
   t_para_bp2_tilde *x = (t_para_bp2_tilde *)pd_new(para_bp2_tilde_class);
   int i;
-  t_float si, co, f=0.0f, q=1.0f, l=0.0f, interpol=0.0f;
+  t_float si, co, f=0.0, q=1.0, l=0.0, interpol=0.0;
   
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
@@ -338,7 +347,7 @@ static void *para_bp2_tilde_new(t_symbol *s, int argc, t_atom *argv)
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft4"));
   outlet_new(&x->x_obj, &s_signal);
   x->x_debug_outlet = outlet_new(&x->x_obj, &s_list);
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   
   x->x_at[0].a_type = A_FLOAT;
   x->x_at[1].a_type = A_FLOAT;
@@ -350,19 +359,19 @@ static void *para_bp2_tilde_new(t_symbol *s, int argc, t_atom *argv)
   x->counter_f = 1;
   x->counter_a = 0;
   x->counter_g = 0;
-  x->delta_f = 0.0f;
-  x->delta_a = 0.0f;
-  x->delta_g = 0.0f;
-  x->interpol_time = 500.0f;
-  x->wn1 = 0.0f;
-  x->wn2 = 0.0f;
-  x->a0 = 0.0f;
-  x->a1 = 0.0f;
-  x->a2 = 0.0f;
-  x->b1 = 0.0f;
-  x->b2 = 0.0f;
-  x->sr = 3.14159265358979323846f / 44100.0f;
-  x->cur_a = 1.0f;
+  x->delta_f = 0.0;
+  x->delta_a = 0.0;
+  x->delta_g = 0.0;
+  x->interpol_time = 500.0;
+  x->wn1 = 0.0;
+  x->wn2 = 0.0;
+  x->a0 = 0.0;
+  x->a1 = 0.0;
+  x->a2 = 0.0;
+  x->b1 = 0.0;
+  x->b2 = 0.0;
+  x->sr = 3.14159265358979323846 / 44100.0;
+  x->cur_a = 1.0;
   if((argc == 4)&&IS_A_FLOAT(argv,3)&&IS_A_FLOAT(argv,2)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,0))
   {
     f = (t_float)atom_getfloatarg(0, argc, argv);
@@ -370,33 +379,33 @@ static void *para_bp2_tilde_new(t_symbol *s, int argc, t_atom *argv)
     l = (t_float)atom_getfloatarg(2, argc, argv);
     interpol = (t_float)atom_getfloatarg(3, argc, argv);
   }
-  if(f <= 0.0f)
-    f = 0.000001f;
+  if(f <= 0.0)
+    f = 0.000001;
   x->cur_f = f;
   f *= x->sr;
-  if(f < 1.0e-20f)
-    x->cur_l = 1.0e20f;
-  else if(f > 1.57079632f)
-    x->cur_l = 0.0f;
+  if(f < 1.0e-20)
+    x->cur_l = 1.0e20;
+  else if(f > 1.57079632)
+    x->cur_l = 0.0;
   else
   {
     si = sin(f);
     co = cos(f);
     x->cur_l = co/si;
   }
-  if(q <= 0.0f)
-    q = 0.000001f;
-  x->cur_a = 1.0f/q;
+  if(q <= 0.0)
+    q = 0.000001;
+  x->cur_a = 1.0/q;
   x->cur_g = exp(0.11512925465 * l);
-  if(interpol <= 0.0f)
-    interpol = 0.0f;
+  if(interpol <= 0.0)
+    interpol = 0.0;
   x->interpol_time = interpol;
-  x->ticks_per_interpol_time = 0.5f;
+  x->ticks_per_interpol_time = 0.5;
   i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
   if(i <= 0)
     i = 1;
   x->ticks = i;
-  x->rcp_ticks = 1.0f / (t_float)i;
+  x->rcp_ticks = 1.0 / (t_float)i;
   x->end_f = x->cur_f;
   x->end_a = x->cur_a;
   x->end_g = x->cur_g;
@@ -407,12 +416,12 @@ void para_bp2_tilde_setup(void)
 {
   para_bp2_tilde_class = class_new(gensym("para_bp2~"), (t_newmethod)para_bp2_tilde_new,
         0, sizeof(t_para_bp2_tilde), 0, A_GIMME, 0);
-  CLASS_MAINSIGNALIN(para_bp2_tilde_class, t_para_bp2_tilde, x_msi);
+  CLASS_MAINSIGNALIN(para_bp2_tilde_class, t_para_bp2_tilde, x_float_sig_in);
   class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_ft2, gensym("ft2"), A_FLOAT, 0);
   class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_ft3, gensym("ft3"), A_FLOAT, 0);
   class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_ft4, gensym("ft4"), A_FLOAT, 0);
+  class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_set, gensym("set"), A_GIMME, 0);
   class_addmethod(para_bp2_tilde_class, (t_method)para_bp2_tilde_print, gensym("print"), 0);
-//  class_sethelpsymbol(para_bp2_tilde_class, gensym("iemhelp/help-para_bp2~"));
 }
diff --git a/externals/iemlib/iemlib1/src/peakenv_hold~.c b/externals/iemlib/iemlib1/src/peakenv_hold~.c
index 715bed9a8..6b64808e7 100644
--- a/externals/iemlib/iemlib1/src/peakenv_hold~.c
+++ b/externals/iemlib/iemlib1/src/peakenv_hold~.c
@@ -9,6 +9,7 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2010
 #include <math.h>
 
 /* ---------------- peakenv_hold~ - simple peak-envelope-converter with peak hold time and release time. ----------------- */
+/* -- now with double precision; for low-frequency filters it is important to calculate the filter in double precision -- */
 
 typedef struct _peakenv_hold_tilde
 {
@@ -20,7 +21,7 @@ typedef struct _peakenv_hold_tilde
   double   x_holdtime;
   t_int    x_n_hold;
   t_int    x_counter;
-  t_float  x_msi;
+  t_float  x_float_sig_in;
 } t_peakenv_hold_tilde;
 
 static t_class *peakenv_hold_tilde_class;
@@ -34,8 +35,8 @@ static void peakenv_hold_tilde_ft1(t_peakenv_hold_tilde *x, t_float t_hold)/* ho
 {
   double dhold;
   
-  if(t_hold < 0.0f)
-    t_hold = 0.0f;
+  if(t_hold < 0.0)
+    t_hold = 0.0;
   x->x_holdtime = (double)t_hold;
   dhold = x->x_sr*0.001*x->x_holdtime;
   if(dhold > 2147483647.0)
@@ -45,16 +46,16 @@ static void peakenv_hold_tilde_ft1(t_peakenv_hold_tilde *x, t_float t_hold)/* ho
 
 static void peakenv_hold_tilde_ft2(t_peakenv_hold_tilde *x, t_float t_rel)/* release-time in ms */
 {
-  if(t_rel < 0.0f)
-    t_rel = 0.0f;
+  if(t_rel < 0.0)
+    t_rel = 0.0;
   x->x_releasetime = (double)t_rel;
   x->x_c1 = exp(-1.0/(x->x_sr*0.001*x->x_releasetime));
 }
 
 static t_int *peakenv_hold_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_peakenv_hold_tilde *x = (t_peakenv_hold_tilde *)(w[3]);
   int n = (int)(w[4]);
   double peak = x->x_old_peak;
@@ -75,7 +76,7 @@ static t_int *peakenv_hold_tilde_perform(t_int *w)
       peak = absolute;
       counter = x->x_n_hold;// new hold initialisation
     }
-    *out++ = (t_float)peak;
+    *out++ = (t_sample)peak;
   }
   /* NAN protect */
   //if(IEM_DENORMAL(peak))
@@ -105,7 +106,7 @@ static void *peakenv_hold_tilde_new(t_float t_hold, t_float t_rel)
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   return(x);
 }
 
@@ -113,7 +114,7 @@ void peakenv_hold_tilde_setup(void)
 {
   peakenv_hold_tilde_class = class_new(gensym("peakenv_hold~"), (t_newmethod)peakenv_hold_tilde_new,
     0, sizeof(t_peakenv_hold_tilde), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(peakenv_hold_tilde_class, t_peakenv_hold_tilde, x_msi);
+  CLASS_MAINSIGNALIN(peakenv_hold_tilde_class, t_peakenv_hold_tilde, x_float_sig_in);
   class_addmethod(peakenv_hold_tilde_class, (t_method)peakenv_hold_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(peakenv_hold_tilde_class, (t_method)peakenv_hold_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
    class_addmethod(peakenv_hold_tilde_class, (t_method)peakenv_hold_tilde_ft2, gensym("ft2"), A_FLOAT, 0);
diff --git a/externals/iemlib/iemlib1/src/peakenv~.c b/externals/iemlib/iemlib1/src/peakenv~.c
index d9ebeff7d..174624c41 100644
--- a/externals/iemlib/iemlib1/src/peakenv~.c
+++ b/externals/iemlib/iemlib1/src/peakenv~.c
@@ -9,6 +9,7 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2010
 #include <math.h>
 
 /* ---------------- peakenv~ - simple peak-envelope-converter. ----------------- */
+/* -- now with double precision; for low-frequency filters it is important to calculate the filter in double precision -- */
 
 typedef struct _peakenv_tilde
 {
@@ -17,7 +18,7 @@ typedef struct _peakenv_tilde
   double   x_old_peak;
   double   x_c1;
   double   x_releasetime;
-  t_float  x_msi;
+  t_float  x_float_sig_in;
 } t_peakenv_tilde;
 
 static t_class *peakenv_tilde_class;
@@ -29,16 +30,16 @@ static void peakenv_tilde_reset(t_peakenv_tilde *x)
 
 static void peakenv_tilde_ft1(t_peakenv_tilde *x, t_floatarg f)/* release-time in ms */
 {
-  if(f < 0.0f)
-    f = 0.0f;
+  if(f < 0.0)
+    f = 0.0;
   x->x_releasetime = (double)f;
   x->x_c1 = exp(-1.0/(x->x_sr*0.001*x->x_releasetime));
 }
 
 static t_int *peakenv_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_peakenv_tilde *x = (t_peakenv_tilde *)(w[3]);
   int n = (int)(w[4]);
   double peak = x->x_old_peak;
@@ -52,7 +53,7 @@ static t_int *peakenv_tilde_perform(t_int *w)
     peak *= c1;
     if(absolute > peak)
       peak = absolute;
-    *out++ = (t_float)peak;
+    *out++ = (t_sample)peak;
   }
   /* NAN protect */
   //if(IEM_DENORMAL(peak))
@@ -72,14 +73,14 @@ static void *peakenv_tilde_new(t_floatarg f)
 {
   t_peakenv_tilde *x = (t_peakenv_tilde *)pd_new(peakenv_tilde_class);
   
-  if(f <= 0.0f)
-    f = 0.0f;
+  if(f <= 0.0)
+    f = 0.0;
   x->x_sr = 44100.0;
   peakenv_tilde_ft1(x, f);
   x->x_old_peak = 0.0;
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   return(x);
 }
 
@@ -87,7 +88,7 @@ void peakenv_tilde_setup(void)
 {
   peakenv_tilde_class = class_new(gensym("peakenv~"), (t_newmethod)peakenv_tilde_new,
     0, sizeof(t_peakenv_tilde), 0, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(peakenv_tilde_class, t_peakenv_tilde, x_msi);
+  CLASS_MAINSIGNALIN(peakenv_tilde_class, t_peakenv_tilde, x_float_sig_in);
   class_addmethod(peakenv_tilde_class, (t_method)peakenv_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(peakenv_tilde_class, (t_method)peakenv_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
   class_addmethod(peakenv_tilde_class, (t_method)peakenv_tilde_reset, gensym("reset"), 0);
diff --git a/externals/iemlib/iemlib1/src/prvu~.c b/externals/iemlib/iemlib1/src/prvu~.c
index b79a7fedb..0f2e6a492 100644
--- a/externals/iemlib/iemlib1/src/prvu~.c
+++ b/externals/iemlib/iemlib1/src/prvu~.c
@@ -30,7 +30,7 @@ typedef struct _prvu_tilde
   t_float   x_release_time;
   t_float   x_c1;
   int       x_started;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_prvu_tilde;
 
 static t_class *prvu_tilde_class;
@@ -39,16 +39,16 @@ static void prvu_tilde_tick_hold(t_prvu_tilde *x);
 
 static void prvu_tilde_reset(t_prvu_tilde *x)
 {
-  x->x_at[0].a_w.w_float = -99.9f;
-  x->x_at[1].a_w.w_float = -99.9f;
-  x->x_at[2].a_w.w_float = 0.0f;
+  x->x_at[0].a_w.w_float = -99.9;
+  x->x_at[1].a_w.w_float = -99.9;
+  x->x_at[2].a_w.w_float = 0.0;
   outlet_list(x->x_obj.ob_outlet, &s_list, 3, x->x_at);
   x->x_overflow_counter = 0;
-  x->x_cur_peak = 0.0f;
-  x->x_old_peak = 0.0f;
-  x->x_hold_peak = 0.0f;
-  x->x_sum_rms = 0.0f;
-  x->x_old_rms = 0.0f;
+  x->x_cur_peak = 0.0;
+  x->x_old_peak = 0.0;
+  x->x_hold_peak = 0.0;
+  x->x_sum_rms = 0.0;
+  x->x_old_rms = 0.0;
   x->x_hold = 0;
   clock_unset(x->x_clock_hold);
   clock_delay(x->x_clock_metro, x->x_metro_time);
@@ -82,25 +82,25 @@ static void prvu_tilde_float(t_prvu_tilde *x, t_floatarg f)
 
 static void prvu_tilde_t_release(t_prvu_tilde *x, t_floatarg release_time)
 {
-  if(release_time <= 5.0f)
-    release_time = 5.0f;
+  if(release_time <= 5.0)
+    release_time = 5.0;
   x->x_release_time = release_time;
-  x->x_c1 = exp(-2.0f*x->x_metro_time/x->x_release_time);
+  x->x_c1 = exp(-2.0*x->x_metro_time/x->x_release_time);
 }
 
 static void prvu_tilde_t_metro(t_prvu_tilde *x, t_floatarg metro_time)
 {
-  if(metro_time <= 5.0f)
-    metro_time = 5.0f;
+  if(metro_time <= 5.0)
+    metro_time = 5.0;
   x->x_metro_time = metro_time;
-  x->x_c1 = exp(-2.0f*x->x_metro_time/x->x_release_time);
-  x->x_rcp = 1.0f/(x->x_sr*(t_float)x->x_metro_time);
+  x->x_c1 = exp(-2.0*x->x_metro_time/x->x_release_time);
+  x->x_rcp = 1.0/(x->x_sr*(t_float)x->x_metro_time);
 }
 
 static void prvu_tilde_t_hold(t_prvu_tilde *x, t_floatarg hold_time)
 {
-  if(hold_time <= 5.0f)
-    hold_time = 5.0f;
+  if(hold_time <= 5.0)
+    hold_time = 5.0;
   x->x_hold_time = hold_time;
 }
 
@@ -111,7 +111,7 @@ static void prvu_tilde_threshold(t_prvu_tilde *x, t_floatarg thresh)
 
 static t_int *prvu_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
+  t_sample *in = (t_sample *)(w[1]);
   t_prvu_tilde *x = (t_prvu_tilde *)(w[2]);
   int n = (int)(w[3]);
   t_float peak = x->x_cur_peak, power, sum=x->x_sum_rms;
@@ -121,7 +121,7 @@ static t_int *prvu_tilde_perform(t_int *w)
   {
     for(i=0; i<n; i++)
     {
-      power = in[i]*in[i];
+      power = (t_float)(in[i]*in[i]);
       if(power > peak)
         peak = power;
       sum += power;
@@ -135,7 +135,7 @@ static t_int *prvu_tilde_perform(t_int *w)
 static void prvu_tilde_dsp(t_prvu_tilde *x, t_signal **sp)
 {
   x->x_sr = 0.001*(t_float)sp[0]->s_sr;
-  x->x_rcp = 1.0f/(x->x_sr*x->x_metro_time);
+  x->x_rcp = 1.0/(x->x_sr*x->x_metro_time);
   dsp_add(prvu_tilde_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
   clock_delay(x->x_clock_metro, x->x_metro_time);
 }
@@ -153,7 +153,7 @@ static void prvu_tilde_tick_metro(t_prvu_tilde *x)
   x->x_old_peak *= c1;
   /* NAN protect */
   if(IEM_DENORMAL(x->x_old_peak))
-    x->x_old_peak = 0.0f;
+    x->x_old_peak = 0.0;
   
   if(x->x_cur_peak > x->x_old_peak)
     x->x_old_peak = x->x_cur_peak;
@@ -165,37 +165,37 @@ static void prvu_tilde_tick_metro(t_prvu_tilde *x)
   }
   if(!x->x_hold)
     x->x_hold_peak = x->x_old_peak;
-  if(x->x_hold_peak <= 0.0000000001f)
-    dbp = -99.9f;
-  else if(x->x_hold_peak > 1000000.0f)
+  if(x->x_hold_peak <= 0.0000000001)
+    dbp = -99.9;
+  else if(x->x_hold_peak > 1000000.0)
   {
-    dbp = 60.0f;
-    x->x_hold_peak = 1000000.0f;
-    x->x_old_peak = 1000000.0f;
+    dbp = 60.0;
+    x->x_hold_peak = 1000000.0;
+    x->x_old_peak = 1000000.0;
   }
   else
-    dbp = 4.3429448195f*log(x->x_hold_peak);
-  x->x_cur_peak = 0.0f;
+    dbp = 4.3429448195*log(x->x_hold_peak);
+  x->x_cur_peak = 0.0;
   if(dbp >= x->x_threshold_over)
     x->x_overflow_counter++;
   x->x_at[1].a_w.w_float = dbp;
   x->x_at[2].a_w.w_float = (t_float)x->x_overflow_counter;
   
-  cur_rms = (1.0f - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
+  cur_rms = (1.0 - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
   /* NAN protect */
   if(IEM_DENORMAL(cur_rms))
-    cur_rms = 0.0f;
+    cur_rms = 0.0;
   
-  if(cur_rms <= 0.0000000001f)
-    dbr = -99.9f;
-  else if(cur_rms > 1000000.0f)
+  if(cur_rms <= 0.0000000001)
+    dbr = -99.9;
+  else if(cur_rms > 1000000.0)
   {
-    dbr = 60.0f;
-    x->x_old_rms = 1000000.0f;
+    dbr = 60.0;
+    x->x_old_rms = 1000000.0;
   }
   else
-    dbr = 4.3429448195f*log(cur_rms);
-  x->x_sum_rms = 0.0f;
+    dbr = 4.3429448195*log(cur_rms);
+  x->x_sum_rms = 0.0;
   x->x_old_rms = cur_rms;
   x->x_at[0].a_w.w_float = dbr;
   outlet_list(x->x_obj.ob_outlet, &s_list, 3, x->x_at);
@@ -216,33 +216,33 @@ static void *prvu_tilde_new(t_floatarg metro_time, t_floatarg hold_time,
   int i;
   
   x = (t_prvu_tilde *)pd_new(prvu_tilde_class);
-  if(metro_time <= 0.0f)
-    metro_time = 300.0f;
-  if(metro_time <= 5.0f)
-    metro_time = 5.0f;
-  if(release_time <= 0.0f)
-    release_time = 300.0f;
-  if(release_time <= 5.0f)
-    release_time = 5.0f;
-  if(hold_time <= 0.0f)
-    hold_time = 1000.0f;
-  if(hold_time <= 5.0f)
-    hold_time = 5.0f;
-  if(threshold == 0.0f)
-    threshold = -0.01f;
+  if(metro_time <= 0.0)
+    metro_time = 300.0;
+  if(metro_time <= 5.0)
+    metro_time = 5.0;
+  if(release_time <= 0.0)
+    release_time = 300.0;
+  if(release_time <= 5.0)
+    release_time = 5.0;
+  if(hold_time <= 0.0)
+    hold_time = 1000.0;
+  if(hold_time <= 5.0)
+    hold_time = 5.0;
+  if(threshold == 0.0)
+    threshold = -0.01;
   x->x_metro_time = metro_time;
   x->x_release_time = release_time;
   x->x_hold_time = hold_time;
   x->x_threshold_over = threshold;
-  x->x_c1 = exp(-2.0f*x->x_metro_time/x->x_release_time);
-  x->x_cur_peak = 0.0f;
-  x->x_old_peak = 0.0f;
-  x->x_hold_peak = 0.0f;
+  x->x_c1 = exp(-2.0*x->x_metro_time/x->x_release_time);
+  x->x_cur_peak = 0.0;
+  x->x_old_peak = 0.0;
+  x->x_hold_peak = 0.0;
   x->x_hold = 0;
-  x->x_sum_rms = 0.0f;
-  x->x_old_rms = 0.0f;
-  x->x_sr = 44.1f;
-  x->x_rcp = 1.0f/(x->x_sr*x->x_metro_time);
+  x->x_sum_rms = 0.0;
+  x->x_old_rms = 0.0;
+  x->x_sr = 44.1;
+  x->x_rcp = 1.0/(x->x_sr*x->x_metro_time);
   x->x_overflow_counter = 0;
   x->x_clock_metro = clock_new(x, (t_method)prvu_tilde_tick_metro);
   x->x_clock_hold = clock_new(x, (t_method)prvu_tilde_tick_hold);
@@ -251,7 +251,7 @@ static void *prvu_tilde_new(t_floatarg metro_time, t_floatarg hold_time,
   x->x_at[0].a_type = A_FLOAT;
   x->x_at[1].a_type = A_FLOAT;
   x->x_at[2].a_type = A_FLOAT;
-  x->x_msi = 0.0f;
+  x->x_float_sig_in = 0.0;
   return(x);
 }
 
@@ -260,7 +260,7 @@ void prvu_tilde_setup(void)
   prvu_tilde_class = class_new(gensym("prvu~"), (t_newmethod)prvu_tilde_new,
     (t_method)prvu_tilde_ff, sizeof(t_prvu_tilde), 0,
     A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(prvu_tilde_class, t_prvu_tilde, x_msi);
+  CLASS_MAINSIGNALIN(prvu_tilde_class, t_prvu_tilde, x_float_sig_in);
   class_addmethod(prvu_tilde_class, (t_method)prvu_tilde_dsp, gensym("dsp"), 0);
   class_addfloat(prvu_tilde_class, prvu_tilde_float);
   class_addmethod(prvu_tilde_class, (t_method)prvu_tilde_reset, gensym("reset"), 0);
@@ -270,5 +270,4 @@ void prvu_tilde_setup(void)
   class_addmethod(prvu_tilde_class, (t_method)prvu_tilde_t_metro, gensym("t_metro"), A_FLOAT, 0);
   class_addmethod(prvu_tilde_class, (t_method)prvu_tilde_t_hold, gensym("t_hold"), A_FLOAT, 0);
   class_addmethod(prvu_tilde_class, (t_method)prvu_tilde_threshold, gensym("threshold"), A_FLOAT, 0);
-//  class_sethelpsymbol(prvu_tilde_class, gensym("iemhelp/help-prvu~"));
 }
diff --git a/externals/iemlib/iemlib1/src/pvu~.c b/externals/iemlib/iemlib1/src/pvu~.c
index dc18f4a20..74b496af4 100644
--- a/externals/iemlib/iemlib1/src/pvu~.c
+++ b/externals/iemlib/iemlib1/src/pvu~.c
@@ -23,7 +23,7 @@ typedef struct _pvu_tilde
   t_float   x_release_time;
   int       x_overflow_counter;
   int       x_started;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_pvu_tilde;
 
 static t_class *pvu_tilde_class;
@@ -31,11 +31,11 @@ static void pvu_tilde_tick(t_pvu_tilde *x);
 
 static void pvu_tilde_reset(t_pvu_tilde *x)
 {
-  outlet_float(x->x_outlet_over, 0.0f);
-  outlet_float(x->x_outlet_meter, -199.9f);
+  outlet_float(x->x_outlet_over, 0.0);
+  outlet_float(x->x_outlet_meter, -199.9);
   x->x_overflow_counter = 0;
-  x->x_cur_peak = 0.0f;
-  x->x_old_peak = 0.0f;
+  x->x_cur_peak = 0.0;
+  x->x_old_peak = 0.0;
   clock_delay(x->x_clock, x->x_metro_time);
 }
 
@@ -67,16 +67,16 @@ static void pvu_tilde_float(t_pvu_tilde *x, t_floatarg f)
 
 static void pvu_tilde_t_release(t_pvu_tilde *x, t_floatarg release_time)
 {
-  if(release_time <= 5.0f)
-    release_time = 5.0f;
+  if(release_time <= 5.0)
+    release_time = 5.0;
   x->x_release_time = release_time;
   x->x_c1 = exp(-x->x_metro_time/release_time);
 }
 
 static void pvu_tilde_t_metro(t_pvu_tilde *x, t_floatarg metro_time)
 {
-  if(metro_time <= 5.0f)
-    metro_time = 5.0f;
+  if(metro_time <= 5.0)
+    metro_time = 5.0;
   x->x_metro_time = (int)metro_time;
   x->x_c1 = exp(-metro_time/x->x_release_time);
 }
@@ -88,7 +88,7 @@ static void pvu_tilde_threshold(t_pvu_tilde *x, t_floatarg thresh)
 
 static t_int *pvu_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
+  t_sample *in = (t_sample *)(w[1]);
   t_pvu_tilde *x = (t_pvu_tilde *)(w[2]);
   int n = (int)(w[3]);
   t_float peak = x->x_cur_peak;
@@ -99,7 +99,7 @@ static t_int *pvu_tilde_perform(t_int *w)
   {
     for(i=0; i<n; i++)
     {
-      absolute = fabs(*in++);
+      absolute = (t_float)fabs(*in++);
       if(absolute > peak)
         peak = absolute;
     }
@@ -122,26 +122,26 @@ static void pvu_tilde_tick(t_pvu_tilde *x)
   x->x_old_peak *= x->x_c1;
   /* NAN protect */
   if(IEM_DENORMAL(x->x_old_peak))
-    x->x_old_peak = 0.0f;
+    x->x_old_peak = 0.0;
   
   if(x->x_cur_peak > x->x_old_peak)
     x->x_old_peak = x->x_cur_peak;
-  if(x->x_old_peak <= 0.0000000001f)
-    db = -199.9f;
-  else if(x->x_old_peak > 1000000.0f)
+  if(x->x_old_peak <= 0.0000000001)
+    db = -199.9;
+  else if(x->x_old_peak > 1000000.0)
   {
-    db = 120.0f;
-    x->x_old_peak = 1000000.0f;
+    db = 120.0;
+    x->x_old_peak = 1000000.0;
   }
   else
-    db = 8.6858896381f*log(x->x_old_peak);
+    db = 8.6858896381*log(x->x_old_peak);
   if(db >= x->x_threshold_over)
   {
     x->x_overflow_counter++;
     outlet_float(x->x_outlet_over, (t_float)x->x_overflow_counter);
   }
   outlet_float(x->x_outlet_meter, db);
-  x->x_cur_peak = 0.0f;
+  x->x_cur_peak = 0.0;
   clock_delay(x->x_clock, x->x_metro_time);
 }
 
@@ -151,28 +151,28 @@ static void *pvu_tilde_new(t_floatarg metro_time, t_floatarg release_time, t_flo
   t_float t;
   
   x = (t_pvu_tilde *)pd_new(pvu_tilde_class);
-  if(metro_time <= 0.0f)
-    metro_time = 300.0f;
-  if(metro_time <= 5.0f)
-    metro_time = 5.0f;
-  if(release_time <= 0.0f)
-    release_time = 300.0f;
-  if(release_time <= 5.0f)
-    release_time = 5.0f;
-  if(threshold == 0.0f)
-    threshold = -0.01f;
+  if(metro_time <= 0.0)
+    metro_time = 300.0;
+  if(metro_time <= 5.0)
+    metro_time = 5.0;
+  if(release_time <= 0.0)
+    release_time = 300.0;
+  if(release_time <= 5.0)
+    release_time = 5.0;
+  if(threshold == 0.0)
+    threshold = -0.01;
   x->x_threshold_over = threshold;
   x->x_overflow_counter = 0;
   x->x_metro_time = metro_time;
   x->x_release_time = release_time;
   x->x_c1 = exp(-metro_time/release_time);
-  x->x_cur_peak = 0.0f;
-  x->x_old_peak = 0.0f;
+  x->x_cur_peak = 0.0;
+  x->x_old_peak = 0.0;
   x->x_clock = clock_new(x, (t_method)pvu_tilde_tick);
   x->x_outlet_meter = outlet_new(&x->x_obj, &s_float);/* left */
   x->x_outlet_over = outlet_new(&x->x_obj, &s_float); /* right */
   x->x_started = 1;
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   return(x);
 }
 
@@ -185,7 +185,7 @@ void pvu_tilde_setup(void )
 {
   pvu_tilde_class = class_new(gensym("pvu~"), (t_newmethod)pvu_tilde_new,
     (t_method)pvu_tilde_ff, sizeof(t_pvu_tilde), 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(pvu_tilde_class, t_pvu_tilde, x_msi);
+  CLASS_MAINSIGNALIN(pvu_tilde_class, t_pvu_tilde, x_float_sig_in);
   class_addmethod(pvu_tilde_class, (t_method)pvu_tilde_dsp, gensym("dsp"), 0);
   class_addfloat(pvu_tilde_class, pvu_tilde_float);
   class_addmethod(pvu_tilde_class, (t_method)pvu_tilde_reset, gensym("reset"), 0);
@@ -194,5 +194,4 @@ void pvu_tilde_setup(void )
   class_addmethod(pvu_tilde_class, (t_method)pvu_tilde_t_release, gensym("t_release"), A_FLOAT, 0);
   class_addmethod(pvu_tilde_class, (t_method)pvu_tilde_t_metro, gensym("t_metro"), A_FLOAT, 0);
   class_addmethod(pvu_tilde_class, (t_method)pvu_tilde_threshold, gensym("threshold"), A_FLOAT, 0);
-//  class_sethelpsymbol(pvu_tilde_class, gensym("iemhelp/help-pvu~"));
 }
diff --git a/externals/iemlib/iemlib1/src/rvu~.c b/externals/iemlib/iemlib1/src/rvu~.c
index f295bfbd8..e93e42094 100644
--- a/externals/iemlib/iemlib1/src/rvu~.c
+++ b/externals/iemlib/iemlib1/src/rvu~.c
@@ -22,7 +22,7 @@ typedef struct _rvu_tilde
   t_float   x_release_time;
   t_float   x_c1;
   int       x_started;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_rvu_tilde;
 
 static t_class *rvu_tilde_class;
@@ -30,9 +30,9 @@ static void rvu_tilde_tick_metro(t_rvu_tilde *x);
 
 static void rvu_tilde_reset(t_rvu_tilde *x)
 {
-  outlet_float(x->x_obj.ob_outlet, -99.9f);
-  x->x_sum_rms = 0.0f;
-  x->x_old_rms = 0.0f;
+  outlet_float(x->x_obj.ob_outlet, -99.9);
+  x->x_sum_rms = 0.0;
+  x->x_old_rms = 0.0;
   clock_delay(x->x_clock_metro, x->x_metro_time);
 }
 
@@ -50,7 +50,7 @@ static void rvu_tilde_start(t_rvu_tilde *x)
 
 static void rvu_tilde_float(t_rvu_tilde *x, t_floatarg f)
 {
-  if(f == 0.0f)
+  if(f == 0.0)
   {
     clock_unset(x->x_clock_metro);
     x->x_started = 0;
@@ -64,24 +64,24 @@ static void rvu_tilde_float(t_rvu_tilde *x, t_floatarg f)
 
 static void rvu_tilde_t_release(t_rvu_tilde *x, t_floatarg release_time)
 {
-  if(release_time <= 5.0f)
-    release_time = 5.0f;
+  if(release_time <= 5.0)
+    release_time = 5.0;
   x->x_release_time = release_time;
-  x->x_c1 = exp(-2.0f*x->x_metro_time/x->x_release_time);
+  x->x_c1 = exp(-2.0*x->x_metro_time/x->x_release_time);
 }
 
 static void rvu_tilde_t_metro(t_rvu_tilde *x, t_floatarg metro_time)
 {
-  if(metro_time <= 5.0f)
-    metro_time = 5.0f;
+  if(metro_time <= 5.0)
+    metro_time = 5.0;
   x->x_metro_time = metro_time;
-  x->x_c1 = exp(-2.0f*x->x_metro_time/x->x_release_time);
-  x->x_rcp = 1.0f/(x->x_sr*x->x_metro_time);
+  x->x_c1 = exp(-2.0*x->x_metro_time/x->x_release_time);
+  x->x_rcp = 1.0/(x->x_sr*x->x_metro_time);
 }
 
 static t_int *rvu_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
+  t_sample *in = (t_sample *)(w[1]);
   t_rvu_tilde *x = (t_rvu_tilde *)(w[2]);
   int n = (int)(w[3]);
   t_float sum=x->x_sum_rms;
@@ -91,7 +91,7 @@ static t_int *rvu_tilde_perform(t_int *w)
   {
     for(i=0; i<n; i++)
     {
-      sum += in[i]*in[i];
+      sum += (t_float)(in[i]*in[i]);
     }
     x->x_sum_rms = sum;
   }
@@ -101,7 +101,7 @@ static t_int *rvu_tilde_perform(t_int *w)
 static void rvu_tilde_dsp(t_rvu_tilde *x, t_signal **sp)
 {
   x->x_sr = 0.001*(t_float)sp[0]->s_sr;
-  x->x_rcp = 1.0f/(x->x_sr*x->x_metro_time);
+  x->x_rcp = 1.0/(x->x_sr*x->x_metro_time);
   dsp_add(rvu_tilde_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
   clock_delay(x->x_clock_metro, x->x_metro_time);
 }
@@ -110,21 +110,21 @@ static void rvu_tilde_tick_metro(t_rvu_tilde *x)
 {
   t_float dbr, cur_rms, c1=x->x_c1;
   
-  cur_rms = (1.0f - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
+  cur_rms = (1.0 - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
   /* NAN protect */
   if(IEM_DENORMAL(cur_rms))
-    cur_rms = 0.0f;
+    cur_rms = 0.0;
   
-  if(cur_rms <= 0.0000000001f)
-    dbr = -99.9f;
-  else if(cur_rms > 1000000.0f)
+  if(cur_rms <= 0.0000000001)
+    dbr = -99.9;
+  else if(cur_rms > 1000000.0)
   {
-    dbr = 60.0f;
-    x->x_old_rms = 1000000.0f;
+    dbr = 60.0;
+    x->x_old_rms = 1000000.0;
   }
   else
-    dbr = 4.3429448195f*log(cur_rms);
-  x->x_sum_rms = 0.0f;
+    dbr = 4.3429448195*log(cur_rms);
+  x->x_sum_rms = 0.0;
   x->x_old_rms = cur_rms;
   outlet_float(x->x_obj.ob_outlet, dbr);
   clock_delay(x->x_clock_metro, x->x_metro_time);
@@ -139,25 +139,25 @@ static void *rvu_tilde_new(t_floatarg metro_time, t_floatarg release_time)
 {
   t_rvu_tilde *x=(t_rvu_tilde *)pd_new(rvu_tilde_class);
   
-  if(metro_time <= 0.0f)
-    metro_time = 300.0f;
-  if(metro_time <= 5.0f)
-    metro_time = 5.0f;
-  if(release_time <= 0.0f)
-    release_time = 300.0f;
-  if(release_time <= 5.0f)
-    release_time = 5.0f;
+  if(metro_time <= 0.0)
+    metro_time = 300.0;
+  if(metro_time <= 5.0)
+    metro_time = 5.0;
+  if(release_time <= 0.0)
+    release_time = 300.0;
+  if(release_time <= 5.0)
+    release_time = 5.0;
   x->x_metro_time = metro_time;
   x->x_release_time = release_time;
-  x->x_c1 = exp(-2.0f*x->x_metro_time/x->x_release_time);
-  x->x_sum_rms = 0.0f;
-  x->x_old_rms = 0.0f;
-  x->x_sr = 44.1f;
-  x->x_rcp = 1.0f/(x->x_sr*x->x_metro_time);
+  x->x_c1 = exp(-2.0*x->x_metro_time/x->x_release_time);
+  x->x_sum_rms = 0.0;
+  x->x_old_rms = 0.0;
+  x->x_sr = 44.1;
+  x->x_rcp = 1.0/(x->x_sr*x->x_metro_time);
   x->x_clock_metro = clock_new(x, (t_method)rvu_tilde_tick_metro);
   x->x_started = 1;
   outlet_new(&x->x_obj, &s_float);
-  x->x_msi = 0.0f;
+  x->x_float_sig_in = 0.0;
   return(x);
 }
 
@@ -166,7 +166,7 @@ void rvu_tilde_setup(void)
   rvu_tilde_class = class_new(gensym("rvu~"), (t_newmethod)rvu_tilde_new,
     (t_method)rvu_tilde_ff, sizeof(t_rvu_tilde), 0,
     A_DEFFLOAT, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(rvu_tilde_class, t_rvu_tilde, x_msi);
+  CLASS_MAINSIGNALIN(rvu_tilde_class, t_rvu_tilde, x_float_sig_in);
   class_addmethod(rvu_tilde_class, (t_method)rvu_tilde_dsp, gensym("dsp"), 0);
   class_addfloat(rvu_tilde_class, rvu_tilde_float);
   class_addmethod(rvu_tilde_class, (t_method)rvu_tilde_reset, gensym("reset"), 0);
@@ -174,5 +174,4 @@ void rvu_tilde_setup(void)
   class_addmethod(rvu_tilde_class, (t_method)rvu_tilde_stop, gensym("stop"), 0);
   class_addmethod(rvu_tilde_class, (t_method)rvu_tilde_t_release, gensym("t_release"), A_FLOAT, 0);
   class_addmethod(rvu_tilde_class, (t_method)rvu_tilde_t_metro, gensym("t_metro"), A_FLOAT, 0);
-//  class_sethelpsymbol(rvu_tilde_class, gensym("iemhelp/help-rvu~"));
 }
diff --git a/externals/iemlib/iemlib1/src/sin_freq~.c b/externals/iemlib/iemlib1/src/sin_freq~.c
new file mode 100644
index 000000000..0744fa51e
--- /dev/null
+++ b/externals/iemlib/iemlib1/src/sin_freq~.c
@@ -0,0 +1,102 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2011 */
+
+#include "m_pd.h"
+#include "iemlib.h"
+
+/* --- sin_freq~ - output the frequency of a --- */
+/* --- sinewave in Hz ----- */
+/* --- as a signal ----------------------------- */
+
+typedef struct _sin_freq_tilde
+{
+  t_object x_obj;
+  t_sample x_prev;
+  t_sample x_cur_out;
+  t_sample x_counter;
+  t_sample x_sr;
+  t_float  x_float_sig_in;
+} t_sin_freq_tilde;
+
+static t_class *sin_freq_tilde_class;
+
+static t_int *sin_freq_tilde_perform(t_int *w)
+{
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
+  t_sin_freq_tilde *x = (t_sin_freq_tilde *)(w[3]);
+  int i, n = (t_int)(w[4]);
+  t_sample prev=x->x_prev;
+  t_sample cur_out=x->x_cur_out;
+  t_sample counter=x->x_counter;
+  t_sample sr=x->x_sr;
+  t_sample delta_x=0.0;
+  
+  for(i=0; i<n; i++)
+  {
+    if((in[i] >= 0.0) && (prev < 0.0)) /* begin of counting, pos. zero cross of sig_in */
+    {
+      delta_x = prev / (prev - in[i]);  /* dx = y1 / (y1 - y2) */
+      counter += delta_x;
+      cur_out = sr / counter;
+      
+      counter = 1.0 - delta_x;
+    }
+    else
+    {
+      counter += 1.0;
+    }
+    
+    prev = in[i];
+    out[i] = cur_out;
+  }
+  
+  x->x_prev = prev;
+  x->x_cur_out = cur_out;
+  x->x_counter = counter;
+  
+  return(w+5);
+}
+
+static void sin_freq_tilde_dsp(t_sin_freq_tilde *x, t_signal **sp)
+{
+  x->x_sr = (t_sample)sp[0]->s_sr;
+  dsp_add(sin_freq_tilde_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sin_freq_tilde_new(void)
+{
+  t_sin_freq_tilde *x = (t_sin_freq_tilde *)pd_new(sin_freq_tilde_class);
+  
+  outlet_new(&x->x_obj, &s_signal);
+  
+  x->x_prev = 0.0;
+  x->x_cur_out = 0.0;
+  x->x_counter = 0.0;
+  x->x_sr = 44100.0;
+  x->x_float_sig_in = 0.0;
+  
+  return (x);
+}
+
+void sin_freq_tilde_setup(void)
+{
+  sin_freq_tilde_class = class_new(gensym("sin_freq~"), (t_newmethod)sin_freq_tilde_new,
+        0, sizeof(t_sin_freq_tilde), 0, 0);
+  CLASS_MAINSIGNALIN(sin_freq_tilde_class, t_sin_freq_tilde, x_float_sig_in);
+  class_addmethod(sin_freq_tilde_class, (t_method)sin_freq_tilde_dsp, gensym("dsp"), 0);
+}
+
+/*
+geradengleichung:
+
+y - y1 = ((y2 - y1) / (x2 - x1)) * (x - x1)
+y = ((y2 - y1) / (x2 - x1)) * (x - x1) + y1 = 0
+x1 = 0
+x2 = 1
+0 = ((y2 - y1) / 1) * (x) + y1
+-y1 = (y2 - y1) * x
+x = y1 / (y1 - y2)
+*/
diff --git a/externals/iemlib/iemlib1/src/sin_phase~.c b/externals/iemlib/iemlib1/src/sin_phase~.c
index 925be28ed..e99f3a723 100644
--- a/externals/iemlib/iemlib1/src/sin_phase~.c
+++ b/externals/iemlib/iemlib1/src/sin_phase~.c
@@ -13,63 +13,63 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006
 typedef struct _sin_phase_tilde
 {
   t_object x_obj;
-  t_float  x_prev1;
-  t_float  x_prev2;
-  t_float  x_cur_out;
-  int      x_counter1;
-  int      x_counter2;
+  t_sample x_prev1;
+  t_sample x_prev2;
+  t_sample x_cur_out;
+  t_sample x_counter1;
+  t_sample x_counter2;
   int      x_state1;
   int      x_state2;
-  t_float  x_msi;
+  t_float  x_float_sig_in;
 } t_sin_phase_tilde;
 
 static t_class *sin_phase_tilde_class;
 
 static t_int *sin_phase_tilde_perform(t_int *w)
 {
-  t_float *in1 = (t_float *)(w[1]);
-  t_float *in2 = (t_float *)(w[2]);
-  t_float *out = (t_float *)(w[3]);
+  t_sample *in1 = (t_sample *)(w[1]);
+  t_sample *in2 = (t_sample *)(w[2]);
+  t_sample *out = (t_sample *)(w[3]);
   t_sin_phase_tilde *x = (t_sin_phase_tilde *)(w[4]);
   int i, n = (t_int)(w[5]);
-  t_float prev1=x->x_prev1;
-  t_float prev2=x->x_prev2;
-  t_float cur_out=x->x_cur_out;
-  int counter1=x->x_counter1;
-  int counter2=x->x_counter2;
+  t_sample prev1=x->x_prev1;
+  t_sample prev2=x->x_prev2;
+  t_sample cur_out=x->x_cur_out;
+  t_sample counter1=x->x_counter1;
+  t_sample counter2=x->x_counter2;
   int state1=x->x_state1;
   int state2=x->x_state2;
   
   for(i=0; i<n; i++)
   {
-    if((in1[i] >= 0.0f) && (prev1 < 0.0f))
+    if((in1[i] >= 0.0) && (prev1 < 0.0))
     {/* pos. zero cross of sig_in_1 */
       state1 = 1;
-      counter1 = 0;
+      counter1 = prev1 / (prev1 - in1[i]);  /* x = y1 / (y1 - y2) */
     }
-    else if((in1[i] < 0.0f) && (prev1 >= 0.0f))
+    else if((in1[i] < 0.0) && (prev1 >= 0.0))
     {/* neg. zero cross of sig_in_1 */
       state2 = 1;
-      counter2 = 0;
+      counter2 = prev1 / (prev1 - in1[i]);  /* x = y1 / (y1 - y2) */
     }
     
-    if((in2[i] >= 0.0f) && (prev2 < 0.0f))
+    if((in2[i] >= 0.0) && (prev2 < 0.0))
     {/* pos. zero cross of sig_in_2 */
       state1 = 0;
-      cur_out = (t_float)(counter1);
-      counter1 = 0;
+      cur_out = counter1 + prev2 / (prev2 - in2[i]) - 1.0;
+      counter1 = 0.0;
     }
-    else if((in2[i] < 0.0f) && (prev2 >= 0.0f))
+    else if((in2[i] < 0.0) && (prev2 >= 0.0))
     {/* neg. zero cross of sig_in_2 */
       state2 = 0;
-      cur_out = (t_float)(counter2);
-      counter2 = 0;
+      cur_out = counter2 + prev2 / (prev2 - in2[i]) - 1.0;
+      counter2 = 0.0;
     }
     
     if(state1)
-      counter1++;
+      counter1 += 1.0;
     if(state2)
-      counter2++;
+      counter2 += 1.0;
     
     prev1 = in1[i];
     prev2 = in2[i];
@@ -99,14 +99,14 @@ static void *sin_phase_tilde_new(void)
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
   outlet_new(&x->x_obj, &s_signal);
   
-  x->x_prev1 = 0.0f;
-  x->x_prev2 = 0.0f;
-  x->x_cur_out = 0.0f;
-  x->x_counter1 = 0;
-  x->x_counter2 = 0;
+  x->x_prev1 = 0.0;
+  x->x_prev2 = 0.0;
+  x->x_cur_out = 0.0;
+  x->x_counter1 = 0.0;
+  x->x_counter2 = 0.0;
   x->x_state1 = 0;
   x->x_state2 = 0;
-  x->x_msi = 0;
+  x->x_float_sig_in = 0.0;
   
   return (x);
 }
@@ -115,7 +115,18 @@ void sin_phase_tilde_setup(void)
 {
   sin_phase_tilde_class = class_new(gensym("sin_phase~"), (t_newmethod)sin_phase_tilde_new,
         0, sizeof(t_sin_phase_tilde), 0, 0);
-  CLASS_MAINSIGNALIN(sin_phase_tilde_class, t_sin_phase_tilde, x_msi);
+  CLASS_MAINSIGNALIN(sin_phase_tilde_class, t_sin_phase_tilde, x_float_sig_in);
   class_addmethod(sin_phase_tilde_class, (t_method)sin_phase_tilde_dsp, gensym("dsp"), 0);
-//  class_sethelpsymbol(sin_phase_tilde_class, gensym("iemhelp/help-sin_phase~"));
 }
+
+/*
+geradengleichung:
+
+y - y1 = ((y2 - y1) / (x2 - x1)) * (x - x1)
+y = ((y2 - y1) / (x2 - x1)) * (x - x1) + y1 = 0
+x1 = 0
+x2 = 1
+0 = ((y2 - y1) / 1) * (x) + y1
+-y1 = (y2 - y1) * x
+x = y1 / (y1 - y2)
+*/
diff --git a/externals/iemlib/iemlib1/src/soundfile_info.c b/externals/iemlib/iemlib1/src/soundfile_info.c
index 654f71a5c..f018370a6 100644
--- a/externals/iemlib/iemlib1/src/soundfile_info.c
+++ b/externals/iemlib/iemlib1/src/soundfile_info.c
@@ -61,6 +61,186 @@ static unsigned long soundfile_info_string_to_uint32(char *cvec)
   return(ul);
 }
 
+static void soundfile_info_uint32_to_string(char *cvec, unsigned long ul)
+{
+  unsigned char *uc=(unsigned char *)cvec;
+  
+  *uc = (unsigned char)(0x000000ff & ul);
+  *(uc+1) = (unsigned char)(0x000000ff & (ul/256));
+  *(uc+2) = (unsigned char)(0x000000ff & (ul/65536));
+  *(uc+3) = (unsigned char)(0x000000ff & (ul/16777216));
+  return;
+}
+
+static void soundfile_info_overwrite_sr(t_soundfile_info *x, t_symbol *filename, t_floatarg new_sr)
+{
+  char completefilename[400];
+  int i, n, n2, n4, filesize, read_chars, header_size=0, ch, bytesperframe, sr, n_frames;
+  FILE *fh;
+  t_atom *at;
+  char *cvec;
+  unsigned long ul_chunk_size, ul_sr;
+  short ss_format, ss_ch, ss_bytesperframe;
+  
+  if(filename->s_name[0] == '/')/*make complete path + filename*/
+  {
+    strcpy(completefilename, filename->s_name);
+  }
+  else if(((filename->s_name[0] >= 'A')&&(filename->s_name[0] <= 'Z')||
+           (filename->s_name[0] >= 'a')&&(filename->s_name[0] <= 'z'))&&
+          (filename->s_name[1] == ':')&&(filename->s_name[2] == '/'))
+  {
+    strcpy(completefilename, filename->s_name);
+  }
+  else
+  {
+    strcpy(completefilename, canvas_getdir(x->x_canvas)->s_name);
+    strcat(completefilename, "/");
+    strcat(completefilename, filename->s_name);
+  }
+  
+  fh = fopen(completefilename,"r+b");
+  if(!fh)
+  {
+    post("soundfile_info_read: cannot open %s !!\n", completefilename);
+  }
+  else
+  {
+    n = x->x_mem_size; // 10000 bytes
+    n2 = sizeof(short) * x->x_mem_size;
+    n4 = sizeof(long) * x->x_mem_size;
+    fseek(fh, 0, SEEK_END);
+    filesize = ftell(fh);
+    fseek(fh,0,SEEK_SET);
+    read_chars = (int)fread(x->x_begmem, sizeof(char), n4, fh) / 2;
+    //    post("read chars = %d", read_chars);
+    cvec = (char *)x->x_begmem;
+    if(read_chars > 4)
+    {
+      if(strncmp(cvec, "RIFF", 4))
+      {
+        post("soundfile_info_read-error:  %s is no RIFF-WAVE-file", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      header_size += 8; // jump over RIFF chunk size
+      cvec += 8;
+      if(strncmp(cvec, "WAVE", 4))
+      {
+        post("soundfile_info_read-error:  %s is no RIFF-WAVE-file", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      header_size += 4;
+      cvec += 4;
+      
+      for(i=header_size/2; i<read_chars; i++)
+      {
+        if(!strncmp(cvec, "fmt ", 4))
+        {
+          header_size += 4;
+          cvec += 4;
+          goto sr_soundfile_info_fmt;
+        }
+        header_size += 2;
+        cvec += 2;
+      }
+      post("soundfile_info_read-error:  %s has at begin no format-chunk", completefilename);
+      goto sr_soundfile_info_end;
+      
+    sr_soundfile_info_fmt:
+      ul_chunk_size = soundfile_info_string_to_uint32(cvec);
+      if(ul_chunk_size < 16)
+      {
+        post("soundfile_info_read-error:  %s has a format-chunk less than 16", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      header_size += 4;
+      cvec += 4;
+      
+      ss_format = soundfile_info_string_to_int16(cvec);
+      if((ss_format != 1) && (ss_format != 3) && (ss_format != 6) && (ss_format != 7) && (ss_format != -2)) /* PCM = 1 ; IEEE-FLOAT = 3 ; ALAW = 6 ; MULAW = 7 ; WAVE_EX = -2 */
+      {
+        post("soundfile_info_read-error:  %s has unknown format code", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      header_size += 2;
+      cvec += 2;
+      
+      ss_ch = soundfile_info_string_to_int16(cvec); /* channels */
+      if((ss_ch < 1) || (ss_ch > 32000))
+      {
+        post("soundfile_info_read-error:  %s has no common channel-number", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      SETFLOAT(x->x_at_header+SFI_HEADER_CHANNELS, (t_float)ss_ch);
+      ch = (int)ss_ch;
+      header_size += 2;
+      cvec += 2;
+      
+      ul_sr = soundfile_info_string_to_uint32(cvec); /* samplerate */
+      if((ul_sr > 2000000000) || (ul_sr < 1))
+      {
+        post("soundfile_info_read-error:  %s has no common samplerate", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      ul_sr = (unsigned long)new_sr;
+      soundfile_info_uint32_to_string(cvec, ul_sr);
+      
+      fseek(fh,0,SEEK_SET);
+      read_chars = (int)fwrite (x->x_begmem, sizeof(char), n4, fh);
+      fclose(fh);
+      post("written");
+      
+      sr = (int)ul_sr;
+      header_size += 4;
+      cvec += 4;
+      
+      header_size += 4; /* jump over bytes_per_sec */
+      cvec += 4;
+      
+      ss_bytesperframe = soundfile_info_string_to_int16(cvec); /* bytes_per_frame */
+      if((ss_bytesperframe < 1) || (ss_bytesperframe > 32000))
+      {
+        post("soundfile_info_read-error:  %s has no common number of bytes per frame", completefilename);
+        goto sr_soundfile_info_end;
+      }
+      
+      bytesperframe = (int)ss_bytesperframe;
+      header_size += 2;
+      cvec += 2;
+      
+      header_size += 2; /* jump over bits_per_sample */
+      cvec += 2;
+      
+      for(i=header_size/2; i<read_chars; i++) // looking for data chunk
+      {
+        if(!strncmp(cvec, "data", 4))
+          goto sr_soundfile_info_data;
+        header_size += 2;
+        cvec += 2;
+      }
+      post("soundfile_info_read-error:  %s has at begin no data-chunk", completefilename);
+      goto sr_soundfile_info_end;
+      
+    sr_soundfile_info_data:
+      header_size += 8; // ignore data chunk size
+      cvec += 8;
+      
+      
+      
+      /*      post("ch = %d", ch);
+       post("sr = %d", sr);
+       post("bpf = %d", bytesperframe/ch);
+       post("head = %d", header_size);
+       post("len = %d", n_frames);*/
+      
+      
+    sr_soundfile_info_end:
+      
+      ;
+    }
+  }
+}
+
 static void soundfile_info_read(t_soundfile_info *x, t_symbol *filename)
 {
   char completefilename[400];
@@ -255,5 +435,5 @@ void soundfile_info_setup(void)
   soundfile_info_class = class_new(gensym("soundfile_info"), (t_newmethod)soundfile_info_new,
     (t_method)soundfile_info_free, sizeof(t_soundfile_info), 0, 0);
   class_addmethod(soundfile_info_class, (t_method)soundfile_info_read, gensym("read"), A_SYMBOL, 0);
-//  class_sethelpsymbol(soundfile_info_class, gensym("iemhelp/help-soundfile_info"));
+  class_addmethod(soundfile_info_class, (t_method)soundfile_info_overwrite_sr, gensym("overwrite_sr"), A_SYMBOL, A_FLOAT, 0);
 }
diff --git a/externals/iemlib/iemlib1/src/sparse_FIR~.c b/externals/iemlib/iemlib1/src/sparse_FIR~.c
index 0a1043a28..879f36774 100644
--- a/externals/iemlib/iemlib1/src/sparse_FIR~.c
+++ b/externals/iemlib/iemlib1/src/sparse_FIR~.c
@@ -14,38 +14,40 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2010
 typedef struct _sparse_FIR_tilde
 {
   t_object  x_obj;
-  t_float   *x_coef_beg;
+  t_sample  *x_coef_beg;
   int       *x_index_beg;
+  int       x_n_coef_resp_order;
   int       x_n_coef;
   int       x_n_coef_malloc;
-  t_float   *x_history_beg;
+  t_sample  *x_history_beg;
+  int       x_n_order;
+  int       x_n_order_malloc;
   int       x_rw_index;
-  int       x_sparse_FIR_order;
-  t_float   x_msi;
+  t_float   x_float_sig_in;
 } t_sparse_FIR_tilde;
 
 static t_class *sparse_FIR_tilde_class;
 
 static t_int *sparse_FIR_tilde_perform(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[2]);
   t_sparse_FIR_tilde *x = (t_sparse_FIR_tilde *)(w[3]);
   int n = (t_int)(w[4]);
   int rw_index = x->x_rw_index;
   int i, j, ix;
-  int order = x->x_sparse_FIR_order;
-  int n_coef = x->x_n_coef;
+  int order = x->x_n_order;
+  int n_coef = x->x_n_coef_resp_order;
   int n_coef8;
-  t_float sum=0.0f;
-  t_float *coef = x->x_coef_beg;
+  t_sample sum=0.0;
+  t_sample *coef = x->x_coef_beg;
   int *index = x->x_index_beg;
-  t_float *write_hist1=x->x_history_beg;
-  t_float *write_hist2;
-  t_float *read_hist;
-  t_float *coef_vec;
+  t_sample *write_hist1=x->x_history_beg;
+  t_sample *write_hist2;
+  t_sample *read_hist;
+  t_sample *coef_vec;
   int *index_vec;
-  t_float *hist_vec;
+  t_sample *hist_vec;
   
   if((order < 1) || (n_coef < 1))
     goto sparse_FIR_tilde_perf_zero;
@@ -59,7 +61,7 @@ static t_int *sparse_FIR_tilde_perform(t_int *w)
   {
     write_hist1[rw_index] = in[i];
     write_hist2[rw_index] = in[i];
-    sum = 0.0f;
+    sum = 0.0;
     coef_vec = coef;
     index_vec = index;
     hist_vec = &read_hist[rw_index];
@@ -101,31 +103,72 @@ static t_int *sparse_FIR_tilde_perform(t_int *w)
 sparse_FIR_tilde_perf_zero:
   
   while(n--)
-    *out++ = 0.0f;
+    *out++ = 0.0;
   return(w+5);
 }
 
+static void sparse_FIR_tilde_sort_within(t_sparse_FIR_tilde *x)
+{
+  int cur_order = x->x_n_order;
+  int n_coef = x->x_n_coef;
+  int index, i;
+  int n_coef_resp_order = 0;
+  int *index_pointer_within = x->x_index_beg;
+  t_float *coef_pointer_within = x->x_coef_beg;
+  int *index_pointer = x->x_index_beg + x->x_n_coef_malloc;
+  t_float *coef_pointer = x->x_coef_beg + x->x_n_coef_malloc;
+  t_float coef;
+  
+  for(i=0; i<n_coef; i++)
+  {
+    index = index_pointer[i];
+    coef = coef_pointer[i];
+    if((index >= 0) && (index < cur_order))
+    {
+      index_pointer_within[i] = -index; /* negate index for FIR direction */
+      coef_pointer_within[i] = coef;
+      n_coef_resp_order++;
+    }
+  }
+  x->x_n_coef_resp_order = n_coef_resp_order;
+}
+
 static void sparse_FIR_tilde_list(t_sparse_FIR_tilde *x, t_symbol *s, int argc, t_atom *argv)
 {
-  int order = x->x_sparse_FIR_order;
-  int n_arg2 = argc/2, index, i;
+  int max_order = x->x_n_order_malloc;
+  int n_pair_arg = argc/2, index, i;
   int n_coef = 0;
-  int *index_pointer = x->x_index_beg;
-  t_float *coef_pointer = x->x_coef_beg;
+  int *index_pointer;
+  t_float *coef_pointer;
   t_float coef;
   
-  for(i=0; i<n_arg2; i++)
+  if(n_pair_arg > 0)
   {
-    index = (int)atom_getfloat(argv++);
-    coef = (t_float)atom_getfloat(argv++);
-    if((index >= 0) && (index < order))
+    if(n_pair_arg > x->x_n_coef_malloc) /* resize */
     {
-      *index_pointer++ = -index;
-      *coef_pointer++ = coef;
-      n_coef++;
+      x->x_index_beg =  (int *)resizebytes(x->x_index_beg, 2*x->x_n_coef_malloc*sizeof(int), 2*n_pair_arg*sizeof(int));
+      x->x_coef_beg =  (t_float *)resizebytes(x->x_coef_beg, 2*x->x_n_coef_malloc*sizeof(t_float), 2*n_pair_arg*sizeof(t_float));
+      x->x_n_coef_malloc = n_pair_arg;
     }
+    
+    index_pointer = x->x_index_beg + x->x_n_coef_malloc;
+    coef_pointer = x->x_coef_beg + x->x_n_coef_malloc;
+    
+    for(i=0; i<n_pair_arg; i++)
+    {
+      index = (int)atom_getfloat(argv++);
+      coef = (t_float)atom_getfloat(argv++);
+      if((index >= 0) && (index < max_order))
+      {
+        *index_pointer++ = index;
+        *coef_pointer++ = coef;
+        n_coef++;
+      }
+    }
+    x->x_n_coef = n_coef;
+    
+    sparse_FIR_tilde_sort_within(x);
   }
-  x->x_n_coef = n_coef;
 }
 
 static void sparse_FIR_tilde_matrix(t_sparse_FIR_tilde *x, t_symbol *s, int argc, t_atom *argv)
@@ -160,19 +203,19 @@ static void sparse_FIR_tilde_matrix(t_sparse_FIR_tilde *x, t_symbol *s, int argc
 
 static void sparse_FIR_tilde_order(t_sparse_FIR_tilde *x, t_floatarg fn)
 {
-  int n = (int)fn;
+  int n_order = (int)fn;
   
-  if(n > 0)
+  if(n_order > 0)
   {
-    if(n > x->x_sparse_FIR_order)/* resize */
+    if(n_order > x->x_n_order_malloc) /* resize */
     {
-      x->x_history_beg =  (t_float *)resizebytes(x->x_history_beg, 2*x->x_n_coef_malloc*sizeof(t_float), 2*n*sizeof(t_float));
-      x->x_index_beg =  (int *)resizebytes(x->x_index_beg, x->x_n_coef_malloc*sizeof(int), n*sizeof(int));
-      x->x_coef_beg =  (t_float *)resizebytes(x->x_coef_beg, x->x_n_coef_malloc*sizeof(t_float), n*sizeof(t_float));
-      x->x_n_coef_malloc = n;
+      x->x_history_beg =  (t_float *)resizebytes(x->x_history_beg, 2*x->x_n_order_malloc*sizeof(t_float), 2*n_order*sizeof(t_float));
+      x->x_n_order_malloc = n_order;
     }
-    x->x_sparse_FIR_order = n;
+    x->x_n_order = n_order;
     x->x_rw_index = 0;
+    
+    sparse_FIR_tilde_sort_within(x);
   }
 }
 
@@ -184,40 +227,93 @@ static void sparse_FIR_tilde_dsp(t_sparse_FIR_tilde *x, t_signal **sp)
 static void *sparse_FIR_tilde_new(t_floatarg fn)
 {
   t_sparse_FIR_tilde *x = (t_sparse_FIR_tilde *)pd_new(sparse_FIR_tilde_class);
-  int n=(int)fn;
+  int n_order=(int)fn;
+  int i;
   
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
-  x->x_n_coef = 0;
-  if(n < 1)
-    n = 1;
-  x->x_sparse_FIR_order = n;
-  x->x_n_coef_malloc = n;
-  x->x_history_beg = (t_float *)getbytes((2*x->x_n_coef_malloc)*sizeof(t_float));
-  x->x_index_beg = (int *)getbytes(x->x_n_coef_malloc*sizeof(int));
-  x->x_coef_beg = (t_float *)getbytes(x->x_n_coef_malloc*sizeof(t_float));
+  
+  x->x_n_coef = 1;
+  x->x_n_coef_resp_order = 1;
+  x->x_n_coef_malloc = 1;
+  x->x_index_beg = (int *)getbytes(2*x->x_n_coef_malloc*sizeof(int));
+  x->x_coef_beg = (t_float *)getbytes(2*x->x_n_coef_malloc*sizeof(t_float));
+  x->x_index_beg[0] = 0;
+  x->x_index_beg[1] = 0;
+  x->x_coef_beg[0] = 0.0f;
+  x->x_coef_beg[1] = 0.0f;
+  if(n_order < 1)
+    n_order = 1;
+  x->x_n_order = n_order;
+  x->x_n_order_malloc = n_order;
+  x->x_history_beg = (t_float *)getbytes((2*x->x_n_order_malloc)*sizeof(t_float));
   x->x_rw_index = 0;
+  n_order = 2*x->x_n_order_malloc;
+  for(i=0; i<n_order; i++)
+    x->x_history_beg[i] = 0.0f;
+  
+  x->x_float_sig_in = 0.0f;
+  
+  post("NEW: n_coef_resp_order = %d, n_coef = %d, n_coef_malloc = %d, n_order = %d, n_order_malloc = %d", x->x_n_coef_resp_order, x->x_n_coef, x->x_n_coef_malloc, x->x_n_order, x->x_n_order_malloc);
+  
   return(x);
 }
 
 static void sparse_FIR_tilde_free(t_sparse_FIR_tilde *x)
 {
-  if(x->x_history_beg)
-    freebytes(x->x_history_beg, (2*x->x_n_coef_malloc)*sizeof(t_float));
-  if(x->x_index_beg)
-    freebytes(x->x_index_beg, x->x_n_coef_malloc*sizeof(int));
-  if(x->x_coef_beg)
-    freebytes(x->x_coef_beg, x->x_n_coef_malloc*sizeof(t_float));
+  freebytes(x->x_history_beg, (2*x->x_n_order_malloc)*sizeof(t_float)); /* twice, because of my simple circle-buffer */
+  freebytes(x->x_index_beg, 2*x->x_n_coef_malloc*sizeof(int)); /* twice, because of buffering both, all coefficients and only the relevant for current order */
+  freebytes(x->x_coef_beg, 2*x->x_n_coef_malloc*sizeof(t_float)); /* twice, because of buffering both, all coefficients and only the relevant for current order */
 }
 
+/*static void sparse_FIR_tilde_dump(t_sparse_FIR_tilde *x)
+{
+  t_float *hist=x->x_history_beg;
+  int *ix=x->x_index_beg;
+  int n=x->x_n_order;
+  
+  post("n_coef_resp_order = %d, n_coef = %d, n_coef_malloc = %d, n_order = %d, n_order_malloc = %d", x->x_n_coef_resp_order, x->x_n_coef, x->x_n_coef_malloc, x->x_n_order, x->x_n_order_malloc);
+  post("HIST:");
+  
+  while(n > 8)
+  {
+    post("hist = %g, %g, %g, %g, %g, %g, %g, %g", hist[n-1], hist[n-2], hist[n-3], hist[n-4], hist[n-5], hist[n-6], hist[n-7], hist[n-8]);
+    n -= 8;
+    hist -= 8;
+  }
+  while(n > 0)
+  {
+    post("hist = %g", hist[n-1]);
+    n--;
+    hist--;
+  }
+  post("COEF:");
+  
+  hist = x->x_coef_beg;
+  n = x->x_n_coef_resp_order;
+  while(n > 8)
+  {
+    post("coef = %d@%g, %d@%g, %d@%g, %d@%g, %d@%g, %d@%g, %d@%g, %d@%g", ix[n-1],hist[n-1], ix[n-2],hist[n-2], ix[n-3],hist[n-3], ix[n-4],hist[n-4], ix[n-5],hist[n-5], ix[n-6],hist[n-6], ix[n-7],hist[n-7], ix[n-8],hist[n-8]);
+    n -= 8;
+    hist -= 8;
+  }
+  while(n > 0)
+  {
+    post("coef = %d@%g", ix[n-1],hist[n-1]);
+    n--;
+    hist--;
+  }
+  post("***********************");
+}*/
+
 void sparse_FIR_tilde_setup(void)
 {
   sparse_FIR_tilde_class = class_new(gensym("sparse_FIR~"), (t_newmethod)sparse_FIR_tilde_new,
     (t_method)sparse_FIR_tilde_free, sizeof(t_sparse_FIR_tilde), 0, A_DEFFLOAT, 0);
-  CLASS_MAINSIGNALIN(sparse_FIR_tilde_class, t_sparse_FIR_tilde, x_msi);
+  CLASS_MAINSIGNALIN(sparse_FIR_tilde_class, t_sparse_FIR_tilde, x_float_sig_in);
   class_addmethod(sparse_FIR_tilde_class, (t_method)sparse_FIR_tilde_dsp, gensym("dsp"), 0);
   class_addlist(sparse_FIR_tilde_class, (t_method)sparse_FIR_tilde_list);
   class_addmethod(sparse_FIR_tilde_class, (t_method)sparse_FIR_tilde_matrix, gensym("matrix"), A_GIMME, 0);
   class_addmethod(sparse_FIR_tilde_class, (t_method)sparse_FIR_tilde_order, gensym("order"), A_FLOAT, 0);
   class_addmethod(sparse_FIR_tilde_class, (t_method)sparse_FIR_tilde_order, gensym("size"), A_FLOAT, 0);
+  //class_addmethod(sparse_FIR_tilde_class, (t_method)sparse_FIR_tilde_dump, gensym("dump"), 0);
 }
diff --git a/externals/iemlib/iemlib1/src/vcf_filter~.c b/externals/iemlib/iemlib1/src/vcf_filter~.c
index 393559ab2..3771eccd2 100644
--- a/externals/iemlib/iemlib1/src/vcf_filter~.c
+++ b/externals/iemlib/iemlib1/src/vcf_filter~.c
@@ -13,9 +13,9 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006
 typedef struct _vcf_filter_tilde
 {
   t_object x_obj;
-  t_float  x_wn1;
-  t_float  x_wn2;
-  t_float  x_msi;
+  t_sample x_wn1;
+  t_sample x_wn2;
+  t_float  x_float_sig_in1;
   char     x_filtname[6];
 } t_vcf_filter_tilde;
 
@@ -23,8 +23,8 @@ static t_class *vcf_filter_tilde_class;
 
 static t_int *vcf_filter_tilde_perform_snafu(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[4]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *out = (t_sample *)(w[4]);
   int n = (t_int)(w[6]);
   
   while(n--)
@@ -61,52 +61,52 @@ wn1 = wn0;
 
 static t_int *vcf_filter_tilde_perform_lp2(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *lp = (t_float *)(w[2]);
-  t_float *q = (t_float *)(w[3]);
-  t_float *out = (t_float *)(w[4]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *lp = (t_sample *)(w[2]);
+  t_sample *q = (t_sample *)(w[3]);
+  t_sample *out = (t_sample *)(w[4]);
   t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)(w[5]);
   int i, n = (t_int)(w[6]);
-  t_float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
-  t_float l, al, l2, rcp;
+  t_sample wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+  t_sample l, al, l2, rcp;
   
   for(i=0; i<n; i+=4)
   {
     l = lp[i];
-    if(q[i] < 0.000001f)
-      al = 1000000.0f*l;
-    else if(q[i] > 1000000.0f)
-      al = 0.000001f*l;
+    if(q[i] < 0.000001)
+      al = 1000000.0*l;
+    else if(q[i] > 1000000.0)
+      al = 0.000001*l;
     else
       al = l/q[i];
-    l2 = l*l + 1.0f;
-    rcp = 1.0f/(al + l2);
+    l2 = l*l + 1.0;
+    rcp = 1.0/(al + l2);
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = rcp*(wn0 + 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = rcp*(wn0 + 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = rcp*(wn0 + 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = rcp*(wn0 + 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn2))
-    wn2 = 0.0f;
+    wn2 = 0.0;
   if(IEM_DENORMAL(wn1))
-    wn1 = 0.0f;
+    wn1 = 0.0;
   
   x->x_wn1 = wn1;
   x->x_wn2 = wn2;
@@ -115,53 +115,53 @@ static t_int *vcf_filter_tilde_perform_lp2(t_int *w)
 
 static t_int *vcf_filter_tilde_perform_bp2(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *lp = (t_float *)(w[2]);
-  t_float *q = (t_float *)(w[3]);
-  t_float *out = (t_float *)(w[4]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *lp = (t_sample *)(w[2]);
+  t_sample *q = (t_sample *)(w[3]);
+  t_sample *out = (t_sample *)(w[4]);
   t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)(w[5]);
   int i, n = (t_int)(w[6]);
-  t_float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
-  t_float l, al, l2, rcp;
+  t_sample wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+  t_sample l, al, l2, rcp;
   
   for(i=0; i<n; i+=4)
   {
     l = lp[i];
-    if(q[i] < 0.000001f)
-      al = 1000000.0f*l;
-    else if(q[i] > 1000000.0f)
-      al = 0.000001f*l;
+    if(q[i] < 0.000001)
+      al = 1000000.0*l;
+    else if(q[i] > 1000000.0)
+      al = 0.000001*l;
     else
       al = l/q[i];
-    l2 = l*l + 1.0f;
-    rcp = 1.0f/(al + l2);
+    l2 = l*l + 1.0;
+    rcp = 1.0/(al + l2);
     
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*al*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*al*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*al*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*al*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn2))
-    wn2 = 0.0f;
+    wn2 = 0.0;
   if(IEM_DENORMAL(wn1))
-    wn1 = 0.0f;
+    wn1 = 0.0;
   
   x->x_wn1 = wn1;
   x->x_wn2 = wn2;
@@ -170,53 +170,53 @@ static t_int *vcf_filter_tilde_perform_bp2(t_int *w)
 
 static t_int *vcf_filter_tilde_perform_rbp2(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *lp = (t_float *)(w[2]);
-  t_float *q = (t_float *)(w[3]);
-  t_float *out = (t_float *)(w[4]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *lp = (t_sample *)(w[2]);
+  t_sample *q = (t_sample *)(w[3]);
+  t_sample *out = (t_sample *)(w[4]);
   t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)(w[5]);
   int i, n = (t_int)(w[6]);
-  t_float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
-  t_float al, l, l2, rcp;
+  t_sample wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+  t_sample al, l, l2, rcp;
   
   for(i=0; i<n; i+=4)
   {
     l = lp[i];
-    if(q[i] < 0.000001f)
-      al = 1000000.0f*l;
-    else if(q[i] > 1000000.0f)
-      al = 0.000001f*l;
+    if(q[i] < 0.000001)
+      al = 1000000.0*l;
+    else if(q[i] > 1000000.0)
+      al = 0.000001*l;
     else
       al = l/q[i];
-    l2 = l*l + 1.0f;
-    rcp = 1.0f/(al + l2);
+    l2 = l*l + 1.0;
+    rcp = 1.0/(al + l2);
     
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*l*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*l*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*l*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
     *out++ = rcp*l*(wn0 - wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn2))
-    wn2 = 0.0f;
+    wn2 = 0.0;
   if(IEM_DENORMAL(wn1))
-    wn1 = 0.0f;
+    wn1 = 0.0;
   
   x->x_wn1 = wn1;
   x->x_wn2 = wn2;
@@ -225,53 +225,53 @@ static t_int *vcf_filter_tilde_perform_rbp2(t_int *w)
 
 static t_int *vcf_filter_tilde_perform_hp2(t_int *w)
 {
-  t_float *in = (t_float *)(w[1]);
-  t_float *lp = (t_float *)(w[2]);
-  t_float *q = (t_float *)(w[3]);
-  t_float *out = (t_float *)(w[4]);
+  t_sample *in = (t_sample *)(w[1]);
+  t_sample *lp = (t_sample *)(w[2]);
+  t_sample *q = (t_sample *)(w[3]);
+  t_sample *out = (t_sample *)(w[4]);
   t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)(w[5]);
   int i, n = (t_int)(w[6]);
-  t_float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
-  t_float l, al, l2, rcp, forw;
+  t_sample wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+  t_sample l, al, l2, rcp, forw;
   
   for(i=0; i<n; i+=4)
   {
     l = lp[i];
-    if(q[i] < 0.000001f)
-      al = 1000000.0f*l;
-    else if(q[i] > 1000000.0f)
-      al = 0.000001f*l;
+    if(q[i] < 0.000001)
+      al = 1000000.0*l;
+    else if(q[i] > 1000000.0)
+      al = 0.000001*l;
     else
       al = l/q[i];
-    l2 = l*l + 1.0f;
-    rcp = 1.0f/(al + l2);
-    forw = rcp * (l2 - 1.0f);
+    l2 = l*l + 1.0;
+    rcp = 1.0/(al + l2);
+    forw = rcp * (l2 - 1.0);
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = forw*(wn0 - 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = forw*(wn0 - 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = forw*(wn0 - 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
     
-    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
-    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+    wn0 = *in++ - rcp*(2.0*(2.0 - l2)*wn1 + (l2 - al)*wn2);
+    *out++ = forw*(wn0 - 2.0*wn1 + wn2);
     wn2 = wn1;
     wn1 = wn0;
   }
   /* NAN protect */
   if(IEM_DENORMAL(wn2))
-    wn2 = 0.0f;
+    wn2 = 0.0;
   if(IEM_DENORMAL(wn1))
-    wn1 = 0.0f;
+    wn1 = 0.0;
   
   x->x_wn1 = wn1;
   x->x_wn2 = wn2;
@@ -300,6 +300,15 @@ static void vcf_filter_tilde_dsp(t_vcf_filter_tilde *x, t_signal **sp)
   }
 }
 
+static void vcf_filter_tilde_set(t_vcf_filter_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+  if((argc >= 2) && IS_A_FLOAT(argv, 1) && IS_A_FLOAT(argv, 0))
+  {
+    x->x_wn1 = (t_float)atom_getfloatarg(0, argc, argv);
+    x->x_wn2 = (t_float)atom_getfloatarg(1, argc, argv);
+  }
+}
+
 static void *vcf_filter_tilde_new(t_symbol *filt_typ)
 {
   t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)pd_new(vcf_filter_tilde_class);
@@ -308,9 +317,9 @@ static void *vcf_filter_tilde_new(t_symbol *filt_typ)
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
   outlet_new(&x->x_obj, &s_signal);
-  x->x_msi = 0;
-  x->x_wn1 = 0.0f;
-  x->x_wn2 = 0.0f;
+  x->x_float_sig_in1 = 0;
+  x->x_wn1 = 0.0;
+  x->x_wn2 = 0.0;
   c = (char *)filt_typ->s_name;
   c[5] = 0;
   strcpy(x->x_filtname, c);
@@ -321,7 +330,7 @@ void vcf_filter_tilde_setup(void)
 {
   vcf_filter_tilde_class = class_new(gensym("vcf_filter~"), (t_newmethod)vcf_filter_tilde_new,
     0, sizeof(t_vcf_filter_tilde), 0, A_SYMBOL, 0);
-  CLASS_MAINSIGNALIN(vcf_filter_tilde_class, t_vcf_filter_tilde, x_msi);
+  CLASS_MAINSIGNALIN(vcf_filter_tilde_class, t_vcf_filter_tilde, x_float_sig_in1);
   class_addmethod(vcf_filter_tilde_class, (t_method)vcf_filter_tilde_dsp, gensym("dsp"), 0);
-//  class_sethelpsymbol(vcf_filter_tilde_class, gensym("iemhelp/help-vcf_filter~"));
+  class_addmethod(vcf_filter_tilde_class, (t_method)vcf_filter_tilde_set, gensym("set"), A_GIMME, 0);
 }
diff --git a/externals/iemlib/iemlib2/iem_pbank.pbank b/externals/iemlib/iemlib2/iem_pbank.pbank
index 145dfccf5..26870deb4 100644
--- a/externals/iemlib/iemlib2/iem_pbank.pbank
+++ b/externals/iemlib/iemlib2/iem_pbank.pbank
@@ -7,4 +7,4 @@
 6.1 6.2 6.3 6.4 6.5 6.6 stu
 7.1 7.2 7.3 7.4 7.5 7.6 vwx
 8.1 8.2 8.3 8.4 8.5 8.6 y_z
-9.1 9.2 9.3 9.4 9.5 9.6 +-+
+9.1 9.2 9.3 9.4 9.5 9.6 +-+
diff --git a/externals/iemlib/iemlib2/src/VC6/iem_atan2.dsp b/externals/iemlib/iemlib2/src/VC6/iem_atan2.dsp
new file mode 100644
index 000000000..a6ac17d52
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC6/iem_atan2.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="iem_atan2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=iem_atan2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "iem_atan2.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "iem_atan2.mak" CFG="iem_atan2 - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "iem_atan2 - Win32 Release" (basierend auf  "Win32 (x86) External Target")
+!MESSAGE "iem_atan2 - Win32 Debug" (basierend auf  "Win32 (x86) External Target")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF  "$(CFG)" == "iem_atan2 - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_atan2.exe"
+# PROP Bsc_Name "iem_atan2.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF  "$(CFG)" == "iem_atan2 - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_atan2.exe"
+# PROP Bsc_Name "iem_atan2.bsc"
+# PROP Target_Dir ""
+
+!ENDIF 
+
+# Begin Target
+
+# Name "iem_atan2 - Win32 Release"
+# Name "iem_atan2 - Win32 Debug"
+
+!IF  "$(CFG)" == "iem_atan2 - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "iem_atan2 - Win32 Debug"
+
+!ENDIF 
+
+# Begin Source File
+
+SOURCE=.\makefile_win
+# End Source File
+# End Target
+# End Project
diff --git a/externals/iemlib/iemlib2/src/VC6/iem_atan2.dsw b/externals/iemlib/iemlib2/src/VC6/iem_atan2.dsw
new file mode 100644
index 000000000..a0317cbae
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC6/iem_atan2.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "iem_atan2"=.\iem_atan2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/externals/iemlib/iemlib2/src/VC6/makefile_win b/externals/iemlib/iemlib2/src/VC6/makefile_win
new file mode 100644
index 000000000..1f2d144a6
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC6/makefile_win
@@ -0,0 +1,37 @@
+
+all: ..\iem_atan2.dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+
+PD_INST_PATH = "C:\Programme\pd"
+
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+	$(VIS_CPP_PATH)\lib\libc.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_CPP_PATH)\lib\kernel32.lib \
+	$(VIS_CPP_PATH)\lib\wsock32.lib \
+	$(VIS_CPP_PATH)\lib\winmm.lib \
+	$(PD_INST_PATH)\bin\pthreadVC.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+
+SRC =	iem_atan2.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\iem_atan2.dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:iem_atan2_setup \
+	/out:..\iem_atan2.dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib2/src/VC7/iem_atan2.vcproj b/externals/iemlib/iemlib2/src/VC7/iem_atan2.vcproj
new file mode 100644
index 000000000..0eb442782
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC7/iem_atan2.vcproj
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="iem_atan2"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	SccProjectName=""
+	SccLocalPath=""
+	Keyword="MakeFileProj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc7proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc7proj /a"
+				Output="iem_atan2.exe"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc7proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc7proj /a"
+				Output="iem_atan2.exe"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iem_atan2.bsc">
+		</File>
+		<File
+			RelativePath="makefile_vc7proj">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iemlib/iemlib2/src/VC7/makefile_vc7proj b/externals/iemlib/iemlib2/src/VC7/makefile_vc7proj
new file mode 100644
index 000000000..f50f96c87
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC7/makefile_vc7proj
@@ -0,0 +1,31 @@
+TARGET = iem_atan2
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7"
+VIS_SDK_PATH = "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK"
+PD_INST_PATH = "C:\Programme\pd-0.42-5"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	$(TARGET).c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib2/src/VC9/iem_atan2.sln b/externals/iemlib/iemlib2/src/VC9/iem_atan2.sln
new file mode 100644
index 000000000..ac8c11c01
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC9/iem_atan2.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iem_atan2", "iem_atan2.vcproj", "{6A44952F-0D55-44EE-9032-928368583BEC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.Build.0 = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.ActiveCfg = Release|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/externals/iemlib/iemlib2/src/VC9/iem_atan2.vcproj b/externals/iemlib/iemlib2/src/VC9/iem_atan2.vcproj
new file mode 100644
index 000000000..855762cc1
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC9/iem_atan2.vcproj
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="iem_atan2"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	Keyword="MakeFileProj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iem_atan2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iem_atan2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iem_atan2.bsc"
+			>
+		</File>
+		<File
+			RelativePath="makefile_vc9proj"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iemlib/iemlib2/src/VC9/makefile_vc9proj b/externals/iemlib/iemlib2/src/VC9/makefile_vc9proj
new file mode 100644
index 000000000..7781a3c46
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/VC9/makefile_vc9proj
@@ -0,0 +1,30 @@
+TARGET = iem_atan2
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Program Files\Microsoft Visual Studio 9.0\VC"
+VIS_SDK_PATH = "C:\Program Files\Microsoft SDKs\Windows\v6.0A"
+PD_INST_PATH = "C:\Program Files\pd-0.43.0"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /DHAVE_G_CANVAS_H /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	$(TARGET).c
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib2/src/dollarg.c b/externals/iemlib/iemlib2/src/dollarg.c
index 102a680e4..946108115 100644
--- a/externals/iemlib/iemlib2/src/dollarg.c
+++ b/externals/iemlib/iemlib2/src/dollarg.c
@@ -4,7 +4,11 @@
 iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */
 
 #include "m_pd.h"
-#include "g_canvas.h"
+#ifdef HAVE_G_CANVAS_H
+# include "g_canvas.h"
+#else
+EXTERN t_canvas *glist_getcanvas(t_glist *x);
+#endif
 #include "iemlib.h"
 
 
diff --git a/externals/iemlib/iemlib2/src/iemlib.h b/externals/iemlib/iemlib2/src/iemlib.h
deleted file mode 100644
index 973bfebcd..000000000
--- a/externals/iemlib/iemlib2/src/iemlib.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
-
-iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */
-
-#ifndef __IEMLIB_H__
-#define __IEMLIB_H__
-
-
-#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
-#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
-#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
-#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
-#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
-#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
-#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
-
-/* now miller's code starts : 
-     for 4 point interpolation
-     for lookup tables
-     for denormal floats
- */
-
-#ifdef MSW
-int sys_noloadbang;
-//t_symbol *iemgui_key_sym=0;
-#include <io.h>
-#else
-extern int sys_noloadbang;
-//extern t_symbol *iemgui_key_sym;
-#include <unistd.h>
-#endif
-
-#define DEFDELVS 64
-#define XTRASAMPS 4
-#define SAMPBLK 4
-
-#define UNITBIT32 1572864.  /* 3*2^19; bit 32 has place value 1 */
-
-    /* machine-dependent definitions.  These ifdefs really
-    should have been by CPU type and not by operating system! */
-#ifdef IRIX
-    /* big-endian.  Most significant byte is at low address in memory */
-#define HIOFFSET 0    /* word offset to find MSB */
-#define LOWOFFSET 1    /* word offset to find LSB */
-#define int32 long  /* a data type that has 32 bits */
-#endif /* IRIX */
-
-#ifdef MSW
-    /* little-endian; most significant byte is at highest address */
-#define HIOFFSET 1
-#define LOWOFFSET 0
-#define int32 long
-#endif /* MSW */
-
-#if defined(__FreeBSD__) || defined(__APPLE__)
-#include <machine/endian.h>
-#endif
-
-#ifdef __linux__
-#include <endian.h>
-#endif
-
-#if defined(__unix__) || defined(__APPLE__)
-#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)                         
-#error No byte order defined                                                    
-#endif                                                                          
-
-#if BYTE_ORDER == LITTLE_ENDIAN                                             
-#define HIOFFSET 1                                                              
-#define LOWOFFSET 0                                                             
-#else                                                                           
-#define HIOFFSET 0    /* word offset to find MSB */                             
-#define LOWOFFSET 1    /* word offset to find LSB */                            
-#endif /* __BYTE_ORDER */                                                       
-#include <sys/types.h>
-#define int32 int32_t
-#endif /* __unix__ or __APPLE__*/
-
-union tabfudge_d
-{
-  double tf_d;
-  int32 tf_i[2];
-};
-
-union tabfudge_f
-{
-  float tf_f;
-  long  tf_l;
-};
-
-#if defined __i386__ || defined __x86_64__
-#define IEM_DENORMAL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
-(((*(unsigned int*)&(f))&0x60000000)==0x60000000))
-/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
-#else
-
-#define IEM_DENORMAL(f) 0
-
-#endif
-
-#endif
diff --git a/externals/iemlib/iemlib2/src/iemlib2.c b/externals/iemlib/iemlib2/src/iemlib2.c
index dc80cf63e..bae860bc7 100644
--- a/externals/iemlib/iemlib2/src/iemlib2.c
+++ b/externals/iemlib/iemlib2/src/iemlib2.c
@@ -42,6 +42,7 @@ void list2send_setup(void);
 void m2f_tilde_setup(void);
 void mergefilename_setup(void);
 void modulo_counter_setup(void);
+//void para_bank_csv_setup(void);
 void parentdollarzero_setup(void);
 void post_netreceive_setup(void);
 void pre_inlet_setup(void);
@@ -89,6 +90,7 @@ void iemlib2_setup(void)
   m2f_tilde_setup();
   mergefilename_setup();
   modulo_counter_setup();
+//  para_bank_csv_setup();
   parentdollarzero_setup();
   post_netreceive_setup();
   pre_inlet_setup();
@@ -104,6 +106,6 @@ void iemlib2_setup(void)
   unsymbol_setup();
   wrap_setup();
     
-  post("iemlib2 (R-1.17) library loaded!   (c) Thomas Musil 11.2008");
+  post("iemlib2 (R-1.18) library loaded!   (c) Thomas Musil 02.2012");
 	post("   musil%ciem.at iem KUG Graz Austria", '@');
 }
diff --git a/externals/iemlib/iemlib2/src/iemlib2.sln b/externals/iemlib/iemlib2/src/iemlib2.sln
new file mode 100644
index 000000000..03f40e80f
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/iemlib2.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iemlib2", "iemlib2.vcproj", "{6A44952F-0D55-44EE-9032-928368583BEC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.Build.0 = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.ActiveCfg = Release|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/externals/iemlib/iemlib2/src/iemlib2.vcproj b/externals/iemlib/iemlib2/src/iemlib2.vcproj
new file mode 100644
index 000000000..756ccd1d8
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/iemlib2.vcproj
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="iemlib2"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	Keyword="MakeFileProj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iemlib2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iemlib2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iemlib2.bsc"
+			>
+		</File>
+		<File
+			RelativePath="makefile_vc9proj"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iemlib/iemlib2/src/makefile b/externals/iemlib/iemlib2/src/makefile
index 19e7f6355..b03afe2ae 100644
--- a/externals/iemlib/iemlib2/src/makefile
+++ b/externals/iemlib/iemlib2/src/makefile
@@ -1,4 +1,48 @@
 TARGET = iemlib2
 
+
+
+SRC = 	add2_comma.c \
+	aspeedlim.c \
+	bpe.c \
+	dollarg.c \
+	exp_inc.c \
+	fade~.c \
+	float24.c \
+	iem_alisttosym.c \
+	iem_anything.c \
+	iem_append.c \
+	iem_blocksize~.c \
+	iem_i_route.c \
+	iem_pbank_csv.c \
+	iem_prepend.c \
+	iem_receive.c \
+	iem_route.c \
+	iem_samplerate~.c \
+	iem_sel_any.c \
+	iem_send.c \
+	iem_symtoalist.c \
+	init.c \
+	LFO_noise~.c \
+	list2send.c \
+	m2f~.c \
+	mergefilename.c \
+	modulo_counter.c \
+	parentdollarzero.c \
+	post_netreceive.c \
+	pre_inlet.c \
+	prepend_ascii.c \
+	protect_against_open.c \
+	receive2list.c \
+	round_zero.c \
+	speedlim.c \
+	splitfilename.c \
+	stripfilename.c \
+	toggle_mess.c \
+	transf_fader.c \
+	unsymbol.c \
+	wrap.c \
+	$(TARGET).c
+
 include ../../Make.include
 
diff --git a/externals/iemlib/iemlib2/src/makefile_d_fat b/externals/iemlib/iemlib2/src/makefile_d_fat
index 11701adf3..618bef1e3 100644
--- a/externals/iemlib/iemlib2/src/makefile_d_fat
+++ b/externals/iemlib/iemlib2/src/makefile_d_fat
@@ -1,17 +1,24 @@
-current: all
-
+current: all
+
 .SUFFIXES: .d_fat
 
-PD_INSTALL_PATH ?= "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-CFLAGS =-DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-        -Wno-unused -Wno-parentheses -Wno-switch
-
-LFLAGS = -bundle -undefined suppress -flat_namespace
-
-# the sources
+PDSOURCE = "/Applications/Pd.app/Contents/Resources/src"
+
+IEMLIB_INCLUDE = ../../include
+
+PD_INCLUDES = -I. -I$(IEMLIB_INCLUDE) -I$(PDSOURCE)
+
+PD_DEFINES = -DPD
+PD_DEFINES += -DHAVE_G_CANVAS_H
+
+CFLAGS =-O2 -Wall -W -Wshadow -Wstrict-prototypes \
+        -Wno-unused -Wno-parentheses -Wno-switch -fPIC
+
+LFLAGS = -bundle -undefined suppress -flat_namespace
+
+ARCH_FLAGS=-arch i386 -arch ppc
+
+# the sources
 
 SRC = 	add2_comma.c \
 	aspeedlim.c \
@@ -58,26 +65,23 @@ SRC = 	add2_comma.c \
 TARGET = iemlib2.d_fat
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(CC) -arch i386 -arch ppc $(LFLAGS) -o $(TARGET) *.o
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
-	$(CC) -arch i386 -arch ppc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm -f ../$(TARGET)
+	rm -f *.o
 
+all: $(OBJ)
+	@echo :: $(OBJ)
+	$(CC) $(ARCH_FLAGS) $(LFLAGS) -o $(TARGET) *.o
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
 
+$(OBJ) : %.o : %.c
+	$(CC) $(ARCH_FLAGS) $(PD_DEFINES) $(CFLAGS) $(PD_INCLUDES) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iemlib2/src/makefile_d_ppc b/externals/iemlib/iemlib2/src/makefile_d_ppc
index f9b6e2560..27356de14 100644
--- a/externals/iemlib/iemlib2/src/makefile_d_ppc
+++ b/externals/iemlib/iemlib2/src/makefile_d_ppc
@@ -1,17 +1,17 @@
-current: all
-
+current: all
+
 .SUFFIXES: .d_ppc
 
-PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-CFLAGS =-DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-        -Wno-unused -Wno-parentheses -Wno-switch
-
-LFLAGS = -bundle -undefined suppress -flat_namespace
-
-# the sources
+PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
+
+INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
+
+CFLAGS =-DPD -DHAVE_G_CANVAS_H -O2 -Wall -W -Wshadow -Wstrict-prototypes \
+        -Wno-unused -Wno-parentheses -Wno-switch
+
+LFLAGS = -bundle -undefined suppress -flat_namespace
+
+# the sources
 
 SRC = 	add2_comma.c \
 	aspeedlim.c \
@@ -58,24 +58,24 @@ SRC = 	add2_comma.c \
 TARGET = iemlib2.d_ppc
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm ../$(TARGET)
+	rm *.o
+
+all: $(OBJ)
+	@echo :: $(OBJ)
 	$(CC) $(LFLAGS) -o $(TARGET) *.o
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
+
+$(OBJ) : %.o : %.c
+	touch $*.c
 	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
 
 
diff --git a/externals/iemlib/iemlib2/src/makefile_darwin b/externals/iemlib/iemlib2/src/makefile_darwin
index 6b455cf22..eef0bccbf 100644
--- a/externals/iemlib/iemlib2/src/makefile_darwin
+++ b/externals/iemlib/iemlib2/src/makefile_darwin
@@ -1,22 +1,22 @@
-current: all
-
+current: all
+
 .SUFFIXES: .pd_darwin
 
-PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
-
-INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
-
-LIB = -ldl -lm -lpthread
-
-CFLAGS = -DPD -DUNIX -g -Wall -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O2 -fno-strict-aliasing \
-	$(INCLUDE) $(UCFLAGS) $(AFLAGS) \
-
-MACOSXLINKFLAGS = -bundle -bundle_loader $(PD_INSTALL_PATH)/bin/pd
-
-SYSTEM = $(shell uname -m)
-
-# the sources
+PD_INSTALL_PATH = "/Applications/Pd.app/Contents/Resources"
+
+INCLUDE = -I. -I$(PD_INSTALL_PATH)/src
+
+LIB = -ldl -lm -lpthread
+
+CFLAGS = -DPD -DUNIX -DHAVE_G_CANVAS_H -g -Wall -W -Werror -Wno-unused \
+	-Wno-parentheses -Wno-switch -O2 -fno-strict-aliasing \
+	$(INCLUDE) $(UCFLAGS) $(AFLAGS) \
+
+MACOSXLINKFLAGS = -bundle -bundle_loader $(PD_INSTALL_PATH)/bin/pd
+
+SYSTEM = $(shell uname -m)
+
+# the sources
 
 SRC = 	add2_comma.c \
 	aspeedlim.c \
@@ -63,25 +63,25 @@ SRC = 	add2_comma.c \
 TARGET = iemlib2.pd_darwin
 
 
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
+OBJ = $(SRC:.c=.o) 
+
+#
+#  ------------------ targets ------------------------------------
+#
+
+clean:
+	rm ../$(TARGET)
+	rm *.o
+
+all: $(OBJ)
+	@echo :: $(OBJ)
 	$(CC) $(MACOSXLINKFLAGS) -o $(TARGET) *.o $(LIB)
-	strip -S -x $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	touch $*.c
-	$(CC) $(CFLAGS) -DPD $(INCLUDE) -c -o $*.o $*.c
+	strip -S -x $(TARGET)
+	mv $(TARGET) ..
+
+$(OBJ) : %.o : %.c
+	touch $*.c
+	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
 
 
 
diff --git a/externals/iemlib/iemlib2/src/makefile_linux b/externals/iemlib/iemlib2/src/makefile_linux
deleted file mode 100644
index a80660606..000000000
--- a/externals/iemlib/iemlib2/src/makefile_linux
+++ /dev/null
@@ -1,84 +0,0 @@
-current: all
-
-.SUFFIXES: .pd_linux
-
-INCLUDE = -I. -I/usr/local/src/pd/src
-
-LDFLAGS = -export-dynamic -shared
-LIB = -ldl -lm -lpthread
-
-#select either the DBG and OPT compiler flags below:
-
-CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
-	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
-        -DDL_OPEN -fPIC
-
-SYSTEM = $(shell uname -m)
-
-# the sources
-
-SRC = 	add2_comma.c \
-	aspeedlim.c \
-	bpe.c \
-	dollarg.c \
-	exp_inc.c \
-	fade~.c \
-	float24.c \
-	iem_anything.c \
-	iem_append.c \
-	iem_blocksize~.c \
-	iem_i_route.c \
-	iem_pbank_csv.c \
-	iem_prepend.c \
-	iem_receive.c \
-	iem_route.c \
-	iem_samplerate~.c \
-	iem_sel_any.c \
-	iem_send.c \
-	init.c \
-	LFO_noise~.c \
-	list2send.c \
-	m2f~.c \
-	mergefilename.c \
-	modulo_counter.c \
-	parentdollarzero.c \
-	post_netreceive.c \
-	pre_inlet.c \
-	prepend_ascii.c \
-	protect_against_open.c \
-	receive2list.c \
-	round_zero.c \
-	speedlim.c \
-	splitfilename.c \
-	stripfilename.c \
-	toggle_mess.c \
-	transf_fader.c \
-	unsymbol.c \
-	wrap.c \
-	iemlib2.c
-
-TARGET = iemlib2.pd_linux
-
-
-OBJ = $(SRC:.c=.o) 
-
-#
-#  ------------------ targets ------------------------------------
-#
-
-clean:
-	rm ../$(TARGET)
-	rm *.o
-
-all: $(OBJ)
-	@echo :: $(OBJ)
-	$(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB)
-	strip --strip-unneeded $(TARGET)
-	mv $(TARGET) ..
-
-$(OBJ) : %.o : %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
-
-
-
-
diff --git a/externals/iemlib/iemlib2/src/makefile_vc9proj b/externals/iemlib/iemlib2/src/makefile_vc9proj
new file mode 100644
index 000000000..276c9f71f
--- /dev/null
+++ b/externals/iemlib/iemlib2/src/makefile_vc9proj
@@ -0,0 +1,70 @@
+TARGET = iemlib2
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Program Files\Microsoft Visual Studio 9.0\VC"
+VIS_SDK_PATH = "C:\Program Files\Microsoft SDKs\Windows\v6.0A"
+PD_INST_PATH = "C:\Program Files\pd-0.43.0"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /DHAVE_G_CANVAS_H /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	add2_comma.c \
+	aspeedlim.c \
+	bpe.c \
+	dollarg.c \
+	exp_inc.c \
+	fade~.c \
+	float24.c \
+	iem_alisttosym.c \
+	iem_anything.c \
+	iem_append.c \
+	iem_blocksize~.c \
+	iem_i_route.c \
+	iem_pbank_csv.c \
+	iem_prepend.c \
+	iem_receive.c \
+	iem_route.c \
+	iem_samplerate~.c \
+	iem_sel_any.c \
+	iem_send.c \
+	iem_symtoalist.c \
+	init.c \
+	LFO_noise~.c \
+	list2send.c \
+	m2f~.c \
+	mergefilename.c \
+	modulo_counter.c \
+	parentdollarzero.c \
+	post_netreceive.c \
+	pre_inlet.c \
+	prepend_ascii.c \
+	protect_against_open.c \
+	receive2list.c \
+	round_zero.c \
+	speedlim.c \
+	splitfilename.c \
+	stripfilename.c \
+	toggle_mess.c \
+	transf_fader.c \
+	unsymbol.c \
+	wrap.c \
+	$(TARGET).c
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iemlib/iemlib2/src/makefile_win b/externals/iemlib/iemlib2/src/makefile_win
index 11f37b130..fe2a0ac5a 100644
--- a/externals/iemlib/iemlib2/src/makefile_win
+++ b/externals/iemlib/iemlib2/src/makefile_win
@@ -4,7 +4,7 @@ all: ..\$(TARGET).dll
 VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
 PD_INST_PATH = "C:\Programme\pd"
 PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
-PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /DHAVE_G_CANVAS_H /Ox -DPA_LITTLE_ENDIAN
 PD_WIN_L_FLAGS = /nologo
 
 PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
diff --git a/externals/iemlib/iemlib2/src/parentdollarzero.c b/externals/iemlib/iemlib2/src/parentdollarzero.c
index 85b79e963..3f209b11d 100644
--- a/externals/iemlib/iemlib2/src/parentdollarzero.c
+++ b/externals/iemlib/iemlib2/src/parentdollarzero.c
@@ -5,7 +5,9 @@ iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006
 
 
 #include "m_pd.h"
-#include "g_canvas.h"
+#ifdef HAVE_G_CANVAS_H
+# include "g_canvas.h"
+#endif
 #include "iemlib.h"
 
 
@@ -30,6 +32,7 @@ static void parentdollarzero_bang(t_parentdollarzero *x)
 static void *parentdollarzero_new(void)
 {
   t_parentdollarzero *x = (t_parentdollarzero *)pd_new(parentdollarzero_class);
+#ifdef HAVE_G_CANVAS_H
   t_glist *glist = (t_glist *)canvas_getcurrent();
   t_canvas *this_canvas = glist_getcanvas(glist);
 
@@ -38,6 +41,10 @@ static void *parentdollarzero_new(void)
   if(x->x_is_there_a_parent)
     x->s_parent_unique = canvas_realizedollar((t_canvas *)this_canvas->gl_owner, gensym("$0"));
   else
+#else
+  x->x_is_there_a_parent=0;
+  error("[parentdollarzero]: compiled without g_canvas.h - cannot work properly!");
+#endif
     x->s_parent_unique = gensym("");
   outlet_new(&x->x_obj, &s_symbol);
   return (x);
diff --git a/externals/iemlib/iemlib2/src/protect_against_open.c b/externals/iemlib/iemlib2/src/protect_against_open.c
index fcb27da55..90bfdb91f 100644
--- a/externals/iemlib/iemlib2/src/protect_against_open.c
+++ b/externals/iemlib/iemlib2/src/protect_against_open.c
@@ -6,10 +6,33 @@ iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006
 
 #include "m_pd.h"
 #include "iemlib.h"
-#include "g_canvas.h"
-#include "g_all_guis.h"
 #include <string.h>
 
+#ifdef HAVE_G_CANVAS_H
+# include "g_canvas.h"
+#else
+/* no g_canvas.h: declare functions and structs ourselves */
+EXTERN t_canvas *glist_getcanvas(t_glist *x);
+EXTERN t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s);
+struct _widgetbehavior
+{
+    t_method w_getrectfn;
+    t_method w_displacefn;
+    t_method w_selectfn;
+    t_method w_activatefn;
+    t_method w_deletefn;
+    t_method w_visfn;
+    t_method w_clickfn;
+#if defined(PD_MAJOR_VERSION) && (PD_MINOR_VERSION >= 37)
+#else
+    t_method w_savefn;
+    t_method w_propertiesfn;
+#endif
+};
+
+#endif
+
+
 #ifdef _MSC_VER
 #include <io.h>
 #else
diff --git a/externals/iemlib/iem_mp3/src/iemlib.h b/externals/iemlib/include/iemlib.h
similarity index 76%
rename from externals/iemlib/iem_mp3/src/iemlib.h
rename to externals/iemlib/include/iemlib.h
index 973bfebcd..ac1ffced3 100644
--- a/externals/iemlib/iem_mp3/src/iemlib.h
+++ b/externals/iemlib/include/iemlib.h
@@ -1,12 +1,13 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */
+iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2012 */
 
 #ifndef __IEMLIB_H__
 #define __IEMLIB_H__
 
 
+#define IS_A_NULL(atom,index) ((atom+index)->a_type == A_NULL)
 #define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
 #define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
 #define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
@@ -15,6 +16,8 @@ iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 *
 #define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
 #define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
 
+#define SETNULL(atom) ((atom)->a_type = A_NULL)
+
 /* now miller's code starts : 
      for 4 point interpolation
      for lookup tables
@@ -53,11 +56,11 @@ extern int sys_noloadbang;
 #define int32 long
 #endif /* MSW */
 
-#if defined(__FreeBSD__) || defined(__APPLE__)
+#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__FreeBSD_kernel__)
 #include <machine/endian.h>
 #endif
 
-#ifdef __linux__
+#if defined(__linux__) || defined(__CYGWIN__) || defined(__GNU__) || defined(ANDROID)
 #include <endian.h>
 #endif
 
@@ -99,4 +102,17 @@ union tabfudge_f
 
 #endif
 
+/* on 64bit systems we cannot use garray_getfloatarray... */
+#if ((defined PD_MAJOR_VERSION && defined PD_MINOR_VERSION) && (PD_MAJOR_VERSION > 0 || PD_MINOR_VERSION > 40))
+# define iemarray_t t_word
+# define iemarray_getarray garray_getfloatwords
+# define iemarray_getfloat(pointer, index) (pointer[index].w_float)
+# define iemarray_setfloat(pointer, index, fvalue) (pointer[index].w_float = fvalue)
+#else
+# define iemarray_t t_float
+# define iemarray_getarray garray_getfloatarray
+# define iemarray_getfloat(pointer, index) (pointer[index])
+# define iemarray_setfloat(pointer, index, fvalue) (pointer[index] = fvalue)
+#endif
+
 #endif
diff --git a/externals/pd-l2ork-TODO.txt b/externals/pd-l2ork-TODO.txt
index dfc3ab2c4..583cd5e2f 100644
--- a/externals/pd-l2ork-TODO.txt
+++ b/externals/pd-l2ork-TODO.txt
@@ -1,11 +1,12 @@
 Diff status between pd-l2ork externals source tree and main community pd svn
-AS OF Sept 7, 2014
+AS OF October 7, 2014
 
 DONE: (*denotes unique changes)
 creb
 flatgui (disabled, as all externals have various problems)
 gem2pdp
 hcs
+iemlib
 markex
 maxli4
 moonlib
-- 
GitLab