Index: branches/CMAES/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.3/CMAParameters.cs
===================================================================
--- branches/CMAES/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.3/CMAParameters.cs	(revision 9297)
+++ branches/CMAES/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.3/CMAParameters.cs	(revision 9709)
@@ -20,253 +20,63 @@
 #endregion
 
+using System.Collections.Generic;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-using System.ComponentModel;
 
 namespace HeuristicLab.Algorithms.CMAEvolutionStrategy {
   [Item("CMAParameters", "CMA-ES controls many strategy parameters that guide the search and which are combined in this class.")]
   [StorableClass]
-  public sealed class CMAParameters : Item, INotifyPropertyChanged {
+  public sealed class CMAParameters : Item {
 
-    [Storable]
-    private double axisRatio;
-    public double AxisRatio {
-      get { return axisRatio; }
-      set {
-        if (axisRatio == value) return;
-        axisRatio = value;
-        OnPropertyChanged("AxisRatio");
-      }
-    }
-
-    [Storable]
-    private double sigma;
-    public double Sigma {
-      get { return sigma; }
-      set {
-        if (sigma == value) return;
-        sigma = value;
-        OnPropertyChanged("Sigma");
-      }
-    }
-
-    [Storable]
-    private double[,] sigmaBounds;
-    public double[,] SigmaBounds {
-      get { return sigmaBounds; }
-      set {
-        if (sigmaBounds == value) return;
-        sigmaBounds = value;
-        OnPropertyChanged("SigmaBounds");
-      }
-    }
-
-    [Storable]
-    private int mu;
-    public int Mu {
-      get { return mu; }
-      set {
-        if (mu == value) return;
-        mu = value;
-        OnPropertyChanged("Mu");
-      }
-    }
-
-    [Storable]
-    private double[] weights;
-    public double[] Weights {
-      get { return weights; }
-      set {
-        if (weights == value) return;
-        weights = value;
-        OnPropertyChanged("Weights");
-      }
-    }
-
-    [Storable]
-    private double muEff;
-    public double MuEff {
-      get { return muEff; }
-      set {
-        if (muEff == value) return;
-        muEff = value;
-        OnPropertyChanged("MuEff");
-      }
-    }
-
-    [Storable]
-    private double cc;
-    public double CC {
-      get { return cc; }
-      set {
-        if (cc == value) return;
-        cc = value;
-        OnPropertyChanged("CC");
-      }
-    }
-
-    [Storable]
-    private double cs;
-    public double CS {
-      get { return cs; }
-      set {
-        if (cs == value) return;
-        cs = value;
-        OnPropertyChanged("CS");
-      }
-    }
-
-    [Storable]
-    private double damps;
-    public double Damps {
-      get { return damps; }
-      set {
-        if (damps == value) return;
-        damps = value;
-        OnPropertyChanged("Damps");
-      }
-    }
-
-    [Storable]
-    private double muCov;
-    public double MuCov {
-      get { return muCov; }
-      set {
-        if (muCov == value) return;
-        muCov = value;
-        OnPropertyChanged("MuCov");
-      }
-    }
-
-    [Storable]
-    private double cCov;
-    public double CCov {
-      get { return cCov; }
-      set {
-        if (cCov == value) return;
-        cCov = value;
-        OnPropertyChanged("CCov");
-      }
-    }
-
-    [Storable]
-    private double cCovSep;
-    public double CCovSep {
-      get { return cCovSep; }
-      set {
-        if (cCovSep == value) return;
-        cCovSep = value;
-        OnPropertyChanged("CCovSep");
-      }
-    }
-
-    [Storable]
-    private double[] pc;
-    public double[] PC {
-      get { return pc; }
-      set {
-        if (pc == value) return;
-        pc = value;
-        OnPropertyChanged("PC");
-      }
-    }
-
-    [Storable]
-    private double[] ps;
-    public double[] PS {
-      get { return ps; }
-      set {
-        if (ps == value) return;
-        ps = value;
-        OnPropertyChanged("PS");
-      }
-    }
-
-    [Storable]
-    private double[,] b;
-    public double[,] B {
-      get { return b; }
-      set {
-        if (b == value) return;
-        b = value;
-        OnPropertyChanged("B");
-      }
-    }
-
-    [Storable]
-    private double[] d;
-    public double[] D {
-      get { return d; }
-      set {
-        if (d == value) return;
-        d = value;
-        OnPropertyChanged("D");
-      }
-    }
-
-    [Storable]
-    private double[,] c;
-    public double[,] C {
-      get { return c; }
-      set {
-        if (c == value) return;
-        c = value;
-        OnPropertyChanged("C");
-      }
-    }
-
-    [Storable]
-    private double[] bDz;
-    public double[] BDz {
-      get { return bDz; }
-      set {
-        if (bDz == value) return;
-        bDz = value;
-        OnPropertyChanged("BDz");
-      }
-    }
-
-    [Storable]
-    private double chiN;
-    public double ChiN {
-      get { return chiN; }
-      set {
-        if (chiN == value) return;
-        chiN = value;
-        OnPropertyChanged("ChiN");
-      }
-    }
-
-    [Storable]
-    private int initialIterations;
-    public int InitialIterations {
-      get { return initialIterations; }
-      set {
-        if (initialIterations == value) return;
-        initialIterations = value;
-        OnPropertyChanged("InitialIterations");
-      }
-    }
-
+    [Storable(Name = "axisRatio")]
+    public double AxisRatio { get; set; }
+    [Storable(Name = "sigma")]
+    public double Sigma { get; set; }
+    [Storable(Name = "sigmaBounds")]
+    public double[,] SigmaBounds { get; set; }
+    [Storable(Name = "mu")]
+    public int Mu { get; set; }
+    [Storable(Name = "weights")]
+    public double[] Weights { get; set; }
+    [Storable(Name = "muEff")]
+    public double MuEff { get; set; }
+    [Storable(Name = "cc")]
+    public double CC { get; set; }
+    [Storable(Name = "cs")]
+    public double CS { get; set; }
+    [Storable(Name = "damps")]
+    public double Damps { get; set; }
+    [Storable(Name = "muCov")]
+    public double MuCov { get; set; }
+    [Storable(Name = "cCov")]
+    public double CCov { get; set; }
+    [Storable(Name = "cCovSep")]
+    public double CCovSep { get; set; }
+    [Storable(Name = "pc")]
+    public double[] PC { get; set; }
+    [Storable(Name = "ps")]
+    public double[] PS { get; set; }
+    [Storable(Name = "b")]
+    public double[,] B { get; set; }
+    [Storable(Name = "d")]
+    public double[] D { get; set; }
+    [Storable(Name = "c")]
+    public double[,] C { get; set; }
+    [Storable(Name = "bDz")]
+    public double[] BDz { get; set; }
+    [Storable(Name = "chiN")]
+    public double ChiN { get; set; }
+    [Storable(Name = "initialIterations")]
+    public int InitialIterations { get; set; }
     [Storable(Name = "qualityHistory")]
     private IEnumerable<double> StorableQualityHistory {
-      get { return qualityHistory.ToArray(); }
-      set { qualityHistory = new Queue<double>(value); }
+      get { return QualityHistory ?? Enumerable.Empty<double>(); }
+      set { if (value != null) QualityHistory = new Queue<double>(value); }
     }
-
-    private Queue<double> qualityHistory;
-    public Queue<double> QualityHistory {
-      get { return qualityHistory; }
-      set { qualityHistory = value; }
-    }
-
-    [Storable]
-    private int qualityHistorySize;
-    public int QualityHistorySize {
-      get { return qualityHistorySize; }
-      set { qualityHistorySize = value; }
-    }
+    public Queue<double> QualityHistory { get; set; }
+    [Storable(Name = "qualityHistorySize")]
+    public int QualityHistorySize { get; set; }
 
     [StorableConstructor]
@@ -274,27 +84,27 @@
     private CMAParameters(CMAParameters original, Cloner cloner)
       : base(original, cloner) {
-      this.axisRatio = original.axisRatio;
-      this.b = (double[,])original.b.Clone();
-      this.bDz = (double[])original.bDz.Clone();
-      this.c = (double[,])original.c.Clone();
-      this.cCov = original.cCov;
-      this.cCovSep = original.cCovSep;
-      this.cc = original.cc;
-      this.chiN = original.chiN;
-      this.cs = original.cs;
-      this.d = (double[])original.d.Clone();
-      this.damps = original.damps;
-      this.initialIterations = original.initialIterations;
-      this.mu = original.mu;
-      this.muCov = original.muCov;
-      this.muEff = original.muEff;
-      this.pc = (double[])original.pc.Clone();
-      this.ps = (double[])original.ps.Clone();
-      this.sigma = original.sigma;
-      this.sigmaBounds = (double[,])original.sigmaBounds.Clone();
-      this.weights = (double[])original.weights.Clone();
+      this.AxisRatio = original.AxisRatio;
+      if (original.B != null) this.B = (double[,])original.B.Clone();
+      if (original.BDz != null) this.BDz = (double[])original.BDz.Clone();
+      if (original.C != null) this.C = (double[,])original.C.Clone();
+      this.CCov = original.CCov;
+      this.CCovSep = original.CCovSep;
+      this.CC = original.CC;
+      this.ChiN = original.ChiN;
+      this.CS = original.CS;
+      if (original.D != null) this.D = (double[])original.D.Clone();
+      this.Damps = original.Damps;
+      this.InitialIterations = original.InitialIterations;
+      this.Mu = original.Mu;
+      this.MuCov = original.MuCov;
+      this.MuEff = original.MuEff;
+      if (original.PC != null) this.PC = (double[])original.PC.Clone();
+      if (original.PS != null) this.PS = (double[])original.PS.Clone();
+      this.Sigma = original.Sigma;
+      if (original.SigmaBounds != null) this.SigmaBounds = (double[,])original.SigmaBounds.Clone();
+      if (original.Weights != null) this.Weights = (double[])original.Weights.Clone();
 
-      this.qualityHistory = new Queue<double>(original.qualityHistory);
-      this.qualityHistorySize = original.qualityHistorySize;
+      if (original.QualityHistory != null) this.QualityHistory = new Queue<double>(original.QualityHistory);
+      this.QualityHistorySize = original.QualityHistorySize;
     }
     public CMAParameters() { }
@@ -303,10 +113,4 @@
       return new CMAParameters(this, cloner);
     }
-
-    public event PropertyChangedEventHandler PropertyChanged;
-    private void OnPropertyChanged(string name) {
-      var handler = PropertyChanged;
-      if (handler != null) handler(this, new PropertyChangedEventArgs(name));
-    }
   }
 }
