Index: bse/bsecxxbase.cc
===================================================================
--- bse/bsecxxbase.cc	(revision 4376)
+++ bse/bsecxxbase.cc	(working copy)
@@ -1,5 +1,6 @@
 /* BSE - Bedevilled Sound Engine
  * Copyright (C) 2003 Tim Janik
+ * Copyright (C) 2007 Stefan Westerfeld
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -36,6 +37,17 @@ bse_cxx_base_compat_setup (BseItem      
 }
 
 static void
+bse_cxx_base_restore_finish (BseObject *object)
+{
+  CxxBase *self = cast (object);
+  
+  self->restore_finish();
+
+  // chain parent class' handler
+  BSE_OBJECT_CLASS (bse_cxx_base_parent_class)->restore_finish (object);
+}
+
+static void
 bse_cxx_base_instance_finalize (GObject *object)
 {
   CxxBase *self = cast (object);
@@ -57,8 +69,11 @@ CxxBase::class_init (CxxBaseClass *klass
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   BseItemClass *item_class = BSE_ITEM_CLASS (klass);
+  BseObjectClass *bse_object_class = BSE_OBJECT_CLASS (klass);
+
   bse_cxx_base_parent_class = g_type_class_peek_parent (object_class);
   object_class->finalize = bse_cxx_base_instance_finalize;
+  bse_object_class->restore_finish = bse_cxx_base_restore_finish;
   item_class->compat_setup = bse_cxx_base_compat_setup;
 }
 
@@ -88,6 +103,11 @@ CxxBase::compat_setup (guint          vm
 {
 }
 
+void
+CxxBase::restore_finish()
+{
+}
+
 gulong
 CxxBase::connect (const gchar   *signal,
                   CxxClosure    *closure,
Index: bse/bsecxxbase.hh
===================================================================
--- bse/bsecxxbase.hh	(revision 4376)
+++ bse/bsecxxbase.hh	(working copy)
@@ -97,6 +97,7 @@ public:
   virtual void    compat_setup      (guint          vmajor,
                                      guint          vminor,
                                      guint          vmicro);
+  virtual void    restore_finish    ();
   virtual         ~CxxBase          ();
 
   static void     class_init        (CxxBaseClass *klass);
Index: bse/ChangeLog
===================================================================
--- bse/ChangeLog	(revision 4376)
+++ bse/ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+Mon Sep 17 17:42:18 2007  Stefan Westerfeld  <stefan@space.twc.de>
+
+	* bsecxxbase.hh:
+	* bsecxxbase.cc: Add virtual method restore_finish() which overrides
+	and chains the BseObject base class method.
+
 Sat Aug 18 00:15:22 2007  Stefan Westerfeld  <stefan@space.twc.de>
 
 	* bsecore.idl: Include ~/beast/plugins in the default plugin search
Index: plugins/bseamplifier.cc
===================================================================
--- plugins/bseamplifier.cc	(revision 4376)
+++ plugins/bseamplifier.cc	(working copy)
@@ -1,5 +1,6 @@
 /* BSE - Bedevilled Sound Engine
  * Copyright (C) 2002, 2003 Tim Janik
+ * Copyright (C) 2007 Stefan Westerfeld
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -26,7 +27,6 @@ class Amplifier : public AmplifierBase {
     double al1, al2, cl1, cl2;
     double ocs, bl;
     double base_level;
-    double master_volume;
     bool ctrl_mul, ctrl_exp;
   public:
     void
@@ -38,7 +38,9 @@ class Amplifier : public AmplifierBase {
       cl2 = params->clevel2 * 0.01;
       ctrl_mul = params->ctrl_mul;
       ctrl_exp = params->ctrl_exp;
-      ocs = params->ostrength * 0.5 * 0.01;
+      ocs = params->ostrength * 0.01;
+      if (!ctrl_mul)
+        ocs *= 0.5;
       bl = params->base_level * 0.01;
       double master = params->master_volume;
       al1 *= master;
@@ -220,11 +222,15 @@ protected:
       }
     return false;
   }
+
+  bool m_restore_compat_071;
+
   void
   compat_setup (guint          vmajor,
                 guint          vminor,
                 guint          vmicro)
   {
+    m_restore_compat_071 = BSE_VERSION_CMP (vmajor, vminor, vmicro, 0, 7, 1) <= 0;
     if (BSE_VERSION_CMP (vmajor, vminor, vmicro, 0, 6, 2) <= 0)
       set ("olevel", 100.0, NULL);
     if (BSE_VERSION_CMP (vmajor, vminor, vmicro, 0, 5, 4) <= 0)
@@ -233,7 +239,21 @@ protected:
            "ctrl_mul", FALSE,
            NULL);
   }
+  void
+  restore_finish()
+  {
+    if (m_restore_compat_071)
+      {
+        if (ctrl_mul)
+          set ("ostrength", ostrength * 0.5, NULL);
+        m_restore_compat_071 = false;
+      }
+  }
 public:
+  Amplifier() :
+    m_restore_compat_071 (false)
+  {
+  }
   /* implement creation and config methods for synthesis Module */
   BSE_EFFECT_INTEGRATE_MODULE (Amplifier, Module, AmplifierProperties);
 };
Index: plugins/ChangeLog
===================================================================
--- plugins/ChangeLog	(revision 4376)
+++ plugins/ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+Wed Sep  5 23:34:00 2007  Stefan Westerfeld  <stefan@space.twc.de>
+
+	* bseamplifier.cc: Only multiply control signals with 0.5 which are
+	added up (keeps them in [0,1] range), but don't do the same for
+	control signals which are multiplied - fixes #474244.
+
 Sun Jun 24 00:18:52 2007  Stefan Westerfeld  <stefan@space.twc.de>
 
 	* artscompressor.cc: Moved constants to bse/bsemath.h.
Index: configure.in
===================================================================
--- configure.in	(revision 4376)
+++ configure.in	(working copy)
@@ -18,7 +18,7 @@ AC_PREREQ(2.57)
 AC_DIVERT_BEFORE_HELP([
 BSE_MAJOR_VERSION=0
 BSE_MINOR_VERSION=7
-BSE_MICRO_VERSION=1
+BSE_MICRO_VERSION=2
 BSE_INTERFACE_AGE=0
 BSE_BINARY_AGE=0
 ])
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 4376)
+++ ChangeLog	(working copy)
@@ -1,3 +1,10 @@
+Mon Sep 17 17:43:09 2007  Stefan Westerfeld  <stefan@space.twc.de>
+
+	* configure.in: Bump version to 0.7.2. This needs to be done now,
+	because the BseAmplifier compatibility code needs to know whether a
+	file was saved with the 0.7.1 version of BseAmplifier or with the new
+	0.7.2 version of BseAmplifier.
+
 Sat Aug 25 03:18:50 2007  Tim Janik  <timj@gtk.org>
 
 	* fixed $Date parsing, allow to extract dates from git.
