summarylogtreecommitdiffstats
path: root/invada-studio-fixes.patch
diff options
context:
space:
mode:
authorAinola2015-08-08 13:06:29 -0600
committerAinola2015-08-08 13:06:29 -0600
commit03b5b69ec9bbc7ceb6dda289a415ba886e853a6b (patch)
tree7dfb50abf299342f778c549e73ba5a6f6c852c80 /invada-studio-fixes.patch
downloadaur-03b5b69ec9bbc7ceb6dda289a415ba886e853a6b.tar.gz
initial
Diffstat (limited to 'invada-studio-fixes.patch')
-rw-r--r--invada-studio-fixes.patch2293
1 files changed, 2293 insertions, 0 deletions
diff --git a/invada-studio-fixes.patch b/invada-studio-fixes.patch
new file mode 100644
index 000000000000..b0b72ffe9ce8
--- /dev/null
+++ b/invada-studio-fixes.patch
@@ -0,0 +1,2293 @@
+# https://code.launchpad.net/~shanipribadi/invada-studio/fixes
+#
+# 104. By ShaniHP on 2013-06-03
+# destroy widget on plugingui cleanup (fix segfault on closing gui)
+#
+# 103. By falkTX on 2013-06-03
+# Update to latest LV2 spec
+#
+# 102. By Carl Hetherington on 2013-06-03
+# add denormal handling
+
+diff -Naurd a/plugin/inv_delay.c b/plugin/inv_delay.c
+--- a/plugin/inv_delay.c 2009-08-16 08:56:09.000000000 +0200
++++ b/plugin/inv_delay.c 2014-03-08 01:17:40.050457000 +0100
+@@ -28,6 +28,8 @@
+ #include "library/common.h"
+ #include "inv_delay.h"
+
++#define SMALL_TO_ZERO(f) if (fabs(f) < 1e-16) f = 0;
++
+ static LV2_Descriptor *IDelayMonoDescriptor = NULL;
+ static LV2_Descriptor *IDelaySumDescriptor = NULL;
+
+@@ -906,7 +908,9 @@
+ }
+
+ // munge it
++ SMALL_TO_ZERO(In1FBmix);
+ In1FB = (1-fMunge)*In1FBmix + fMunge*ITube_do(In1FBmix,1+fMunge);
++ SMALL_TO_ZERO(In2FBmix);
+ In2FB = (1-fMunge)*In2FBmix + fMunge*ITube_do(In2FBmix,1+fMunge);
+ HPF1 = ((fHPFsamples-1) * HPF1 + In1FB) / fHPFsamples;
+ HPF2 = ((fHPFsamples-1) * HPF2 + In2FB) / fHPFsamples;
+diff -Naurd a/plugin/inv_input.h b/plugin/inv_input.h
+--- a/plugin/inv_input.h 2009-05-09 08:17:48.000000000 +0200
++++ b/plugin/inv_input.h 2014-03-08 01:17:40.050457000 +0100
+@@ -18,8 +18,8 @@
+
+ */
+
+-#define IINPUT_URI "http://invadarecords.com/plugins/lv2/input";
+-#define IINPUT_GUI_URI "http://invadarecords.com/plugins/lv2/input/gui";
++#define IINPUT_URI "http://invadarecords.com/plugins/lv2/input"
++#define IINPUT_GUI_URI "http://invadarecords.com/plugins/lv2/input/gui"
+ #define IINPUT_BYPASS 0
+ #define IINPUT_PHASEL 1
+ #define IINPUT_PHASER 2
+@@ -32,11 +32,11 @@
+ #define IINPUT_AUDIO_OUTL 9
+ #define IINPUT_AUDIO_OUTR 10
+ #define IINPUT_METER_INL 11
+-#define IINPUT_METER_INR 12
++#define IINPUT_METER_INR 12
+ #define IINPUT_METER_OUTL 13
+-#define IINPUT_METER_OUTR 14
+-#define IINPUT_METER_PHASE 15
+-#define IINPUT_METER_DRIVE 16
++#define IINPUT_METER_OUTR 14
++#define IINPUT_METER_PHASE 15
++#define IINPUT_METER_DRIVE 16
+
+ /* control conversion function */
+ float convertParam(unsigned long param, float value, double sr);
+diff -Naurd a/plugin/inv_meter.c b/plugin/inv_meter.c
+--- a/plugin/inv_meter.c 2009-08-09 08:57:23.000000000 +0200
++++ b/plugin/inv_meter.c 2014-03-08 01:17:40.050457000 +0100
+@@ -320,7 +320,9 @@
+ plugin->EnvVuLLast = (fabs(EnvVuL)<1.0e-10) ? 0.f : EnvVuL;
+ plugin->EnvVuRLast = (fabs(EnvVuR)<1.0e-10) ? 0.f : EnvVuR;
+ plugin->EnvPhaseLast = (fabs(EnvPhase)<1.0e-10) ? 0.f : EnvPhase;
++ filter=plugin->filters;
+ for(i=0;i<FILTER_COUNT;i++) {
++ denormalBandpassFilter(&filter[i]);
+ plugin->EnvSpecLast[i] = (fabs(EnvSpec[i])<1.0e-10) ? 0.f : EnvSpec[i];
+ }
+
+diff -Naurd a/plugin/inv_meter.h b/plugin/inv_meter.h
+--- a/plugin/inv_meter.h 2009-08-08 11:00:52.000000000 +0200
++++ b/plugin/inv_meter.h 2014-03-08 01:17:40.050457000 +0100
+@@ -18,8 +18,8 @@
+
+ */
+
+-#define IMETER_URI "http://invadarecords.com/plugins/lv2/meter";
+-#define IMETER_GUI_URI "http://invadarecords.com/plugins/lv2/meter/gui";
++#define IMETER_URI "http://invadarecords.com/plugins/lv2/meter"
++#define IMETER_GUI_URI "http://invadarecords.com/plugins/lv2/meter/gui"
+ #define IMETER_BYPASS 0
+ #define IMETER_AUDIO_INL 1
+ #define IMETER_AUDIO_INR 2
+diff -Naurd a/plugin/inv_testtone.h b/plugin/inv_testtone.h
+--- a/plugin/inv_testtone.h 2009-06-30 00:37:22.000000000 +0200
++++ b/plugin/inv_testtone.h 2014-03-08 01:17:40.050457000 +0100
+@@ -18,8 +18,8 @@
+
+ */
+
+-#define ITONE_URI "http://invadarecords.com/plugins/lv2/testtone";
+-#define ITONE_GUI_URI "http://invadarecords.com/plugins/lv2/testtone/gui";
++#define ITONE_URI "http://invadarecords.com/plugins/lv2/testtone"
++#define ITONE_GUI_URI "http://invadarecords.com/plugins/lv2/testtone/gui"
+ #define ITONE_ACTIVE 0
+ #define ITONE_FREQ 1
+ #define ITONE_TRIM 2
+diff -Naurd a/plugin/library/common.c b/plugin/library/common.c
+--- a/plugin/library/common.c 2009-08-16 09:16:44.000000000 +0200
++++ b/plugin/library/common.c 2014-03-08 01:17:40.050457000 +0100
+@@ -27,6 +27,7 @@
+ #include <lv2.h>
+ #include "common.h"
+
++#define SMALL_TO_ZERO(f) if (fabs(f) < 1e-16) f = 0;
+
+ /* a function that checks to see if a control has been changed and calls the provided conversion fuction */
+ void
+@@ -99,6 +100,8 @@
+ {
+ float valueA;
+
++ SMALL_TO_ZERO(audio_value);
++
+ valueA=fabs(audio_value);
+
+ return (valueA > envelope_value) ? Env->attack * (valueA - envelope_value) : Env->decay * (valueA - envelope_value);
+@@ -601,5 +604,16 @@
+ }
+ }
+
++void
++denormalBandpassFilter(struct FilterP *f)
++{
++ int i;
+
++ for(i=0;i<2;i++) {
++ f->x[i] = (fabs(f->x[i])<1.0e-10) ? 0.f : f->x[i];
++ f->x2[i] = (fabs(f->x2[i])<1.0e-10) ? 0.f : f->x2[i];
++ f->y[i] = (fabs(f->y[i])<1.0e-10) ? 0.f : f->y[i];
++ f->y2[i] = (fabs(f->y2[i])<1.0e-10) ? 0.f : f->y2[i];
++ }
++}
+
+diff -Naurd a/plugin/library/common.h b/plugin/library/common.h
+--- a/plugin/library/common.h 2009-08-16 09:16:57.000000000 +0200
++++ b/plugin/library/common.h 2014-03-08 01:17:40.050457000 +0100
+@@ -109,5 +109,6 @@
+ /* Butterworth bandpass for spectral analysier */
+ void initBandpassFilter(struct FilterP *f, double sr, double cf, double bw);
+ float applyBandpassFilter(struct FilterP *f, float in);
++void denormalBandpassFilter(struct FilterP *f);
+
+ #endif /*__INVADA_COMMON_H */
+diff -Naurd a/plugingui/gtk/inv_input_gui.glade b/plugingui/gtk/inv_input_gui.glade
+--- a/plugingui/gtk/inv_input_gui.glade 2009-05-09 13:03:37.000000000 +0200
++++ b/plugingui/gtk/inv_input_gui.glade 2014-03-08 01:17:40.050457000 +0100
+@@ -1,6 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+ <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+-<!--Generated with glade3 3.4.5 on Sat May 9 21:03:37 2009 -->
++<!--Generated with glade3 3.4.5 on Sun Aug 30 13:31:21 2009 -->
+ <glade-interface>
+ <widget class="GtkWindow" id="input_window">
+ <property name="type">GTK_WINDOW_POPUP</property>
+@@ -83,28 +83,19 @@
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <child>
+- <widget class="GtkLabel" id="label4">
+- <property name="visible">True</property>
+- <property name="yalign">0.20000000298023224</property>
+- <property name="label" translatable="yes">Audio In</property>
+- <property name="justify">GTK_JUSTIFY_RIGHT</property>
+- <property name="width_chars">4</property>
+- </widget>
+- <packing>
+- <property name="y_options"></property>
+- </packing>
+- </child>
+- <child>
+- <widget class="GtkLabel" id="label5">
++ <widget class="GtkAlignment" id="alignment_meter_out">
+ <property name="visible">True</property>
+- <property name="yalign">0.20000000298023224</property>
+- <property name="label" translatable="yes">Audio Out</property>
+- <property name="justify">GTK_JUSTIFY_RIGHT</property>
+- <property name="width_chars">5</property>
++ <property name="xscale">0</property>
++ <property name="yscale">0</property>
++ <child>
++ <placeholder/>
++ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
++ <property name="top_attach">1</property>
++ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+@@ -124,19 +115,28 @@
+ </packing>
+ </child>
+ <child>
+- <widget class="GtkAlignment" id="alignment_meter_out">
++ <widget class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+- <property name="xscale">0</property>
+- <property name="yscale">0</property>
+- <child>
+- <placeholder/>
+- </child>
++ <property name="yalign">0.20000000298023224</property>
++ <property name="label" translatable="yes">Audio Out</property>
++ <property name="justify">GTK_JUSTIFY_RIGHT</property>
++ <property name="width_chars">5</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+- <property name="top_attach">1</property>
+- <property name="bottom_attach">2</property>
++ <property name="y_options"></property>
++ </packing>
++ </child>
++ <child>
++ <widget class="GtkLabel" id="label4">
++ <property name="visible">True</property>
++ <property name="yalign">0.20000000298023224</property>
++ <property name="label" translatable="yes">Audio In</property>
++ <property name="justify">GTK_JUSTIFY_RIGHT</property>
++ <property name="width_chars">4</property>
++ </widget>
++ <packing>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+@@ -191,7 +191,7 @@
+ <child>
+ <widget class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Phase</property>
++ <property name="label" translatable="yes">Stereo Width</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+@@ -221,19 +221,57 @@
+ <property name="n_columns">5</property>
+ <property name="row_spacing">2</property>
+ <child>
+- <widget class="GtkFrame" id="frame-softclip">
++ <widget class="GtkFrame" id="frame-width">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <widget class="GtkAlignment" id="alignment1">
++ <widget class="GtkAlignment" id="alignment_width_knob">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
++ <property name="top_padding">4</property>
++ <property name="bottom_padding">4</property>
++ <property name="left_padding">4</property>
++ <property name="right_padding">4</property>
+ <child>
+- <widget class="GtkVBox" id="vbox1">
++ <placeholder/>
++ </child>
++ </widget>
++ </child>
++ <child>
++ <widget class="GtkLabel" id="label3">
++ <property name="visible">True</property>
++ <property name="label" translatable="yes">Width</property>
++ <property name="use_markup">True</property>
++ </widget>
++ <packing>
++ <property name="type">label_item</property>
++ </packing>
++ </child>
++ </widget>
++ <packing>
++ <property name="left_attach">3</property>
++ <property name="right_attach">4</property>
++ <property name="x_options">GTK_EXPAND</property>
++ <property name="y_options">GTK_FILL</property>
++ <property name="x_padding">2</property>
++ <property name="y_padding">2</property>
++ </packing>
++ </child>
++ <child>
++ <widget class="GtkFrame" id="frame-phase">
++ <property name="visible">True</property>
++ <property name="label_xalign">0.5</property>
++ <child>
++ <widget class="GtkAlignment" id="alignment2">
++ <property name="visible">True</property>
++ <property name="xscale">0</property>
++ <property name="yscale">0</property>
++ <child>
++ <widget class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <child>
+- <widget class="GtkAlignment" id="alignment_noclip_toggle">
++ <widget class="GtkAlignment" id="alignment_phaseL">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -247,7 +285,7 @@
+ </widget>
+ </child>
+ <child>
+- <widget class="GtkAlignment" id="alignment_noclip_lamp">
++ <widget class="GtkAlignment" id="alignment_phaseR">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -268,9 +306,9 @@
+ </widget>
+ </child>
+ <child>
+- <widget class="GtkLabel" id="label9">
++ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Soft Clip</property>
++ <property name="label" translatable="yes">Phase</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+@@ -279,8 +317,6 @@
+ </child>
+ </widget>
+ <packing>
+- <property name="left_attach">4</property>
+- <property name="right_attach">5</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+@@ -288,11 +324,11 @@
+ </packing>
+ </child>
+ <child>
+- <widget class="GtkFrame" id="frame-gain">
++ <widget class="GtkFrame" id="frame-pan">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <widget class="GtkAlignment" id="alignment_gain_knob">
++ <widget class="GtkAlignment" id="alignment_pan_knob">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -306,9 +342,9 @@
+ </widget>
+ </child>
+ <child>
+- <widget class="GtkLabel" id="label8">
++ <widget class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Gain</property>
++ <property name="label" translatable="yes">Pan</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+@@ -317,8 +353,8 @@
+ </child>
+ </widget>
+ <packing>
+- <property name="left_attach">1</property>
+- <property name="right_attach">2</property>
++ <property name="left_attach">2</property>
++ <property name="right_attach">3</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+@@ -326,11 +362,11 @@
+ </packing>
+ </child>
+ <child>
+- <widget class="GtkFrame" id="frame-pan">
++ <widget class="GtkFrame" id="frame-gain">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <widget class="GtkAlignment" id="alignment_pan_knob">
++ <widget class="GtkAlignment" id="alignment_gain_knob">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -344,9 +380,9 @@
+ </widget>
+ </child>
+ <child>
+- <widget class="GtkLabel" id="label6">
++ <widget class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Pan</property>
++ <property name="label" translatable="yes">Gain</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+@@ -355,8 +391,8 @@
+ </child>
+ </widget>
+ <packing>
+- <property name="left_attach">2</property>
+- <property name="right_attach">3</property>
++ <property name="left_attach">1</property>
++ <property name="right_attach">2</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+@@ -364,19 +400,19 @@
+ </packing>
+ </child>
+ <child>
+- <widget class="GtkFrame" id="frame-phase">
++ <widget class="GtkFrame" id="frame-softclip">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <widget class="GtkAlignment" id="alignment2">
++ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+- <widget class="GtkVBox" id="vbox2">
++ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <child>
+- <widget class="GtkAlignment" id="alignment_phaseL">
++ <widget class="GtkAlignment" id="alignment_noclip_toggle">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -390,7 +426,7 @@
+ </widget>
+ </child>
+ <child>
+- <widget class="GtkAlignment" id="alignment_phaseR">
++ <widget class="GtkAlignment" id="alignment_noclip_lamp">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -411,45 +447,9 @@
+ </widget>
+ </child>
+ <child>
+- <widget class="GtkLabel" id="label2">
+- <property name="visible">True</property>
+- <property name="label" translatable="yes">Phase</property>
+- <property name="use_markup">True</property>
+- </widget>
+- <packing>
+- <property name="type">label_item</property>
+- </packing>
+- </child>
+- </widget>
+- <packing>
+- <property name="x_options">GTK_EXPAND</property>
+- <property name="y_options">GTK_FILL</property>
+- <property name="x_padding">2</property>
+- <property name="y_padding">2</property>
+- </packing>
+- </child>
+- <child>
+- <widget class="GtkFrame" id="frame-width">
+- <property name="visible">True</property>
+- <property name="label_xalign">0.5</property>
+- <child>
+- <widget class="GtkAlignment" id="alignment_width_knob">
+- <property name="visible">True</property>
+- <property name="xscale">0</property>
+- <property name="yscale">0</property>
+- <property name="top_padding">4</property>
+- <property name="bottom_padding">4</property>
+- <property name="left_padding">4</property>
+- <property name="right_padding">4</property>
+- <child>
+- <placeholder/>
+- </child>
+- </widget>
+- </child>
+- <child>
+- <widget class="GtkLabel" id="label3">
++ <widget class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Width</property>
++ <property name="label" translatable="yes">Soft Clip</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+@@ -458,8 +458,8 @@
+ </child>
+ </widget>
+ <packing>
+- <property name="left_attach">3</property>
+- <property name="right_attach">4</property>
++ <property name="left_attach">4</property>
++ <property name="right_attach">5</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+diff -Naurd a/plugingui/gtk/inv_input_gui.xml b/plugingui/gtk/inv_input_gui.xml
+--- a/plugingui/gtk/inv_input_gui.xml 2009-05-09 13:04:43.000000000 +0200
++++ b/plugingui/gtk/inv_input_gui.xml 2014-03-08 01:17:40.050457000 +0100
+@@ -1,5 +1,5 @@
+ <?xml version="1.0"?>
+-<!--Generated with glade3 3.4.5 on Sat May 9 21:03:37 2009 -->
++<!--Generated with glade3 3.4.5 on Sun Aug 30 13:31:21 2009 -->
+ <interface>
+ <object class="GtkWindow" id="input_window">
+ <property name="type">GTK_WINDOW_POPUP</property>
+@@ -82,28 +82,19 @@
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <child>
+- <object class="GtkLabel" id="label4">
+- <property name="visible">True</property>
+- <property name="yalign">0.20000000298023224</property>
+- <property name="label" translatable="yes">Audio In</property>
+- <property name="justify">GTK_JUSTIFY_RIGHT</property>
+- <property name="width_chars">4</property>
+- </object>
+- <packing>
+- <property name="y_options"/>
+- </packing>
+- </child>
+- <child>
+- <object class="GtkLabel" id="label5">
++ <object class="GtkAlignment" id="alignment_meter_out">
+ <property name="visible">True</property>
+- <property name="yalign">0.20000000298023224</property>
+- <property name="label" translatable="yes">Audio Out</property>
+- <property name="justify">GTK_JUSTIFY_RIGHT</property>
+- <property name="width_chars">5</property>
++ <property name="xscale">0</property>
++ <property name="yscale">0</property>
++ <child>
++ <placeholder/>
++ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
++ <property name="top_attach">1</property>
++ <property name="bottom_attach">2</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+@@ -123,19 +114,28 @@
+ </packing>
+ </child>
+ <child>
+- <object class="GtkAlignment" id="alignment_meter_out">
++ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+- <property name="xscale">0</property>
+- <property name="yscale">0</property>
+- <child>
+- <placeholder/>
+- </child>
++ <property name="yalign">0.20000000298023224</property>
++ <property name="label" translatable="yes">Audio Out</property>
++ <property name="justify">GTK_JUSTIFY_RIGHT</property>
++ <property name="width_chars">5</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+- <property name="top_attach">1</property>
+- <property name="bottom_attach">2</property>
++ <property name="y_options"/>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkLabel" id="label4">
++ <property name="visible">True</property>
++ <property name="yalign">0.20000000298023224</property>
++ <property name="label" translatable="yes">Audio In</property>
++ <property name="justify">GTK_JUSTIFY_RIGHT</property>
++ <property name="width_chars">4</property>
++ </object>
++ <packing>
+ <property name="y_options"/>
+ </packing>
+ </child>
+@@ -187,7 +187,7 @@
+ <child type="label">
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Phase</property>
++ <property name="label" translatable="yes">Stereo Width</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+@@ -214,19 +214,54 @@
+ <property name="n_columns">5</property>
+ <property name="row_spacing">2</property>
+ <child>
+- <object class="GtkFrame" id="frame-softclip">
++ <object class="GtkFrame" id="frame-width">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <object class="GtkAlignment" id="alignment1">
++ <object class="GtkAlignment" id="alignment_width_knob">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
++ <property name="top_padding">4</property>
++ <property name="bottom_padding">4</property>
++ <property name="left_padding">4</property>
++ <property name="right_padding">4</property>
+ <child>
+- <object class="GtkVBox" id="vbox1">
++ <placeholder/>
++ </child>
++ </object>
++ </child>
++ <child type="label">
++ <object class="GtkLabel" id="label3">
++ <property name="visible">True</property>
++ <property name="label" translatable="yes">Width</property>
++ <property name="use_markup">True</property>
++ </object>
++ </child>
++ </object>
++ <packing>
++ <property name="left_attach">3</property>
++ <property name="right_attach">4</property>
++ <property name="x_options">GTK_EXPAND</property>
++ <property name="y_options">GTK_FILL</property>
++ <property name="x_padding">2</property>
++ <property name="y_padding">2</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkFrame" id="frame-phase">
++ <property name="visible">True</property>
++ <property name="label_xalign">0.5</property>
++ <child>
++ <object class="GtkAlignment" id="alignment2">
++ <property name="visible">True</property>
++ <property name="xscale">0</property>
++ <property name="yscale">0</property>
++ <child>
++ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <child>
+- <object class="GtkAlignment" id="alignment_noclip_toggle">
++ <object class="GtkAlignment" id="alignment_phaseL">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -240,7 +275,7 @@
+ </object>
+ </child>
+ <child>
+- <object class="GtkAlignment" id="alignment_noclip_lamp">
++ <object class="GtkAlignment" id="alignment_phaseR">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -261,16 +296,14 @@
+ </object>
+ </child>
+ <child type="label">
+- <object class="GtkLabel" id="label9">
++ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Soft Clip</property>
++ <property name="label" translatable="yes">Phase</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+- <property name="left_attach">4</property>
+- <property name="right_attach">5</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+@@ -278,11 +311,11 @@
+ </packing>
+ </child>
+ <child>
+- <object class="GtkFrame" id="frame-gain">
++ <object class="GtkFrame" id="frame-pan">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <object class="GtkAlignment" id="alignment_gain_knob">
++ <object class="GtkAlignment" id="alignment_pan_knob">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -296,16 +329,16 @@
+ </object>
+ </child>
+ <child type="label">
+- <object class="GtkLabel" id="label8">
++ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Gain</property>
++ <property name="label" translatable="yes">Pan</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+- <property name="left_attach">1</property>
+- <property name="right_attach">2</property>
++ <property name="left_attach">2</property>
++ <property name="right_attach">3</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+@@ -313,11 +346,11 @@
+ </packing>
+ </child>
+ <child>
+- <object class="GtkFrame" id="frame-pan">
++ <object class="GtkFrame" id="frame-gain">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <object class="GtkAlignment" id="alignment_pan_knob">
++ <object class="GtkAlignment" id="alignment_gain_knob">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -331,16 +364,16 @@
+ </object>
+ </child>
+ <child type="label">
+- <object class="GtkLabel" id="label6">
++ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Pan</property>
++ <property name="label" translatable="yes">Gain</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+- <property name="left_attach">2</property>
+- <property name="right_attach">3</property>
++ <property name="left_attach">1</property>
++ <property name="right_attach">2</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+@@ -348,19 +381,19 @@
+ </packing>
+ </child>
+ <child>
+- <object class="GtkFrame" id="frame-phase">
++ <object class="GtkFrame" id="frame-softclip">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <child>
+- <object class="GtkAlignment" id="alignment2">
++ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+- <object class="GtkVBox" id="vbox2">
++ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <child>
+- <object class="GtkAlignment" id="alignment_phaseL">
++ <object class="GtkAlignment" id="alignment_noclip_toggle">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -374,7 +407,7 @@
+ </object>
+ </child>
+ <child>
+- <object class="GtkAlignment" id="alignment_phaseR">
++ <object class="GtkAlignment" id="alignment_noclip_lamp">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+@@ -395,49 +428,16 @@
+ </object>
+ </child>
+ <child type="label">
+- <object class="GtkLabel" id="label2">
+- <property name="visible">True</property>
+- <property name="label" translatable="yes">Phase</property>
+- <property name="use_markup">True</property>
+- </object>
+- </child>
+- </object>
+- <packing>
+- <property name="x_options">GTK_EXPAND</property>
+- <property name="y_options">GTK_FILL</property>
+- <property name="x_padding">2</property>
+- <property name="y_padding">2</property>
+- </packing>
+- </child>
+- <child>
+- <object class="GtkFrame" id="frame-width">
+- <property name="visible">True</property>
+- <property name="label_xalign">0.5</property>
+- <child>
+- <object class="GtkAlignment" id="alignment_width_knob">
+- <property name="visible">True</property>
+- <property name="xscale">0</property>
+- <property name="yscale">0</property>
+- <property name="top_padding">4</property>
+- <property name="bottom_padding">4</property>
+- <property name="left_padding">4</property>
+- <property name="right_padding">4</property>
+- <child>
+- <placeholder/>
+- </child>
+- </object>
+- </child>
+- <child type="label">
+- <object class="GtkLabel" id="label3">
++ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Width</property>
++ <property name="label" translatable="yes">Soft Clip</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+- <property name="left_attach">3</property>
+- <property name="right_attach">4</property>
++ <property name="left_attach">4</property>
++ <property name="right_attach">5</property>
+ <property name="x_options">GTK_EXPAND</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">2</property>
+diff -Naurd a/plugingui/gtk/inv_meter_gui.glade b/plugingui/gtk/inv_meter_gui.glade
+--- a/plugingui/gtk/inv_meter_gui.glade 2009-08-22 09:36:39.000000000 +0200
++++ b/plugingui/gtk/inv_meter_gui.glade 2014-03-08 01:17:40.050457000 +0100
+@@ -1,6 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+ <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+-<!--Generated with glade3 3.4.5 on Sat Aug 22 17:36:39 2009 -->
++<!--Generated with glade3 3.4.5 on Sun Aug 30 13:31:06 2009 -->
+ <glade-interface>
+ <widget class="GtkWindow" id="meter_window">
+ <property name="type">GTK_WINDOW_POPUP</property>
+@@ -307,7 +307,7 @@
+ <child>
+ <widget class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Phase</property>
++ <property name="label" translatable="yes">Stereo Width</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+diff -Naurd a/plugingui/gtk/inv_meter_gui.xml b/plugingui/gtk/inv_meter_gui.xml
+--- a/plugingui/gtk/inv_meter_gui.xml 2009-08-22 09:36:47.000000000 +0200
++++ b/plugingui/gtk/inv_meter_gui.xml 2014-03-08 01:17:40.050457000 +0100
+@@ -1,5 +1,5 @@
+ <?xml version="1.0"?>
+-<!--Generated with glade3 3.4.5 on Sat Aug 22 17:36:39 2009 -->
++<!--Generated with glade3 3.4.5 on Sun Aug 30 13:31:06 2009 -->
+ <interface>
+ <object class="GtkWindow" id="meter_window">
+ <property name="type">GTK_WINDOW_POPUP</property>
+@@ -295,7 +295,7 @@
+ <child type="label">
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+- <property name="label" translatable="yes">Phase</property>
++ <property name="label" translatable="yes">Stereo Width</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+diff -Naurd a/plugingui/inv_compressor_gui.c b/plugingui/inv_compressor_gui.c
+--- a/plugingui/inv_compressor_gui.c 2009-07-04 12:51:18.000000000 +0200
++++ b/plugingui/inv_compressor_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -36,8 +36,6 @@
+ #include "inv_compressor_gui.h"
+
+
+-static LV2UI_Descriptor *ICompGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -76,7 +74,7 @@
+
+ static LV2UI_Handle instantiateICompGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+- ICompGui *pluginGui = (ICompGui *)malloc(sizeof(ICompGui));
++ ICompGui *pluginGui = (ICompGui *)g_malloc0(sizeof(ICompGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -96,7 +94,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_compressor_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "comp_window"));
+
+@@ -321,7 +319,11 @@
+
+ static void cleanupICompGui(LV2UI_Handle ui)
+ {
+- return;
++ ICompGui *pluginGui = (ICompGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -428,30 +430,23 @@
+ }
+
+
+-static void init()
+-{
+- ICompGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- ICompGuiDescriptor->URI = ICOMP_GUI_URI;
+- ICompGuiDescriptor->instantiate = instantiateICompGui;
+- ICompGuiDescriptor->cleanup = cleanupICompGui;
+- ICompGuiDescriptor->port_event = port_eventICompGui;
+- ICompGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ ICOMP_GUI_URI,
++ &instantiateICompGui,
++ &cleanupICompGui,
++ &port_eventICompGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!ICompGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return ICompGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_delay_gui.c b/plugingui/inv_delay_gui.c
+--- a/plugingui/inv_delay_gui.c 2009-07-04 12:51:38.000000000 +0200
++++ b/plugingui/inv_delay_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -35,8 +35,6 @@
+ #include "inv_delay_gui.h"
+
+
+-static LV2UI_Descriptor *IDelayGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -88,7 +86,7 @@
+ static LV2UI_Handle
+ instantiateIDelayGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+- IDelayGui *pluginGui = (IDelayGui *)malloc(sizeof(IDelayGui));
++ IDelayGui *pluginGui = (IDelayGui *)g_malloc0(sizeof(IDelayGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -108,7 +106,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_delay_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "delay_window"));
+
+@@ -410,7 +408,11 @@
+ static void
+ cleanupIDelayGui(LV2UI_Handle ui)
+ {
+- return;
++ IDelayGui *pluginGui = (IDelayGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -544,31 +546,23 @@
+ }
+
+
+-static void
+-init()
+-{
+- IDelayGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IDelayGuiDescriptor->URI = IDELAY_GUI_URI;
+- IDelayGuiDescriptor->instantiate = instantiateIDelayGui;
+- IDelayGuiDescriptor->cleanup = cleanupIDelayGui;
+- IDelayGuiDescriptor->port_event = port_eventIDelayGui;
+- IDelayGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ IDELAY_GUI_URI,
++ &instantiateIDelayGui,
++ &cleanupIDelayGui,
++ &port_eventIDelayGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IDelayGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IDelayGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_erreverb_gui.c b/plugingui/inv_erreverb_gui.c
+--- a/plugingui/inv_erreverb_gui.c 2009-07-04 08:22:56.000000000 +0200
++++ b/plugingui/inv_erreverb_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -35,8 +35,6 @@
+ #include "inv_erreverb_gui.h"
+
+
+-static LV2UI_Descriptor *IErReverbGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -75,7 +73,7 @@
+ static LV2UI_Handle
+ instantiateIErReverbGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+- IErReverbGui *pluginGui = (IErReverbGui *)malloc(sizeof(IErReverbGui));
++ IErReverbGui *pluginGui = (IErReverbGui *)g_malloc0(sizeof(IErReverbGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -95,7 +93,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_erreverb_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "erreverb_window"));
+
+@@ -287,7 +285,11 @@
+ static void
+ cleanupIErReverbGui(LV2UI_Handle ui)
+ {
+- return;
++ IErReverbGui *pluginGui = (IErReverbGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -392,31 +394,24 @@
+ }
+
+
+-static void
+-init()
+-{
+- IErReverbGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IErReverbGuiDescriptor->URI = IERR_GUI_URI;
+- IErReverbGuiDescriptor->instantiate = instantiateIErReverbGui;
+- IErReverbGuiDescriptor->cleanup = cleanupIErReverbGui;
+- IErReverbGuiDescriptor->port_event = port_eventIErReverbGui;
+- IErReverbGuiDescriptor->extension_data = NULL;
+
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ IERR_GUI_URI,
++ &instantiateIErReverbGui,
++ &cleanupIErReverbGui,
++ &port_eventIErReverbGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IErReverbGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IErReverbGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_filter_gui.c b/plugingui/inv_filter_gui.c
+--- a/plugingui/inv_filter_gui.c 2009-07-04 12:57:42.000000000 +0200
++++ b/plugingui/inv_filter_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -36,8 +36,6 @@
+ #include "inv_filter_gui.h"
+
+
+-static LV2UI_Descriptor *IFilterGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -67,7 +65,7 @@
+ static LV2UI_Handle
+ instantiateIFilterGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+- IFilterGui *pluginGui = (IFilterGui *)malloc(sizeof(IFilterGui));
++ IFilterGui *pluginGui = (IFilterGui *)g_malloc0(sizeof(IFilterGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -87,7 +85,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_filter_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "filter_window"));
+
+@@ -250,7 +248,11 @@
+ static void
+ cleanupIFilterGui(LV2UI_Handle ui)
+ {
+- return;
++ IFilterGui *pluginGui = (IFilterGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -325,31 +327,23 @@
+ }
+
+
+-static void
+-init()
+-{
+- IFilterGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IFilterGuiDescriptor->URI = IFILTER_GUI_URI;
+- IFilterGuiDescriptor->instantiate = instantiateIFilterGui;
+- IFilterGuiDescriptor->cleanup = cleanupIFilterGui;
+- IFilterGuiDescriptor->port_event = port_eventIFilterGui;
+- IFilterGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ IFILTER_GUI_URI,
++ &instantiateIFilterGui,
++ &cleanupIFilterGui,
++ &port_eventIFilterGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IFilterGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IFilterGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_input_gui.c b/plugingui/inv_input_gui.c
+--- a/plugingui/inv_input_gui.c 2009-07-04 12:52:02.000000000 +0200
++++ b/plugingui/inv_input_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -36,8 +36,6 @@
+ #include "inv_input_gui.h"
+
+
+-static LV2UI_Descriptor *IInputGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -74,7 +72,7 @@
+ instantiateIInputGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+
+- IInputGui *pluginGui = (IInputGui *)malloc(sizeof(IInputGui));
++ IInputGui *pluginGui = (IInputGui *)g_malloc0(sizeof(IInputGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -94,7 +92,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_input_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "input_window"));
+
+@@ -277,7 +275,11 @@
+ static void
+ cleanupIInputGui(LV2UI_Handle ui)
+ {
+- return;
++ IInputGui *pluginGui = (IInputGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -379,31 +381,23 @@
+ }
+
+
+-static void
+-init()
+-{
+- IInputGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IInputGuiDescriptor->URI = IINPUT_GUI_URI;
+- IInputGuiDescriptor->instantiate = instantiateIInputGui;
+- IInputGuiDescriptor->cleanup = cleanupIInputGui;
+- IInputGuiDescriptor->port_event = port_eventIInputGui;
+- IInputGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ IINPUT_GUI_URI,
++ &instantiateIInputGui,
++ &cleanupIInputGui,
++ &port_eventIInputGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IInputGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IInputGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_meter_gui.c b/plugingui/inv_meter_gui.c
+--- a/plugingui/inv_meter_gui.c 2009-08-22 08:56:27.000000000 +0200
++++ b/plugingui/inv_meter_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -36,8 +36,6 @@
+ #include "inv_meter_gui.h"
+
+
+-static LV2UI_Descriptor *IMeterGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -70,7 +68,7 @@
+ instantiateIMeterGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+
+- IMeterGui *pluginGui = (IMeterGui *)malloc(sizeof(IMeterGui));
++ IMeterGui *pluginGui = (IMeterGui *)g_malloc0(sizeof(IMeterGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -90,7 +88,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_meter_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "meter_window"));
+
+@@ -185,7 +183,11 @@
+ static void
+ cleanupIMeterGui(LV2UI_Handle ui)
+ {
+- return;
++ IMeterGui *pluginGui = (IMeterGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -291,31 +293,23 @@
+ }
+
+
+-static void
+-init()
+-{
+- IMeterGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IMeterGuiDescriptor->URI = IMETER_GUI_URI;
+- IMeterGuiDescriptor->instantiate = instantiateIMeterGui;
+- IMeterGuiDescriptor->cleanup = cleanupIMeterGui;
+- IMeterGuiDescriptor->port_event = port_eventIMeterGui;
+- IMeterGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ IMETER_GUI_URI,
++ &instantiateIMeterGui,
++ &cleanupIMeterGui,
++ &port_eventIMeterGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IMeterGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IMeterGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_phaser_gui.c b/plugingui/inv_phaser_gui.c
+--- a/plugingui/inv_phaser_gui.c 2009-08-15 09:17:33.000000000 +0200
++++ b/plugingui/inv_phaser_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -35,8 +35,6 @@
+ #include "inv_phaser_gui.h"
+
+
+-static LV2UI_Descriptor *IPhaserGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -71,7 +69,7 @@
+ static LV2UI_Handle
+ instantiateIPhaserGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+- IPhaserGui *pluginGui = (IPhaserGui *)malloc(sizeof(IPhaserGui));
++ IPhaserGui *pluginGui = (IPhaserGui *)g_malloc0(sizeof(IPhaserGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -91,7 +89,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_phaser_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "phaser_window"));
+
+@@ -278,7 +276,11 @@
+ static void
+ cleanupIPhaserGui(LV2UI_Handle ui)
+ {
+- return;
++ IPhaserGui *pluginGui = (IPhaserGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -359,31 +361,23 @@
+ }
+
+
+-static void
+-init()
+-{
+- IPhaserGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IPhaserGuiDescriptor->URI = IPHASER_GUI_URI;
+- IPhaserGuiDescriptor->instantiate = instantiateIPhaserGui;
+- IPhaserGuiDescriptor->cleanup = cleanupIPhaserGui;
+- IPhaserGuiDescriptor->port_event = port_eventIPhaserGui;
+- IPhaserGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ IPHASER_GUI_URI,
++ &instantiateIPhaserGui,
++ &cleanupIPhaserGui,
++ &port_eventIPhaserGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IPhaserGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IPhaserGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/plugingui/inv_testtone_gui.c b/plugingui/inv_testtone_gui.c
+--- a/plugingui/inv_testtone_gui.c 2009-08-23 07:06:02.000000000 +0200
++++ b/plugingui/inv_testtone_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -36,8 +36,6 @@
+ #include "inv_testtone_gui.h"
+
+
+-static LV2UI_Descriptor *IToneGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -65,7 +63,7 @@
+ instantiateIToneGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+
+- IToneGui *pluginGui = (IToneGui *)malloc(sizeof(IToneGui));
++ IToneGui *pluginGui = (IToneGui *)g_malloc0(sizeof(IToneGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -85,7 +83,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_testtone_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "testtone_window"));
+
+@@ -182,7 +180,11 @@
+ static void
+ cleanupIToneGui(LV2UI_Handle ui)
+ {
+- return;
++ IToneGui *pluginGui = (IToneGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -233,33 +235,26 @@
+ }
+
+
+-static void
+-init()
+-{
+- IToneGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- IToneGuiDescriptor->URI = ITONE_GUI_URI;
+- IToneGuiDescriptor->instantiate = instantiateIToneGui;
+- IToneGuiDescriptor->cleanup = cleanupIToneGui;
+- IToneGuiDescriptor->port_event = port_eventIToneGui;
+- IToneGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ ITONE_GUI_URI,
++ &instantiateIToneGui,
++ &cleanupIToneGui,
++ &port_eventIToneGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!IToneGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return IToneGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
++
+ /*****************************************************************************/
+
+ static gint
+diff -Naurd a/plugingui/inv_tube_gui.c b/plugingui/inv_tube_gui.c
+--- a/plugingui/inv_tube_gui.c 2009-07-04 12:53:06.000000000 +0200
++++ b/plugingui/inv_tube_gui.c 2014-03-08 01:17:40.050457000 +0100
+@@ -35,8 +35,6 @@
+ #include "inv_tube_gui.h"
+
+
+-static LV2UI_Descriptor *ITubeGuiDescriptor = NULL;
+-
+ typedef struct {
+ GtkWidget *windowContainer;
+ GtkWidget *heading;
+@@ -68,7 +66,7 @@
+ instantiateITubeGui(const struct _LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+ {
+
+- ITubeGui *pluginGui = (ITubeGui *)malloc(sizeof(ITubeGui));
++ ITubeGui *pluginGui = (ITubeGui *)g_malloc0(sizeof(ITubeGui));
+ if(pluginGui==NULL)
+ return NULL;
+
+@@ -88,7 +86,7 @@
+ builder = gtk_builder_new ();
+ file = g_strdup_printf("%s/gtk/inv_tube_gui.xml",bundle_path);
+ gtk_builder_add_from_file (builder, file, &err);
+- free(file);
++ g_free(file);
+
+ window = GTK_WIDGET (gtk_builder_get_object (builder, "tube_window"));
+
+@@ -240,7 +238,11 @@
+ static void
+ cleanupITubeGui(LV2UI_Handle ui)
+ {
+- return;
++ ITubeGui *pluginGui = (ITubeGui *)ui;
++ GtkWidget *window = (GtkWidget *) pluginGui->windowContainer;
++ gtk_widget_destroy(GTK_WIDGET(window));
++ g_free(pluginGui);
++ return;
+ }
+
+
+@@ -317,31 +319,23 @@
+ }
+
+
+-static void
+-init()
+-{
+- ITubeGuiDescriptor =
+- (LV2UI_Descriptor *)malloc(sizeof(LV2UI_Descriptor));
+-
+- ITubeGuiDescriptor->URI = ITUBE_GUI_URI;
+- ITubeGuiDescriptor->instantiate = instantiateITubeGui;
+- ITubeGuiDescriptor->cleanup = cleanupITubeGui;
+- ITubeGuiDescriptor->port_event = port_eventITubeGui;
+- ITubeGuiDescriptor->extension_data = NULL;
+-
+-}
++static const
++LV2UI_Descriptor descriptor = {
++ ITUBE_GUI_URI,
++ &instantiateITubeGui,
++ &cleanupITubeGui,
++ &port_eventITubeGui,
++ 0
++};
+
+
++LV2_SYMBOL_EXPORT
+ const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index)
+ {
+- if (!ITubeGuiDescriptor) init();
+-
+- switch (index) {
+- case 0:
+- return ITubeGuiDescriptor;
+- default:
+- return NULL;
+- }
++ if (index == 0) {
++ return &descriptor;
++ }
++ return 0;
+ }
+
+
+diff -Naurd a/rdf/inv_compressor.ttl b/rdf/inv_compressor.ttl
+--- a/rdf/inv_compressor.ttl 2009-08-23 08:51:51.000000000 +0200
++++ b/rdf/inv_compressor.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -1,19 +1,18 @@
+-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+-@prefix doap: <http://usefulinc.com/ns/doap#> .
+-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+-@prefix units: <http://lv2plug.in/ns/extension/units#> .
+-@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix epp: <http://lv2plug.in/ns/dev/extportinfo#> .
+-@prefix dc: <http://dublincore.org/documents/dcmi-namespace/> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
++@prefix foaf: <http://xmlns.com/foaf/0.1/> .
++@prefix doap: <http://usefulinc.com/ns/doap#> .
++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
++@prefix units: <http://lv2plug.in/ns/extension/units#> .
++@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
++@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
++@prefix dct: <http://purl.org/dc/terms/> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/compressor/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_compressor_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/compressor/mono> ;
+@@ -63,9 +62,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/compressor/gui> ;
+- dc:replaces <urn:ladspa:3308> ;
++ dct:replaces <urn:ladspa:3308> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -93,7 +92,7 @@
+ lv2:minimum 0.00001 ;
+ lv2:maximum 0.750 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 3 ;
+@@ -103,7 +102,7 @@
+ lv2:minimum 0.001 ;
+ lv2:maximum 5.0 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 4 ;
+@@ -210,9 +209,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/compressor/gui> ;
+- dc:replaces <urn:ladspa:3309> ;
++ dct:replaces <urn:ladspa:3309> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -240,7 +239,7 @@
+ lv2:minimum 0.00001 ;
+ lv2:maximum 0.750 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 3 ;
+@@ -250,7 +249,7 @@
+ lv2:minimum 0.001 ;
+ lv2:maximum 5.0 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 4 ;
+diff -Naurd a/rdf/inv_delay.ttl b/rdf/inv_delay.ttl
+--- a/rdf/inv_delay.ttl 2009-08-23 08:52:29.000000000 +0200
++++ b/rdf/inv_delay.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -1,17 +1,16 @@
+-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+-@prefix doap: <http://usefulinc.com/ns/doap#> .
+-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+-@prefix units: <http://lv2plug.in/ns/extension/units#> .
+-@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix epp: <http://lv2plug.in/ns/dev/extportinfo#> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
++@prefix foaf: <http://xmlns.com/foaf/0.1/> .
++@prefix doap: <http://usefulinc.com/ns/doap#> .
++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
++@prefix units: <http://lv2plug.in/ns/extension/units#> .
++@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
++@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+ <http://invadarecords.com/plugins/lv2/delay/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_delay_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/delay/mono> ;
+@@ -60,7 +59,7 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/delay/gui>;
+
+ lv2:port [
+@@ -108,7 +107,7 @@
+ lv2:minimum 2.0 ;
+ lv2:maximum 200.0 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 5 ;
+@@ -127,7 +126,7 @@
+ lv2:minimum 0.02 ;
+ lv2:maximum 2 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 7 ;
+@@ -163,7 +162,7 @@
+ lv2:minimum 0.02 ;
+ lv2:maximum 2 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 11 ;
+@@ -270,7 +269,7 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/delay/gui>;
+
+ lv2:port [
+@@ -318,7 +317,7 @@
+ lv2:minimum 2.0 ;
+ lv2:maximum 200.0 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 5 ;
+@@ -337,7 +336,7 @@
+ lv2:minimum 0.02 ;
+ lv2:maximum 2 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 7 ;
+@@ -373,7 +372,7 @@
+ lv2:minimum 0.02 ;
+ lv2:maximum 2 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 11 ;
+diff -Naurd a/rdf/inv_erreverb.ttl b/rdf/inv_erreverb.ttl
+--- a/rdf/inv_erreverb.ttl 2009-08-23 08:52:51.000000000 +0200
++++ b/rdf/inv_erreverb.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -1,19 +1,18 @@
+-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+-@prefix doap: <http://usefulinc.com/ns/doap#> .
+-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+-@prefix units: <http://lv2plug.in/ns/extension/units#> .
+-@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix epp: <http://lv2plug.in/ns/dev/extportinfo#> .
+-@prefix dc: <http://dublincore.org/documents/dcmi-namespace/> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
++@prefix foaf: <http://xmlns.com/foaf/0.1/> .
++@prefix doap: <http://usefulinc.com/ns/doap#> .
++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
++@prefix units: <http://lv2plug.in/ns/extension/units#> .
++@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
++@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
++@prefix dct: <http://purl.org/dc/terms/> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/erreverb/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_erreverb_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/erreverb/mono> ;
+@@ -56,9 +55,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/erreverb/gui> ;
+- dc:replaces <urn:ladspa:3311> ;
++ dct:replaces <urn:ladspa:3311> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -137,7 +136,7 @@
+ lv2:minimum 20.0 ;
+ lv2:maximum 2000.0 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 9 ;
+@@ -229,9 +228,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/erreverb/gui> ;
+- dc:replaces <urn:ladspa:3312> ;
++ dct:replaces <urn:ladspa:3312> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -310,7 +309,7 @@
+ lv2:minimum 20.0 ;
+ lv2:maximum 2000.0 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 9 ;
+diff -Naurd a/rdf/inv_filter.ttl b/rdf/inv_filter.ttl
+--- a/rdf/inv_filter.ttl 2009-08-23 08:53:27.000000000 +0200
++++ b/rdf/inv_filter.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -1,19 +1,18 @@
+-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+-@prefix doap: <http://usefulinc.com/ns/doap#> .
+-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+-@prefix units: <http://lv2plug.in/ns/extension/units#> .
+-@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix epp: <http://lv2plug.in/ns/dev/extportinfo#> .
+-@prefix dc: <http://dublincore.org/documents/dcmi-namespace/> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
++@prefix foaf: <http://xmlns.com/foaf/0.1/> .
++@prefix doap: <http://usefulinc.com/ns/doap#> .
++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
++@prefix units: <http://lv2plug.in/ns/extension/units#> .
++@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
++@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
++@prefix dct: <http://purl.org/dc/terms/> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/filter/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_filter_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/filter/lpf/mono> ;
+@@ -87,9 +86,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/filter/gui> ;
+- dc:replaces <urn:ladspa:3302> ;
++ dct:replaces <urn:ladspa:3302> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -109,7 +108,7 @@
+ lv2:minimum 20 ;
+ lv2:maximum 20000 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+@@ -190,9 +189,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/filter/gui> ;
+- dc:replaces <urn:ladspa:3304> ;
++ dct:replaces <urn:ladspa:3304> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -212,7 +211,7 @@
+ lv2:minimum 20 ;
+ lv2:maximum 20000 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+@@ -319,9 +318,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/filter/gui> ;
+- dc:replaces <urn:ladspa:3303> ;
++ dct:replaces <urn:ladspa:3303> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -341,7 +340,7 @@
+ lv2:minimum 20 ;
+ lv2:maximum 20000 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+@@ -422,9 +421,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/filter/gui> ;
+- dc:replaces <urn:ladspa:3305> ;
++ dct:replaces <urn:ladspa:3305> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -444,7 +443,7 @@
+ lv2:minimum 20 ;
+ lv2:maximum 20000 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+diff -Naurd a/rdf/inv_input.ttl b/rdf/inv_input.ttl
+--- a/rdf/inv_input.ttl 2009-08-23 08:53:43.000000000 +0200
++++ b/rdf/inv_input.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -4,15 +4,14 @@
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+ @prefix units: <http://lv2plug.in/ns/extension/units#> .
+ @prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix dc: <http://dublincore.org/documents/dcmi-namespace/> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix dct: <http://purl.org/dc/terms/> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/input/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_input_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/input> ;
+@@ -58,9 +57,9 @@
+ foaf:homepage <http://www.invadarecords.com/Downloads.php?ID=00000264> ;
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/input/gui> ;
+- dc:replaces <urn:ladspa:3301> ;
++ dct:replaces <urn:ladspa:3301> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+diff -Naurd a/rdf/inv_meter.ttl b/rdf/inv_meter.ttl
+--- a/rdf/inv_meter.ttl 2009-08-23 08:54:48.000000000 +0200
++++ b/rdf/inv_meter.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -4,14 +4,13 @@
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+ @prefix units: <http://lv2plug.in/ns/extension/units#> .
+ @prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/meter/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_meter_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/meter> ;
+@@ -147,7 +146,7 @@
+ foaf:homepage <http://www.invadarecords.com/Downloads.php?ID=00000264> ;
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/meter/gui>;
+
+ lv2:port [
+diff -Naurd a/rdf/inv_phaser.ttl b/rdf/inv_phaser.ttl
+--- a/rdf/inv_phaser.ttl 2009-08-23 08:55:32.000000000 +0200
++++ b/rdf/inv_phaser.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -1,17 +1,16 @@
+-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+-@prefix doap: <http://usefulinc.com/ns/doap#> .
+-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+-@prefix units: <http://lv2plug.in/ns/extension/units#> .
+-@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix epp: <http://lv2plug.in/ns/dev/extportinfo#> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
++@prefix foaf: <http://xmlns.com/foaf/0.1/> .
++@prefix doap: <http://usefulinc.com/ns/doap#> .
++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
++@prefix units: <http://lv2plug.in/ns/extension/units#> .
++@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
++@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+ <http://invadarecords.com/plugins/lv2/phaser/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_phaser_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/phaser/mono> ;
+@@ -97,7 +96,7 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/phaser/gui>;
+
+ lv2:port [
+@@ -118,7 +117,7 @@
+ lv2:minimum 0.5 ;
+ lv2:maximum 500 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+@@ -251,7 +250,7 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/phaser/gui>;
+
+ lv2:port [
+@@ -272,7 +271,7 @@
+ lv2:minimum 0.5 ;
+ lv2:maximum 500 ;
+ units:unit units:s ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+@@ -423,7 +422,7 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/phaser/gui>;
+
+ lv2:port [
+diff -Naurd a/rdf/inv_testtone.ttl b/rdf/inv_testtone.ttl
+--- a/rdf/inv_testtone.ttl 2009-08-23 08:55:47.000000000 +0200
++++ b/rdf/inv_testtone.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -1,18 +1,17 @@
+-@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+-@prefix doap: <http://usefulinc.com/ns/doap#> .
+-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+-@prefix units: <http://lv2plug.in/ns/extension/units#> .
+-@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix epp: <http://lv2plug.in/ns/dev/extportinfo#> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
++@prefix foaf: <http://xmlns.com/foaf/0.1/> .
++@prefix doap: <http://usefulinc.com/ns/doap#> .
++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
++@prefix units: <http://lv2plug.in/ns/extension/units#> .
++@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
++@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/testtone/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_testtone_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/testtone> ;
+@@ -33,7 +32,7 @@
+ foaf:homepage <http://www.invadarecords.com/Downloads.php?ID=00000264> ;
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/testtone/gui> ;
+
+ lv2:port [
+@@ -54,7 +53,7 @@
+ lv2:minimum 20.0 ;
+ lv2:maximum 20000.0 ;
+ units:unit units:hz ;
+- lv2:portProperty epp:logarithmic ;
++ lv2:portProperty pprops:logarithmic ;
+ ] , [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 2 ;
+diff -Naurd a/rdf/inv_tube.ttl b/rdf/inv_tube.ttl
+--- a/rdf/inv_tube.ttl 2009-08-23 08:56:08.000000000 +0200
++++ b/rdf/inv_tube.ttl 2014-03-08 01:17:40.050457000 +0100
+@@ -4,15 +4,14 @@
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+ @prefix units: <http://lv2plug.in/ns/extension/units#> .
+ @prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
+-@prefix dc: <http://dublincore.org/documents/dcmi-namespace/> .
+-@prefix pg: <http://lv2plug.in/ns/dev/port-groups#> .
++@prefix dct: <http://purl.org/dc/terms/> .
++@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
+
+
+ <http://invadarecords.com/plugins/lv2/tube/gui>
+ a uiext:GtkUI;
+ uiext:binary <inv_tube_gui.so>;
+- uiext:requiredFeature uiext:makeResident ;
+- uiext:optionalFeature uiext:noUserResize ;
++ lv2:optionalFeature uiext:noUserResize ;
+
+ uiext:portNotification [
+ uiext:plugin <http://invadarecords.com/plugins/lv2/tube/mono> ;
+@@ -57,9 +56,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/tube/gui> ;
+- dc:replaces <urn:ladspa:3306> ;
++ dct:replaces <urn:ladspa:3306> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+@@ -168,9 +167,9 @@
+ foaf:mbox <mailto:fraser@arkhostings.com> ;
+ ] ;
+ doap:license <http://usefulinc.com/doap/licenses/gpl> ;
+- lv2:optionalFeature lv2:hardRtCapable ;
++ lv2:optionalFeature lv2:hardRTCapable ;
+ uiext:ui <http://invadarecords.com/plugins/lv2/tube/gui> ;
+- dc:replaces <urn:ladspa:3307> ;
++ dct:replaces <urn:ladspa:3307> ;
+
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;