Index: /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 3201)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 3202)
@@ -136,4 +136,8 @@
   <ItemGroup>
     <None Include="app.config" />
+    <EmbeddedResource Include="Documents\FirstSteps.rtf" />
+    <EmbeddedResource Include="Documents\GA_TSP.hl" />
+    <EmbeddedResource Include="Documents\LS_OneMax.hl" />
+    <EmbeddedResource Include="Documents\SA_Rastrigin.hl" />
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/NewItemDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/NewItemDialog.Designer.cs	(revision 3201)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/NewItemDialog.Designer.cs	(revision 3202)
@@ -86,4 +86,5 @@
             this.nameColumnHeader,
             this.descriptioncolumnHeader});
+      this.itemsListView.FullRowSelect = true;
       this.itemsListView.HideSelection = false;
       this.itemsListView.Location = new System.Drawing.Point(12, 12);
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.Designer.cs	(revision 3201)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.Designer.cs	(revision 3202)
@@ -45,5 +45,14 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.showStartPageCheckBox = new System.Windows.Forms.CheckBox();
+      this.firstStepsRichTextBox = new System.Windows.Forms.RichTextBox();
+      this.titleLabel = new System.Windows.Forms.Label();
+      this.samplesGroupBox = new System.Windows.Forms.GroupBox();
+      this.samplesListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.descriptionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.samplesGroupBox.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -53,11 +62,86 @@
       this.showStartPageCheckBox.AutoSize = true;
       this.showStartPageCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
-      this.showStartPageCheckBox.Location = new System.Drawing.Point(3, 262);
+      this.showStartPageCheckBox.Location = new System.Drawing.Point(3, 491);
       this.showStartPageCheckBox.Name = "showStartPageCheckBox";
       this.showStartPageCheckBox.Size = new System.Drawing.Size(158, 17);
-      this.showStartPageCheckBox.TabIndex = 0;
+      this.showStartPageCheckBox.TabIndex = 3;
       this.showStartPageCheckBox.Text = "Show Start Page on Startup";
       this.showStartPageCheckBox.UseVisualStyleBackColor = true;
       this.showStartPageCheckBox.CheckedChanged += new System.EventHandler(this.showStartPageCheckBox_CheckedChanged);
+      // 
+      // firstStepsRichTextBox
+      // 
+      this.firstStepsRichTextBox.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.firstStepsRichTextBox.BackColor = System.Drawing.SystemColors.Control;
+      this.firstStepsRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.firstStepsRichTextBox.Cursor = System.Windows.Forms.Cursors.Arrow;
+      this.firstStepsRichTextBox.Location = new System.Drawing.Point(3, 33);
+      this.firstStepsRichTextBox.Name = "firstStepsRichTextBox";
+      this.firstStepsRichTextBox.ReadOnly = true;
+      this.firstStepsRichTextBox.Size = new System.Drawing.Size(815, 268);
+      this.firstStepsRichTextBox.TabIndex = 1;
+      this.firstStepsRichTextBox.Text = "First Steps";
+      this.firstStepsRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.firstStepsRichTextBox_LinkClicked);
+      // 
+      // titleLabel
+      // 
+      this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.titleLabel.Location = new System.Drawing.Point(3, 0);
+      this.titleLabel.Name = "titleLabel";
+      this.titleLabel.Size = new System.Drawing.Size(815, 30);
+      this.titleLabel.TabIndex = 0;
+      this.titleLabel.Text = "Title";
+      this.titleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // samplesGroupBox
+      // 
+      this.samplesGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.samplesGroupBox.Controls.Add(this.samplesListView);
+      this.samplesGroupBox.Location = new System.Drawing.Point(3, 307);
+      this.samplesGroupBox.Name = "samplesGroupBox";
+      this.samplesGroupBox.Size = new System.Drawing.Size(815, 178);
+      this.samplesGroupBox.TabIndex = 2;
+      this.samplesGroupBox.TabStop = false;
+      this.samplesGroupBox.Text = "Samples";
+      // 
+      // samplesListView
+      // 
+      this.samplesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.descriptionColumnHeader});
+      this.samplesListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.samplesListView.FullRowSelect = true;
+      this.samplesListView.Location = new System.Drawing.Point(3, 16);
+      this.samplesListView.MultiSelect = false;
+      this.samplesListView.Name = "samplesListView";
+      this.samplesListView.ShowItemToolTips = true;
+      this.samplesListView.Size = new System.Drawing.Size(809, 159);
+      this.samplesListView.SmallImageList = this.imageList;
+      this.samplesListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.samplesListView.TabIndex = 0;
+      this.samplesListView.UseCompatibleStateImageBehavior = false;
+      this.samplesListView.View = System.Windows.Forms.View.Details;
+      this.samplesListView.DoubleClick += new System.EventHandler(this.samplesListView_DoubleClick);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 150;
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 300;
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
       // StartPage
