Index: trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 7999)
+++ trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 8016)
@@ -144,4 +144,6 @@
     [Storable]
     private QualityAnalyzer qualityAnalyzer;
+    [Storable]
+    private SingleValueAnalyzer temperatureAnalyzer;
     #endregion
 
@@ -150,4 +152,12 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      if (temperatureAnalyzer == null) {
+        temperatureAnalyzer = new SingleValueAnalyzer();
+        temperatureAnalyzer.Name = "TemperatureAnalyzer";
+        temperatureAnalyzer.ResultsParameter.ActualName = "Results";
+        temperatureAnalyzer.ValueParameter.ActualName = "Temperature";
+        temperatureAnalyzer.ValuesParameter.ActualName = "Temperature Chart";
+        Analyzer.Operators.Add(temperatureAnalyzer);
+      }
       Initialize();
     }
@@ -155,4 +165,5 @@
       : base(original, cloner) {
       qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
+      temperatureAnalyzer = cloner.Clone(original.temperatureAnalyzer);
       Initialize();
     }
@@ -205,4 +216,5 @@
       mainLoop.AnnealingOperatorParameter.ActualName = AnnealingOperatorParameter.Name;
       mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
+      mainLoop.TemperatureParameter.ActualName = "Temperature";
       mainLoop.StartTemperatureParameter.ActualName = StartTemperatureParameter.Name;
       mainLoop.EndTemperatureParameter.ActualName = EndTemperatureParameter.Name;
@@ -218,4 +230,6 @@
 
       qualityAnalyzer = new QualityAnalyzer();
+      temperatureAnalyzer = new SingleValueAnalyzer();
+      temperatureAnalyzer.Name = "TemperatureAnalyzer";
       ParameterizeAnalyzers();
       UpdateAnalyzers();
@@ -348,4 +362,7 @@
         qualityAnalyzer.QualityParameter.Hidden = false;
         qualityAnalyzer.BestKnownQualityParameter.Hidden = false;
+        temperatureAnalyzer.ResultsParameter.ActualName = "Results";
+        temperatureAnalyzer.ValueParameter.ActualName = "Temperature";
+        temperatureAnalyzer.ValuesParameter.ActualName = "Temperature Chart";
       }
     }
@@ -470,4 +487,5 @@
       }
       Analyzer.Operators.Add(qualityAnalyzer, qualityAnalyzer.EnabledByDefault);
+      Analyzer.Operators.Add(temperatureAnalyzer, temperatureAnalyzer.EnabledByDefault);
     }
     private SimulatedAnnealingMainLoop FindMainLoop(IOperator start) {
Index: trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 7999)
+++ trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 8016)
@@ -51,4 +51,7 @@
       get { return (LookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
     }
+    public ILookupParameter<DoubleValue> TemperatureParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Temperature"]; }
+    }
     public ValueLookupParameter<DoubleValue> StartTemperatureParameter {
       get { return (ValueLookupParameter<DoubleValue>)Parameters["StartTemperature"]; }
@@ -109,4 +112,5 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The value which represents the quality of a move."));
+      Parameters.Add(new LookupParameter<DoubleValue>("Temperature", "The current temperature."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("StartTemperature", "The initial temperature."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("EndTemperature", "The end temperature."));
@@ -126,5 +130,5 @@
 
       #region Create operators
-      VariableCreator variableCreator = new VariableCreator();
+      Assigner temperatureInitializer = new Assigner();
       ResultsCollector resultsCollector1 = new ResultsCollector();
       SubScopesProcessor subScopesProcessor0 = new SubScopesProcessor();
@@ -148,8 +152,8 @@
       ConditionalBranch iterationsTermination = new ConditionalBranch();
 
-      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Temperature", new DoubleValue(double.MaxValue)));
+      temperatureInitializer.LeftSideParameter.ActualName = TemperatureParameter.ActualName;
+      temperatureInitializer.RightSideParameter.ActualName = StartTemperatureParameter.Name;
 
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>(IterationsParameter.Name));
-      resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Temperature"));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
@@ -199,6 +203,6 @@
 
       #region Create operator graph
-      OperatorGraph.InitialOperator = variableCreator;
-      variableCreator.Successor = resultsCollector1;
+      OperatorGraph.InitialOperator = temperatureInitializer;
+      temperatureInitializer.Successor = resultsCollector1;
       resultsCollector1.Successor = subScopesProcessor0;
       subScopesProcessor0.Operators.Add(analyzer1);
@@ -237,4 +241,6 @@
       if (!Parameters.ContainsKey("Iterations"))
         Parameters.Add(new LookupParameter<IntValue>("Iterations", "The number of iterations."));
+      if (!Parameters.ContainsKey("Temperature"))
+        Parameters.Add(new LookupParameter<DoubleValue>("Temperature", "The current temperature."));
       #endregion
     }
