Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/AlgorithmBehaviorUnitTests/AlgorithmBehaviorUnitTests.csproj
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/AlgorithmBehaviorUnitTests/AlgorithmBehaviorUnitTests.csproj	(revision 10089)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/AlgorithmBehaviorUnitTests/AlgorithmBehaviorUnitTests.csproj	(revision 10090)
@@ -47,4 +47,8 @@
     <Reference Include="HeuristicLab.Encodings.PermutationEncoding-3.3">
       <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Encodings.PermutationEncoding-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers-3.3.csproj	(revision 10089)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers-3.3.csproj	(revision 10090)
@@ -72,4 +72,9 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Encodings.RealVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Operators-3.3">
       <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
@@ -118,4 +123,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="RealVectorConvexHullSolutionCacheAnalyzer.cs" />
     <Compile Include="DistanceMatrixToPoints.cs" />
     <Compile Include="VertexComparer.cs" />
@@ -161,4 +167,11 @@
     <None Include="Properties\AssemblyInfo.cs.frame" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Analysis.SolutionCaching\3.3\HeuristicLab.Analysis.SolutionCaching-3.3.csproj">
+      <Project>{a05aa272-14ec-4422-ac70-c9ca42164441}</Project>
+      <Name>HeuristicLab.Analysis.SolutionCaching-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/RealVectorConvexHullSolutionCacheAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/RealVectorConvexHullSolutionCacheAnalyzer.cs	(revision 10090)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/RealVectorConvexHullSolutionCacheAnalyzer.cs	(revision 10090)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.Linq;
+using HeuristicLab.Analysis.SolutionCaching;
+using HeuristicLab.Analysis.SolutionCaching.RealVectorEncoding;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers {
+  [StorableClass]
+  [Item("RealVectorConvexHullSolutionCacheAnalyzer", "Calculates convex hull-based measures from real vector solution caches.")]
+  public class RealVectorConvexHullSolutionCacheAnalyzer : SolutionCacheAnalyzer<RealVector, RealVectorSolutionInformation> {
+    [StorableConstructor]
+    private RealVectorConvexHullSolutionCacheAnalyzer(bool deserializing) : base(deserializing) { }
+    private RealVectorConvexHullSolutionCacheAnalyzer(RealVectorConvexHullSolutionCacheAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RealVectorConvexHullSolutionCacheAnalyzer(this, cloner);
+    }
+
+    public RealVectorConvexHullSolutionCacheAnalyzer() : base() { }
+
+    public override void ExecuteAnalysis(ResultCollection results, SolutionCache<RealVector, RealVectorSolutionInformation> solutionCache) {
+      int i = 0;
+      var sols = solutionCache.GetSolutionsFromGeneration(i);
+      DataTable dt = new DataTable("Convex Hull Volume over Generations");
+      DataRow dtVolumeRow = new DataRow("Volume");
+      DataRow dtNrPointsRow = new DataRow("Nr. of Points");
+      dt.Rows.Add(dtVolumeRow);
+      dt.Rows.Add(dtNrPointsRow);
+
+      while (sols.Count != 0) {
+        var input = sols.Select(x => ConvertPermutationToVertex(x)).ToArray();
+        var convexHull = LPHull.Calculate(input);
+        var volume = ConvexHullMeasures.CalculateVolume(convexHull);
+        dtVolumeRow.Values.Add(volume);
+        dtNrPointsRow.Values.Add(convexHull.Count);
+
+        sols = solutionCache.GetSolutionsFromGeneration(++i);
+      }
+
+      results.Add(new Result("Convex Hull Measures", dt));
+    }
+
+    private double[] ConvertPermutationToVertex(RealVector p) {
+      double[] vertex = p.Select(x => (double)x).ToArray();
+      return vertex;
+    }
+  }
+}
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/ISolutionCacheAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/ISolutionCacheAnalyzer.cs	(revision 10090)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/ISolutionCacheAnalyzer.cs	(revision 10090)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+
+namespace HeuristicLab.Analysis.SolutionCaching {
+  public interface ISolutionCacheAnalyzer : IOperator {
+  }
+}
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/ParallelOperatorProcessor.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/ParallelOperatorProcessor.cs	(revision 10090)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/ParallelOperatorProcessor.cs	(revision 10090)
@@ -0,0 +1,68 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Analysis.SolutionCaching {
+  [Item("ParallelOperatorProcessor", "An operator that contains multiple operators of which each is applied on the current scope in parallel.")]
+  [StorableClass]
+  public sealed class ParallelOperatorProcessor : MultiOperator<IOperator> {
+    public ValueLookupParameter<BoolValue> ParallelParameter {
+      get { return (ValueLookupParameter<BoolValue>)Parameters["Parallel"]; }
+    }
+
+    public BoolValue Parallel {
+      get { return ParallelParameter.Value; }
+      set { ParallelParameter.Value = value; }
+    }
+
+    [StorableConstructor]
+    private ParallelOperatorProcessor(bool deserializing) : base(deserializing) { }
+    private ParallelOperatorProcessor(ParallelOperatorProcessor original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ParallelOperatorProcessor()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<BoolValue>("Parallel", "True if the operators should be applied in parallel on the sub-scopes, otherwise false.", new BoolValue(false)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ParallelOperatorProcessor(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection inner = new OperationCollection();
+      inner.Parallel = Parallel != null && Parallel.Value;
+      for (int i = 0; i < Operators.Count(); i++) {
+        inner.Add(ExecutionContext.CreateOperation(Operators[i], ExecutionContext.Scope));
+      }
+      next.Insert(0, inner);
+      return next;
+    }
+  }
+}
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/SolutionCacheAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/SolutionCacheAnalyzer.cs	(revision 10090)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/SolutionCacheAnalyzer.cs	(revision 10090)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Analysis.SolutionCaching {
+  [StorableClass]
+  public abstract class SolutionCacheAnalyzer<TKey, TValue> : SingleSuccessorOperator, ISolutionCacheAnalyzer
+    where TKey : Item
+    where TValue : SolutionInformation<TKey> {
+    public ValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
+    }
+
+    public ValueLookupParameter<SolutionCache<TKey, TValue>> SolutionCacheParameter {
+      get { return (ValueLookupParameter<SolutionCache<TKey, TValue>>)Parameters["SolutionCache"]; }
+    }
+
+    [StorableConstructor]
+    protected SolutionCacheAnalyzer(bool deserializing) : base(deserializing) { }
+    protected SolutionCacheAnalyzer(SolutionCacheAnalyzer<TKey, TValue> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public SolutionCacheAnalyzer()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The variable collection where results should be stored."));
+      Parameters.Add(new ValueLookupParameter<SolutionCache<TKey, TValue>>("SolutionCache", "The solution cache."));
+    }
+
+    public abstract void ExecuteAnalysis(ResultCollection results, SolutionCache<TKey, TValue> solutionCache);
+
+    public override IOperation Apply() {
+      ExecuteAnalysis(ResultsParameter.ActualValue, SolutionCacheParameter.ActualValue);
+      return base.Apply();
+    }
+  }
+}
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/SolutionCacheAnalyzerAlgorithm.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/SolutionCacheAnalyzerAlgorithm.cs	(revision 10090)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/Algorithm/SolutionCacheAnalyzerAlgorithm.cs	(revision 10090)
@@ -0,0 +1,110 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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 System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Analysis.SolutionCaching {
+  [Item("SolutionCache Analyzer Algorithm", "An algorithm that runs analyzers on a solution cache.")]
+  [Creatable("Algorithms")]
+  [StorableClass]
+  public sealed class SolutionCacheAnalyzerAlgorithm : EngineAlgorithm, IStorableContent {
+    public string Filename { get; set; }
+    private const string analyzerParameterString = "SolutionCache Analyzer";
+    private const string solutionCacheParameterString = "SolutionCache";
+
+    #region Problem Properties
+    public override Type ProblemType {
+      get { return typeof(ISolutionCache); }
+    }
+    public new ISolutionCache Problem {
+      get { return (ISolutionCache)base.Problem; }
+      set { base.Problem = value; }
+    }
+    #endregion
+
+    #region Parameter Properties
+    public ValueParameter<CheckedItemList<ISolutionCacheAnalyzer>> SolutionCacheAnalyzerParameter {
+      get { return (ValueParameter<CheckedItemList<ISolutionCacheAnalyzer>>)Parameters[analyzerParameterString]; }
+    }
+    public ValueParameter<ISolutionCache> SolutionCacheParameter {
+      get { return (ValueParameter<ISolutionCache>)Parameters[solutionCacheParameterString]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private SolutionCacheAnalyzerAlgorithm(bool deserializing) : base(deserializing) { }
+
+    private SolutionCacheAnalyzerAlgorithm(SolutionCacheAnalyzerAlgorithm original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public SolutionCacheAnalyzerAlgorithm()
+      : base() {
+      Parameters.Add(new ValueParameter<CheckedItemList<ISolutionCacheAnalyzer>>(analyzerParameterString, "Analyzers that can be applied to solution caches.", new CheckedItemList<ISolutionCacheAnalyzer>()));
+      Parameters.Add(new ValueParameter<ISolutionCache>(solutionCacheParameterString, "The solution cache."));
+
+      OperatorGraph.InitialOperator = new ParallelOperatorProcessor();
+      //((ParallelOperatorProcessor)OperatorGraph.InitialOperator).ParallelParameter.Value.Value = true;
+    }
+
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SolutionCacheAnalyzerAlgorithm(this, cloner);
+    }
+
+    public override void Start() {
+      if (SolutionCacheAnalyzerParameter.Value.CheckedItems.Count() == 0)
+        throw new ArgumentException("At least one analyzer has to be selected. ");
+
+      var initialOperator = OperatorGraph.InitialOperator as ParallelOperatorProcessor;
+      initialOperator.Operators.Clear();
+
+      foreach (var curOpt in SolutionCacheAnalyzerParameter.Value.CheckedItems) {
+        initialOperator.Operators.Add(curOpt.Value);
+      }
+
+      base.Start();
+    }
+
+    private void UpdateSolutionCacheAnalyzers() {
+      //TODO: should we fetch the operators from the problem? 
+      SolutionCacheAnalyzerParameter.Value.Clear();
+      foreach (var analyzer in ApplicationManager.Manager.GetInstances<ISolutionCacheAnalyzer>()) {
+        SolutionCacheAnalyzerParameter.Value.Add(analyzer);
+      }
+    }
+
+    #region Events
+    protected override void OnProblemChanged() {
+      UpdateSolutionCacheAnalyzers();
+      SolutionCacheParameter.Value = Problem;
+      base.OnProblemChanged();
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/HeuristicLab.Analysis.SolutionCaching-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/HeuristicLab.Analysis.SolutionCaching-3.3.csproj	(revision 10089)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/HeuristicLab.Analysis.SolutionCaching-3.3.csproj	(revision 10090)
@@ -123,4 +123,9 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Algorithm\ISolutionCacheAnalyzer.cs" />
+    <Compile Include="Algorithm\SolutionCacheAnalyzer.cs" />
+    <Compile Include="Algorithm\SolutionCacheAnalyzerAlgorithm.cs" />
+    <Compile Include="Algorithm\ParallelOperatorProcessor.cs" />
+    <Compile Include="ISolutionCache.cs" />
     <Compile Include="PermutationEncoding\PermutationSolutionCache.cs" />
     <Compile Include="PermutationEncoding\PermutationSolutionCachingAnalyzer.cs" />
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/ISolutionCache.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/ISolutionCache.cs	(revision 10090)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/ISolutionCache.cs	(revision 10090)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.Optimization;
+
+namespace HeuristicLab.Analysis.SolutionCaching {
+  public interface ISolutionCache : IProblem, IStorableContent {
+  }
+}
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/SolutionCache.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/SolutionCache.cs	(revision 10089)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/SolutionCache.cs	(revision 10090)
@@ -24,14 +24,17 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Analysis.SolutionCaching {
   [Item("SolutionCache", "Stores solutions generated by an algorithm.")]
   [StorableClass]
-  [NonDiscoverableType]
-  public abstract class SolutionCache<TKey, TValue> : Item
+  public abstract class SolutionCache<TKey, TValue> : Problem, ISolutionCache
     where TKey : Item
     where TValue : SolutionInformation<TKey> {
+
+    #region IStorableContent Members
+    public string Filename { get; set; }
+    #endregion
 
     [Storable]
@@ -52,5 +55,5 @@
       InitializeSolutionDictionary();
 
-      foreach (KeyValuePair<TKey, List<TValue>> keyValuePair in solutionDictionary) {
+      foreach (KeyValuePair<TKey, List<TValue>> keyValuePair in original.solutionDictionary) {
         List<TValue> lst = new List<TValue>();
         foreach (TValue value in keyValuePair.Value) {