@@ -65,7 +149,11 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.firstStepsRichTextBox);
+      this.Controls.Add(this.samplesGroupBox);
+      this.Controls.Add(this.titleLabel);
       this.Controls.Add(this.showStartPageCheckBox);
       this.Name = "StartPage";
-      this.Size = new System.Drawing.Size(508, 282);
+      this.Size = new System.Drawing.Size(821, 511);
+      this.samplesGroupBox.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -76,4 +164,11 @@
 
     private System.Windows.Forms.CheckBox showStartPageCheckBox;
+    private System.Windows.Forms.RichTextBox firstStepsRichTextBox;
+    private System.Windows.Forms.Label titleLabel;
+    private System.Windows.Forms.GroupBox samplesGroupBox;
+    private System.Windows.Forms.ListView samplesListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
   }
 }
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 3201)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 3202)
@@ -21,10 +21,18 @@
 
 using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+using HeuristicLab.Core;
 using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Persistence.Default.Xml;
 
 namespace HeuristicLab.Optimizer {
   [View("Start Page")]
-  public partial class StartPage : View {
+  public partial class StartPage : HeuristicLab.MainForm.WindowsForms.View {
+    private List<INamedItem> samples;
+
     public StartPage() {
       InitializeComponent();
@@ -34,5 +42,54 @@
     protected override void OnInitialized(EventArgs e) {
       base.OnInitialized(e);
+      Assembly assembly = Assembly.GetExecutingAssembly();
+      AssemblyFileVersionAttribute version = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                             Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      titleLabel.Text = "HeuristicLab Optimizer";
+      if (version != null) titleLabel.Text += " " + version.Version;
+
+      try {
+        using (Stream stream = assembly.GetManifestResourceStream(typeof(StartPage), "Documents.FirstSteps.rtf"))
+          firstStepsRichTextBox.LoadFile(stream, RichTextBoxStreamType.RichText);
+      }
+      catch (Exception) { }
+
+      samples = new List<INamedItem>();
+      string path = Path.GetTempFileName();
+      foreach (string name in assembly.GetManifestResourceNames()) {
+        if (name.EndsWith(".hl")) {
+          try {
+            using (Stream stream = assembly.GetManifestResourceStream(name)) {
+              WriteStreamToTempFile(stream, path);
+              IItem item = XmlParser.Deserialize<IItem>(path);
+              if (item is INamedItem) samples.Add((INamedItem)item);
+            }
+          }
+          catch (Exception) { }
+        }
+      }
+      foreach (INamedItem sample in samples) {
+        ListViewItem item = new ListViewItem(new string[] { sample.Name, sample.Description });
+        item.ToolTipText = sample.ItemName + " (" + sample.ItemDescription + ")";
+        samplesListView.SmallImageList.Images.Add(sample.ItemImage);
+        item.ImageIndex = samplesListView.SmallImageList.Images.Count - 1;
+        item.Tag = sample;
+        samplesListView.Items.Add(item);
+      }
+      samplesListView.Enabled = samplesListView.Items.Count > 0;
+      if (samplesListView.Items.Count > 0) {
+        for (int i = 0; i < samplesListView.Columns.Count; i++)
+          samplesListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+      }
+
       showStartPageCheckBox.Checked = Properties.Settings.Default.ShowStartPage;
+    }
+
+    private void firstStepsRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) {
+      System.Diagnostics.Process.Start(e.LinkText);
+    }
+
+    private void samplesListView_DoubleClick(object sender, EventArgs e) {
+      if (samplesListView.SelectedItems.Count == 1)
+        MainFormManager.CreateDefaultView(((IItem)samplesListView.SelectedItems[0].Tag).Clone()).Show();
     }
 
@@ -41,4 +98,15 @@
       Properties.Settings.Default.Save();
     }
+
+    #region Helpers
+    private void WriteStreamToTempFile(Stream stream, string path) {
+      using (FileStream output = new FileStream(path, FileMode.Create, FileAccess.Write)) {
+        int cnt = 0;
+        byte[] buffer = new byte[32 * 1024];
+        while ((cnt = stream.Read(buffer, 0, buffer.Length)) != 0)
+          output.Write(buffer, 0, cnt);
+      }
+    }
+    #endregion
   }
 }
