Index: /branches/DataAnalysisService/DataAnalysisService.sln
===================================================================
--- /branches/DataAnalysisService/DataAnalysisService.sln	(revision 7803)
+++ /branches/DataAnalysisService/DataAnalysisService.sln	(revision 7803)
@@ -0,0 +1,20 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard", "HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard\3.3\HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.csproj", "{77169FE1-C48A-49AE-A0DD-67921D7835AB}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{77169FE1-C48A-49AE-A0DD-67921D7835AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{77169FE1-C48A-49AE-A0DD-67921D7835AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{77169FE1-C48A-49AE-A0DD-67921D7835AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{77169FE1-C48A-49AE-A0DD-67921D7835AB}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/EtchedLine.Designer.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/EtchedLine.Designer.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/EtchedLine.Designer.cs	(revision 7803)
@@ -0,0 +1,40 @@
+﻿namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls {
+  partial class EtchedLine {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #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() {
+      this.SuspendLayout();
+      // 
+      // EtchedLine
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "EtchedLine";
+      this.Size = new System.Drawing.Size(150, 15);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/EtchedLine.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/EtchedLine.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/EtchedLine.cs	(revision 7803)
@@ -0,0 +1,68 @@
+﻿using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls {
+  public enum EtchEdge {
+    Top,
+    Bottom
+  }
+
+  public partial class EtchedLine : UserControl {
+    private Color darkColor;
+    public Color DarkColor {
+      get { return darkColor; }
+      set {
+        darkColor = value;
+        Refresh();
+      }
+    }
+
+    private Color lightColor;
+    public Color LightColor {
+      get { return lightColor; }
+      set {
+        lightColor = value;
+        Refresh();
+      }
+    }
+
+    private EtchEdge edge;
+    public EtchEdge Edge {
+      get { return edge; }
+      set {
+        edge = value;
+        Refresh();
+      }
+    }
+
+    public EtchedLine() {
+      InitializeComponent();
+      DarkColor = SystemColors.ControlDark;
+      LightColor = SystemColors.ControlLight;
+      SetStyle(ControlStyles.Selectable, false);
+    }
+
+    protected override void OnPaint(PaintEventArgs e) {
+      base.OnPaint(e);
+      Brush lightBrush = new SolidBrush(LightColor);
+      Brush darkBrush = new SolidBrush(DarkColor);
+      Pen lightPen = new Pen(LightColor, 1);
+      Pen darkPen = new Pen(DarkColor, 1);
+
+      switch (Edge) {
+        case EtchEdge.Top:
+          e.Graphics.DrawLine(darkPen, 0, 0, Width, 0);
+          e.Graphics.DrawLine(lightPen, 0, 1, Width, 1);
+          break;
+        case EtchEdge.Bottom:
+          e.Graphics.DrawLine(darkPen, 0, Height - 2, Width, Height - 2);
+          e.Graphics.DrawLine(lightPen, 0, Height - 1, Width, Height - 1);
+          break;
+      }
+    }
+    protected override void OnResize(System.EventArgs e) {
+      base.OnResize(e);
+      Refresh();
+    }
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/WizardBanner.Designer.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/WizardBanner.Designer.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/WizardBanner.Designer.cs	(revision 7803)
@@ -0,0 +1,83 @@
+﻿namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls {
+  partial class WizardBanner {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #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() {
+      this.etchedLine1 = new HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls.EtchedLine();
+      this.lblSubtitle = new System.Windows.Forms.Label();
+      this.lblTitle = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // etchedLine1
+      // 
+      this.etchedLine1.DarkColor = System.Drawing.SystemColors.ControlDark;
+      this.etchedLine1.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.etchedLine1.Edge = HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls.EtchEdge.Bottom;
+      this.etchedLine1.LightColor = System.Drawing.SystemColors.ControlLight;
+      this.etchedLine1.Location = new System.Drawing.Point(0, 71);
+      this.etchedLine1.Name = "etchedLine1";
+      this.etchedLine1.Size = new System.Drawing.Size(541, 20);
+      this.etchedLine1.TabIndex = 0;
+      // 
+      // lblSubtitle
+      // 
+      this.lblSubtitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.lblSubtitle.Location = new System.Drawing.Point(21, 32);
+      this.lblSubtitle.Name = "lblSubtitle";
+      this.lblSubtitle.Size = new System.Drawing.Size(517, 36);
+      this.lblSubtitle.TabIndex = 4;
+      this.lblSubtitle.Text = "Subtitle";
+      // 
+      // lblTitle
+      // 
+      this.lblTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.lblTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.lblTitle.Location = new System.Drawing.Point(3, 15);
+      this.lblTitle.Name = "lblTitle";
+      this.lblTitle.Size = new System.Drawing.Size(538, 17);
+      this.lblTitle.TabIndex = 3;
+      this.lblTitle.Text = "Title";
+      // 
+      // WizardBanner
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Window;
+      this.Controls.Add(this.lblSubtitle);
+      this.Controls.Add(this.lblTitle);
+      this.Controls.Add(this.etchedLine1);
+      this.Name = "WizardBanner";
+      this.Size = new System.Drawing.Size(541, 91);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private EtchedLine etchedLine1;
+    private System.Windows.Forms.Label lblSubtitle;
+    private System.Windows.Forms.Label lblTitle;
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/WizardBanner.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/WizardBanner.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Controls/WizardBanner.cs	(revision 7803)
@@ -0,0 +1,19 @@
+﻿using System.Windows.Forms;
+
+namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls {
+  public partial class WizardBanner : UserControl {
+    public string Title {
+      get { return lblTitle.Text; }
+      set { lblTitle.Text = value; }
+    }
+
+    public string Subtitle {
+      get { return lblSubtitle.Text; }
+      set { lblSubtitle.Text = value; }
+    }
+    public WizardBanner() {
+      InitializeComponent();
+      SetStyle(ControlStyles.Selectable, false);
+    }
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.csproj
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.csproj	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.csproj	(revision 7803)
@@ -0,0 +1,91 @@
+﻿<?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>{77169FE1-C48A-49AE-A0DD-67921D7835AB}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard</RootNamespace>
+    <AssemblyName>HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard</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>..\..\..\..\trunk\sources\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>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <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="Controls\EtchedLine.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Controls\EtchedLine.Designer.cs">
+      <DependentUpon>EtchedLine.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Controls\WizardBanner.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Controls\WizardBanner.Designer.cs">
+      <DependentUpon>WizardBanner.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Wizard.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Wizard.Designer.cs">
+      <DependentUpon>Wizard.cs</DependentUpon>
+    </Compile>
+    <Compile Include="WizardPage.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="WizardPage.Designer.cs">
+      <DependentUpon>WizardPage.cs</DependentUpon>
+    </Compile>
+    <Compile Include="WizardPageEventArgs.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Controls\EtchedLine.resx">
+      <DependentUpon>EtchedLine.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Controls\WizardBanner.resx">
+      <DependentUpon>WizardBanner.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Wizard.resx">
+      <DependentUpon>Wizard.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- 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/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Properties/AssemblyInfo.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Properties/AssemblyInfo.cs	(revision 7803)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+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.ExperimentGeneration.DataAnalysis.Wizard")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("FH-Hagenberg")]
+[assembly: AssemblyProduct("HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard")]
+[assembly: AssemblyCopyright("Copyright © FH-Hagenberg 2012")]
+[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("aa09446b-2482-428f-9217-c1e433731bcf")]
+
+// 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 Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.Designer.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.Designer.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.Designer.cs	(revision 7803)
@@ -0,0 +1,141 @@
+﻿namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard {
+  partial class Wizard {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form 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(Wizard));
+      this.pagePanel = new System.Windows.Forms.Panel();
+      this.controlPanel = new System.Windows.Forms.Panel();
+      this.btnNext = new System.Windows.Forms.Button();
+      this.btnBack = new System.Windows.Forms.Button();
+      this.btnCommit = new System.Windows.Forms.Button();
+      this.btnCancel = new System.Windows.Forms.Button();
+      this.etchedLine1 = new HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls.EtchedLine();
+      this.controlPanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // pagePanel
+      // 
+      this.pagePanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
+      this.pagePanel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.pagePanel.Location = new System.Drawing.Point(0, 0);
+      this.pagePanel.Name = "pagePanel";
+      this.pagePanel.Size = new System.Drawing.Size(624, 384);
+      this.pagePanel.TabIndex = 0;
+      // 
+      // controlPanel
+      // 
+      this.controlPanel.Controls.Add(this.btnNext);
+      this.controlPanel.Controls.Add(this.btnBack);
+      this.controlPanel.Controls.Add(this.btnCommit);
+      this.controlPanel.Controls.Add(this.btnCancel);
+      this.controlPanel.Controls.Add(this.etchedLine1);
+      this.controlPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.controlPanel.Location = new System.Drawing.Point(0, 384);
+      this.controlPanel.Name = "controlPanel";
+      this.controlPanel.Size = new System.Drawing.Size(624, 58);
+      this.controlPanel.TabIndex = 1;
+      // 
+      // btnNext
+      // 
+      this.btnNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnNext.Location = new System.Drawing.Point(457, 19);
+      this.btnNext.Name = "btnNext";
+      this.btnNext.Size = new System.Drawing.Size(75, 23);
+      this.btnNext.TabIndex = 4;
+      this.btnNext.Text = "Next";
+      this.btnNext.UseVisualStyleBackColor = true;
+      this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
+      // 
+      // btnBack
+      // 
+      this.btnBack.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnBack.Location = new System.Drawing.Point(375, 19);
+      this.btnBack.Name = "btnBack";
+      this.btnBack.Size = new System.Drawing.Size(75, 23);
+      this.btnBack.TabIndex = 3;
+      this.btnBack.Text = "< Back";
+      this.btnBack.UseVisualStyleBackColor = true;
+      this.btnBack.Click += new System.EventHandler(this.btnBack_Click);
+      // 
+      // btnCommit
+      // 
+      this.btnCommit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnCommit.Location = new System.Drawing.Point(456, 19);
+      this.btnCommit.Name = "btnCommit";
+      this.btnCommit.Size = new System.Drawing.Size(75, 23);
+      this.btnCommit.TabIndex = 2;
+      this.btnCommit.Text = "Commit";
+      this.btnCommit.UseVisualStyleBackColor = true;
+      this.btnCommit.Click += new System.EventHandler(this.btnCommit_Click);
+      // 
+      // btnCancel
+      // 
+      this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnCancel.Location = new System.Drawing.Point(537, 19);
+      this.btnCancel.Name = "btnCancel";
+      this.btnCancel.Size = new System.Drawing.Size(75, 23);
+      this.btnCancel.TabIndex = 1;
+      this.btnCancel.Text = "Cancel";
+      this.btnCancel.UseVisualStyleBackColor = true;
+      this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+      // 
+      // etchedLine1
+      // 
+      this.etchedLine1.DarkColor = System.Drawing.SystemColors.ControlDark;
+      this.etchedLine1.Dock = System.Windows.Forms.DockStyle.Top;
+      this.etchedLine1.Edge = HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard.Controls.EtchEdge.Top;
+      this.etchedLine1.LightColor = System.Drawing.SystemColors.ControlLight;
+      this.etchedLine1.Location = new System.Drawing.Point(0, 0);
+      this.etchedLine1.Name = "etchedLine1";
+      this.etchedLine1.Size = new System.Drawing.Size(624, 19);
+      this.etchedLine1.TabIndex = 0;
+      // 
+      // Wizard
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(624, 442);
+      this.Controls.Add(this.pagePanel);
+      this.Controls.Add(this.controlPanel);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "Wizard";
+      this.Text = "Wizard";
+      this.Load += new System.EventHandler(this.Wizard_Load);
+      this.controlPanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel pagePanel;
+    private System.Windows.Forms.Panel controlPanel;
+    private Controls.EtchedLine etchedLine1;
+    private System.Windows.Forms.Button btnBack;
+    private System.Windows.Forms.Button btnCommit;
+    private System.Windows.Forms.Button btnCancel;
+    private System.Windows.Forms.Button btnNext;
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.cs	(revision 7803)
@@ -0,0 +1,181 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard {
+  public enum WizardButtons {
+    None,
+    Back,
+    Next,
+    Commit
+  }
+  public partial class Wizard : Form {
+    private IList<WizardPage> wizardPages;
+    public IList<WizardPage> WizardPages {
+      get { return wizardPages; }
+    }
+
+    private WizardPage activePage;
+    public WizardPage ActivePage {
+      get { return activePage; }
+    }
+
+    public Wizard() {
+      InitializeComponent();
+      wizardPages = new List<WizardPage>();
+    }
+
+    public void SetActivePage(int pageIndex) {
+      if (pageIndex < 0 || pageIndex >= wizardPages.Count) {
+        throw new ArgumentOutOfRangeException("pageIndex");
+      }
+      SetActivePage(wizardPages[pageIndex]);
+    }
+
+    public void SetActivePage(string pageName) {
+      if (string.IsNullOrEmpty(pageName)) {
+        throw new ArgumentException("Parameter must not be null or empty", "pageName");
+      }
+      WizardPage newPage = WizardPages.Single(p => p.Name == pageName);
+      if (newPage == null) {
+        throw new ArgumentNullException(string.Format("Can't find page with name {0}", pageName));
+      } else {
+        SetActivePage(newPage);
+      }
+
+    }
+
+    public void SetActivePage(WizardPageEventArgs wpea) {
+      if (!wpea.Cancel) {
+        SetActivePage(wpea.NewPage);
+      }
+    }
+
+    public void SetActivePage(WizardPage page) {
+      WizardPage oldActivePage = activePage;
+      if (!pagePanel.Controls.Contains(page)) {
+        pagePanel.Controls.Add(page);
+      }
+      page.Visible = true;
+      activePage = page;
+
+      CancelEventArgs e = new CancelEventArgs();
+      activePage.OnSetActive(e);
+      if (e.Cancel) {
+        activePage.Visible = false;
+        activePage = oldActivePage;
+      }
+
+      foreach (WizardPage wp in WizardPages) {
+        if (wp != activePage) {
+          wp.Visible = false;
+        }
+      }
+    }
+
+    public void SetWizardButton(WizardButtons button) {
+      if (button == WizardButtons.Back) {
+        btnBack.Enabled = true;
+      } else if (button == WizardButtons.Next) {
+        btnCommit.Visible = false;
+        btnCommit.Enabled = false;
+        btnNext.Visible = true;
+        btnNext.Enabled = true;
+        AcceptButton = btnNext;
+      } else if (button == WizardButtons.Commit) {
+        btnCommit.Visible = true;
+        btnCommit.Enabled = true;
+        btnNext.Visible = false;
+        btnNext.Enabled = false;
+        AcceptButton = btnCommit;
+      }
+    }
+
+    public void SetButtonText(WizardButtons button, string buttonText) {
+      if (button == WizardButtons.Commit) {
+        btnCommit.Text = buttonText;
+      }
+    }
+
+    protected virtual void OnQueryCancel(CancelEventArgs e) {
+      activePage.OnQueryCancel(e);
+    }
+
+    private void SetWizardSizeToFitAllPages() {
+      System.Drawing.Size maxPageSize = new System.Drawing.Size(controlPanel.Width, 0);
+      foreach (WizardPage page in WizardPages) {
+        if (page.Width > maxPageSize.Width) {
+          maxPageSize.Width = page.Width;
+        }
+        if (page.Height > maxPageSize.Height) {
+          maxPageSize.Height = page.Height;
+        }
+      }
+      foreach (WizardPage page in WizardPages) {
+        page.Size = maxPageSize;
+      }
+      System.Drawing.Size newSize = maxPageSize + (Size - pagePanel.Size);
+      Size = newSize;
+    }
+
+    private WizardPageEventArgs BuildChangePageEventArgs(int delta) {
+      int activePageIndex = WizardPages.IndexOf(ActivePage);
+      int nextPageIndex = activePageIndex + delta;
+
+      if (nextPageIndex < 0 || nextPageIndex >= WizardPages.Count)
+        nextPageIndex = activePageIndex;
+
+      WizardPage nextPage = WizardPages[nextPageIndex];
+      WizardPageEventArgs wpea = new WizardPageEventArgs();
+      wpea.NewPage = nextPage.Name;
+      wpea.Cancel = false;
+
+      return wpea;
+    }
+
+    private void btnNext_Click(object sender, EventArgs e) {
+      WizardPageEventArgs wpea = BuildChangePageEventArgs(1);
+      ActivePage.OnWizardNext(wpea);
+      SetActivePage(wpea);
+    }
+
+    private void btnBack_Click(object sender, EventArgs e) {
+      WizardPageEventArgs wpea = BuildChangePageEventArgs(-1);
+      ActivePage.OnWizardBack(wpea);
+      SetActivePage(wpea);
+    }
+
+    private void btnCommit_Click(object sender, EventArgs e) {
+      CancelEventArgs cea = new CancelEventArgs();
+      ActivePage.OnWizardCommit(cea);
+      if (!cea.Cancel) {
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+
+    private void btnCancel_Click(object sender, EventArgs e) {
+      DialogResult = DialogResult.Cancel;
+      Close();
+    }
+
+    private void Wizard_Load(object sender, EventArgs e) {
+      if (WizardPages.Count > 0) {
+        SetWizardSizeToFitAllPages();
+        SetActivePage(0);
+      } else {
+        SetWizardButton(WizardButtons.None);
+      }
+    }
+
+    private void Wizard_Closing(object sender, CancelEventArgs e) {
+      if (!btnCancel.Enabled) {
+        e.Cancel = true;
+      } else if (btnCommit.Enabled) {
+        OnQueryCancel(e);
+      }
+    }
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.Designer.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.Designer.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.Designer.cs	(revision 7803)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard {
+  partial class WizardPage {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPage.cs	(revision 7803)
@@ -0,0 +1,55 @@
+﻿using System.ComponentModel;
+using System.Windows.Forms;
+
+namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard {
+  public partial class WizardPage : UserControl {
+    public WizardPage() {
+      InitializeComponent();
+    }
+
+    public Wizard ParentWizard {
+      get { return (Wizard)ParentForm; }
+    }
+
+    protected void SetWizardButton(WizardButtons button) {
+      ParentWizard.SetWizardButton(button);
+    }
+
+    protected void SetCommitButtonText(string buttonText) {
+      ParentWizard.SetButtonText(WizardButtons.Commit, buttonText);
+    }
+
+    public event CancelEventHandler SetActive;
+    public virtual void OnSetActive(CancelEventArgs e) {
+      if (SetActive != null)
+        SetActive(this, e);
+    }
+
+    public event CancelEventHandler QueryCancel;
+    public virtual void OnQueryCancel(CancelEventArgs e) {
+      if (QueryCancel != null) {
+        QueryCancel(this, e);
+      }
+    }
+
+    public event CancelEventHandler WizardCommit;
+    public virtual void OnWizardCommit(CancelEventArgs e) {
+      if (WizardCommit != null)
+        WizardCommit(this, e);
+    }
+
+    public event WizardPageEventHandler WizardNext;
+    public virtual void OnWizardNext(WizardPageEventArgs e) {
+      if (WizardNext != null)
+        WizardNext(this, e);
+    }
+
+    public event WizardPageEventHandler WizardBack;
+    public virtual void OnWizardBack(WizardPageEventArgs e) {
+      if (WizardBack != null)
+        WizardBack(this, e);
+    }
+
+
+  }
+}
Index: /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPageEventArgs.cs
===================================================================
--- /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPageEventArgs.cs	(revision 7803)
+++ /branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/WizardPageEventArgs.cs	(revision 7803)
@@ -0,0 +1,12 @@
+﻿using System.ComponentModel;
+
+namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard {
+  public class WizardPageEventArgs : CancelEventArgs {
+    private string newPage;
+    public string NewPage {
+      get { return newPage; }
+      set { newPage = value; }
+    }
+  }
+  public delegate void WizardPageEventHandler(object sender, WizardPageEventArgs e);
+}
