Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs	(revision 11303)
@@ -38,5 +38,5 @@
   [Item("LocalSearchImprovementOperator", "A local search improvement operator.")]
   [StorableClass]
-  public sealed class LocalSearchImprovementOperator : SingleSuccessorOperator, ILocalImprovementOperator, IStochasticOperator {
+  public sealed class LocalSearchImprovementOperator : SingleSuccessorOperator, ILocalImprovementAlgorithmOperator, IStochasticOperator {
     #region IGenericLocalImprovementOperator Properties
     public Type ProblemType { get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); } }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingImprovementOperator.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingImprovementOperator.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingImprovementOperator.cs	(revision 11303)
@@ -38,5 +38,5 @@
   [Item("SimulatedAnnealingImprovementOperator", "A simulated annealing improvement operator.")]
   [StorableClass]
-  public sealed class SimulatedAnnealingImprovementOperator : SingleSuccessorOperator, ILocalImprovementOperator, IStochasticOperator {
+  public sealed class SimulatedAnnealingImprovementOperator : SingleSuccessorOperator, ILocalImprovementAlgorithmOperator, IStochasticOperator {
     #region IGenericLocalImprovementOperator Properties
     public Type ProblemType { get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); } }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs	(revision 11303)
@@ -283,25 +283,25 @@
     private void ParameterizeLocalImprovementOperators() {
       foreach (ILocalImprovementOperator op in LocalImprovementParameter.ValidValues) {
-        if (op != LocalImprovementParameter.Value) op.Problem = null;
         op.MaximumIterationsParameter.Value = null;
         op.MaximumIterationsParameter.ActualName = LocalImprovementMaximumIterationsParameter.Name;
-      }
-      if (LocalImprovementParameter.Value != null)
-        LocalImprovementParameter.Value.Problem = Problem;
+
+        var algOp = op as ILocalImprovementAlgorithmOperator;
+        if (algOp != null && algOp != LocalImprovementParameter.Value) algOp.Problem = null;
+      }
+      if (LocalImprovementParameter.Value is ILocalImprovementAlgorithmOperator)
+        ((ILocalImprovementAlgorithmOperator)LocalImprovementParameter.Value).Problem = Problem;
     }
     private void InitializeLocalImprovementOperators() {
-      if (Problem == null) {
-        LocalImprovementParameter.ValidValues.Clear();
-      } else {
-        foreach (var entry in LocalImprovementParameter.ValidValues.ToList()) {
-          if (!entry.ProblemType.IsAssignableFrom(Problem.GetType())) {
-            LocalImprovementParameter.ValidValues.Remove(entry);
-          }
-        }
-        foreach (var op in Problem.Operators.OfType<ILocalImprovementOperator>()) {
+      LocalImprovementParameter.ValidValues.Clear();
+      if (Problem != null) {
+        // Regular ILocalImprovementOperators queried from Problem
+        foreach (var op in Problem.Operators.OfType<ILocalImprovementOperator>().Where(x => !(x is ILocalImprovementAlgorithmOperator))) {
           LocalImprovementParameter.ValidValues.Add(op);
         }
-        foreach (ILocalImprovementOperator op in ApplicationManager.Manager.GetInstances<ILocalImprovementOperator>().Where(x => x.ProblemType.IsAssignableFrom(Problem.GetType()))) {
-          if (!LocalImprovementParameter.ValidValues.Any(x => x.GetType() == op.GetType()))
+        // ILocalImprovementAlgorithmOperators queried from ApplicationManager
+        var algOps = ApplicationManager.Manager.GetInstances<ILocalImprovementAlgorithmOperator>()
+                                               .Where(x => x.ProblemType.IsInstanceOfType(Problem));
+        foreach (var op in algOps) {
+          if (LocalImprovementParameter.ValidValues.All(x => x.GetType() != op.GetType()))
             LocalImprovementParameter.ValidValues.Add(op);
         }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs	(revision 11303)
@@ -0,0 +1,118 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  [Item("Arc", "A graph arc connecting two graph vertices, that can have a weight, label, and data object for holding additional info")]
+  [StorableClass]
+  public class Arc : Item, IArc {
+    [Storable]
+    public IVertex Source { get; private set; }
+
+    [Storable]
+    public IVertex Target { get; private set; }
+
+    [Storable]
+    protected string label;
+    public string Label {
+      get { return label; }
+      set {
+        if (label.Equals(value)) return;
+        label = value;
+        OnChanged(this, EventArgs.Empty);
+      }
+    }
+
+    [Storable]
+    protected double weight;
+    public double Weight {
+      get { return weight; }
+      set {
+        if (weight.Equals(value)) return;
+        weight = value;
+        OnChanged(this, EventArgs.Empty);
+      }
+    }
+
+    [Storable]
+    protected object data;
+    public object Data {
+      get { return data; }
+      set {
+        if (data == value) return;
+        data = value;
+        OnChanged(this, EventArgs.Empty);
+      }
+    }
+
+    [StorableConstructor]
+    public Arc(bool deserializing) : base(deserializing) { }
+
+    public Arc(IVertex source, IVertex target) {
+      Source = source;
+      Target = target;
+    }
+
+    protected Arc(Arc original, Cloner cloner)
+      : base(original, cloner) {
+      Source = cloner.Clone(original.Source);
+      Target = cloner.Clone(original.Target);
+      label = original.Label;
+      weight = original.Weight;
+      if (data is IDeepCloneable)
+        data = cloner.Clone((IDeepCloneable)data);
+      else data = original.Data;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) { return new Arc(this, cloner); }
+
+    public event EventHandler Changed;
+    protected virtual void OnChanged(object sender, EventArgs args) {
+      var changed = Changed;
+      if (changed != null)
+        changed(sender, args);
+    }
+  }
+
+  [StorableClass]
+  public class Arc<T> : Arc, IArc<T> where T : class,IItem {
+    public Arc(bool deserializing)
+      : base(deserializing) {
+    }
+
+    public Arc(IVertex source, IVertex target)
+      : base(source, target) {
+    }
+
+    protected Arc(Arc original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    new public IVertex<T> Source {
+      get { return (IVertex<T>)base.Source; }
+    }
+    new public IVertex<T> Target {
+      get { return (IVertex<T>)base.Target; }
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs	(revision 11303)
@@ -0,0 +1,183 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  [Item("DirectedGraph", "Generic class representing a directed graph with custom vertices and content")]
+  [StorableClass]
+  public class DirectedGraph : Item, IDirectedGraph {
+    public override Image ItemImage { get { return VSImageLibrary.Graph; } }
+
+    private HashSet<IVertex> vertices;
+    [Storable]
+    public IEnumerable<IVertex> Vertices {
+      get { return vertices; }
+      private set { vertices = new HashSet<IVertex>(value); }
+    }
+
+    private HashSet<IArc> arcs;
+    [Storable]
+    public IEnumerable<IArc> Arcs {
+      get { return arcs; }
+      private set { arcs = new HashSet<IArc>(value); }
+    }
+
+    public DirectedGraph() {
+      vertices = new HashSet<IVertex>();
+      arcs = new HashSet<IArc>();
+    }
+
+    protected DirectedGraph(DirectedGraph original, Cloner cloner)
+      : base(original, cloner) {
+      vertices = new HashSet<IVertex>(original.vertices.Select(cloner.Clone));
+      arcs = new HashSet<IArc>(original.arcs.Select(cloner.Clone));
+
+      // add the arcs to the newly cloned vertices
+      foreach (var arc in arcs) {
+        arc.Source.AddArc(arc);
+        arc.Target.AddArc(arc);
+      }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DirectedGraph(this, cloner);
+    }
+
+    [StorableConstructor]
+    protected DirectedGraph(bool serializing)
+      : base(serializing) {
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      foreach (var vertex in vertices) {
+        vertex.ArcAdded += Vertex_ArcAdded;
+        vertex.ArcRemoved += Vertex_ArcRemoved;
+      }
+
+      foreach (var arc in arcs) {
+        var source = arc.Source;
+        var target = arc.Target;
+        source.AddArc(arc);
+        target.AddArc(arc);
+      }
+    }
+
+    public virtual void Clear() {
+      vertices.Clear();
+      arcs.Clear();
+    }
+
+    public virtual void AddVertex(IVertex vertex) {
+      if (!vertices.Contains(vertex) && vertex.Degree > 0)
+        throw new ArgumentException("New vertices cannot have any arcs.");
+
+      if (vertices.Add(vertex)) {
+        // register event handlers
+        vertex.ArcAdded += Vertex_ArcAdded;
+        vertex.ArcRemoved += Vertex_ArcRemoved;
+        OnVertedAdded(this, new EventArgs<IVertex>(vertex));
+      }
+    }
+
+    public virtual void RemoveVertex(IVertex vertex) {
+      vertices.Remove(vertex);
+      // remove connections to/from the removed vertex
+      var arcList = vertex.InArcs.Concat(vertex.OutArcs).ToList(); // avoid invalid operation exception: "collection was modified" below
+      foreach (var arc in arcList)
+        RemoveArc(arc);
+      // deregister event handlers
+      vertex.ArcAdded -= Vertex_ArcAdded;
+      vertex.ArcRemoved -= Vertex_ArcRemoved;
+      OnVertexRemoved(this, new EventArgs<IVertex>(vertex));
+    }
+
+    public virtual IArc AddArc(IVertex source, IVertex target) {
+      var arc = new Arc(source, target);
+      AddArc(arc);
+      return arc;
+    }
+
+    public virtual void AddArc(IArc arc) {
+      var source = (Vertex)arc.Source;
+      var target = (Vertex)arc.Target;
+      source.AddArc(arc);
+      target.AddArc(arc);
+      arcs.Add(arc);
+    }
+
+    public virtual void RemoveArc(IArc arc) {
+      arcs.Remove(arc);
+      var source = (Vertex)arc.Source;
+      var target = (Vertex)arc.Target;
+      source.RemoveArc(arc);
+      target.RemoveArc(arc);
+    }
+
+    protected virtual void Vertex_ArcAdded(object sender, EventArgs<IArc> args) {
+      // the ArcAdded event is fired by a vertex when an arc from/to another vertex is added to its list of connections
+      // because the arc is added in both directions by both the source and the target, this event will get fired twice here
+      var arc = args.Value;
+      if (arcs.Add(arc)) OnArcAdded(this, new EventArgs<IArc>(arc));
+    }
+
+    protected virtual void Vertex_ArcRemoved(object sender, EventArgs<IArc> args) {
+      var arc = args.Value;
+      if (arcs.Remove(arc)) OnArcRemoved(this, new EventArgs<IArc>(arc));
+    }
+
+    // events
+    public event EventHandler<EventArgs<IVertex>> VertexAdded;
+    protected virtual void OnVertedAdded(object sender, EventArgs<IVertex> args) {
+      var added = VertexAdded;
+      if (added != null)
+        added(sender, args);
+    }
+
+    public event EventHandler<EventArgs<IVertex>> VertexRemoved;
+    protected virtual void OnVertexRemoved(object sender, EventArgs<IVertex> args) {
+      var removed = VertexRemoved;
+      if (removed != null)
+        removed(sender, args);
+    }
+
+    public event EventHandler<EventArgs<IArc>> ArcAdded;
+    protected virtual void OnArcAdded(object sender, EventArgs<IArc> args) {
+      var added = ArcAdded;
+      if (added != null)
+        added(sender, args);
+    }
+
+    public event EventHandler<EventArgs<IArc>> ArcRemoved;
+    protected virtual void OnArcRemoved(object sender, EventArgs<IArc> args) {
+      var removed = ArcRemoved;
+      if (removed != null)
+        removed(sender, args);
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs	(revision 11303)
@@ -0,0 +1,180 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  [Item("Vertex", "An object representing a vertex in the graph. It can have a text label, a weight, and an additional data object.")]
+  [StorableClass]
+  public class Vertex : Item, IVertex {
+    [Storable]
+    private string label;
+    public string Label {
+      get { return label; }
+      set {
+        if (label.Equals(value)) return;
+        label = value;
+        OnChanged(this, EventArgs.Empty);
+      }
+    }
+
+    [Storable]
+    private double weight;
+    public double Weight {
+      get { return weight; }
+      set {
+        if (weight.Equals(value)) return;
+        weight = value;
+        OnChanged(this, EventArgs.Empty);
+      }
+    }
+
+    [Storable]
+    private IDeepCloneable data;
+    public IDeepCloneable Data {
+      get { return data; }
+      set {
+        if (data == value) return;
+        data = value;
+        OnChanged(this, EventArgs.Empty);
+      }
+    }
+
+    private readonly List<IArc> inArcs = new List<IArc>();
+    public IEnumerable<IArc> InArcs {
+      get { return inArcs; }
+    }
+
+    private readonly List<IArc> outArcs = new List<IArc>();
+    public IEnumerable<IArc> OutArcs {
+      get { return outArcs; }
+    }
+
+    public int InDegree { get { return InArcs.Count(); } }
+    public int OutDegree { get { return OutArcs.Count(); } }
+    public int Degree { get { return InDegree + OutDegree; } }
+
+    [StorableConstructor]
+    public Vertex(bool deserializing) : base(deserializing) { }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() { }
+
+    public Vertex(IDeepCloneable data) {
+      this.data = data;
+    }
+
+    protected Vertex(Vertex original, Cloner cloner)
+      : base(original, cloner) {
+      data = cloner.Clone(original.Data);
+      label = original.Label;
+      weight = original.Weight;
+
+      // we do not clone the arcs here (would cause too much recursion and ultimately a stack overflow)
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Vertex(this, cloner);
+    }
+
+    public void AddArc(IArc arc) {
+      if (this != arc.Source && this != arc.Target)
+        throw new ArgumentException("The current vertex must be either the arc source or the arc target.");
+
+      if (arc.Source == arc.Target)
+        throw new ArgumentException("Arc source and target must be different.");
+
+      if (this == arc.Source) {
+        if (outArcs.Contains(arc)) throw new InvalidOperationException("Arc already added.");
+        outArcs.Add(arc);
+      }
+      if (this == arc.Target) {
+        if (inArcs.Contains(arc)) throw new InvalidOperationException("Arc already added.");
+        inArcs.Add(arc);
+      }
+      OnArcAdded(this, new EventArgs<IArc>(arc));
+    }
+
+    public void RemoveArc(IArc arc) {
+      if (this != arc.Source && this != arc.Target)
+        throw new ArgumentException("The current vertex must be either the arc source or the arc target.");
+
+      if (this == arc.Source) {
+        if (!outArcs.Remove(arc)) throw new InvalidOperationException("Arc is not present in this vertex' outgoing arcs.");
+      }
+      if (this == arc.Target) {
+        if (!inArcs.Remove(arc)) throw new InvalidOperationException("Arc is not present in this vertex' incoming arcs.");
+      }
+      OnArcRemoved(this, new EventArgs<IArc>(arc));
+    }
+
+    #region events
+    // use the same event to signal a change in the content, weight or label
+    public event EventHandler Changed;
+    protected virtual void OnChanged(object sender, EventArgs args) {
+      var changed = Changed;
+      if (changed != null)
+        changed(sender, args);
+    }
+
+    public event EventHandler<EventArgs<IArc>> ArcAdded;
+    protected virtual void OnArcAdded(object sender, EventArgs<IArc> args) {
+      var added = ArcAdded;
+      if (added != null)
+        added(sender, args);
+    }
+
+    public event EventHandler<EventArgs<IArc>> ArcRemoved;
+    protected virtual void OnArcRemoved(object sender, EventArgs<IArc> args) {
+      var removed = ArcRemoved;
+      if (removed != null)
+        removed(sender, args);
+    }
+    #endregion
+  }
+
+  [StorableClass]
+  public class Vertex<T> : Vertex, IVertex<T> where T : class,IItem {
+    public new T Data {
+      get { return (T)base.Data; }
+      set { base.Data = value; }
+    }
+
+    [StorableConstructor]
+    protected Vertex(bool deserializing) : base(deserializing) { }
+
+    protected Vertex(Vertex<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public Vertex(IDeepCloneable data)
+      : base(data) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Vertex<T>(this, cloner);
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 11303)
@@ -116,4 +116,7 @@
     <Compile Include="Collections\CheckedItemCollection.cs" />
     <Compile Include="Collections\CheckedItemList.cs" />
+    <Compile Include="Collections\DirectedGraph\Arc.cs" />
+    <Compile Include="Collections\DirectedGraph\DirectedGraph.cs" />
+    <Compile Include="Collections\DirectedGraph\Vertex.cs" />
     <Compile Include="Collections\ReadOnlyCheckedItemCollection.cs" />
     <Compile Include="Collections\ReadOnlyCheckedItemList.cs">
@@ -148,4 +151,7 @@
     <Compile Include="Constraints\IConstraint.cs" />
     <Compile Include="Constraints\TypeCompatibilityConstraint.cs" />
+    <Compile Include="Interfaces\DirectedGraph\IArc.cs" />
+    <Compile Include="Interfaces\DirectedGraph\IDirectedGraph.cs" />
+    <Compile Include="Interfaces\DirectedGraph\IVertex.cs" />
     <Compile Include="Interfaces\ICheckedMultiOperator.cs" />
     <Compile Include="Interfaces\IConstrainedValueParameter.cs" />
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IArc.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IArc.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IArc.cs	(revision 11303)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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;
+
+namespace HeuristicLab.Core {
+  public interface IArc : IItem {
+    IVertex Source { get; }
+    IVertex Target { get; }
+    string Label { get; set; }
+    double Weight { get; set; }
+    object Data { get; set; }
+
+    event EventHandler Changed; // generic event for when the label, weight or data were changed
+  }
+
+  public interface IArc<T> : IArc where T : class,IItem {
+    new IVertex<T> Source { get; }
+    new IVertex<T> Target { get; }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IDirectedGraph.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IDirectedGraph.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IDirectedGraph.cs	(revision 11303)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Core {
+  public interface IDirectedGraph : IItem {
+    void Clear();
+    void AddVertex(IVertex vertex);
+    IArc AddArc(IVertex source, IVertex target);
+    void AddArc(IArc arc);
+    void RemoveVertex(IVertex vertex);
+    void RemoveArc(IArc arc);
+    IEnumerable<IVertex> Vertices { get; }
+    IEnumerable<IArc> Arcs { get; }
+
+    event EventHandler<EventArgs<IVertex>> VertexAdded;
+    event EventHandler<EventArgs<IVertex>> VertexRemoved;
+    event EventHandler<EventArgs<IArc>> ArcAdded;
+    event EventHandler<EventArgs<IArc>> ArcRemoved;
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IVertex.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IVertex.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IVertex.cs	(revision 11303)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Core {
+  public interface IVertex : IItem {
+    IEnumerable<IArc> InArcs { get; }
+    IEnumerable<IArc> OutArcs { get; }
+
+    int InDegree { get; }
+    int OutDegree { get; }
+    int Degree { get; }
+
+    string Label { get; set; }
+    double Weight { get; set; }
+
+    IDeepCloneable Data { get; set; }
+
+    void AddArc(IArc arc);
+    void RemoveArc(IArc arc);
+
+    event EventHandler Changed; // generic event for when the content, label or weight have changed
+    event EventHandler<EventArgs<IArc>> ArcAdded;
+    event EventHandler<EventArgs<IArc>> ArcRemoved;
+  }
+
+  public interface IVertex<T> : IVertex
+  where T : class {
+    new T Data { get; set; }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessorStarter.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessorStarter.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessorStarter.cs	(revision 11303)
@@ -21,41 +21,32 @@
 
 using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
 using HeuristicLab.Optimization;
 using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Problems.DataAnalysis.Views;
-using View = HeuristicLab.MainForm.WindowsForms.View;
 
 namespace HeuristicLab.DataPreprocessing.Views {
   public class DataPreprocessorStarter : IDataPreprocessorStarter {
 
-    public void Start(IDataAnalysisProblemData problemData, View currentView) {
+    public void Start(IDataAnalysisProblemData problemData, IContentView currentView) {
       IAlgorithm algorithm;
       IDataAnalysisProblem problem;
-      IItem parentItem = GetMostOuterContent(currentView, out algorithm, out problem);
+      GetMostOuterContent(currentView as Control, out algorithm, out problem);
       var context = new PreprocessingContext(problemData, algorithm, problem);
       MainFormManager.MainForm.ShowContent(context);
     }
 
-    private IItem GetMostOuterContent(Control control, out IAlgorithm algorithm, out IDataAnalysisProblem problem) {
+    private void GetMostOuterContent(Control control, out IAlgorithm algorithm, out IDataAnalysisProblem problem) {
       algorithm = null;
       problem = null;
-      ItemView itemView = null;
-      do {
+
+      while (control != null) {
+        IContentView contentView = control as IContentView;
+        if (contentView != null) {
+          algorithm = contentView.Content as IAlgorithm;
+          problem = contentView.Content as IDataAnalysisProblem;
+        }
         control = control.Parent;
-        if (control is ItemView) {
-          itemView = (ItemView)control;
-          if (itemView.Content is IAlgorithm) {
-            algorithm = (IAlgorithm)itemView.Content;
-          }
-          if (itemView.Content is IDataAnalysisProblem) {
-            problem = (IDataAnalysisProblem)itemView.Content;
-          }
-        }
-      } while (control != null);
-
-      return itemView.Content;
+      }
     }
   }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs.sln
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs.sln	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs.sln	(revision 11303)
@@ -303,18 +303,26 @@
 		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|x64.ActiveCfg = Debug|x64
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|x64.Build.0 = Debug|x64
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|x86.ActiveCfg = Debug|x86
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Debug|x86.Build.0 = Debug|x86
 		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|x64.ActiveCfg = Release|Any CPU
-		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|x86.ActiveCfg = Release|Any CPU
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|x64.ActiveCfg = Release|x64
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|x64.Build.0 = Release|x64
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|x86.ActiveCfg = Release|x86
+		{F2F242B0-9996-4B49-828D-2BFC5925FDE0}.Release|x86.Build.0 = Release|x86
 		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|x64.ActiveCfg = Debug|x64
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|x64.Build.0 = Debug|x64
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|x86.ActiveCfg = Debug|x86
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Debug|x86.Build.0 = Debug|x86
 		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|Any CPU.Build.0 = Release|Any CPU
-		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|x64.ActiveCfg = Release|Any CPU
-		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|x86.ActiveCfg = Release|Any CPU
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|x64.ActiveCfg = Release|x64
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|x64.Build.0 = Release|x64
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|x86.ActiveCfg = Release|x86
+		{52C66DEA-0250-477B-97F8-5CD2CD4B7332}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj	(revision 11303)
@@ -36,4 +36,40 @@
     <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
@@ -71,10 +107,17 @@
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
 set Outdir=$(Outdir)
 
-call PreBuildEvent.cmd</PreBuildEvent>
+call PreBuildEvent.cmd
+    </PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+    </PreBuildEvent>
   </PropertyGroup>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj	(revision 11303)
@@ -35,4 +35,40 @@
   <PropertyGroup>
     <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <ItemGroup>
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 11303)
@@ -114,4 +114,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Interfaces\ILocalImprovementAlgorithmOperator.cs" />
     <Compile Include="Interfaces\ISingleObjectivePathRelinker.cs" />
     <Compile Include="Interfaces\ISingleObjectiveImprovementOperator.cs" />
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/Interfaces/ILocalImprovementAlgorithmOperator.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/Interfaces/ILocalImprovementAlgorithmOperator.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/Interfaces/ILocalImprovementAlgorithmOperator.cs	(revision 11303)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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;
+
+namespace HeuristicLab.Optimization {
+  public interface ILocalImprovementAlgorithmOperator : ILocalImprovementOperator {
+    Type ProblemType { get; }
+    IProblem Problem { get; set; }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/Interfaces/ILocalImprovementOperator.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/Interfaces/ILocalImprovementOperator.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Optimization/3.3/Interfaces/ILocalImprovementOperator.cs	(revision 11303)
@@ -20,5 +20,4 @@
 #endregion
 
-using System;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -26,6 +25,4 @@
 namespace HeuristicLab.Optimization {
   public interface ILocalImprovementOperator : IOperator {
-    Type ProblemType { get; }
-    IProblem Problem { get; set; }
     IValueLookupParameter<IntValue> MaximumIterationsParameter { get; }
     ILookupParameter<IntValue> EvaluatedSolutionsParameter { get; }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.DataAnalysis.Trading/3.4/InstanceProviders/CsvProblemInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.DataAnalysis.Trading/3.4/InstanceProviders/CsvProblemInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.DataAnalysis.Trading/3.4/InstanceProviders/CsvProblemInstanceProvider.cs	(revision 11303)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.IO;
@@ -40,5 +39,5 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+      get { return new Uri("http://dev.heuristiclab.com/trac.fcgi/wiki/Documentation/FAQ#DataAnalysisImportFileFormat"); }
     }
     public override string ReferencePublication {
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.DataAnalysis.Views/3.4/Interfaces/IDataPreprocessorStarter.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.DataAnalysis.Views/3.4/Interfaces/IDataPreprocessorStarter.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.DataAnalysis.Views/3.4/Interfaces/IDataPreprocessorStarter.cs	(revision 11303)
@@ -20,9 +20,9 @@
 #endregion
 
-using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.MainForm;
 
 namespace HeuristicLab.Problems.DataAnalysis.Views {
   public interface IDataPreprocessorStarter {
-    void Start(IDataAnalysisProblemData problemData, View currentView);
+    void Start(IDataAnalysisProblemData problemData, IContentView currentView);
   }
 }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 11303)
@@ -39,5 +39,5 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+      get { return new Uri("http://dev.heuristiclab.com/trac.fcgi/wiki/Documentation/FAQ#DataAnalysisImportFileFormat"); }
     }
     public override string ReferencePublication {
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 11303)
@@ -39,5 +39,5 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+      get { return new Uri("http://dev.heuristiclab.com/trac.fcgi/wiki/Documentation/FAQ#DataAnalysisImportFileFormat"); }
     }
     public override string ReferencePublication {
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 11303)
@@ -39,5 +39,5 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+      get { return new Uri("http://dev.heuristiclab.com/trac.fcgi/wiki/Documentation/FAQ#DataAnalysisImportFileFormat"); }
     }
     public override string ReferencePublication {
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 11303)
@@ -169,5 +169,5 @@
       //create columns
       for (int col = 0; col < columns; col++) {
-        var types = rowValues.Select(r => r[col]).Where(v => v != null && v as string != string.Empty).Take(10).Select(v => v.GetType());
+        var types = rowValues.Select(r => r[col]).Where(v => v != null && v as string != string.Empty).Take(100).Select(v => v.GetType());
         if (!types.Any()) {
           values.Add(new List<string>());
@@ -193,5 +193,5 @@
             values[columnIndex].Add(DateTime.MinValue);
           else if (values[columnIndex] is List<string> && !(element is string))
-            values[columnIndex].Add(string.Empty);
+            values[columnIndex].Add(element.ToString());
           else
             values[columnIndex].Add(element);
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/CSV/TimeSeriesPrognosisCSVInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/CSV/TimeSeriesPrognosisCSVInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/CSV/TimeSeriesPrognosisCSVInstanceProvider.cs	(revision 11303)
@@ -39,5 +39,5 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+      get { return new Uri("http://dev.heuristiclab.com/trac.fcgi/wiki/Documentation/FAQ#DataAnalysisImportFileFormat"); }
     }
     public override string ReferencePublication {
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs	(revision 11303)
@@ -23,6 +23,6 @@
 
 namespace HeuristicLab.Problems.Instances.VehicleRouting {
-  public abstract class CordeauFormatInstanceProvider : VRPInstanceProvider<MDCVRPTWData> {
-    protected override MDCVRPTWData LoadData(Stream stream) {
+  public abstract class CordeauFormatInstanceProvider<T> : VRPInstanceProvider<T> where T : MDCVRPData {
+    protected override T LoadData(Stream stream) {
       return LoadInstance(new CordeauParser(stream));
     }
@@ -31,38 +31,9 @@
       get { return true; }
     }
-    public override MDCVRPTWData ImportData(string path) {
+    public override T ImportData(string path) {
       return LoadInstance(new CordeauParser(path));
     }
 
-    private MDCVRPTWData LoadInstance(CordeauParser parser) {
-      parser.Parse();
-
-      var instance = new MDCVRPTWData();
-      instance.Dimension = parser.Cities + 1;
-      instance.Depots = parser.Depots;
-      instance.Coordinates = parser.Coordinates;
-      instance.Capacity = parser.Capacity;
-      instance.Demands = parser.Demands;
-      instance.DistanceMeasure = DistanceMeasure.Euclidean;
-      instance.ReadyTimes = parser.Readytimes;
-      instance.ServiceTimes = parser.Servicetimes;
-      instance.DueTimes = parser.Duetimes;
-      instance.MaximumVehicles = parser.Vehicles;
-
-      int depots = parser.Depots;
-      int vehicles = parser.Vehicles / parser.Depots;
-      instance.VehicleDepotAssignment = new int[depots * vehicles];
-      int index = 0;
-
-      for (int i = 0; i < depots; i++)
-        for (int j = 0; j < vehicles; j++) {
-          instance.VehicleDepotAssignment[index] = i;
-          index++;
-        }
-
-      instance.Name = parser.ProblemName;
-
-      return instance;
-    }
+    internal abstract T LoadInstance(CordeauParser parser);
   }
 }
Index: anches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauInstanceProvider.cs	(revision 11302)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 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.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using ICSharpCode.SharpZipLib.Zip;
-
-namespace HeuristicLab.Problems.Instances.VehicleRouting {
-  public class CordeauInstanceProvider : CordeauFormatInstanceProvider {
-    public override string Name {
-      get { return "Cordeau (MDCVRPTW)"; }
-    }
-
-    public override string Description {
-      get { return "Cordeau test set"; }
-    }
-    
-    public override Uri WebLink {
-      get { return new Uri(@"http://neo.lcc.uma.es/radi-aeb/WebVRP/"); }
-    }
-
-    public override string ReferencePublication {
-      get { return null; }
-    }
-
-    protected override string FileName {
-      get { return "Cordeau"; }
-    }
-  }
-}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDInstanceProvider.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDInstanceProvider.cs	(revision 11303)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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;
+
+namespace HeuristicLab.Problems.Instances.VehicleRouting {
+  public class CordeauMDInstanceProvider : CordeauFormatInstanceProvider<MDCVRPData> {
+    public override string Name {
+      get { return "Cordeau (MDCVRP)"; }
+    }
+
+    public override string Description {
+      get { return "Cordeau test set"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri(@"http://neo.lcc.uma.es/vrp/vrp-instances/multiple-depot-vrp-instances/"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return @"J.-F. Cordeau, M. Gendreau, G. Laporte. 1997.
+A tabu search heuristic for periodic and multi-depot vehicle routing problems.
+Networks, 30, pp. 105–119.";
+      }
+    }
+
+    protected override string FileName {
+      get { return "CordeauMD"; }
+    }
+
+    internal override MDCVRPData LoadInstance(CordeauParser parser) {
+      parser.Parse();
+
+      var instance = new MDCVRPData();
+      instance.Dimension = parser.Cities + 1;
+      instance.Depots = parser.Depots;
+      instance.Coordinates = parser.Coordinates;
+      instance.Capacity = parser.Capacity;
+      instance.Demands = parser.Demands;
+      instance.DistanceMeasure = DistanceMeasure.Euclidean;
+      instance.MaximumVehicles = parser.Vehicles;
+
+      int depots = parser.Depots;
+      int vehicles = parser.Vehicles / parser.Depots;
+      instance.VehicleDepotAssignment = new int[depots * vehicles];
+      int index = 0;
+
+      for (int i = 0; i < depots; i++)
+        for (int j = 0; j < vehicles; j++) {
+          instance.VehicleDepotAssignment[index] = i;
+          index++;
+        }
+
+      instance.Name = parser.ProblemName;
+
+      return instance;
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDTWInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDTWInstanceProvider.cs	(revision 11303)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDTWInstanceProvider.cs	(revision 11303)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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;
+
+namespace HeuristicLab.Problems.Instances.VehicleRouting {
+  public class CordeauMDTWInstanceProvider : CordeauFormatInstanceProvider<MDCVRPTWData> {
+    public override string Name {
+      get { return "Cordeau (MDCVRPTW)"; }
+    }
+
+    public override string Description {
+      get { return "Cordeau test set"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri(@"http://neo.lcc.uma.es/vrp/vrp-instances/multiple-depot-vrp-with-time-windows-instances/"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return @"J.-F. Cordeau, M. Gendreau, G. Laporte. 1997.
+A tabu search heuristic for periodic and multi-depot vehicle routing problems.
+Networks, 30, pp. 105–119.";
+      }
+    }
+
+    protected override string FileName {
+      get { return "CordeauMDTW"; }
+    }
+
+    internal override MDCVRPTWData LoadInstance(CordeauParser parser) {
+      parser.Parse();
+
+      var instance = new MDCVRPTWData();
+      instance.Dimension = parser.Cities + 1;
+      instance.Depots = parser.Depots;
+      instance.Coordinates = parser.Coordinates;
+      instance.Capacity = parser.Capacity;
+      instance.Demands = parser.Demands;
+      instance.DistanceMeasure = DistanceMeasure.Euclidean;
+      instance.ReadyTimes = parser.Readytimes;
+      instance.ServiceTimes = parser.Servicetimes;
+      instance.DueTimes = parser.Duetimes;
+      instance.MaximumVehicles = parser.Vehicles;
+
+      int depots = parser.Depots;
+      int vehicles = parser.Vehicles / parser.Depots;
+      instance.VehicleDepotAssignment = new int[depots * vehicles];
+      int index = 0;
+
+      for (int i = 0; i < depots; i++)
+        for (int j = 0; j < vehicles; j++) {
+          instance.VehicleDepotAssignment[index] = i;
+          index++;
+        }
+
+      instance.Name = parser.ProblemName;
+
+      return instance;
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj	(revision 11303)
@@ -103,7 +103,7 @@
   <ItemGroup>
     <Reference Include="ICSharpCode.SharpZipLib">
-		<HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
-		<Private>False</Private>
-	</Reference>
+      <HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -111,4 +111,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CordeauFormat\CordeauMDTWInstanceProvider.cs" />
     <Compile Include="GoldenFormat\ChristofidesInstanceProvider.cs" />
     <Compile Include="GoldenFormat\KytojokiInstanceProvider.cs" />
@@ -122,5 +123,5 @@
     <Compile Include="TSPLibFormat\AugeratInstanceProvider.cs" />
     <Compile Include="TSPLibFormat\ChristofidesEilonInstanceProvider.cs" />
-    <Compile Include="CordeauFormat\CordeauInstanceProvider.cs" />
+    <Compile Include="CordeauFormat\CordeauMDInstanceProvider.cs" />
     <Compile Include="CordeauFormat\CordeauFormatInstanceProvider.cs" />
     <Compile Include="LiLimFormat\LiLimInstanceProvider.cs" />
@@ -142,5 +143,4 @@
     <EmbeddedResource Include="Data\Homberger.zip" />
     <EmbeddedResource Include="Data\LiLim.zip" />
-    <EmbeddedResource Include="Data\Cordeau.zip" />
     <EmbeddedResource Include="Data\Golden.zip" />
     <EmbeddedResource Include="Data\Christofides.zip" />
@@ -148,4 +148,6 @@
     <EmbeddedResource Include="Data\Taillard.opt.zip" />
     <EmbeddedResource Include="Data\Taillard.zip" />
+    <EmbeddedResource Include="Data\CordeauMD.zip" />
+    <EmbeddedResource Include="Data\CordeauMDTW.zip" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="Plugin.cs" />
@@ -180,5 +182,5 @@
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-   <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -186,5 +188,5 @@
 
 call PreBuildEvent.cmd</PreBuildEvent>
-<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
 export ProjectDir=$(ProjectDir)
 export SolutionDir=$(SolutionDir)
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimInstanceProvider.cs	(revision 11303)
@@ -37,7 +37,7 @@
       get { return "LiLim test set"; }
     }
-    
+
     public override Uri WebLink {
-      get { return new Uri(@"http://www.sintef.no/Projectweb/TOP/Problems/PDPTW/Li--Lim-benchmark/"); }
+      get { return new Uri(@"http://www.sintef.no/Projectweb/TOP/PDPTW/Li--Lim-benchmark/"); }
     }
 
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/HombergerInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/HombergerInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/HombergerInstanceProvider.cs	(revision 11303)
@@ -37,7 +37,7 @@
       get { return "Homberger test set"; }
     }
-    
+
     public override Uri WebLink {
-      get { return new Uri(@"http://www.fernuni-hagen.de/WINF/touren/inhalte/probinst.htm"); }
+      get { return new Uri(@"http://www.sintef.no/Projectweb/TOP/VRPTW/Homberger-benchmark/"); }
     }
 
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs	(revision 11303)
@@ -93,4 +93,11 @@
             routes.Add(route);
           }
+
+          if (line.StartsWith("Solution")) {
+            if (routes.Any()) {
+              // Skip remaining solutions since only one "best solution" is stored
+              break;
+            }
+          }
         }
       }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/Improvers/OrienteeringLocalImprovementOperator.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/Improvers/OrienteeringLocalImprovementOperator.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/Improvers/OrienteeringLocalImprovementOperator.cs	(revision 11303)
@@ -38,25 +38,4 @@
   [StorableClass]
   public class OrienteeringLocalImprovementOperator : SingleSuccessorOperator, ILocalImprovementOperator {
-    #region IGenericLocalImprovementOperator Properties
-    public Type ProblemType { get { return typeof(OrienteeringProblem); } }
-
-    public OrienteeringProblem Problem {
-      get { return problem; }
-      set { ((ILocalImprovementOperator)this).Problem = value; }
-    }
-    IProblem ILocalImprovementOperator.Problem {
-      get { return problem; }
-      set {
-        if (problem != value) {
-          if (value != null && !(value is OrienteeringProblem))
-            throw new ArgumentException("Only problems of type " + ProblemType.ToString() + " can be assigned.");
-          problem = (OrienteeringProblem)value;
-        }
-      }
-    }
-    #endregion
-
-    [Storable]
-    private OrienteeringProblem problem;
 
     #region Parameter Properties
@@ -111,5 +90,4 @@
     private OrienteeringLocalImprovementOperator(OrienteeringLocalImprovementOperator original, Cloner cloner)
       : base(original, cloner) {
-      this.problem = cloner.Clone(original.problem);
     }
     public OrienteeringLocalImprovementOperator()
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringProblem.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringProblem.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringProblem.cs	(revision 11303)
@@ -269,4 +269,5 @@
       ParameterizeAnalyzer();
 
+      Operators.Add(new OrienteeringLocalImprovementOperator());
       Operators.Add(new OrienteeringShakingOperator());
       ParameterizeOperators();
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveInsertionLocalImprovement.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveInsertionLocalImprovement.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveInsertionLocalImprovement.cs	(revision 11303)
@@ -35,15 +35,4 @@
   [StorableClass]
   public class QAPExhaustiveInsertionLocalImprovement : SingleSuccessorOperator, ILocalImprovementOperator {
-
-    public Type ProblemType {
-      get { return typeof(QuadraticAssignmentProblem); }
-    }
-
-    [Storable]
-    private QuadraticAssignmentProblem problem;
-    public IProblem Problem {
-      get { return problem; }
-      set { problem = (QuadraticAssignmentProblem)value; }
-    }
 
     public ILookupParameter<IntValue> LocalIterationsParameter {
@@ -87,5 +76,4 @@
     protected QAPExhaustiveInsertionLocalImprovement(QAPExhaustiveInsertionLocalImprovement original, Cloner cloner)
       : base(original, cloner) {
-      this.problem = cloner.Clone(original.problem);
     }
     public QAPExhaustiveInsertionLocalImprovement()
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveInversionLocalImprovement.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveInversionLocalImprovement.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveInversionLocalImprovement.cs	(revision 11303)
@@ -35,15 +35,4 @@
   [StorableClass]
   public class QAPExhaustiveInversionLocalImprovement : SingleSuccessorOperator, ILocalImprovementOperator {
-
-    public Type ProblemType {
-      get { return typeof(QuadraticAssignmentProblem); }
-    }
-
-    [Storable]
-    private QuadraticAssignmentProblem problem;
-    public IProblem Problem {
-      get { return problem; }
-      set { problem = (QuadraticAssignmentProblem)value; }
-    }
 
     public ILookupParameter<IntValue> LocalIterationsParameter {
@@ -87,5 +76,4 @@
     protected QAPExhaustiveInversionLocalImprovement(QAPExhaustiveInversionLocalImprovement original, Cloner cloner)
       : base(original, cloner) {
-      this.problem = cloner.Clone(original.problem);
     }
     public QAPExhaustiveInversionLocalImprovement()
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveSwap2LocalImprovement.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveSwap2LocalImprovement.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPExhaustiveSwap2LocalImprovement.cs	(revision 11303)
@@ -35,15 +35,4 @@
   [StorableClass]
   public class QAPExhaustiveSwap2LocalImprovement : SingleSuccessorOperator, ILocalImprovementOperator {
-
-    public Type ProblemType {
-      get { return typeof(QuadraticAssignmentProblem); }
-    }
-
-    [Storable]
-    private QuadraticAssignmentProblem problem;
-    public IProblem Problem {
-      get { return problem; }
-      set { problem = (QuadraticAssignmentProblem)value; }
-    }
 
     public ILookupParameter<IntValue> LocalIterationsParameter {
@@ -91,5 +80,4 @@
     protected QAPExhaustiveSwap2LocalImprovement(QAPExhaustiveSwap2LocalImprovement original, Cloner cloner)
       : base(original, cloner) {
-      this.problem = cloner.Clone(original.problem);
     }
     public QAPExhaustiveSwap2LocalImprovement()
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPStochasticScrambleLocalImprovement.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPStochasticScrambleLocalImprovement.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/LocalImprovement/QAPStochasticScrambleLocalImprovement.cs	(revision 11303)
@@ -35,15 +35,4 @@
   [StorableClass]
   public class QAPStochasticScrambleLocalImprovement : SingleSuccessorOperator, ILocalImprovementOperator, IStochasticOperator {
-
-    public Type ProblemType {
-      get { return typeof(QuadraticAssignmentProblem); }
-    }
-
-    [Storable]
-    private QuadraticAssignmentProblem problem;
-    public IProblem Problem {
-      get { return problem; }
-      set { problem = (QuadraticAssignmentProblem)value; }
-    }
 
     public ILookupParameter<IntValue> LocalIterationsParameter {
@@ -95,5 +84,4 @@
     protected QAPStochasticScrambleLocalImprovement(QAPStochasticScrambleLocalImprovement original, Cloner cloner)
       : base(original, cloner) {
-      this.problem = cloner.Clone(original.problem);
     }
     public QAPStochasticScrambleLocalImprovement()
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 11303)
@@ -302,5 +302,10 @@
       Operators.Add(new QAPAlleleFrequencyAnalyzer());
       Operators.Add(new QAPPopulationDiversityAnalyzer());
+
+      Operators.Add(new QAPExhaustiveInsertionLocalImprovement());
+      Operators.Add(new QAPExhaustiveInversionLocalImprovement());
+      Operators.Add(new QAPStochasticScrambleLocalImprovement());
       Operators.Add(new QAPExhaustiveSwap2LocalImprovement());
+
       Operators.Add(new QAPSimilarityCalculator());
       ParameterizeAnalyzers();
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.cs	(revision 11303)
@@ -111,5 +111,6 @@
                 Point[] tour = new Point[permutation.Length];
                 for (int i = 0; i < permutation.Length; i++) {
-                  tour[i] = points[permutation[i]];
+                  if (permutation[i] >= 0 && permutation[i] < points.Length)
+                    tour[i] = points[permutation[i]];
                 }
                 graphics.DrawPolygon(Pens.Black, tour);
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/LocalImprovement/AlbaLambdaInterchangeLocalImprovementOperator.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/LocalImprovement/AlbaLambdaInterchangeLocalImprovementOperator.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/LocalImprovement/AlbaLambdaInterchangeLocalImprovementOperator.cs	(revision 11303)
@@ -37,14 +37,4 @@
   [StorableClass]
   public class AlbaLambdaInterchangeLocalImprovementOperator : VRPOperator, IStochasticOperator, ILocalImprovementOperator {
-    public Type ProblemType {
-      get { return typeof(VehicleRoutingProblem); }
-    }
-
-    [Storable]
-    private VehicleRoutingProblem problem;
-    public IProblem Problem {
-      get { return problem; }
-      set { problem = (VehicleRoutingProblem)value; }
-    }
 
     public IValueLookupParameter<IntValue> MaximumIterationsParameter {
@@ -84,5 +74,4 @@
     protected AlbaLambdaInterchangeLocalImprovementOperator(AlbaLambdaInterchangeLocalImprovementOperator original, Cloner cloner)
       : base(original, cloner) {
-        this.problem = cloner.Clone(original.problem);
     }
     public AlbaLambdaInterchangeLocalImprovementOperator()
@@ -102,5 +91,5 @@
     }
 
-    public static void Apply(AlbaEncoding solution, int maxIterations, 
+    public static void Apply(AlbaEncoding solution, int maxIterations,
       int lambda, int samples, IRandom random, IVRPProblemInstance problemInstance, ref double quality, out int evaluatedSolutions) {
       evaluatedSolutions = 0;
@@ -120,5 +109,5 @@
           }
         }
-        if (bestMove != null) 
+        if (bestMove != null)
           AlbaLambdaInterchangeMoveMaker.Apply(solution, bestMove);
       }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 11302)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 11303)
@@ -33,4 +33,5 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.Instances;
+using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Interpreters;
@@ -263,4 +264,5 @@
             defaultCreator = creator;
         }
+        Operators.Add(new AlbaLambdaInterchangeLocalImprovementOperator());
         if (defaultCreator != null)
           solutionCreatorParameter.Value = defaultCreator;
