Index: /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/NSGA3.cs
===================================================================
--- /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/NSGA3.cs	(revision 17718)
+++ /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/NSGA3.cs	(revision 17719)
@@ -325,7 +325,7 @@
         protected override void Run(CancellationToken cancellationToken)
         {
-            while (ResultsCurrentGeneration.Value < MaximumGenerations.Value)
-            {
-                try
+            try
+            {
+                while (ResultsCurrentGeneration.Value < MaximumGenerations.Value)
                 {
                     // todo: make parameter out of this
@@ -336,22 +336,25 @@
                     List<Solution> rt = Utility.Concat(solutions, qt);
 
+                    // todo: remove this check
+                    for (int i = 0; i < rt.Count / 2; i++)
+                        if (!solutions.Contains(rt[i])) throw new Exception($"This should never happen: !solutions.Contains(rt[{i}])");
+
                     solutions = NSGA3Selection.SelectSolutionsForNextGeneration(rt, GetCopyOfReferencePoints(), Problem.Maximization, PopulationSize.Value, random);
 
                     ResultsCurrentGeneration.Value++;
-                    Analyze();
                     cancellationToken.ThrowIfCancellationRequested();
                 }
-                catch (OperationCanceledException ex)
-                {
-                    throw new OperationCanceledException("Optimization process was cancelled.", ex);
-                }
-                catch (Exception ex)
-                {
-                    throw new Exception($"Failed in generation {ResultsCurrentGeneration}.", ex);
-                }
-                finally
-                {
-                    Analyze();
-                }
+            }
+            catch (OperationCanceledException ex)
+            {
+                throw new OperationCanceledException("Optimization process was cancelled.", ex);
+            }
+            catch (Exception ex)
+            {
+                throw new Exception($"Failed in generation {ResultsCurrentGeneration}.", ex);
+            }
+            finally
+            {
+                Analyze();
             }
         }
Index: /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/ReferencePoint.cs
===================================================================
--- /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/ReferencePoint.cs	(revision 17718)
+++ /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/ReferencePoint.cs	(revision 17719)
@@ -2,4 +2,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -7,4 +8,5 @@
 namespace HeuristicLab.Algorithms.NSGA3
 {
+    [StorableType("5026513A-F3C7-4A85-95D6-82B5B376E900")]
     public class ReferencePoint : IDeepCloneable
     {
@@ -12,15 +14,25 @@
 
         // The potentially associated solutions to this reference point and the distance to that solution
-        private readonly Dictionary<Solution, double> potentialAssociatedSolutions = new Dictionary<Solution, double>();
-
-        private readonly IRandom random;
-
-        public double[] Values { get; }
+        private Dictionary<Solution, double> potentialAssociatedSolutions = new Dictionary<Solution, double>();
+
+        [Storable]
+        private IRandom random;
+
+        [Storable]
+        public double[] Values { get; set; }
+
+        [Storable]
+        public int NumberOfAssociatedSolutions { get; set; } = 0;
+
         public int Objectives => Values.Length;
-        public int NumberOfAssociatedSolutions { get; set; } = 0;
 
         #endregion Properties
 
         #region Constructors
+
+        [StorableConstructor]
+        public ReferencePoint(StorableConstructorFlag _)
+        {
+        }
 
         public ReferencePoint(IRandom random, int obj)
Index: /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/Solution.cs
===================================================================
--- /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/Solution.cs	(revision 17718)
+++ /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/Solution.cs	(revision 17719)
@@ -10,11 +10,19 @@
     {
         // Chromosome
+        [Storable]
         public RealVector Chromosome { get; set; }
 
         // actual fitness of solution as given by Problem
+        [Storable]
         public double[] Fitness { get; set; }
 
         // normalized fitness used in selection process (in order to not overwrite the original Fitness)
+        [Storable]
         public double[] ConvertedFitness { get; set; }
+
+        [StorableConstructor]
+        public Solution(StorableConstructorFlag _)
+        {
+        }
 
         public Solution(RealVector chromosome)
