Index: /branches/Benchmarking/sources/HeuristicLab 3.3.sln
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab 3.3.sln	(revision 6919)
+++ /branches/Benchmarking/sources/HeuristicLab 3.3.sln	(revision 6920)
@@ -299,4 +299,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Tests", "HeuristicLab.Tests\HeuristicLab.Tests.csproj", "{B62872C1-6752-4758-9823-751A2D28C388}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.Benchmarks-3.3", "HeuristicLab.Algorithms.Benchmarks\3.3\HeuristicLab.Algorithms.Benchmarks-3.3.csproj", "{068C70A7-8CAF-4AB6-8721-4564D62292BC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.Benchmarks.Views-3.3", "HeuristicLab.Algorithms.Benchmarks.Views\3.3\HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj", "{3C906172-E044-4DF0-B4FD-AA21192D5D3E}"
 EndProject
 Global
@@ -1453,4 +1457,20 @@
 		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.ActiveCfg = Release|x86
 		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.Build.0 = Release|x86
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|x64.ActiveCfg = Release|Any CPU
+		{068C70A7-8CAF-4AB6-8721-4564D62292BC}.Release|x86.ActiveCfg = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|x64.ActiveCfg = Release|Any CPU
+		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.Designer.cs
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.Designer.cs	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.Designer.cs	(revision 6920)
@@ -0,0 +1,310 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  partial class BenchmarkView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      //System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AlgorithmView));
+      //this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      //this.problemTabPage = new System.Windows.Forms.TabPage();
+      //this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      //this.openProblemButton = new System.Windows.Forms.Button();
+      //this.newProblemButton = new System.Windows.Forms.Button();
+      //this.parametersTabPage = new System.Windows.Forms.TabPage();
+      //this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      //this.resultsTabPage = new System.Windows.Forms.TabPage();
+      //this.resultsView = new HeuristicLab.Optimization.Views.ResultCollectionView();
+      //this.runsTabPage = new System.Windows.Forms.TabPage();
+      //this.storeAlgorithmInEachRunCheckBox = new System.Windows.Forms.CheckBox();
+      //this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      //this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      //((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      //this.tabControl.SuspendLayout();
+      //this.problemTabPage.SuspendLayout();
+      //this.parametersTabPage.SuspendLayout();
+      //this.resultsTabPage.SuspendLayout();
+      //this.runsTabPage.SuspendLayout();
+      //this.SuspendLayout();
+      //// 
+      //// startButton
+      //// 
+      //this.startButton.Location = new System.Drawing.Point(0, 458);
+      //this.toolTip.SetToolTip(this.startButton, "Start/Resume Experiment");
+      //// 
+      //// executionTimeTextBox
+      //// 
+      //this.executionTimeTextBox.Location = new System.Drawing.Point(542, 462);
+      //// 
+      //// executionTimeLabel
+      //// 
+      //this.executionTimeLabel.Location = new System.Drawing.Point(453, 465);
+      //// 
+      //// pauseButton
+      //// 
+      //this.pauseButton.Location = new System.Drawing.Point(30, 458);
+      //this.toolTip.SetToolTip(this.pauseButton, "Pause Experiment");
+      //// 
+      //// stopButton
+      //// 
+      //this.stopButton.Location = new System.Drawing.Point(60, 458);
+      //this.toolTip.SetToolTip(this.stopButton, "Stop Experiment");
+      //// 
+      //// resetButton
+      //// 
+      //this.resetButton.Location = new System.Drawing.Point(90, 458);
+      //this.toolTip.SetToolTip(this.resetButton, "Reset Experiment");
+      //// 
+      //// nameTextBox
+      //// 
+      //this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      //this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      //this.nameTextBox.Location = new System.Drawing.Point(60, 0);
+      //this.nameTextBox.Size = new System.Drawing.Size(594, 20);
+      //// 
+      //// infoLabel
+      //// 
+      //this.infoLabel.Location = new System.Drawing.Point(660, 3);
+      //// 
+      //// tabControl
+      //// 
+      //this.tabControl.AllowDrop = true;
+      //this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      //      | System.Windows.Forms.AnchorStyles.Left)
+      //      | System.Windows.Forms.AnchorStyles.Right)));
+      //this.tabControl.Controls.Add(this.problemTabPage);
+      //this.tabControl.Controls.Add(this.parametersTabPage);
+      //this.tabControl.Controls.Add(this.resultsTabPage);
+      //this.tabControl.Controls.Add(this.runsTabPage);
+      //this.tabControl.Location = new System.Drawing.Point(0, 26);
+      //this.tabControl.Name = "tabControl";
+      //this.tabControl.SelectedIndex = 0;
+      //this.tabControl.Size = new System.Drawing.Size(679, 430);
+      //this.tabControl.TabIndex = 3;
+      //// 
+      //// problemTabPage
+      //// 
+      //this.problemTabPage.AllowDrop = true;
+      //this.problemTabPage.Controls.Add(this.problemViewHost);
+      //this.problemTabPage.Controls.Add(this.openProblemButton);
+      //this.problemTabPage.Controls.Add(this.newProblemButton);
+      //this.problemTabPage.Location = new System.Drawing.Point(4, 22);
+      //this.problemTabPage.Name = "problemTabPage";
+      //this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
+      //this.problemTabPage.Size = new System.Drawing.Size(671, 404);
+      //this.problemTabPage.TabIndex = 0;
+      //this.problemTabPage.Text = "Problem";
+      //this.problemTabPage.UseVisualStyleBackColor = true;
+      //this.problemTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragDrop);
+      //this.problemTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
+      //this.problemTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
+      //// 
+      //// problemViewHost
+      //// 
+      //this.problemViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      //      | System.Windows.Forms.AnchorStyles.Left)
+      //      | System.Windows.Forms.AnchorStyles.Right)));
+      //this.problemViewHost.Caption = "View";
+      //this.problemViewHost.Content = null;
+      //this.problemViewHost.Enabled = false;
+      //this.problemViewHost.Location = new System.Drawing.Point(6, 36);
+      //this.problemViewHost.Name = "problemViewHost";
+      //this.problemViewHost.ReadOnly = false;
+      //this.problemViewHost.Size = new System.Drawing.Size(659, 362);
+      //this.problemViewHost.TabIndex = 3;
+      //this.problemViewHost.ViewsLabelVisible = true;
+      //this.problemViewHost.ViewType = null;
+      //// 
+      //// openProblemButton
+      //// 
+      //this.openProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      //this.openProblemButton.Location = new System.Drawing.Point(36, 6);
+      //this.openProblemButton.Name = "openProblemButton";
+      //this.openProblemButton.Size = new System.Drawing.Size(24, 24);
+      //this.openProblemButton.TabIndex = 1;
+      //this.toolTip.SetToolTip(this.openProblemButton, "Open Problem");
+      //this.openProblemButton.UseVisualStyleBackColor = true;
+      //this.openProblemButton.Click += new System.EventHandler(this.openProblemButton_Click);
+      //// 
+      //// newProblemButton
+      //// 
+      //this.newProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      //this.newProblemButton.Location = new System.Drawing.Point(6, 6);
+      //this.newProblemButton.Name = "newProblemButton";
+      //this.newProblemButton.Size = new System.Drawing.Size(24, 24);
+      //this.newProblemButton.TabIndex = 0;
+      //this.toolTip.SetToolTip(this.newProblemButton, "New Problem");
+      //this.newProblemButton.UseVisualStyleBackColor = true;
+      //this.newProblemButton.Click += new System.EventHandler(this.newProblemButton_Click);
+      //// 
+      //// parametersTabPage
+      //// 
+      //this.parametersTabPage.Controls.Add(this.parameterCollectionView);
+      //this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      //this.parametersTabPage.Name = "parametersTabPage";
+      //this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      //this.parametersTabPage.Size = new System.Drawing.Size(671, 400);
+      //this.parametersTabPage.TabIndex = 1;
+      //this.parametersTabPage.Text = "Parameters";
+      //this.parametersTabPage.UseVisualStyleBackColor = true;
+      //// 
+      //// parameterCollectionView
+      //// 
+      //this.parameterCollectionView.AllowEditingOfHiddenParameters = true;
+      //this.parameterCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      //      | System.Windows.Forms.AnchorStyles.Left)
+      //      | System.Windows.Forms.AnchorStyles.Right)));
+      //this.parameterCollectionView.Caption = "ParameterCollection View";
+      //this.parameterCollectionView.Content = null;
+      //this.parameterCollectionView.Location = new System.Drawing.Point(6, 6);
+      //this.parameterCollectionView.Name = "parameterCollectionView";
+      //this.parameterCollectionView.ReadOnly = false;
+      //this.parameterCollectionView.Size = new System.Drawing.Size(659, 388);
+      //this.parameterCollectionView.TabIndex = 0;
+      //// 
+      //// resultsTabPage
+      //// 
+      //this.resultsTabPage.Controls.Add(this.resultsView);
+      //this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      //this.resultsTabPage.Name = "resultsTabPage";
+      //this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      //this.resultsTabPage.Size = new System.Drawing.Size(671, 400);
+      //this.resultsTabPage.TabIndex = 2;
+      //this.resultsTabPage.Text = "Results";
+      //this.resultsTabPage.UseVisualStyleBackColor = true;
+      //// 
+      //// resultsView
+      //// 
+      //this.resultsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      //      | System.Windows.Forms.AnchorStyles.Left)
+      //      | System.Windows.Forms.AnchorStyles.Right)));
+      //this.resultsView.Caption = "ResultCollection View";
+      //this.resultsView.Content = null;
+      //this.resultsView.Location = new System.Drawing.Point(6, 6);
+      //this.resultsView.Name = "resultsView";
+      //this.resultsView.ReadOnly = true;
+      //this.resultsView.Size = new System.Drawing.Size(659, 388);
+      //this.resultsView.TabIndex = 0;
+      //// 
+      //// runsTabPage
+      //// 
+      //this.runsTabPage.Controls.Add(this.storeAlgorithmInEachRunCheckBox);
+      //this.runsTabPage.Controls.Add(this.runsView);
+      //this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      //this.runsTabPage.Name = "runsTabPage";
+      //this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      //this.runsTabPage.Size = new System.Drawing.Size(671, 400);
+      //this.runsTabPage.TabIndex = 3;
+      //this.runsTabPage.Text = "Runs";
+      //this.runsTabPage.UseVisualStyleBackColor = true;
+      //// 
+      //// storeAlgorithmInEachRunCheckBox
+      //// 
+      //this.storeAlgorithmInEachRunCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      //this.storeAlgorithmInEachRunCheckBox.AutoSize = true;
+      //this.storeAlgorithmInEachRunCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      //this.storeAlgorithmInEachRunCheckBox.Checked = true;
+      //this.storeAlgorithmInEachRunCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      //this.storeAlgorithmInEachRunCheckBox.Location = new System.Drawing.Point(503, 6);
+      //this.storeAlgorithmInEachRunCheckBox.Name = "storeAlgorithmInEachRunCheckBox";
+      //this.storeAlgorithmInEachRunCheckBox.Size = new System.Drawing.Size(161, 17);
+      //this.storeAlgorithmInEachRunCheckBox.TabIndex = 1;
+      //this.storeAlgorithmInEachRunCheckBox.Text = "&Store Algorithm in each Run:";
+      //this.toolTip.SetToolTip(this.storeAlgorithmInEachRunCheckBox, "Check to store a copy of the algorithm in each run.");
+      //this.storeAlgorithmInEachRunCheckBox.UseVisualStyleBackColor = true;
+      //this.storeAlgorithmInEachRunCheckBox.CheckedChanged += new System.EventHandler(this.storeAlgorithmInEachRunCheckBox_CheckedChanged);
+      //// 
+      //// runsView
+      //// 
+      //this.runsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      //      | System.Windows.Forms.AnchorStyles.Left)
+      //      | System.Windows.Forms.AnchorStyles.Right)));
+      //this.runsView.Caption = "RunCollection View";
+      //this.runsView.Content = null;
+      //this.runsView.Location = new System.Drawing.Point(6, 6);
+      //this.runsView.Name = "runsView";
+      //this.runsView.ReadOnly = false;
+      //this.runsView.Size = new System.Drawing.Size(659, 388);
+      //this.runsView.TabIndex = 0;
+      //// 
+      //// openFileDialog
+      //// 
+      //this.openFileDialog.DefaultExt = "hl";
+      //this.openFileDialog.FileName = "Problem";
+      //this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      //this.openFileDialog.Title = "Open Problem";
+      //// 
+      //// AlgorithmView
+      //// 
+      //this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      //this.Controls.Add(this.tabControl);
+      //this.Name = "AlgorithmView";
+      //this.Size = new System.Drawing.Size(679, 482);
+      //this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      //this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      //this.Controls.SetChildIndex(this.resetButton, 0);
+      //this.Controls.SetChildIndex(this.tabControl, 0);
+      //this.Controls.SetChildIndex(this.stopButton, 0);
+      //this.Controls.SetChildIndex(this.pauseButton, 0);
+      //this.Controls.SetChildIndex(this.startButton, 0);
+      //this.Controls.SetChildIndex(this.infoLabel, 0);
+      //this.Controls.SetChildIndex(this.nameLabel, 0);
+      //this.Controls.SetChildIndex(this.nameTextBox, 0);
+      //((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      //this.tabControl.ResumeLayout(false);
+      //this.problemTabPage.ResumeLayout(false);
+      //this.parametersTabPage.ResumeLayout(false);
+      //this.resultsTabPage.ResumeLayout(false);
+      //this.runsTabPage.ResumeLayout(false);
+      //this.runsTabPage.PerformLayout();
+      //this.ResumeLayout(false);
+      //this.PerformLayout();
+
+    }
+
+    #endregion
+
+    //protected HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
+    //protected System.Windows.Forms.TabPage parametersTabPage;
+    //protected System.Windows.Forms.TabPage problemTabPage;
+    //protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+    //protected HeuristicLab.MainForm.WindowsForms.ViewHost problemViewHost;
+    //protected System.Windows.Forms.Button newProblemButton;
+    //protected System.Windows.Forms.Button openProblemButton;
+    //protected System.Windows.Forms.OpenFileDialog openFileDialog;
+    //protected System.Windows.Forms.TabPage resultsTabPage;
+    //protected HeuristicLab.Optimization.Views.ResultCollectionView resultsView;
+    //protected System.Windows.Forms.TabPage runsTabPage;
+    //protected RunCollectionView runsView;
+    //protected System.Windows.Forms.CheckBox storeAlgorithmInEachRunCheckBox;
+  }
+}
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.cs
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.cs	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/BenchmarkView.cs	(revision 6920)
@@ -0,0 +1,222 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Views;
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  [View("Benchmark View")]
+  [Content(typeof(Whetstone), true)]
+  [Content(typeof(Dhrystone), true)]
+  [Content(typeof(Linpack), true)]
+  public partial class BenchmarkView : AlgorithmView {
+    //private TypeSelectorDialog problemTypeSelectorDialog;
+    public BenchmarkView() {
+      InitializeComponent();
+      tabControl.TabPages.Remove(this.problemTabPage);
+      tabControl.TabPages.Remove(this.parametersTabPage);
+    }
+
+    //public new IAlgorithm Content {
+    //  get { return (IAlgorithm)base.Content; }
+    //  set { base.Content = value; }
+    //}
+
+    //protected override void Dispose(bool disposing) {
+    //  if (disposing) {
+    //    if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
+    //    if (components != null) components.Dispose();
+    //  }
+    //  base.Dispose(disposing);
+    //}
+
+    //protected override void OnInitialized(EventArgs e) {
+    //  // Set order of tab pages according to z order.
+    //  // NOTE: This is required due to a bug in the VS designer.
+    //  List<Control> tabPages = new List<Control>();
+    //  for (int i = 0; i < tabControl.Controls.Count; i++) {
+    //    tabPages.Add(tabControl.Controls[i]);
+    //  }
+    //  tabControl.Controls.Clear();
+    //  foreach (Control control in tabPages)
+    //    tabControl.Controls.Add(control);
+
+    //  base.OnInitialized(e);
+    //}
+
+    //protected override void DeregisterContentEvents() {
+    //  Content.ProblemChanged -= new EventHandler(Content_ProblemChanged);
+    //  Content.StoreAlgorithmInEachRunChanged -= new EventHandler(Content_StoreAlgorithmInEachRunChanged);
+    //  base.DeregisterContentEvents();
+    //}
+    //protected override void RegisterContentEvents() {
+    //  base.RegisterContentEvents();
+    //  Content.ProblemChanged += new EventHandler(Content_ProblemChanged);
+    //  Content.StoreAlgorithmInEachRunChanged += new EventHandler(Content_StoreAlgorithmInEachRunChanged);
+    //}
+
+    //protected override void OnContentChanged() {
+    //  base.OnContentChanged();
+    //  if (Content == null) {
+    //    parameterCollectionView.Content = null;
+    //    problemViewHost.Content = null;
+    //    resultsView.Content = null;
+    //    runsView.Content = null;
+    //    storeAlgorithmInEachRunCheckBox.Checked = true;
+    //  } else {
+    //    parameterCollectionView.Content = Content.Parameters;
+    //    problemViewHost.ViewType = null;
+    //    problemViewHost.Content = Content.Problem;
+    //    resultsView.Content = Content.Results.AsReadOnly();
+    //    runsView.Content = Content.Runs;
+    //    storeAlgorithmInEachRunCheckBox.Checked = Content.StoreAlgorithmInEachRun;
+    //  }
+    //}
+
+    //protected override void SetEnabledStateOfControls() {
+    //  base.SetEnabledStateOfControls();
+    //  parameterCollectionView.Enabled = Content != null;
+    //  newProblemButton.Enabled = Content != null && !ReadOnly;
+    //  openProblemButton.Enabled = Content != null && !ReadOnly;
+    //  problemViewHost.Enabled = Content != null;
+    //  resultsView.Enabled = Content != null;
+    //  runsView.Enabled = Content != null;
+    //  storeAlgorithmInEachRunCheckBox.Enabled = Content != null && !ReadOnly;
+    //}
+
+    //protected override void OnClosed(FormClosedEventArgs e) {
+    //  if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) {
+    //    //The content must be stopped if no other view showing the content is available
+    //    var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IOptimizer>();
+    //    if (!optimizers.Contains(Content)) {
+    //      var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers);
+    //      if (!nestedOptimizers.Contains(Content)) Content.Stop();
+    //    }
+    //  }
+    //  base.OnClosed(e);
+    //}
+
+    //#region Content Events
+    //protected override void Content_Prepared(object sender, EventArgs e) {
+    //  if (InvokeRequired)
+    //    Invoke(new EventHandler(Content_Prepared), sender, e);
+    //  else {
+    //    base.Content_Prepared(sender, e);
+    //    resultsView.Content = Content.Results.AsReadOnly();
+    //  }
+    //}
+
+    //protected virtual void Content_ProblemChanged(object sender, EventArgs e) {
+    //  if (InvokeRequired)
+    //    Invoke(new EventHandler(Content_ProblemChanged), sender, e);
+    //  else {
+    //    problemViewHost.ViewType = null;
+    //    problemViewHost.Content = Content.Problem;
+    //  }
+    //}
+    //protected virtual void Content_StoreAlgorithmInEachRunChanged(object sender, EventArgs e) {
+    //  if (InvokeRequired)
+    //    Invoke(new EventHandler(Content_StoreAlgorithmInEachRunChanged), sender, e);
+    //  else
+    //    storeAlgorithmInEachRunCheckBox.Checked = Content.StoreAlgorithmInEachRun;
+    //}
+    //#endregion
+
+    //#region Control Events
+    //protected virtual void newProblemButton_Click(object sender, EventArgs e) {
+    //  if (problemTypeSelectorDialog == null) {
+    //    problemTypeSelectorDialog = new TypeSelectorDialog();
+    //    problemTypeSelectorDialog.Caption = "Select Problem";
+    //    problemTypeSelectorDialog.TypeSelector.Caption = "Available Problems";
+    //    problemTypeSelectorDialog.TypeSelector.Configure(Content.ProblemType, false, true);
+    //  }
+    //  if (problemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+    //    try {
+    //      Content.Problem = (IProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+    //    }
+    //    catch (Exception ex) {
+    //      ErrorHandling.ShowErrorDialog(this, ex);
+    //    }
+    //  }
+    //}
+    //protected virtual void openProblemButton_Click(object sender, EventArgs e) {
+    //  openFileDialog.Title = "Open Problem";
+    //  if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+    //    newProblemButton.Enabled = openProblemButton.Enabled = false;
+    //    problemViewHost.Enabled = false;
+
+    //    ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
+    //      try {
+    //        if (error != null) throw error;
+    //        IProblem problem = content as IProblem;
+    //        if (problem == null)
+    //          Invoke(new Action(() =>
+    //            MessageBox.Show(this, "The selected file does not contain a problem.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error)));
+    //        else if (!Content.ProblemType.IsInstanceOfType(problem))
+    //          Invoke(new Action(() =>
+    //            MessageBox.Show(this, "The selected file contains a problem type which is not supported by this algorithm.", "Invalid Problem Type", MessageBoxButtons.OK, MessageBoxIcon.Error)));
+    //        else
+    //          Content.Problem = problem;
+    //      }
+    //      catch (Exception ex) {
+    //        Invoke(new Action(() => ErrorHandling.ShowErrorDialog(this, ex)));
+    //      }
+    //      finally {
+    //        Invoke(new Action(delegate() {
+    //          problemViewHost.Enabled = true;
+    //          newProblemButton.Enabled = openProblemButton.Enabled = true;
+    //        }));
+    //      }
+    //    });
+    //  }
+    //}
+    //protected virtual void storeAlgorithmInEachRunCheckBox_CheckedChanged(object sender, EventArgs e) {
+    //  if (Content != null) Content.StoreAlgorithmInEachRun = storeAlgorithmInEachRunCheckBox.Checked;
+    //}
+    //protected virtual void problemTabPage_DragEnterOver(object sender, DragEventArgs e) {
+    //  e.Effect = DragDropEffects.None;
+    //  if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) != null) && Content.ProblemType.IsAssignableFrom(e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat).GetType())) {
+    //    if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+    //    else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+    //    else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+    //    else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+    //    else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+    //  }
+    //}
+    //protected virtual void problemTabPage_DragDrop(object sender, DragEventArgs e) {
+    //  if (e.Effect != DragDropEffects.None) {
+    //    IProblem problem = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IProblem;
+    //    if (e.Effect.HasFlag(DragDropEffects.Copy)) problem = (IProblem)problem.Clone();
+    //    Content.Problem = problem;
+    //  }
+    //}
+    //#endregion
+  }
+}
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj	(revision 6920)
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{3C906172-E044-4DF0-B4FD-AA21192D5D3E}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Algorithms.Benchmarks.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Algorithms.Benchmarks.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BenchmarkView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BenchmarkView.Designer.cs">
+      <DependentUpon>BenchmarkView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Algorithms.Benchmarks\3.3\HeuristicLab.Algorithms.Benchmarks-3.3.csproj">
+      <Project>{068C70A7-8CAF-4AB6-8721-4564D62292BC}</Project>
+      <Name>HeuristicLab.Algorithms.Benchmark.3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
+      <Project>{662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2}</Project>
+      <Name>HeuristicLab.Optimization.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Plugin.cs.frame	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Plugin.cs.frame	(revision 6920)
@@ -0,0 +1,41 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Algorithms.Benchmarks.Views {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Algorithms.Benchmarks plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Algorithms.Benchmarks.Views", "Provides wrappers for data analysis algorithms implemented in external libraries (linear regression, linear discriminant analysis, k-means clustering, support vector classification and regression)", "3.4.1.$WCREV$")]
+  [PluginFile("HeuristicLab.Algorithms.Benchmarks.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")] 
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")] 
+  public class HeuristicLabAlgorithmsBenchmarksViewsPlugin : PluginBase {
+  }
+}
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 6920)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Algorithms.Benchmarks.Views")]
+[assembly: AssemblyDescription("Benchmarking")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3E422463-0CE0-400D-9544-5C11D5818769")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Dhrystone.cs
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Dhrystone.cs	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Dhrystone.cs	(revision 6920)
@@ -0,0 +1,401 @@
+﻿using System;
+using System.Diagnostics;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  [Item("Dhrystone Algorithm", "A Dhrystone benchmark algorithm.")]
+  [Creatable("Benchmarks")]
+  [StorableClass]
+  public class Dhrystone : Algorithm {
+    private DateTime lastUpdateTime;
+
+    [Storable]
+    private ResultCollection results;
+
+    #region Benchmark Fields
+
+    private const int Ident_1 = 0;
+    private const int Ident_2 = 1;
+    private const int Ident_3 = 2;
+    private const int Ident_4 = 3;
+    private const int Ident_5 = 4;
+
+    private Record_Type Record_Glob;
+    private Record_Type Next_Record_Glob;
+
+    private int Int_Glob;
+    private Boolean Bool_Glob;
+
+    private char Char_Glob_1;
+    private char Char_Glob_2;
+
+    private int[] Array_Glob_1 = new int[128];
+    private int[][] Array_Glob_2 = new int[128][];
+
+    private Record_Type First_Record = new Record_Type();
+    private Record_Type Second_Record = new Record_Type();
+
+    private long Number_Of_Runs = 10000000;
+
+    #endregion
+
+    #region Properties
+
+    public override ResultCollection Results {
+      get { return results; }
+    }
+
+    #endregion
+
+    #region Costructors
+
+    public Dhrystone()
+      : base() {
+      results = new ResultCollection();
+    }
+
+    private Dhrystone(Dhrystone original, Cloner cloner)
+      : base(original, cloner) {
+      results = new ResultCollection();
+    }
+
+    #endregion
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Dhrystone(this, cloner);
+    }
+
+    public override void Prepare() {
+      results.Clear();
+      OnPrepared();
+    }
+
+    public override void Start() {
+      var cancellationTokenSource = new CancellationTokenSource();
+      OnStarted();
+      Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token);
+      task.ContinueWith(t => {
+        try {
+          t.Wait();
+        }
+        catch (AggregateException ex) {
+          try {
+            ex.Flatten().Handle(x => x is OperationCanceledException);
+          }
+          catch (AggregateException remaining) {
+            if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]);
+            else OnExceptionOccurred(remaining);
+          }
+        }
+        cancellationTokenSource.Dispose();
+        cancellationTokenSource = null;
+        OnStopped();
+      });
+    }
+
+    private void Run(object state) {
+      CancellationToken cancellationToken = (CancellationToken)state;
+      lastUpdateTime = DateTime.Now;
+      System.Timers.Timer timer = new System.Timers.Timer(250);
+      timer.AutoReset = true;
+      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+      try {
+        RunBenchmark();
+      }
+      finally {
+        timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
+        timer.Stop();
+        ExecutionTime += DateTime.Now - lastUpdateTime;
+      }
+
+      cancellationToken.ThrowIfCancellationRequested();
+    }
+
+    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      System.Timers.Timer timer = (System.Timers.Timer)sender;
+      timer.Enabled = false;
+      DateTime now = DateTime.Now;
+      ExecutionTime += now - lastUpdateTime;
+      lastUpdateTime = now;
+      timer.Enabled = true;
+    }
+
+    #region Dhrystone Benchmark
+
+    private void RunBenchmark() {
+      int Int_Loc_1;
+      int Int_Loc_2;
+      int Int_Loc_3;
+
+      int[] Int_Loc_1_Ref = new int[1];
+      int[] Int_Loc_3_Ref = new int[1];
+
+      char Char_Index;
+      int[] Enum_Loc = new int[1];
+
+      string String_Loc_1;
+      string String_Loc_2;
+
+      long total_time;
+
+      int Run_Index;
+
+      Next_Record_Glob = Second_Record;
+      Record_Glob = First_Record;
+
+      Record_Glob.Record_Comp = Next_Record_Glob;
+      Record_Glob.Discr = Ident_1;
+      Record_Glob.Enum_Comp = Ident_3;
+      Record_Glob.Int_Comp = 40;
+      Record_Glob.String_Comp = "DHRYSTONE PROGRAM, SOME STRING";
+      String_Loc_1 = "DHRYSTONE PROGRAM, 1'ST STRING";
+
+      for (int i = 0; i < 128; i++) {
+        Array_Glob_2[i] = new int[128];
+      }
+
+      //System.Console.WriteLine("Execution start, " + Number_Of_Runs + " runs through Dhrystone");
+      Stopwatch sw = new Stopwatch();
+      sw.Start();
+
+
+      for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) {
+        Proc_5();
+        Proc_4();
+
+        Int_Loc_1 = 2;
+        Int_Loc_2 = 3;
+
+        String_Loc_2 = "DHRYSTONE PROGRAM, 2'ND STRING";
+
+        Enum_Loc[0] = Ident_2;
+        Bool_Glob = !Func_2(String_Loc_1, String_Loc_2);
+
+        while (Int_Loc_1 < Int_Loc_2) {
+          Int_Loc_3_Ref[0] = 5 * Int_Loc_1 - Int_Loc_2;
+          Proc_7(Int_Loc_1, Int_Loc_2, Int_Loc_3_Ref);
+          Int_Loc_1 += 1;
+        }
+
+        Int_Loc_3 = Int_Loc_3_Ref[0];
+        Proc_8(Array_Glob_1, Array_Glob_2, Int_Loc_1, Int_Loc_3);
+        Proc_1(Record_Glob);
+
+        for (Char_Index = 'A'; Char_Index <= Char_Glob_2; ++Char_Index) {
+          if (Enum_Loc[0] == Func_1(Char_Index, 'C'))
+            Proc_6(Ident_1, Enum_Loc);
+        }
+
+        Int_Loc_3 = Int_Loc_2 * Int_Loc_1;
+        Int_Loc_2 = Int_Loc_3 / Int_Loc_1;
+        Int_Loc_2 = 7 * (Int_Loc_3 - Int_Loc_2) - Int_Loc_1;
+
+        Int_Loc_1_Ref[0] = Int_Loc_1;
+        Proc_2(Int_Loc_1_Ref);
+        Int_Loc_1 = Int_Loc_1_Ref[0];
+      }
+
+      sw.Stop();
+      total_time = sw.ElapsedMilliseconds;
+      //System.Console.WriteLine("total time: {0} ms", total_time);
+      //System.Console.WriteLine("Result: " + Number_Of_Runs * 1000 / total_time + " dhrystone/ms.");
+
+      Results.Add(new Result("DIPS", new DoubleValue(Number_Of_Runs * 1000 / total_time)));
+    }
+
+    private int Func_1(char Char_Par_1_Val, char Char_Par_2_Val) {
+      char Char_Loc_1;
+      char Char_Loc_2;
+
+      Char_Loc_1 = Char_Par_1_Val;
+      Char_Loc_2 = Char_Loc_1;
+      if (Char_Loc_2 != Char_Par_2_Val)
+        return Ident_1;
+      else
+        return Ident_2;
+    }
+
+    private bool Func_2(string String_Par_1_Ref, string String_Par_2_Ref) {
+      int Int_Loc;
+      char Char_Loc = '\0';
+
+      Int_Loc = 2;
+
+      while (Int_Loc <= 2) {
+        if (Func_1(String_Par_1_Ref[Int_Loc], String_Par_2_Ref[Int_Loc + 1]) == Ident_1) {
+          Char_Loc = 'A';
+          Int_Loc += 1;
+        }
+      }
+      if (Char_Loc >= 'W' && Char_Loc < 'z')
+        Int_Loc = 7;
+      if (Char_Loc == 'X')
+        return true;
+      else {
+        if (String_Par_1_Ref.CompareTo(String_Par_2_Ref) > 0) {
+          Int_Loc += 7;
+          return true;
+        } else
+          return false;
+      }
+    }
+
+    private bool Func_3(int Enum_Par_Val) {
+      int Enum_Loc;
+
+      Enum_Loc = Enum_Par_Val;
+      if (Enum_Loc == Ident_3)
+        return true;
+      else
+        return false;
+    }
+
+    private void Proc_1(Record_Type Pointer_Par_Val) {
+      Record_Type Next_Record = Pointer_Par_Val.Record_Comp;
+
+      Pointer_Par_Val.Record_Comp = Record_Glob;
+
+      Pointer_Par_Val.Int_Comp = 5;
+
+      Next_Record.Int_Comp = Pointer_Par_Val.Int_Comp;
+      Next_Record.Record_Comp = Pointer_Par_Val.Record_Comp;
+      Proc_3(Next_Record.Record_Comp);
+
+      int[] Int_Ref = new int[1];
+
+      if (Next_Record.Discr == Ident_1) {
+        Next_Record.Int_Comp = 6;
+        Int_Ref[0] = Next_Record.Enum_Comp;
+        Proc_6(Pointer_Par_Val.Enum_Comp, Int_Ref);
+        Next_Record.Enum_Comp = Int_Ref[0];
+        Next_Record.Record_Comp = Record_Glob.Record_Comp;
+        Int_Ref[0] = Next_Record.Int_Comp;
+        Proc_7(Next_Record.Int_Comp, 10, Int_Ref);
+        Next_Record.Int_Comp = Int_Ref[0];
+      } else
+        Pointer_Par_Val = Pointer_Par_Val.Record_Comp;
+    }
+
+    private void Proc_2(int[] Int_Par_Ref) {
+      int Int_Loc;
+      int Enum_Loc;
+
+      Int_Loc = Int_Par_Ref[0] + 10;
+      Enum_Loc = 0;
+
+      do
+        if (Char_Glob_1 == 'A') {
+          Int_Loc -= 1;
+          Int_Par_Ref[0] = Int_Loc - Int_Glob;
+          Enum_Loc = Ident_1;
+        }
+      while (Enum_Loc != Ident_1);
+    }
+
+    private void Proc_3(Record_Type Pointer_Par_Ref) {
+      if (Record_Glob != null)
+        Pointer_Par_Ref = Record_Glob.Record_Comp;
+      else
+        Int_Glob = 100;
+
+      int[] Int_Comp_Ref = new int[1];
+      Int_Comp_Ref[0] = Record_Glob.Int_Comp;
+      Proc_7(10, Int_Glob, Int_Comp_Ref);
+      Record_Glob.Int_Comp = Int_Comp_Ref[0];
+    }
+
+    private void Proc_4() {
+      bool Bool_Loc;
+
+      Bool_Loc = Char_Glob_1 == 'A';
+      Bool_Loc = Bool_Loc || Bool_Glob;
+      Char_Glob_2 = 'B';
+    }
+
+    private void Proc_5() {
+      Char_Glob_1 = 'A';
+      Bool_Glob = false;
+    }
+
+    private void Proc_6(int Enum_Par_Val, int[] Enum_Par_Ref) {
+
+      Enum_Par_Ref[0] = Enum_Par_Val;
+
+      if (!Func_3(Enum_Par_Val))
+        Enum_Par_Ref[0] = Ident_4;
+
+      switch (Enum_Par_Val) {
+        case Ident_1:
+          Enum_Par_Ref[0] = Ident_1;
+          break;
+
+        case Ident_2:
+          if (Int_Glob > 100)
+            Enum_Par_Ref[0] = Ident_1;
+          else
+            Enum_Par_Ref[0] = Ident_4;
+          break;
+
+        case Ident_3:
+          Enum_Par_Ref[0] = Ident_2;
+          break;
+
+        case Ident_4:
+          break;
+
+        case Ident_5:
+          Enum_Par_Ref[0] = Ident_3;
+          break;
+      }
+    }
+
+    private void Proc_7(int Int_Par_Val1, int Int_Par_Val2, int[] Int_Par_Ref) {
+      int Int_Loc;
+      Int_Loc = Int_Par_Val1 + 2;
+      Int_Par_Ref[0] = Int_Par_Val2 + Int_Loc;
+    }
+
+    private void Proc_8(int[] Array_Par_1_Ref, int[][] Array_Par_2_Ref, int Int_Par_Val_1, int Int_Par_Val_2) {
+      int Int_Index;
+      int Int_Loc;
+
+      Int_Loc = Int_Par_Val_1 + 5;
+      Array_Par_1_Ref[Int_Loc] = Int_Par_Val_2;
+      Array_Par_1_Ref[Int_Loc + 1] = Array_Par_1_Ref[Int_Loc];
+      Array_Par_1_Ref[Int_Loc + 30] = Int_Loc;
+
+      for (Int_Index = Int_Loc; Int_Index <= Int_Loc + 1; ++Int_Index)
+        Array_Par_2_Ref[Int_Loc][Int_Index] = Int_Loc;
+      Array_Par_2_Ref[Int_Loc][Int_Loc - 1] += 1;
+      Array_Par_2_Ref[Int_Loc + 20][Int_Loc] = Array_Par_1_Ref[Int_Loc];
+      Int_Glob = 5;
+    }
+
+    #endregion
+
+    #region Private Class
+
+    private class Record_Type {
+      public Record_Type Record_Comp;
+      public int Discr;
+      public int Enum_Comp;
+      public int Int_Comp;
+      public string String_Comp;
+      /*
+      public int Enum_Comp_2;
+      public string String_Comp_2;
+      public char Char_Comp_1;
+      public char Char_Comp_2;
+       */
+    }
+
+    #endregion
+  }
+}
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj	(revision 6920)
@@ -0,0 +1,119 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{068C70A7-8CAF-4AB6-8721-4564D62292BC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Algorithms.Benchmarks</RootNamespace>
+    <AssemblyName>HeuristicLab.Algorithms.Benchmarks-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Whetstone.cs" />
+    <Compile Include="Dhrystone.cs" />
+    <Compile Include="Linpack.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Linpack.cs
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Linpack.cs	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Linpack.cs	(revision 6920)
@@ -0,0 +1,486 @@
+﻿using System;
+using System.Diagnostics;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  [Item("Linpack Algorithm", "A Linpack benchmark algorithm.")]
+  [Creatable("Benchmarks")]
+  [StorableClass]
+  public class Linpack : Algorithm {
+    private DateTime lastUpdateTime;
+
+    [Storable]
+    private ResultCollection results;
+
+    #region Benchmark Fields
+
+    private const int DEFAULT_PSIZE = 1500;
+
+    private double eps_result = 0.0;
+    private double mflops_result = 0.0;
+    private double residn_result = 0.0;
+    private double time_result = 0.0;
+    private double total = 0.0;
+
+    private Stopwatch sw = new Stopwatch();
+
+    #endregion
+
+    #region Properties
+
+    public override ResultCollection Results {
+      get { return results; }
+    }
+
+    #endregion
+
+    #region Costructors
+
+    public Linpack()
+      : base() {
+      results = new ResultCollection();
+    }
+
+    private Linpack(Linpack original, Cloner cloner)
+      : base(original, cloner) {
+      results = new ResultCollection();
+    }
+
+    #endregion
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Linpack(this, cloner);
+    }
+
+    public override void Prepare() {
+      results.Clear();
+      OnPrepared();
+    }
+
+    public override void Start() {
+      var cancellationTokenSource = new CancellationTokenSource();
+      OnStarted();
+      Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token);
+      task.ContinueWith(t => {
+        try {
+          t.Wait();
+        }
+        catch (AggregateException ex) {
+          try {
+            ex.Flatten().Handle(x => x is OperationCanceledException);
+          }
+          catch (AggregateException remaining) {
+            if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]);
+            else OnExceptionOccurred(remaining);
+          }
+        }
+        cancellationTokenSource.Dispose();
+        cancellationTokenSource = null;
+        OnStopped();
+      });
+    }
+
+    private void Run(object state) {
+      CancellationToken cancellationToken = (CancellationToken)state;
+      lastUpdateTime = DateTime.Now;
+      System.Timers.Timer timer = new System.Timers.Timer(250);
+      timer.AutoReset = true;
+      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+      try {
+        RunBenchmark();
+      }
+      finally {
+        timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
+        timer.Stop();
+        ExecutionTime += DateTime.Now - lastUpdateTime;
+      }
+
+      cancellationToken.ThrowIfCancellationRequested();
+    }
+
+    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      System.Timers.Timer timer = (System.Timers.Timer)sender;
+      timer.Enabled = false;
+      DateTime now = DateTime.Now;
+      ExecutionTime += now - lastUpdateTime;
+      lastUpdateTime = now;
+      timer.Enabled = true;
+    }
+
+    #region Linpack Benchmark
+
+    private void RunBenchmark() {
+      int n = DEFAULT_PSIZE;
+      int ldaa = DEFAULT_PSIZE;
+      int lda = DEFAULT_PSIZE + 1;
+
+      double[][] a = new double[ldaa][];
+      double[] b = new double[ldaa];
+      double[] x = new double[ldaa];
+
+      double ops;
+      double norma;
+      double normx;
+      double resid;
+      int i;
+      int info;
+      int[] ipvt = new int[ldaa];
+
+      for (i = 0; i < ldaa; i++) {
+        a[i] = new double[lda];
+      }
+
+      ops = (2.0e0 * (((double)n) * n * n)) / 3.0 + 2.0 * (n * n);
+
+      norma = mathGen(a, lda, n, b);
+
+      sw.Reset();
+      sw.Start();
+
+      info = dgefa(a, lda, n, ipvt);
+
+      dgesl(a, lda, n, ipvt, b, 0);
+
+      sw.Stop();
+      total = sw.Elapsed.TotalMilliseconds / 1000;
+
+      for (i = 0; i < n; i++) {
+        x[i] = b[i];
+      }
+
+      norma = mathGen(a, lda, n, b);
+
+      for (i = 0; i < n; i++) {
+        b[i] = -b[i];
+      }
+
+      dmxpy(n, b, n, lda, x, a);
+
+      resid = 0.0;
+      normx = 0.0;
+
+      for (i = 0; i < n; i++) {
+        resid = (resid > abs(b[i])) ? resid : abs(b[i]);
+        normx = (normx > abs(x[i])) ? normx : abs(x[i]);
+      }
+
+      eps_result = epslon((double)1.0);
+
+      residn_result = resid / (n * norma * normx * eps_result);
+      residn_result += 0.005; // for rounding
+      residn_result = (int)(residn_result * 100);
+      residn_result /= 100;
+
+      time_result = total;
+      time_result += 0.005; // for rounding
+      time_result = (int)(time_result * 100);
+      time_result /= 100;
+
+      mflops_result = ops / (1.0e6 * total);
+      mflops_result += 0.0005; // for rounding
+      mflops_result = (int)(mflops_result * 1000);
+      mflops_result /= 1000;
+
+      //System.Console.WriteLine("Mflops/s: " + mflops_result + "  Time: " + time_result + " secs" + "  Norm Res: " + residn_result + "  Precision: " + eps_result);
+
+      Results.Add(new Result("Mflops/s", new DoubleValue(mflops_result)));
+      //Results.Add(new Result("ca. Mflops/s", new DoubleValue(mflops_result * Environment.ProcessorCount)));
+    }
+
+    private double abs(double d) {
+      return (d >= 0) ? d : -d;
+    }
+
+    private double mathGen(double[][] a, int lda, int n, double[] b) {
+      Random gen;
+      double norma;
+      int init, i, j;
+
+      init = 1325;
+      norma = 0.0;
+
+      gen = new Random(init);
+
+      // Next two for() statements switched.  Solver wants
+      // matrix in column order. --dmd 3/3/97
+
+      for (i = 0; i < n; i++) {
+        for (j = 0; j < n; j++) {
+          a[j][i] = gen.NextDouble() - .5;
+          norma = (a[j][i] > norma) ? a[j][i] : norma;
+        }
+      }
+
+      for (i = 0; i < n; i++) {
+        b[i] = 0.0;
+      }
+
+      for (j = 0; j < n; j++) {
+        for (i = 0; i < n; i++) {
+          b[i] += a[j][i];
+        }
+      }
+
+      return norma;
+    }
+
+    private int dgefa(double[][] a, int lda, int n, int[] ipvt) {
+      double[] col_k, col_j;
+      double t;
+      int j, k, kp1, l, nm1;
+      int info;
+
+      // gaussian elimination with partial pivoting
+
+      info = 0;
+      nm1 = n - 1;
+      if (nm1 >= 0) {
+        for (k = 0; k < nm1; k++) {
+          col_k = a[k];
+          kp1 = k + 1;
+
+          // find l = pivot index
+
+          l = idamax(n - k, col_k, k, 1) + k;
+          ipvt[k] = l;
+
+          // zero pivot implies this column already triangularized
+
+          if (col_k[l] != 0) {
+            // interchange if necessary
+
+            if (l != k) {
+              t = col_k[l];
+              col_k[l] = col_k[k];
+              col_k[k] = t;
+            }
+
+            // compute multipliers
+
+            t = -1.0 / col_k[k];
+            dscal(n - (kp1), t, col_k, kp1, 1);
+
+            // row elimination with column indexing
+
+            for (j = kp1; j < n; j++) {
+              col_j = a[j];
+              t = col_j[l];
+              if (l != k) {
+                col_j[l] = col_j[k];
+                col_j[k] = t;
+              }
+              daxpy(n - (kp1), t, col_k, kp1, 1,
+                col_j, kp1, 1);
+            }
+          } else {
+            info = k;
+          }
+        }
+      }
+
+      ipvt[n - 1] = n - 1;
+      if (a[(n - 1)][(n - 1)] == 0) info = n - 1;
+
+      return info;
+    }
+
+    private void dgesl(double[][] a, int lda, int n, int[] ipvt, double[] b, int job) {
+      double t;
+      int k, kb, l, nm1, kp1;
+
+      nm1 = n - 1;
+      if (job == 0) {
+        // job = 0 , solve  a * x = b.  first solve  l*y = b
+
+        if (nm1 >= 1) {
+          for (k = 0; k < nm1; k++) {
+            l = ipvt[k];
+            t = b[l];
+            if (l != k) {
+              b[l] = b[k];
+              b[k] = t;
+            }
+            kp1 = k + 1;
+            daxpy(n - (kp1), t, a[k], kp1, 1, b, kp1, 1);
+          }
+        }
+
+        // now solve  u*x = y
+
+        for (kb = 0; kb < n; kb++) {
+          k = n - (kb + 1);
+          b[k] /= a[k][k];
+          t = -b[k];
+          daxpy(k, t, a[k], 0, 1, b, 0, 1);
+        }
+      } else {
+        // job = nonzero, solve  trans(a) * x = b.  first solve  trans(u)*y = b
+
+        for (k = 0; k < n; k++) {
+          t = ddot(k, a[k], 0, 1, b, 0, 1);
+          b[k] = (b[k] - t) / a[k][k];
+        }
+
+        // now solve trans(l)*x = y 
+
+        if (nm1 >= 1) {
+          //for (kb = 1; kb < nm1; kb++) {
+          for (kb = 0; kb < nm1; kb++) {
+            k = n - (kb + 1);
+            kp1 = k + 1;
+            b[k] += ddot(n - (kp1), a[k], kp1, 1, b, kp1, 1);
+            l = ipvt[k];
+            if (l != k) {
+              t = b[l];
+              b[l] = b[k];
+              b[k] = t;
+            }
+          }
+        }
+      }
+    }
+
+    private void daxpy(int n, double da, double[] dx, int dx_off, int incx, double[] dy, int dy_off, int incy) {
+      int i, ix, iy;
+
+      if ((n > 0) && (da != 0)) {
+        if (incx != 1 || incy != 1) {
+
+          // code for unequal increments or equal increments not equal to 1
+
+          ix = 0;
+          iy = 0;
+          if (incx < 0) ix = (-n + 1) * incx;
+          if (incy < 0) iy = (-n + 1) * incy;
+          for (i = 0; i < n; i++) {
+            dy[iy + dy_off] += da * dx[ix + dx_off];
+            ix += incx;
+            iy += incy;
+          }
+          return;
+        } else {
+          // code for both increments equal to 1
+
+          for (i = 0; i < n; i++)
+            dy[i + dy_off] += da * dx[i + dx_off];
+        }
+      }
+    }
+
+    private double ddot(int n, double[] dx, int dx_off, int incx, double[] dy, int dy_off, int incy) {
+      double dtemp = 0;
+      int i, ix, iy;
+
+      if (n > 0) {
+        if (incx != 1 || incy != 1) {
+          // code for unequal increments or equal increments not equal to 1
+
+          ix = 0;
+          iy = 0;
+          if (incx < 0) ix = (-n + 1) * incx;
+          if (incy < 0) iy = (-n + 1) * incy;
+          for (i = 0; i < n; i++) {
+            dtemp += dx[ix + dx_off] * dy[iy + dy_off];
+            ix += incx;
+            iy += incy;
+          }
+        } else {
+          // code for both increments equal to 1
+
+          for (i = 0; i < n; i++)
+            dtemp += dx[i + dx_off] * dy[i + dy_off];
+        }
+      }
+      return (dtemp);
+    }
+
+    private void dscal(int n, double da, double[] dx, int dx_off, int incx) {
+      int i, nincx;
+
+      if (n > 0) {
+        if (incx != 1) {
+          // code for increment not equal to 1
+
+          nincx = n * incx;
+          for (i = 0; i < nincx; i += incx)
+            dx[i + dx_off] *= da;
+        } else {
+          // code for increment equal to 1
+
+          for (i = 0; i < n; i++)
+            dx[i + dx_off] *= da;
+        }
+      }
+    }
+
+    private int idamax(int n, double[] dx, int dx_off, int incx) {
+      double dmax, dtemp;
+      int i, ix, itemp = 0;
+
+      if (n < 1) {
+        itemp = -1;
+      } else if (n == 1) {
+        itemp = 0;
+      } else if (incx != 1) {
+        // code for increment not equal to 1
+
+        dmax = (dx[dx_off] < 0.0) ? -dx[dx_off] : dx[dx_off];
+        ix = 1 + incx;
+        for (i = 0; i < n; i++) {
+          dtemp = (dx[ix + dx_off] < 0.0) ? -dx[ix + dx_off] : dx[ix + dx_off];
+          if (dtemp > dmax) {
+            itemp = i;
+            dmax = dtemp;
+          }
+          ix += incx;
+        }
+      } else {
+        // code for increment equal to 1
+
+        itemp = 0;
+        dmax = (dx[dx_off] < 0.0) ? -dx[dx_off] : dx[dx_off];
+        for (i = 0; i < n; i++) {
+          dtemp = (dx[i + dx_off] < 0.0) ? -dx[i + dx_off] : dx[i + dx_off];
+          if (dtemp > dmax) {
+            itemp = i;
+            dmax = dtemp;
+          }
+        }
+      }
+      return (itemp);
+    }
+
+    private double epslon(double x) {
+      double a, b, c, eps;
+
+      a = 4.0e0 / 3.0e0;
+      eps = 0;
+      while (eps == 0) {
+        b = a - 1.0;
+        c = b + b + b;
+        eps = abs(c - 1.0);
+      }
+      return (eps * abs(x));
+    }
+
+    private void dmxpy(int n1, double[] y, int n2, int ldm, double[] x, double[][] m) {
+      int j, i;
+
+      // cleanup odd vector
+      for (j = 0; j < n2; j++) {
+        for (i = 0; i < n1; i++) {
+          y[i] += x[j] * m[j][i];
+        }
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Plugin.cs.frame
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Plugin.cs.frame	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Plugin.cs.frame	(revision 6920)
@@ -0,0 +1,41 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Algorithms.Benchmark plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Algorithms.Benchmarks", "Provides wrappers for data analysis algorithms implemented in external libraries (linear regression, linear discriminant analysis, k-means clustering, support vector classification and regression)", "3.4.1.$WCREV$")]
+  [PluginFile("HeuristicLab.Algorithms.Benchmarks-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")] 
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")] 
+  public class HeuristicLabAlgorithmsBenchmarksPlugin : PluginBase {
+  }
+}
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Properties/AssemblyInfo.cs.frame	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Properties/AssemblyInfo.cs.frame	(revision 6920)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Algorithms.Benchmarks")]
+[assembly: AssemblyDescription("Benchmarking")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3E422463-0CE0-400D-9544-5C11D5818769")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Whetstone.cs
===================================================================
--- /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Whetstone.cs	(revision 6920)
+++ /branches/Benchmarking/sources/HeuristicLab.Algorithms.Benchmarks/3.3/Whetstone.cs	(revision 6920)
@@ -0,0 +1,298 @@
+﻿using System;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.Benchmarks {
+  [Item("Whetstone Algorithm", "A Whetstone benchmark algorithm.")]
+  [Creatable("Benchmarks")]
+  [StorableClass]
+  public class Whetstone : Algorithm {
+    private DateTime lastUpdateTime;
+
+    [Storable]
+    private ResultCollection results;
+
+    #region Benchmark Fields
+
+    private long begin_time;
+    private long end_time;
+    //private long total_time;
+
+    private int ITERATIONS;
+    private int numberOfCycles;
+    private int cycleNo;
+    private double x1, x2, x3, x4, x, y, t, t1, t2;
+    private double[] z = new double[1];
+    private double[] e1 = new double[4];
+    private int i, j, k, l, n1, n2, n3, n4, n6, n7, n8, n9, n10, n11;
+
+    #endregion
+
+    #region Properties
+
+    public override ResultCollection Results {
+      get { return results; }
+    }
+
+    #endregion
+
+    #region Costructors
+
+    public Whetstone()
+      : base() {
+      results = new ResultCollection();
+    }
+
+    private Whetstone(Whetstone original, Cloner cloner)
+      : base(original, cloner) {
+      results = new ResultCollection();
+    }
+
+    #endregion
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Whetstone(this, cloner);
+    }
+
+    public override void Prepare() {
+      results.Clear();
+      OnPrepared();
+    }
+
+    public override void Start() {
+      var cancellationTokenSource = new CancellationTokenSource();
+      OnStarted();
+      Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token);
+      task.ContinueWith(t => {
+        try {
+          t.Wait();
+        }
+        catch (AggregateException ex) {
+          try {
+            ex.Flatten().Handle(x => x is OperationCanceledException);
+          }
+          catch (AggregateException remaining) {
+            if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]);
+            else OnExceptionOccurred(remaining);
+          }
+        }
+        cancellationTokenSource.Dispose();
+        cancellationTokenSource = null;
+        OnStopped();
+      });
+    }
+
+    private void Run(object state) {
+      CancellationToken cancellationToken = (CancellationToken)state;
+      lastUpdateTime = DateTime.Now;
+      System.Timers.Timer timer = new System.Timers.Timer(250);
+      timer.AutoReset = true;
+      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+      try {
+        RunBenchmark();
+      }
+      finally {
+        timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
+        timer.Stop();
+        ExecutionTime += DateTime.Now - lastUpdateTime;
+      }
+
+      cancellationToken.ThrowIfCancellationRequested();
+    }
+
+    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      System.Timers.Timer timer = (System.Timers.Timer)sender;
+      timer.Enabled = false;
+      DateTime now = DateTime.Now;
+      ExecutionTime += now - lastUpdateTime;
+      lastUpdateTime = now;
+      timer.Enabled = true;
+    }
+
+    #region Whetstone Benchmark
+
+    private void RunBenchmark() {
+      ITERATIONS = 100; // ITERATIONS / 10 = Millions Whetstone instructions
+
+      numberOfCycles = 100;
+      int numberOfRuns = 10;
+      float elapsedTime = 0;
+      float meanTime = 0;
+      float rating = 0;
+      float meanRating = 0;
+      int intRating = 0;
+
+      for (int runNumber = 1; runNumber <= numberOfRuns; runNumber++) {
+        //System.Console.WriteLine(runNumber + ". Test");
+        elapsedTime = (float)(MainCalc() / 1000);
+        meanTime = meanTime + (elapsedTime * 1000 / numberOfCycles);
+        rating = (1000 * numberOfCycles) / elapsedTime;
+        meanRating = meanRating + rating;
+        intRating = (int)rating;
+        numberOfCycles += 10;
+      }
+
+      meanTime = meanTime / numberOfRuns;
+      meanRating = meanRating / numberOfRuns;
+      intRating = (int)meanRating;
+      //System.Console.WriteLine("Number of Runs " + numberOfRuns);
+      //System.Console.WriteLine("Average time per cycle " + meanTime + " ms.");
+      //System.Console.WriteLine("Average Whetstone Rating " + intRating + " KWIPS");
+      //Results.Add(new Result("KWIPS", new IntValue(intRating)));
+      Results.Add(new Result("MWIPS", new IntValue(intRating / 1000)));
+    }
+
+    private double MainCalc() {
+      // initialize constants
+      t = 0.499975;
+      t1 = 0.50025;
+      t2 = 2.0;
+
+      // set values of module weights
+      n1 = 0 * ITERATIONS;
+      n2 = 12 * ITERATIONS;
+      n3 = 14 * ITERATIONS;
+      n4 = 345 * ITERATIONS;
+      n6 = 210 * ITERATIONS;
+      n7 = 32 * ITERATIONS;
+      n8 = 899 * ITERATIONS;
+      n9 = 616 * ITERATIONS;
+      n10 = 0 * ITERATIONS;
+      n11 = 93 * ITERATIONS;
+
+      begin_time = DateTime.Now.Ticks / 10000; // get ms
+
+      for (cycleNo = 1; cycleNo <= numberOfCycles; cycleNo++) {
+        /* MODULE 1: simple identifiers */
+        x1 = 1.0;
+        x2 = x3 = x4 = -1.0;
+        for (i = 1; i <= n1; i += 1) {
+          x1 = (x1 + x2 + x3 - x4) * t;
+          x2 = (x1 + x2 - x3 + x4) * t; // correction: x2 = ( x1 + x2 - x3 - x4 ) * t;
+          x3 = (x1 - x2 + x3 + x4) * t; // correction: x3 = ( x1 - x2 + x3 + x4 ) * t;
+          x4 = (-x1 + x2 + x3 + x4) * t;
+        }
+
+        /* MODULE 2: array elements */
+        e1[0] = 1.0;
+        e1[1] = e1[2] = e1[3] = -1.0;
+        for (i = 1; i <= n2; i += 1) {
+          e1[0] = (e1[0] + e1[1] + e1[2] - e1[3]) * t;
+          e1[1] = (e1[0] + e1[1] - e1[2] + e1[3]) * t;
+          e1[2] = (e1[0] - e1[1] + e1[2] + e1[3]) * t;
+          e1[3] = (-e1[0] + e1[1] + e1[2] + e1[3]) * t;
+        }
+
+        /* MODULE 3: array as parameter */
+        for (i = 1; i <= n3; i += 1)
+          pa(e1);
+
+        /* MODULE 4: conditional jumps */
+        j = 1;
+        for (i = 1; i <= n4; i += 1) {
+          if (j == 1)
+            j = 2;
+          else
+            j = 3;
+          if (j > 2)
+            j = 0;
+          else
+            j = 1;
+          if (j < 1)
+            j = 1;
+          else
+            j = 0;
+        }
+
+        /* MODULE 5: omitted */
+
+        /* MODULE 6: integer arithmetic */
+        j = 1;
+        k = 2;
+        l = 3;
+        for (i = 1; i <= n6; i += 1) {
+          j = j * (k - j) * (l - k);
+          k = l * k - (l - j) * k;
+          l = (l - k) * (k + j);
+          e1[l - 2] = j + k + l; /* C arrays are zero based */
+          e1[k - 2] = j * k * l;
+        }
+
+        /* MODULE 7: trig. functions */
+        x = y = 0.5;
+        for (i = 1; i <= n7; i += 1) {
+          x = t * Math.Atan(t2 * Math.Sin(x) * Math.Cos(x) / (Math.Cos(x + y) + Math.Cos(x - y) - 1.0));
+          y = t * Math.Atan(t2 * Math.Sin(y) * Math.Cos(y) / (Math.Cos(x + y) + Math.Cos(x - y) - 1.0));
+        }
+
+        /* MODULE 8: procedure calls */
+        x = y = z[0] = 1.0;
+        for (i = 1; i <= n8; i += 1)
+          p3(x, y, z);
+
+        /* MODULE9: array references */
+        j = 0;
+        k = 1;
+        l = 2;
+        e1[0] = 1.0;
+        e1[1] = 2.0;
+        e1[2] = 3.0;
+        for (i = 1; i <= n9; i++)
+          p0();
+
+        /* MODULE10: integer arithmetic */
+        j = 2;
+        k = 3;
+        for (i = 1; i <= n10; i += 1) {
+          j = j + k;
+          k = j + k;
+          j = k - j;
+          k = k - j - j;
+        }
+
+        /* MODULE11: standard functions */
+        x = 0.75;
+        for (i = 1; i <= n11; i += 1)
+          x = Math.Sqrt(Math.Exp(Math.Log(x) / t1));
+      } /* for */
+
+      end_time = DateTime.Now.Ticks / 10000; // get ms
+      //System.Console.WriteLine(" (time for " + numberOfCycles + " cycles): " + (end_time - begin_time) + " millisec.");
+
+      return (end_time - begin_time);
+    }
+
+    public void pa(double[] e) {
+      int j;
+      j = 0;
+      do {
+        e[0] = (e[0] + e[1] + e[2] - e[3]) * t;
+        e[1] = (e[0] + e[1] - e[2] + e[3]) * t;
+        e[2] = (e[0] - e[1] + e[2] + e[3]) * t;
+        e[3] = (-e[0] + e[1] + e[2] + e[3]) / t2;
+        j += 1;
+      }
+      while (j < 6);
+    }
+
+    public void p3(double x, double y, double[] z) {
+      x = t * (x + y);
+      y = t * (x + y);
+      z[0] = (x + y) / t2;
+    }
+
+    public void p0() {
+      e1[j] = e1[k];
+      e1[k] = e1[l];
+      e1[l] = e1[j];
+    }
+
+    #endregion
+  }
+}
