Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringProblemView.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringProblemView.cs	(revision 11264)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringProblemView.cs	(revision 11265)
@@ -58,5 +58,6 @@
         orienteeringSolutionView.Content = null;
       } else {
-        orienteeringSolutionView.Content = new OrienteeringSolution(Content.BestKnownSolution, Content.Coordinates, Content.Scores, Content.BestKnownQuality);
+        orienteeringSolutionView.Content = new OrienteeringSolution(
+          Content.BestKnownSolution, Content.Coordinates, Content.StartingPoint, Content.TerminusPoint, Content.Scores, Content.BestKnownQuality);
       }
     }
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringSolutionView.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringSolutionView.cs	(revision 11264)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringSolutionView.cs	(revision 11265)
@@ -120,4 +120,10 @@
                 graphics.FillRectangle(Brushes.Red, points[i].X - size / 2, points[i].Y - size / 2, size, size);
               }
+
+              int startingPoint = Content.StartingPoint.Value;
+              int terminusPoint = Content.TerminusPoint.Value;
+              Font font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular);
+              graphics.DrawString("Begin", font, Brushes.Black, points[startingPoint].X, points[startingPoint].Y);
+              graphics.DrawString("End", font, Brushes.Black, points[terminusPoint].X, points[terminusPoint].Y);
             }
           } else {
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/Analyzers/BestOrienteeringSolutionAnalyser.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/Analyzers/BestOrienteeringSolutionAnalyser.cs	(revision 11264)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/Analyzers/BestOrienteeringSolutionAnalyser.cs	(revision 11265)
@@ -42,4 +42,10 @@
       get { return (LookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
     }
+    public ILookupParameter<IntValue> StartingPointParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["StartingPoint"]; }
+    }
+    public ILookupParameter<IntValue> TerminusPointParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["TerminusPoint"]; }
+    }
     public ILookupParameter<DoubleArray> ScoresParameter {
       get { return (ILookupParameter<DoubleArray>)Parameters["Scores"]; }
@@ -72,4 +78,6 @@
       Parameters.Add(new ScopeTreeLookupParameter<IntegerVector>("IntegerVector", "The Orienteering solutions which should be analysed."));
       Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the points."));
+      Parameters.Add(new LookupParameter<IntValue>("StartingPoint", "Index of the starting point."));
+      Parameters.Add(new LookupParameter<IntValue>("TerminusPoint", "Index of the ending point."));
       Parameters.Add(new LookupParameter<DoubleArray>("Scores", "The scores of the points."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the Orienteering solutions which should be analyzed."));
@@ -95,4 +103,6 @@
       var solution = BestSolutionParameter.ActualValue;
       var coordinates = CoordinatesParameter.ActualValue;
+      var startingPoint = StartingPointParameter.ActualValue;
+      var terminusPoint = TerminusPointParameter.ActualValue;
       var scores = ScoresParameter.ActualValue;
       if (solution == null) {
@@ -100,4 +110,6 @@
           (IntegerVector)solutions[bestIndex].Clone(),
           coordinates,
+          startingPoint,
+          terminusPoint,
           scores,
           new DoubleValue(qualities[bestIndex].Value));
Index: /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringSolution.cs
===================================================================
--- /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringSolution.cs	(revision 11264)
+++ /branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringSolution.cs	(revision 11265)
@@ -38,4 +38,30 @@
           if (coordinates != null) RegisterCoordinatesEvents();
           OnCoordinatesChanged();
+        }
+      }
+    }
+    [Storable]
+    private IntValue startingPoint;
+    public IntValue StartingPoint {
+      get { return startingPoint; }
+      set {
+        if (startingPoint != value) {
+          if (startingPoint != null) DeregisterStartingPointEvents();
+          startingPoint = value;
+          if (startingPoint != null) RegisterStartingPointEvents();
+          OnStartingPointChanged();
+        }
+      }
+    }
+    [Storable]
+    private IntValue terminusPoint;
+    public IntValue TerminusPoint {
+      get { return terminusPoint; }
+      set {
+        if (terminusPoint != value) {
+          if (terminusPoint != null) DeregisterTerminusPointEvents();
+          terminusPoint = value;
+          if (terminusPoint != null) RegisterTerminusPointEvents();
+          OnTerminusPointChanged();
         }
       }
@@ -77,8 +103,11 @@
       Initialize();
     }
-    public OrienteeringSolution(IntegerVector integerVector, DoubleMatrix coordinates, DoubleArray scores, DoubleValue quality)
+    public OrienteeringSolution(IntegerVector integerVector, DoubleMatrix coordinates, IntValue startingPoint, IntValue terminusPoint,
+      DoubleArray scores, DoubleValue quality)
       : base() {
       this.integerVector = integerVector;
       this.coordinates = coordinates;
+      this.startingPoint = startingPoint;
+      this.terminusPoint = terminusPoint;
       this.scores = scores;
       this.quality = quality;
@@ -98,4 +127,6 @@
       if (integerVector != null) RegisterIntegerVectorEvents();
       if (coordinates != null) RegisterCoordinatesEvents();
+      if (startingPoint != null) RegisterStartingPointEvents();
+      if (terminusPoint != null) RegisterTerminusPointEvents();
       if (scores != null) RegisterScoresEvents();
       if (quality != null) RegisterQualityEvents();
@@ -117,4 +148,18 @@
     }
 
+    public event EventHandler StartingPointChanged;
+    private void OnStartingPointChanged() {
+      var changed = StartingPointChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TerminusPointChanged;
+    private void OnTerminusPointChanged() {
+      var changed = TerminusPointChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+
     public event EventHandler ScoresChanged;
     private void OnScoresChanged() {
@@ -147,4 +192,16 @@
       Coordinates.Reset -= new EventHandler(Coordinates_Reset);
     }
+    private void RegisterStartingPointEvents() {
+      StartingPoint.ValueChanged += new EventHandler(StartingPoint_ValueChanged);
+    }
+    private void DeregisterStartingPointEvents() {
+      StartingPoint.ValueChanged -= new EventHandler(StartingPoint_ValueChanged);
+    }
+    private void RegisterTerminusPointEvents() {
+      TerminusPoint.ValueChanged += new EventHandler(TerminusPoint_ValueChanged);
+    }
+    private void DeregisterTerminusPointEvents() {
+      TerminusPoint.ValueChanged -= new EventHandler(TerminusPoint_ValueChanged);
+    }
     private void RegisterScoresEvents() {
       Scores.ItemChanged += new EventHandler<EventArgs<int>>(Scores_ItemChanged);
@@ -174,4 +231,10 @@
       OnCoordinatesChanged();
     }
+    private void StartingPoint_ValueChanged(object sender, EventArgs e) {
+      OnStartingPointChanged();
+    }
+    private void TerminusPoint_ValueChanged(object sender, EventArgs e) {
+      OnTerminusPointChanged();
+    }
     private void Scores_ItemChanged(object sender, EventArgs<int> e) {
       OnCoordinatesChanged();
