Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/BestPointInitializer.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/BestPointInitializer.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/BestPointInitializer.cs	(revision 5316)
@@ -31,4 +31,5 @@
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
 
+  [Item("Best Point Initializer", "Determines the best quality and point of the current particle population.")]
   [StorableClass]
   public class BestPointInitializer : SingleSuccessorOperator {
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/EmptyTopologyInitializer.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/EmptyTopologyInitializer.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/EmptyTopologyInitializer.cs	(revision 5316)
@@ -25,4 +25,5 @@
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
 
+  [Item("Empty Topology Initializer", "Does not initialize topology vectors. Best used with the totally connected particle updater that used the global best point instead of the best neighbor point.")]
   [StorableClass]
   public class EmptyTopologyInitializer : TopologyInitializer {
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IDiscreteDoubleMatrixModifier.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IDiscreteDoubleMatrixModifier.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IDiscreteDoubleMatrixModifier.cs	(revision 5316)
@@ -9,4 +9,5 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
+
   public interface IDiscreteDoubleMatrixModifier : IItem {
     ILookupParameter<DoubleMatrix> ValueParameter { get; }
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IParticleUpdater.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IParticleUpdater.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IParticleUpdater.cs	(revision 5316)
@@ -28,4 +28,5 @@
 
   public interface IParticleUpdater : IItem {
+
     LookupParameter<RealVector> VelocityParameter { get; }
     LookupParameter<DoubleMatrix> VelocityBoundsParameter { get; }
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IdentityTopologyUpdater.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IdentityTopologyUpdater.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/IdentityTopologyUpdater.cs	(revision 5316)
@@ -25,6 +25,8 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
 
+  [Item("Identity Topology Updater", "Does not change the topology.")]
   [StorableClass]
   public class IdentityTopologyUpdater : SingleSuccessorOperator, ITopologyUpdater {
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborUpdater.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborUpdater.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborUpdater.cs	(revision 5316)
@@ -31,4 +31,6 @@
 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 {
 
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborhoodParticleUpdater.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborhoodParticleUpdater.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/NeighborhoodParticleUpdater.cs	(revision 5316)
@@ -27,4 +27,5 @@
 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")]
   [StorableClass]
   public class NeighborhoodParticleUpdater : ParticleUpdater {
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs	(revision 5316)
@@ -40,5 +40,5 @@
   [Creatable("Algorithms")]
   [StorableClass]
-  public class ParticleSwarmOptimization : EngineAlgorithm {
+  public class ParticleSwarmOptimization : EngineAlgorithm, IStorableContent {
 
     #region Problem Properties
@@ -110,4 +110,7 @@
 
     #region Properties
+
+    public string Filename { get; set; }
+
     [Storable]
     private BestAverageWorstQualityAnalyzer qualityAnalyzer;
@@ -288,14 +291,9 @@
           this.OmegaParameter.ActualValue = new DoubleValue(OmegaUpdaterParameter.Value.StartValueParameter.Value.Value);
         }
-        if (VelocityBoundsUpdater != null && VelocityBoundsUpdater.StartValueParameter.Value != null && VelocityBoundsParameter.ActualValue != null) {
-          DoubleMatrix matrix = VelocityBoundsParameter.ActualValue;
+        if (VelocityBoundsUpdater != null && VelocityBoundsUpdater.StartValueParameter.Value != null && VelocityBoundsParameter.Value != null) {
+          DoubleMatrix matrix = VelocityBoundsParameter.Value;
           for (int i = 0; i < matrix.Rows; i++) {
-            for (int j = 0; j < matrix.Columns; j++) {
-              if (matrix[i, j] >= 0) {
-                matrix[i, j] = VelocityBoundsUpdater.StartValueParameter.Value.Value;
-              } else {
-                matrix[i, j] = (-1) * VelocityBoundsUpdater.StartValueParameter.Value.Value;
-              }
-            }
+            matrix[i, 0] = -VelocityBoundsUpdater.StartValueParameter.Value.Value;
+            matrix[i, 1] = VelocityBoundsUpdater.StartValueParameter.Value.Value;
           }
         }
@@ -387,4 +385,5 @@
 
     #endregion
+      
   }
 }
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RandomTopologyInitializer.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RandomTopologyInitializer.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RandomTopologyInitializer.cs	(revision 5316)
@@ -30,4 +30,6 @@
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
 
+  [Item("Random Topology Initializer", "Randomly connectes every particle with k other particles.")]
+  [StorableClass]
   public class RandomTopologyInitializer : TopologyInitializer {
 
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RingTopologyInitializer.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RingTopologyInitializer.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/RingTopologyInitializer.cs	(revision 5316)
@@ -26,4 +26,6 @@
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
 
+  [Item("Ring Topology Initializer", "Connected every particle with its preceeding and its following particle.")]
+  [StorableClass]
   public class RingTopologyInitializer : TopologyInitializer {
 
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/SwarmUpdater.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/SwarmUpdater.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/SwarmUpdater.cs	(revision 5316)
@@ -30,4 +30,5 @@
 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 {
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TotallyConnectedParticleUpdater.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TotallyConnectedParticleUpdater.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/TotallyConnectedParticleUpdater.cs	(revision 5316)
@@ -27,4 +27,5 @@
 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 {
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VelocityBoundsModifier.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VelocityBoundsModifier.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VelocityBoundsModifier.cs	(revision 5316)
@@ -13,38 +13,43 @@
 
 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
+
+  [StorableClass]
   public class VelocityBoundsModifier : SingleSuccessorOperator, IDiscreteDoubleMatrixModifier {
+
+    #region Parameters
     public ILookupParameter<DoubleMatrix> ValueParameter {
       get { return (ILookupParameter<DoubleMatrix>)Parameters["Matrix"]; }
     }
-
     public IValueLookupParameter<DoubleValue> ScaleParameter {
       get { return (IValueLookupParameter<DoubleValue>)Parameters["Scale"]; }
     }
-
     public ConstrainedValueParameter<IDiscreteDoubleValueModifier> ScalingOperatorParameter {
       get { return (ConstrainedValueParameter<IDiscreteDoubleValueModifier>)Parameters["ScalingOperator"]; }
     }
-
     public IValueLookupParameter<DoubleValue> StartValueParameter {
       get { return (IValueLookupParameter<DoubleValue>)Parameters["StartValue"]; }
     }
-
     public IValueLookupParameter<DoubleValue> EndValueParameter {
       get { return (IValueLookupParameter<DoubleValue>)Parameters["EndValue"]; }
     }
-
     public ILookupParameter<IntValue> IndexParameter {
       get { return (ILookupParameter<IntValue>)Parameters["Index"]; }
     }
-
     public IValueLookupParameter<IntValue> StartIndexParameter {
       get { return (IValueLookupParameter<IntValue>)Parameters["StartIndex"]; }
     }
-
     public IValueLookupParameter<IntValue> EndIndexParameter {
       get { return (IValueLookupParameter<IntValue>)Parameters["EndIndex"]; }
     }
+    #endregion
 
-    public VelocityBoundsModifier() : base() {
+    #region Construction & Cloning
+
+    [StorableConstructor]
+    protected VelocityBoundsModifier(bool deserializing) : base(deserializing) { }
+    protected VelocityBoundsModifier(VelocityBoundsModifier original, Cloner cloner) : base(original, cloner) {
+      Initialize();
+    }
+    public VelocityBoundsModifier() {
       Parameters.Add(new LookupParameter<DoubleMatrix>("Matrix", "The double matrix to modify."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Scale", "Scale parameter."));
@@ -56,4 +61,7 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("EndIndex", "The end index by which 'Value' should have reached 'EndValue'."));
       Initialize();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VelocityBoundsModifier(this, cloner);
     }
 
@@ -70,4 +78,5 @@
       StartIndexParameter.ActualNameChanged += new EventHandler(StartIndexParameter_ActualNameChanged);
     }
+    #endregion
 
     #region Events
@@ -109,19 +118,4 @@
     #endregion
 
-
-    #region Cloning
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new VelocityBoundsModifier(this, cloner);
-    }
-
-    protected VelocityBoundsModifier(VelocityBoundsModifier original, Cloner cloner)
-      : base(original, cloner) {
-        Initialize();
-    }
-    #endregion
-
-    [StorableConstructor]
-    protected VelocityBoundsModifier(bool deserializing) : base(deserializing) { }
-
     public override IOperation Apply() {
       OperationCollection next = new OperationCollection();
Index: branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VonNeumannTopologyInitializer.cs
===================================================================
--- branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VonNeumannTopologyInitializer.cs	(revision 5312)
+++ branches/PSO/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/VonNeumannTopologyInitializer.cs	(revision 5316)
@@ -26,4 +26,6 @@
 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 {
 
