Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/BestPointInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/BestPointInitializer.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/BestPointInitializer.cs	(revision 5435)
@@ -30,8 +30,10 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Best Point Initializer", "Determines the best quality and point of the current particle population.")]
   [StorableClass]
-  public class BestPointInitializer : SingleSuccessorOperator {
+  public sealed class BestPointInitializer : SingleSuccessorOperator {
+    public override bool CanChangeName {
+      get { return false; }
+    }
 
     #region Parameter properties
@@ -54,19 +56,19 @@
 
     #region Parameter values
-    public ItemArray<DoubleValue> Quality {
+    private ItemArray<DoubleValue> Quality {
       get { return QualityParameter.ActualValue; }
     }
-    public double BestQuality {
+    private double BestQuality {
       get { return BestQualityParameter.ActualValue.Value; }
       set { BestQualityParameter.ActualValue = new DoubleValue(value); }
     }
-    public ItemArray<RealVector> Point {
+    private ItemArray<RealVector> Point {
       get { return PointParameter.ActualValue; }
     }
-    public RealVector BestPoint {
+    private RealVector BestPoint {
       get { return BestPointParameter.ActualValue; }
       set { BestPointParameter.ActualValue = value; }
     }
-    public bool Maximization {
+    private bool Maximization {
       get { return MaximizationParameter.ActualValue.Value; }
     }
@@ -76,9 +78,6 @@
 
     [StorableConstructor]
-    protected BestPointInitializer(bool deserializing) : base(deserializing) { }
-    protected BestPointInitializer(BestPointInitializer original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
+    private BestPointInitializer(bool deserializing) : base(deserializing) { }
+    private BestPointInitializer(BestPointInitializer original, Cloner cloner) : base(original, cloner) { }
     public BestPointInitializer()
       : base() {
@@ -102,8 +101,4 @@
       return base.Apply();
     }
-
-    public override bool CanChangeName {
-      get { return false; }
-    }
   }
 }
Index: unk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.sln	(revision 5434)
+++ 	(revision )
@@ -1,32 +1,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3", "HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj", "{2C429157-9C34-4DD3-9D5F-B444B751E39A}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release|Any CPU = Release|Any CPU
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Debug|x64.ActiveCfg = Debug|x64
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Debug|x64.Build.0 = Debug|x64
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Debug|x86.ActiveCfg = Debug|x86
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Debug|x86.Build.0 = Debug|x86
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Release|x64.ActiveCfg = Release|x64
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Release|x64.Build.0 = Release|x64
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Release|x86.ActiveCfg = Release|x86
-		{2C429157-9C34-4DD3-9D5F-B444B751E39A}.Release|x86.Build.0 = Release|x86
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLabAlgorithmsParticleSwarmOptimizationPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLabAlgorithmsParticleSwarmOptimizationPlugin.cs.frame	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLabAlgorithmsParticleSwarmOptimizationPlugin.cs.frame	(revision 5435)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.ParticleSwarmOptimization plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.ParticleSwarmOptimization", "3.3.0.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.ParticleSwarmOptimization", "3.3.2.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IDiscreteDoubleMatrixModifier.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IDiscreteDoubleMatrixModifier.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IDiscreteDoubleMatrixModifier.cs	(revision 5435)
@@ -1,6 +1,23 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -9,5 +26,4 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   public interface IDiscreteDoubleMatrixModifier : IItem {
     ILookupParameter<DoubleMatrix> ValueParameter { get; }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IGlobalParticleUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IGlobalParticleUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IGlobalParticleUpdater.cs	(revision 5435)
@@ -1,6 +1,22 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ILocalParticleUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ILocalParticleUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ILocalParticleUpdater.cs	(revision 5435)
@@ -1,6 +1,22 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IParticleUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IParticleUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IParticleUpdater.cs	(revision 5435)
@@ -23,8 +23,6 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   public interface IParticleUpdater : IOperator {
 
Index: unk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IRealVectorEncoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IRealVectorEncoder.cs	(revision 5434)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Encodings.RealVectorEncoding {
-  public interface IRealVectorEncoder : IRealVectorOperator {
-    ILookupParameter<RealVector> RealVectorParameter { get; }
-  }
-}
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ITopologyInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ITopologyInitializer.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ITopologyInitializer.cs	(revision 5435)
@@ -23,11 +23,9 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Parameters;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   public interface ITopologyInitializer : IOperator {
     IScopeTreeLookupParameter<IntegerVector> NeighborsParameter { get; }
     ILookupParameter<IntValue> SwarmSizeParameter { get; }
   }
-
 }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ITopologyUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ITopologyUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ITopologyUpdater.cs	(revision 5435)
@@ -22,10 +22,8 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Parameters;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
-  public interface ITopologyUpdater : IItem {
+  public interface ITopologyUpdater : IOperator {
     IScopeTreeLookupParameter<IntegerVector> NeighborsParameter { get; }
   }
-
 }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/MultiPSOTopologyUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/MultiPSOTopologyUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/MultiPSOTopologyUpdater.cs	(revision 5435)
@@ -1,18 +1,41 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Operators;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-  [Item("Multi PSO Topology Initializer/Updater", "Splits swarm into swarmsize / (nrOfConnections + 1) non-overlapping sub-swarms. Swarms are re-grouped every regroupingPeriod iteration. The operator is implemented as described in Liang, J.J. and Suganthan, P.N 2005. Dynamic multi-swarm particle swarm optimizer. IEEE Swarm Intelligence Symposium, pp. 124-129")]
+  [Item("Multi PSO Topology Initializer/Updater", "Splits swarm into swarmsize / (nrOfConnections + 1) non-overlapping sub-swarms. Swarms are re-grouped every regroupingPeriod iteration. The operator is implemented as described in Liang, J.J. and Suganthan, P.N 2005. Dynamic multi-swarm particle swarm optimizer. IEEE Swarm Intelligence Symposium, pp. 124-129.")]
   [StorableClass]
-  public class MultiPSOTopologyUpdater : SingleSuccessorOperator, ITopologyUpdater, ITopologyInitializer {
+  public sealed class MultiPSOTopologyUpdater : SingleSuccessorOperator, ITopologyUpdater, ITopologyInitializer {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+
     #region Parameters
     public ILookupParameter<IRandom> RandomParameter {
@@ -37,25 +60,28 @@
 
     #region Parameter Values
-    public IRandom Random {
+    private IRandom Random {
       get { return RandomParameter.ActualValue; }
     }
-    public int NrOfConnections {
+    private int NrOfConnections {
       get { return NrOfConnectionsParameter.ActualValue.Value; }
     }
-    public int SwarmSize {
+    private int SwarmSize {
       get { return SwarmSizeParameter.ActualValue.Value; }
     }
-    public ItemArray<IntegerVector> Neighbors {
+    private ItemArray<IntegerVector> Neighbors {
       get { return NeighborsParameter.ActualValue; }
       set { NeighborsParameter.ActualValue = value; }
     }
-    public int CurrentIteration {
+    private int CurrentIteration {
       get { return CurrentIterationParameter.ActualValue.Value; }
     }
-    public int RegroupingPeriod {
+    private int RegroupingPeriod {
       get { return RegroupingPeriodParameter.ActualValue.Value; }
     }
     #endregion
 
+    [StorableConstructor]
+    private MultiPSOTopologyUpdater(bool deserializing) : base(deserializing) { }
+    private MultiPSOTopologyUpdater(MultiPSOTopologyUpdater original, Cloner cloner) : base(original, cloner) { }
     public MultiPSOTopologyUpdater()
       : base() {
@@ -66,4 +92,8 @@
       Parameters.Add(new LookupParameter<IntValue>("CurrentIteration", "The current iteration of the algorithm."));
       Parameters.Add(new ValueLookupParameter<IntValue>("RegroupingPeriod", "Update interval (=iterations) for regrouping of neighborhoods.", new IntValue(5)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiPSOTopologyUpdater(this, cloner);
     }
 
@@ -84,5 +114,5 @@
           int nextParticle = numbers[Random.Next(0, numbers.Count)];
           if (!groups.ContainsKey(groupId)) {
-            groups.Add(groupId, new List<int>()); 
+            groups.Add(groupId, new List<int>());
           }
           groups[groupId].Add(nextParticle);
@@ -90,5 +120,5 @@
             groupId++;
           }
-          numbers.Remove(nextParticle); 
+          numbers.Remove(nextParticle);
         }
 
@@ -111,17 +141,4 @@
       return base.Apply();
     }
-
-    [StorableConstructor]
-    protected MultiPSOTopologyUpdater(bool deserializing) : base(deserializing) { }
-
-    #region Cloning
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MultiPSOTopologyUpdater(this, cloner);
-    }
-
-    protected MultiPSOTopologyUpdater(MultiPSOTopologyUpdater original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    #endregion
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborUpdater.cs	(revision 5435)
@@ -29,9 +29,12 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Neighbor Updater", "Determines the best quality and point among the defined list of neigbors for every particle and its individual neighborhood.")]
   [StorableClass]
-  public class NeighborUpdater : SingleSuccessorOperator {
+  public sealed class NeighborUpdater : SingleSuccessorOperator {
+    public override bool CanChangeName {
+      get { return false; }
+    }
 
     #region Parameters
@@ -54,18 +57,18 @@
 
     #region Parameter Values
-    public ItemArray<RealVector> Points {
+    private ItemArray<RealVector> Points {
       get { return PointsParameter.ActualValue; }
     }
-    public ItemArray<IntegerVector> Neighbors {
+    private ItemArray<IntegerVector> Neighbors {
       get { return NeighborsParameter.ActualValue; }
     }
-    public ItemArray<RealVector> BestNeighborPoints {
+    private ItemArray<RealVector> BestNeighborPoints {
       get { return BestNeighborPointParameter.ActualValue; }
       set { BestNeighborPointParameter.ActualValue = value; }
     }
-    public ItemArray<DoubleValue> Qualities {
+    private ItemArray<DoubleValue> Qualities {
       get { return QualityParameter.ActualValue; }
     }
-    public bool Maximization {
+    private bool Maximization {
       get { return MaximizationParameter.ActualValue.Value; }
     }
@@ -73,4 +76,7 @@
 
     #region Construction & Cloning
+    [StorableConstructor]
+    private NeighborUpdater(bool deserializing) : base(deserializing) { }
+    private NeighborUpdater(NeighborUpdater original, Cloner cloner) : base(original, cloner) { }
     public NeighborUpdater() {
       Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Point", "The position of the particle."));
@@ -80,9 +86,5 @@
       Parameters.Add(new LookupParameter<BoolValue>("Maximization", "Whether the problem is a maximization problem."));
     }
-    [StorableConstructor]
-    protected NeighborUpdater(bool deserializing) : base(deserializing) { }
-    protected NeighborUpdater(NeighborUpdater original, Cloner cloner)
-      : base(original, cloner) {
-    }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new NeighborUpdater(this, cloner);
@@ -94,8 +96,8 @@
         if (BestNeighborPoints == null || BestNeighborPoints.Length != Neighbors.Length)
           BestNeighborPoints = new ItemArray<RealVector>(Neighbors.Length);
-        for (int n = 0; n<Neighbors.Length; n++) {
+        for (int n = 0; n < Neighbors.Length; n++) {
           var pairs = Qualities.Zip(Points, (q, p) => new { Quality = q, Point = p })
             .Where((p, i) => i == n || Neighbors[n].Contains(i));
-          BestNeighborPoints[n] = Maximization ? 
+          BestNeighborPoints[n] = Maximization ?
           pairs.OrderByDescending(p => p.Quality.Value).First().Point :
           pairs.OrderBy(p => p.Quality.Value).First().Point;
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborhoodParticleUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborhoodParticleUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborhoodParticleUpdater.cs	(revision 5435)
@@ -26,14 +26,11 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
-  [Item("Neighborhood Particle Updater", "Updates the particle's position using (among other things) the best neighbor's position. Point = Point + Velocity*Omega + (PersonalBestPoint-Point)*Phi_P*r_p + (BestNeighborPoint-Point)*Phi_G*r_g")]
+  [Item("Neighborhood Particle Updater", "Updates the particle's position using (among other things) the best neighbor's position. Point = Point + Velocity*Omega + (PersonalBestPoint-Point)*Phi_P*r_p + (BestNeighborPoint-Point)*Phi_G*r_g.")]
   [StorableClass]
-  public class NeighborhoodParticleUpdater : ParticleUpdater, ILocalParticleUpdater {
-
-    #region Construction & Cloning
+  public sealed class NeighborhoodParticleUpdater : ParticleUpdater, ILocalParticleUpdater {
 
     [StorableConstructor]
-    protected NeighborhoodParticleUpdater(bool deserializing) : base(deserializing) { }
-    protected NeighborhoodParticleUpdater(NeighborhoodParticleUpdater original, Cloner cloner) : base(original, cloner) { }
+    private NeighborhoodParticleUpdater(bool deserializing) : base(deserializing) { }
+    private NeighborhoodParticleUpdater(NeighborhoodParticleUpdater original, Cloner cloner) : base(original, cloner) { }
     public NeighborhoodParticleUpdater() : base() { }
 
@@ -41,6 +38,4 @@
       return new NeighborhoodParticleUpdater(this, cloner);
     }
-
-    #endregion
 
     public override IOperation Apply() {
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs	(revision 5435)
@@ -34,12 +34,10 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Random;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Particle Swarm Optimization", "A particle swarm optimization algorithm based on the description in Pedersen, M.E.H. (2010). PhD thesis. University of Southampton.")]
   [Creatable("Algorithms")]
   [StorableClass]
-  public class ParticleSwarmOptimization : EngineAlgorithm, IStorableContent {
+  public sealed class ParticleSwarmOptimization : EngineAlgorithm, IStorableContent {
 
     #region Problem Properties
@@ -135,18 +133,10 @@
 
     [StorableConstructor]
-    protected ParticleSwarmOptimization(bool deserializing)
-      : base(deserializing) {
-    }
-    protected ParticleSwarmOptimization(ParticleSwarmOptimization original, Cloner cloner)
+    private ParticleSwarmOptimization(bool deserializing) : base(deserializing) { }
+    private ParticleSwarmOptimization(ParticleSwarmOptimization original, Cloner cloner)
       : base(original, cloner) {
       qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
       Initialize();
     }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      Initialize();
-    }
-
     public ParticleSwarmOptimization()
       : base() {
@@ -288,4 +278,9 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+
     public override void Prepare() {
       if (Problem != null) {
Index: unk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimizationMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimizationMainLoop.cs	(revision 5434)
+++ 	(revision )
@@ -1,164 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-  /// <summary>
-  /// An operator which represents the main loop of a PSO.
-  /// </summary> 
-  [Item("ParticleSwarmOptimizationMainLoop", "An operator which represents the main loop of a PSO.")]
-  [StorableClass]
-  public class ParticleSwarmOptimizationMainLoop : AlgorithmOperator {
-    #region Parameter properties
-    public ValueLookupParameter<VariableCollection> ResultsParameter {
-      get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; }
-    }
-    public ValueLookupParameter<IRealVectorEncoder> EncoderParameter {
-      get { return (ValueLookupParameter<IRealVectorEncoder>)Parameters["Encoder"]; }
-    }
-    public ValueLookupParameter<IOperator> DecoderParameter {
-      get { return (ValueLookupParameter<IOperator>)Parameters["Decoder"]; }
-    }
-    public ValueLookupParameter<BoolValue> MaximizationParameter {
-      get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
-    }
-    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
-      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
-    }
-    public ValueLookupParameter<IntValue> MaximumGenerationsParameter {
-      get { return (ValueLookupParameter<IntValue>)Parameters["MaximumGenerations"]; }
-    }
-    public ValueLookupParameter<IOperator> EvaluatorParameter {
-      get { return (ValueLookupParameter<IOperator>)Parameters["Evaluator"]; }
-    }
-    public ValueLookupParameter<IOperator> AnalyzerParameter {
-      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
-    }
-    #endregion
-
-    [Storable]
-    private ParticleUpdater velocityUpdater;
-
-    [StorableConstructor]
-    private ParticleSwarmOptimizationMainLoop(bool deserializing) : base() { }
-    public ParticleSwarmOptimizationMainLoop()
-      : base() {
-      Initialize();
-    }
-
-    private void Initialize() {
-      #region Create parameters
-      Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
-      Parameters.Add(new ValueLookupParameter<IRealVectorEncoder>("Encoder", "The encoding operator that maps a solution to a position vector."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Decoder", "The decoding operator that maps a position vector to a solution."));
-      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
-      Parameters.Add(new ValueLookupParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
-      #endregion
-
-      EncoderParameter.ActualNameChanged += new EventHandler(EncoderParameter_ActualNameChanged);
-
-      #region Create operators
-      VariableCreator variableCreator = new VariableCreator();
-      ResultsCollector resultsCollector1 = new ResultsCollector();
-      IntCounter intCounter = new IntCounter();
-      ConditionalBranch conditionalBranch = new ConditionalBranch();
-      velocityUpdater = new ParticleUpdater();
-      UniformSubScopesProcessor uniformSubScopesProcessor = new UniformSubScopesProcessor();
-      UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor();
-      Placeholder encPlaceholder = new Placeholder();
-      Placeholder decPlaceholder = new Placeholder();
-      Placeholder evaluator = new Placeholder();
-      Comparator comparator = new Comparator();
-      SwarmUpdater swarmUpdater = new SwarmUpdater();
-      Placeholder analyzer1 = new Placeholder();
-
-      analyzer1.Name = "Analyzer (placeholder)";
-      analyzer1.OperatorParameter.ActualName = AnalyzerParameter.Name;
-
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0))); // Initial generation already built
-
-      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector1.ResultsParameter.ActualName = "Results";
-
-      intCounter.Increment = new IntValue(1);
-      intCounter.ValueParameter.ActualName = "Generations";
-
-      comparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
-      comparator.LeftSideParameter.ActualName = "Generations";
-      comparator.ResultParameter.ActualName = "Terminate";
-      comparator.RightSideParameter.ActualName = MaximumGenerationsParameter.Name;
-
-      conditionalBranch.ConditionParameter.ActualName = "Terminate";
-
-      velocityUpdater.BestGlobalParameter.ActualName = "CurrentBestPosition";
-      velocityUpdater.BestLocalParameter.ActualName = "BestPosition";
-      velocityUpdater.CurrentPositionParameter.ActualName = "Position";
-      velocityUpdater.VelocityParameter.ActualName = "Velocity";
-      //
-      // ToDo: Add correctly 
-
-      encPlaceholder.OperatorParameter.ActualName = EncoderParameter.ActualName;
-      decPlaceholder.OperatorParameter.ActualName = DecoderParameter.ActualName;
-
-      evaluator.Name = "Evaluator (placeholder)";
-      evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
-
-      swarmUpdater.CurrentPositionParameter.ActualName = "Position";
-      swarmUpdater.CurrentQualityParameter.ActualName = "Quality";
-      swarmUpdater.BestGlobalParameter.ActualName = "CurrentBestPosition";
-      swarmUpdater.BestLocalParameter.ActualName = "BestPosition";
-      swarmUpdater.LocalBestQualityParameter.ActualName = "BestQuality";
-      swarmUpdater.GlobalBestQualityParameter.ActualName = "CurrentBestBestQuality";
-      #endregion
-
-      #region Create operator graph
-      OperatorGraph.InitialOperator = variableCreator;
-      variableCreator.Successor = comparator;
-      comparator.Successor = conditionalBranch;
-      conditionalBranch.FalseBranch = uniformSubScopesProcessor;
-      uniformSubScopesProcessor.Operator = velocityUpdater;
-      uniformSubScopesProcessor.Successor = intCounter;
-      velocityUpdater.Successor = decPlaceholder;
-      decPlaceholder.Successor = evaluator;
-      evaluator.Successor = swarmUpdater;
-      swarmUpdater.Successor = null;
-      intCounter.Successor = resultsCollector1;
-      resultsCollector1.Successor = analyzer1;
-      analyzer1.Successor = comparator;
-      #endregion
-    }
-
-    private void EncoderParameter_ActualNameChanged(object sender, EventArgs e) {
-      velocityUpdater.BoundsParameter.ActualName = EncoderParameter.ActualValue.BoundsParameter.ActualName;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleUpdater.cs	(revision 5435)
@@ -29,7 +29,10 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
+  [Item("ParticleUpdater", "Updates a certain particle taking the current position and velocity into account, as well as the best point and the best point in a local neighborhood.")]
   [StorableClass]
   public abstract class ParticleUpdater : SingleSuccessorOperator, IParticleUpdater {
+    public override bool CanChangeName {
+      get { return false; }
+    }
 
     #region Parameter properties
@@ -70,45 +73,40 @@
 
     #region Parameter Values
-    public IRandom Random {
+    protected IRandom Random {
       get { return RandomParameter.ActualValue; }
     }
-    public RealVector Point {
+    protected RealVector Point {
       get { return PointParameter.ActualValue; }
       set { PointParameter.ActualValue = value; }
     }
-    public RealVector Velocity {
+    protected RealVector Velocity {
       get { return VelocityParameter.ActualValue; }
       set { VelocityParameter.ActualValue = value; }
     }
-    public RealVector PersonalBestPoint {
+    protected RealVector PersonalBestPoint {
       get { return PersonalBestPointParameter.ActualValue; }
     }
-    public RealVector BestPoint {
+    protected RealVector BestPoint {
       get { return BestPointParameter.ActualValue; }
     }
-    public RealVector BestNeighborPoint {
+    protected RealVector BestNeighborPoint {
       get { return BestNeighborPointParameter.ActualValue; }
     }
-    public DoubleMatrix Bounds {
+    protected DoubleMatrix Bounds {
       get { return BoundsParameter.ActualValue; }
     }
-    public DoubleMatrix VelocityBounds {
+    protected DoubleMatrix VelocityBounds {
       get { return VelocityBoundsParameter.ActualValue; }
     }
-
-    public DoubleValue Omega {
+    protected DoubleValue Omega {
       get { return OmegaParameter.ActualValue; }
     }
-    public DoubleValue Phi_P {
+    protected DoubleValue Phi_P {
       get { return Phi_PParameter.ActualValue; }
     }
-    public DoubleValue Phi_G {
+    protected DoubleValue Phi_G {
       get { return Phi_GParameter.ActualValue; }
     }
     #endregion
-
-    public override bool CanChangeName {
-      get { return false; }
-    }
 
     #region Construction & Cloning
@@ -116,8 +114,5 @@
     [StorableConstructor]
     protected ParticleUpdater(bool deserializing) : base(deserializing) { }
-    protected ParticleUpdater(ParticleUpdater original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
+    protected ParticleUpdater(ParticleUpdater original, Cloner cloner) : base(original, cloner) { }
     public ParticleUpdater()
       : base() {
Index: unk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/PermutationToRealVectorEncoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/PermutationToRealVectorEncoder.cs	(revision 5434)
+++ 	(revision )
@@ -1,80 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-
-namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-  public class PermutationToRealVectorEncoder : SingleSuccessorOperator, IRealVectorEncoder {
-
-    public IParameter RealVectorParameter {
-      get { return (IParameter)Parameters["RealVector"]; }
-    }
-
-    public ILookupParameter<Permutation> PermutationParameter {
-      get { return (ILookupParameter<Permutation>)Parameters["Permutation"]; }
-    }
-
-    public ILookupParameter<IntValue> LengthParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Length"]; }
-    }
-
-    public IValueLookupParameter<DoubleMatrix> BoundsParameter {
-      get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
-    }
-
-    public DoubleMatrix Bounds {
-      get { return (DoubleMatrix)BoundsParameter.ActualValue; }
-      set { BoundsParameter.ActualValue = value; }
-    }
-
-    public PermutationToRealVectorEncoder()
-      : base() {
-      Parameters.Add(new LookupParameter<Permutation>("Permutation", "The permutation to encode."));
-      Parameters.Add(new LookupParameter<RealVector>("RealVector", "The resulting real vector."));
-      Parameters.Add(new LookupParameter<IntValue>("Length", "Vector length."));
-      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension."));
-    }
-
-    public override IOperation Apply() {
-      Permutation permutation = PermutationParameter.ActualValue;
-
-      RealVector realVector = new RealVector(permutation.Length);
-      double max = permutation.Length;
-      for (int i = 0; i < permutation.Length; i++) {
-        realVector[permutation[i]] = max;
-        max = max - 1;
-      }
-      RealVectorParameter.ActualValue = realVector;
-      LengthParameter.ActualValue = new IntValue(realVector.Length);
-      return base.Apply();
-    }
-
-    public override bool CanChangeName {
-      get { return false; }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/Properties/AssemblyInfo.frame	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/Properties/AssemblyInfo.frame	(revision 5435)
@@ -27,5 +27,5 @@
 // associated with an assembly.
 [assembly: AssemblyTitle("HeuristicLab.Algorithms.ParticleSwarmOptimization")]
-[assembly: AssemblyDescription("HeuristicLab ParticleSwarmOptimization (PSO)")]
+[assembly: AssemblyDescription("Plugin that provides an implementation of the particle swarm optimization (PSO) metaheuristic.")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.2.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RandomTopologyInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RandomTopologyInitializer.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RandomTopologyInitializer.cs	(revision 5435)
@@ -28,10 +28,9 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Random Topology Initializer", "Randomly connectes every particle with k other particles.")]
   [StorableClass]
-  public class RandomTopologyInitializer : TopologyInitializer {
-
+  public sealed class RandomTopologyInitializer : TopologyInitializer {
     #region Parameters
     public ILookupParameter<IRandom> RandomParameter {
@@ -44,8 +43,8 @@
 
     #region Parameter Values
-    public IRandom Random {
+    private IRandom Random {
       get { return RandomParameter.ActualValue; }
     }
-    public int NrOfConnections {
+    private int NrOfConnections {
       get { return NrOfConnectionsParameter.ActualValue.Value; }
     }
@@ -53,13 +52,12 @@
 
     #region Construction & Cloning
+    [StorableConstructor]
+    private RandomTopologyInitializer(bool deserializing) : base(deserializing) { }
+    private RandomTopologyInitializer(RandomTopologyInitializer original, Cloner cloner) : base(original, cloner) { }
     public RandomTopologyInitializer() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "A random number generation."));
       Parameters.Add(new ValueLookupParameter<IntValue>("NrOfConnections", "Nr of connected neighbors.", new IntValue(3)));
     }
-    [StorableConstructor]
-    protected RandomTopologyInitializer(bool deserializing) : base(deserializing) { }
-    protected RandomTopologyInitializer(RandomTopologyInitializer original, Cloner cloner)
-      : base(original, cloner) {
-    }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new RandomTopologyInitializer(this, cloner);
@@ -69,9 +67,9 @@
     public override IOperation Apply() {
       ItemArray<IntegerVector> neighbors = new ItemArray<IntegerVector>(SwarmSize);
-      for (int i = 0; i<SwarmSize; i++) {
+      for (int i = 0; i < SwarmSize; i++) {
         var numbers = Enumerable.Range(0, SwarmSize).ToList();
         numbers.RemoveAt(i);
         var selectedNumbers = new List<int>(NrOfConnections);
-        for (int j = 0; j<NrOfConnections && numbers.Count > 0; j++) {
+        for (int j = 0; j < NrOfConnections && numbers.Count > 0; j++) {
           int index = Random.Next(numbers.Count);
           selectedNumbers.Add(numbers[index]);
@@ -83,5 +81,4 @@
       return base.Apply();
     }
-
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RingTopologyInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RingTopologyInitializer.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RingTopologyInitializer.cs	(revision 5435)
@@ -24,31 +24,30 @@
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Ring Topology Initializer", "Connected every particle with its preceeding and its following particle.")]
   [StorableClass]
-  public class RingTopologyInitializer : TopologyInitializer {
+  public sealed class RingTopologyInitializer : TopologyInitializer {
+    #region Construction & Cloning
 
-    #region Construction & Cloning
-    public RingTopologyInitializer() { }
     [StorableConstructor]
-    protected RingTopologyInitializer(bool deserializing) : base(deserializing) { }
-    protected RingTopologyInitializer(RingTopologyInitializer original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    private RingTopologyInitializer(bool deserializing) : base(deserializing) { }
+    private RingTopologyInitializer(RingTopologyInitializer original, Cloner cloner) : base(original, cloner) { }
+    public RingTopologyInitializer() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new RingTopologyInitializer(this, cloner);
     }
+
     #endregion
 
     public override IOperation Apply() {
       ItemArray<IntegerVector> neighbors = new ItemArray<IntegerVector>(SwarmSize);
-      for (int i = 0; i<SwarmSize; i++) {
-        neighbors[i] = new IntegerVector(new[] { (SwarmSize + i-1) % SwarmSize, (i+1) % SwarmSize });
+      for (int i = 0; i < SwarmSize; i++) {
+        neighbors[i] = new IntegerVector(new[] { (SwarmSize + i - 1) % SwarmSize, (i + 1) % SwarmSize });
       }
       Neighbors = neighbors;
       return base.Apply();
     }
-
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/SwarmUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/SwarmUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/SwarmUpdater.cs	(revision 5435)
@@ -29,8 +29,10 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Swarm Updater", "Updates personal best point and quality as well as global best point and quality.")]
   [StorableClass]
-  public class SwarmUpdater : SingleSuccessorOperator {
+  public sealed class SwarmUpdater : SingleSuccessorOperator {
+    public override bool CanChangeName {
+      get { return false; }
+    }
 
     #region Parameter properties
@@ -59,27 +61,27 @@
 
     #region Parameter values
-    public double Quality {
+    private double Quality {
       get { return QualityParameter.ActualValue.Value; }
     }
-    public double PersonalBestQuality {
+    private double PersonalBestQuality {
       get { return PersonalBestQualityParameter.ActualValue.Value; }
       set { PersonalBestQualityParameter.ActualValue = new DoubleValue(value); }
     }
-    public double BestQuality {
+    private double BestQuality {
       get { return BestQualityParameter.ActualValue.Value; }
       set { BestQualityParameter.ActualValue = new DoubleValue(value); }
     }
-    public RealVector Point {
+    private RealVector Point {
       get { return PointParameter.ActualValue; }
     }
-    public RealVector PersonalBestPoint {
+    private RealVector PersonalBestPoint {
       get { return PersonalBestPointParameter.ActualValue; }
       set { PersonalBestPointParameter.ActualValue = value; }
     }
-    public RealVector BestPoint {
+    private RealVector BestPoint {
       get { return BestPointParameter.ActualValue; }
       set { BestPointParameter.ActualValue = value; }
     }
-    public bool Maximization {
+    private bool Maximization {
       get { return MaximizationParameter.ActualValue.Value; }
     }
@@ -89,9 +91,6 @@
 
     [StorableConstructor]
-    protected SwarmUpdater(bool deserializing) : base(deserializing) { }
-    protected SwarmUpdater(SwarmUpdater original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
+    private SwarmUpdater(bool deserializing) : base(deserializing) { }
+    private SwarmUpdater(SwarmUpdater original, Cloner cloner) : base(original, cloner) { }
     public SwarmUpdater()
       : base() {
@@ -112,5 +111,4 @@
 
     public override IOperation Apply() {
-
       if (Maximization && Quality > PersonalBestQuality ||
          !Maximization && Quality < PersonalBestQuality) {
@@ -125,8 +123,4 @@
       return base.Apply();
     }
-
-    public override bool CanChangeName {
-      get { return false; }
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TopologyInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TopologyInitializer.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TopologyInitializer.cs	(revision 5435)
@@ -27,8 +27,12 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
+  [Item("TopologyInitializer", "Groups the particles into neighborhoods according to a certain strategy.")]
   [StorableClass]
   public abstract class TopologyInitializer : SingleSuccessorOperator, ITopologyInitializer {
+    public override bool CanChangeName {
+      get { return false; }
+    }
 
     #region Parameters
@@ -43,9 +47,9 @@
 
     #region Parameter Values
-    public ItemArray<IntegerVector> Neighbors {
+    protected ItemArray<IntegerVector> Neighbors {
       get { return NeighborsParameter.ActualValue; }
       set { NeighborsParameter.ActualValue = value; }
     }
-    public int SwarmSize {
+    protected int SwarmSize {
       get { return SwarmSizeParameter.ActualValue.Value; }
     }
@@ -53,12 +57,10 @@
 
     #region Construction & Cloning
-    protected TopologyInitializer() {
+    [StorableConstructor]
+    protected TopologyInitializer(bool deserializing) : base(deserializing) { }
+    protected TopologyInitializer(TopologyInitializer original, Cloner cloner) : base(original, cloner) { }
+    public TopologyInitializer() {
       Parameters.Add(new ScopeTreeLookupParameter<IntegerVector>("Neighbors", "The list of neighbors for each particle."));
       Parameters.Add(new LookupParameter<IntValue>("SwarmSize", "Number of particles in the swarm."));
-    }
-    [StorableConstructor]
-    protected TopologyInitializer(bool deserializing) : base(deserializing) { }
-    protected TopologyInitializer(TopologyInitializer original, Cloner cloner)
-      : base(original, cloner) {
     }
     #endregion
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TotallyConnectedParticleUpdater.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TotallyConnectedParticleUpdater.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TotallyConnectedParticleUpdater.cs	(revision 5435)
@@ -26,14 +26,13 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Totally Connected Particle Updater", "Updates the particle's position using (among other things) the global best position. Use together with the empty topology initialzer. Point = Point + Velocity*Omega + (PersonalBestPoint-Point)*Phi_P*r_p + (BestPoint-Point)*Phi_G*r_g")]
   [StorableClass]
-  public class TotallyConnectedParticleUpdater : ParticleUpdater, IGlobalParticleUpdater {
+  public sealed class TotallyConnectedParticleUpdater : ParticleUpdater, IGlobalParticleUpdater {
 
     #region Construction & Cloning
 
     [StorableConstructor]
-    protected TotallyConnectedParticleUpdater(bool deserializing) : base(deserializing) { }
-    protected TotallyConnectedParticleUpdater(TotallyConnectedParticleUpdater original, Cloner cloner) : base(original, cloner) { }
+    private TotallyConnectedParticleUpdater(bool deserializing) : base(deserializing) { }
+    private TotallyConnectedParticleUpdater(TotallyConnectedParticleUpdater original, Cloner cloner) : base(original, cloner) { }
     public TotallyConnectedParticleUpdater() : base() { }
 
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VelocityBoundsModifier.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VelocityBoundsModifier.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VelocityBoundsModifier.cs	(revision 5435)
@@ -1,20 +1,36 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Operators;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
+  [Item("VelocityBoundsModifier", "Modifies the velocity bounds.")]
   [StorableClass]
-  public class VelocityBoundsModifier : SingleSuccessorOperator, IDiscreteDoubleMatrixModifier {
-
+  public sealed class VelocityBoundsModifier : SingleSuccessorOperator, IDiscreteDoubleMatrixModifier {
     #region Parameters
     public ILookupParameter<DoubleMatrix> ValueParameter {
@@ -47,7 +63,8 @@
 
     [StorableConstructor]
-    protected VelocityBoundsModifier(bool deserializing) : base(deserializing) { }
-    protected VelocityBoundsModifier(VelocityBoundsModifier original, Cloner cloner) : base(original, cloner) {
-      Initialize();
+    private VelocityBoundsModifier(bool deserializing) : base(deserializing) { }
+    private VelocityBoundsModifier(VelocityBoundsModifier original, Cloner cloner)
+      : base(original, cloner) {
+      ParameterizeModifiers();
     }
     public VelocityBoundsModifier() {
@@ -60,8 +77,17 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("StartIndex", "The start index at which to start modifying 'Value'."));
       Parameters.Add(new ValueLookupParameter<IntValue>("EndIndex", "The end index by which 'Value' should have reached 'EndValue'."));
+
       Initialize();
+      ParameterizeModifiers();
     }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new VelocityBoundsModifier(this, cloner);
+    }
+    #endregion
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      ParameterizeModifiers();
     }
 
@@ -69,52 +95,17 @@
       foreach (IDiscreteDoubleValueModifier op in ApplicationManager.Manager.GetInstances<IDiscreteDoubleValueModifier>()) {
         ScalingOperatorParameter.ValidValues.Add(op);
-        op.ValueParameter.ActualName = ScaleParameter.ActualName;
-      }
-      ScaleParameter.ActualNameChanged += new EventHandler(ScaleParameter_ActualNameChanged);
-      StartValueParameter.ActualNameChanged += new EventHandler(StartValueParameter_ActualNameChanged);
-      EndValueParameter.ActualNameChanged += new EventHandler(EndValueParameter_ActualNameChanged);
-      IndexParameter.ActualNameChanged += new EventHandler(IndexParameter_ActualNameChanged);
-      EndIndexParameter.ActualNameChanged += new EventHandler(EndIndexParameter_ActualNameChanged);
-      StartIndexParameter.ActualNameChanged += new EventHandler(StartIndexParameter_ActualNameChanged);
-    }
-    #endregion
-
-    #region Events
-    private void ScaleParameter_ActualNameChanged(object sender, EventArgs e) {
-      foreach (IDiscreteDoubleValueModifier modifier in ScalingOperatorParameter.ValidValues) {
-        modifier.ValueParameter.ActualName = ScaleParameter.ActualName;
       }
     }
 
-    private void StartValueParameter_ActualNameChanged(object sender, EventArgs e) {
-      foreach (IDiscreteDoubleValueModifier modifier in ScalingOperatorParameter.ValidValues) {
-        modifier.StartValueParameter.ActualName = StartValueParameter.ActualName;
+    private void ParameterizeModifiers() {
+      foreach (IDiscreteDoubleValueModifier op in ScalingOperatorParameter.ValidValues) {
+        op.ValueParameter.ActualName = ScaleParameter.Name;
+        op.StartValueParameter.ActualName = StartValueParameter.Name;
+        op.EndValueParameter.ActualName = EndValueParameter.Name;
+        op.IndexParameter.ActualName = IndexParameter.Name;
+        op.StartIndexParameter.ActualName = StartIndexParameter.Name;
+        op.EndIndexParameter.ActualName = EndIndexParameter.Name;
       }
     }
-
-    private void EndValueParameter_ActualNameChanged(object sender, EventArgs e) {
-      foreach (IDiscreteDoubleValueModifier modifier in ScalingOperatorParameter.ValidValues) {
-        modifier.EndValueParameter.ActualName = EndValueParameter.ActualName;
-      }
-    }
-
-    private void IndexParameter_ActualNameChanged(object sender, EventArgs e) {
-      foreach (IDiscreteDoubleValueModifier modifier in ScalingOperatorParameter.ValidValues) {
-        modifier.IndexParameter.ActualName = IndexParameter.ActualName;
-      }
-    }
-
-    private void StartIndexParameter_ActualNameChanged(object sender, EventArgs e) {
-      foreach (IDiscreteDoubleValueModifier modifier in ScalingOperatorParameter.ValidValues) {
-        modifier.StartIndexParameter.ActualName = StartIndexParameter.ActualName;
-      }
-    }
-
-    private void EndIndexParameter_ActualNameChanged(object sender, EventArgs e) {
-      foreach (IDiscreteDoubleValueModifier modifier in ScalingOperatorParameter.ValidValues) {
-        modifier.EndIndexParameter.ActualName = EndIndexParameter.ActualName;
-      }
-    }
-    #endregion
 
     public override IOperation Apply() {
Index: /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VonNeumannTopologyInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VonNeumannTopologyInitializer.cs	(revision 5434)
+++ /trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VonNeumannTopologyInitializer.cs	(revision 5435)
@@ -24,25 +24,26 @@
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
-
   [Item("Von Neumann Topology Initializer", "Every particle is connected with the two following and the two previous particles wrapping around at the beginning and the end of the population.")]
   [StorableClass]
-  public class VonNeumannTopologyInitializer : TopologyInitializer {
+  public sealed class VonNeumannTopologyInitializer : TopologyInitializer {
 
     #region Construction & Cloning
-    public VonNeumannTopologyInitializer() { }
+
     [StorableConstructor]
-    protected VonNeumannTopologyInitializer(bool deserializing) : base(deserializing) { }
-    protected VonNeumannTopologyInitializer(VonNeumannTopologyInitializer original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    private VonNeumannTopologyInitializer(bool deserializing) : base(deserializing) { }
+    private VonNeumannTopologyInitializer(VonNeumannTopologyInitializer original, Cloner cloner) : base(original, cloner) { }
+    public VonNeumannTopologyInitializer() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new VonNeumannTopologyInitializer(this, cloner);
     }
+
     #endregion
 
     public override IOperation Apply() {
       ItemArray<IntegerVector> neighbors = new ItemArray<IntegerVector>(SwarmSize);
-      for (int i = 0; i<SwarmSize; i++) {
+      for (int i = 0; i < SwarmSize; i++) {
         neighbors[i] = new IntegerVector(new[] {
           (SwarmSize + i-2) % SwarmSize,
@@ -55,5 +56,4 @@
       return base.Apply();
     }
-
   }
 }
